| Overview | 
              
                |  | 
              
                | Home  Products  Crystal REVS  Overview | 
              
                |  Try Now | 
              
                |  | 
              
			  	|  | 
              
			    | 
							   	
									|  |  
							        | You encounter an error : |  
									|  |  
							        | A structure member is being corrupted somewhere in an unfamiliar function. |  
							       |  |  
							       |  | View the function's flowchart. |  
									|  |  
									|  | It helps you understand the function quickly. |  
									|  |  
									|  | It seems the structure member is being corrupted by a called function. |  
									|  |  
									|  | View the DataFlow of the structure-pointer in the called function |  
									|  |  
									|  | Go deeper by expanding function-calls in the DataFlow. |  
									|  |  
									|  | Two levels deep, you find the error. |  
									|  |  
									|  |  | DataFlow is a fast and effective tool to track data across many functions. |  
									|  |  | 
			
			   
				| 
				                
				                
									|  |  
				                	| During integration testing, you get an error : |  
									|  |  
				                	| A long conditional expression looks suspect. |  
									|  |  
				                	| Ordinarily, the expression would be very hard to read. |  
				                	|  |  
				                	|  | With Crystal REVS' code-formatting, the expression is easy to read. |  
								   |  |  
									|  | You immediately notice an incorrect sequence of parentheses. |  
								   |  |  
									|  |  | Crystal's code formatting helps you find the bug easily. |  
									|  |  | 
			
				|  | 
			
				| 
			    
					|  |  
                	| A global variable is used in the current function. |  
					|  |  
                	| What other functions use or modify this global variable
						before the current function is called? |  
                	|  |  
                	|  | 
                		
                			| Create the call-tree of main( ) |  
                			|  |  
                			|  | Display the tree-nodes in the order of function-call occurrences. |  |  
				   |  |  
					|  | 
                		
                			| Use the Rich Tree feature: |  
                			|  |  
                			|  | Display the global variable's name alongside each tree-node that uses it. |  |  
				   |  |  
					|  |  | 
                		
                			| In this Rich Tree, you can see: |  
                			|  |  
                			| - | what functions are called before you get to the current function |  
						  	|  |  
						 	| - | among those, which functions use the global variable in question |  |  
					|  |  | 
			| 
			     
					|  |  
                	| You are looking at a call-tree and you wish know: |  
					|  |  
                	| a) Which members of a struct are used by the functions in the tree |  
                	|  |  
                	|  | Use the Rich Tree feature: |  
				   |  |  
					|  | the struct members are displayed alongside the functions that use
					those struct members. |  
				   |  |  
				   | b) Which members of a specific instance of struct are used by the functions in the tree |  
				   |  |  
				   |  | Use the Rich Tree feature: |  
					|  |  
					|  | The members the given struct instance are displayed alongside the functions that use/modify them. |  
					|  |  
					| c) What parameters are required by each function in the call-tree? |  
					|  |  
					|  | Use the Rich Tree feature: |  
					|  |  
					|  | You can see the parameters displayed alongside each-node in the tree. |  
					|  |  | 
		
		
			| 
				
					|  |  
					| What are all the places where a particular flag is being set or reset? |  
					|  |  
					|  | View the list of "Modified Occurences" of that flag |  
					|  |  
					|  |  | Crystal REVS makes team-review focused and more productive |  
					|  |  | 
		
		
					  	|  | 
		              
					    | 
							
								|  |  
								| A high-level function and the call-tree under it |  
								|  |  
								| together they perform a set of operations |  
								|  |  
								| How do you add a new operation? |  
								|  |  
								|  | Use the Rich Tree features: |  
								|  |  
								|  | In the call-tree, view the parameters required by each function along a call-sequence |  
								|  |  
								|  | To examine the use of a specific variable or any structure members in the functions: |  
								|  |  
								|  | Use Rich Tree to display the variable or structure members alongside the functions that use them |  
								|  |  
								|  | Then view the DataFlow of the variable or the structure member to see how it is used |  
								|  |  
								|  |  | With Rich Trees, you can swiftly examine and understand a hierarchy of functions GREP-based browsing is too slow! |  
								|  |  | 
			
		              
					    | 
							
								|  |  
								| Identify the data items that will be affected |  
								|  |  
								| Examine how those data items are used in the various functions |  
								|  |  
								| Plan your code changes |  
								|  |  
								|  | Use DataFlow to examine how the data items, #define's etc. are used |  
								|  |  
								|  | Your code modifications will be accurate and well planned |  
								|  |  
								|  |  | DataFlow combines the power of GREP, Flowcharts and information filtering into one efficient tool. |  
								|  |  
								|  |  | Better tools  better results! |  
								|  |  | 
			
		              
					    | 
							
								|  |  
								| Create a Comment Trail |  
								|  |  
								|  | Use the Comment Trail Markers to describe a group or subgroup of code modifications |  
								|  |  
								|  |  | Leave a comment trail of the code changes |  
								|  |  
								|  |  | Understand why older changes were made |  
								|  |  | 
		
		
			
				|  | 
		              
					    | 
							
								|  |  
								| Understand the source code in advance of the code review |  
								|  |  
								|  | Project overview, CallFlow, Rich Trees, Flowcharts... |  
								|  |  
								|  | These unique tools will help you understand and gain familiarity with the code in advance of the code-review. |  
								|  |  
								|  |  | The participants do not struggle to understand the code. |  
								|  |  
								|  |  | Code reviews are far more productive! |  
								|  |  | 
			
		              
					    | 
							
								|  |  
								| Partitioning, function overview, etc. |  
								|  |  
								|  | Use CallFlow to review partitioning of tasks in a function |  
								|  |  
								|  | Use Rich Tree with comments to view the work accomplished by the functions |  
								|  |  
								|  | View the File call-tree to view the call relationship among the functions in a file |  
								|  |  | 
			
		              
					    | 
							
								|  |  
								| Review detailed logic |  
								|  |  
								|  | Use Flowchart to understand the detailed logic of a function |  
								|  |  
								|  | Use loop-flowcharts, switch flowcharts to Divide-and-Conquer very long functions in just a few minutes |  
								|  |  
								|  | View conditions that need to be true to get to the current line |  
								|  |  | 
			
		              
					    | 
							
								|  |  
								| Generate documentation for a faster and effective review |  
								|  |  
								|  | Export CallFlow to HTML for providing an overview |  
								|  |  
								|  | Export DataFlows of affected variables to HTML |  
								|  |  
								|  | Comment trails for documenting a group or subgroup of code modifications |  
								|  |  
								|  |  | HTML versions of CallFlow, DataFlow as well as Comment Trails make the code-review more productive. |  
								|  |  | 
			|  | 
	
	| 
					
						|  |  
	                	| Use CallFlow to make a fast attack on main( )
	                		or any high-level function |  
						|  |  
	                	|  | Find unused functions |  
						|  |  
						|  | You can view the control-flow of main( ) |  
						|  |  
						|  | You can view the function-calls of main( ) |  
						|  |  
						|  | You dig deeper - expand the function-calls and viewing the source code |  
						|  |  
						|  |  | Using the CallFlow, you can quickly learn about main( ) |  
						|  |  
						|  |  | In no time you can understand the newly acquired code! |  
						|  |  | 
	| 
					
						|  |  
	                	| Get an overview of the Project |  
						|  |  
	                	|  | You can view the structures/classes in the project |  
						|  |  
						                	|  | You can view the root functions of the project |  
											|  |  
						                	|  | You can view the Project Call-tree |  
											|  |  
						                	|  | Or you can simply attack main( ) |  
						|  |  
						|  |  | Crystal C/C++ provides several ways to know a project |  
						|  |  
						|  |  | You can choose the way you find most convenient! |  
						|  |  | 
	| 
					
						|  |  
	                	| Explore the call-tree of main( ) |  
						|  |  
	                	|  | You can view the functions called in main( ) |  
						|  |  
						                	|  | You can go to function-calls in the source code |  
											|  |  
						                	|  | You can go to function definitions |  
											|  |  
						                	|  | You can view the call-sequence from main( ) to any node |  
						|  |  
						|  |  |  |  | 
			|  | 
	
	| 
					
					                
										|  |  
	                	| You need to discuss the project design with your team |  
						|  |  
	                	|  | Generate HTML documentation for understanding the design |  
						|  |  
						                	|  | Use flowcharts, call-trees, type-information and source code for detailed understanding |  
											|  |  
						                	|  | Use cross-reference to view where objects and functions are used |  
											|  |  
						                	|  | Use code-metrics and volume metrics to view complexity |  
						|  |  
						|  |  | Crystal C/C++ provides the most comprehensive documentation! |  
						|  |  | 
	| 
					
					                
										|  |  
	                	| Your deadlines are fast approaching. |  
						|  |  
	                	| You need to review the project design with your client |  
						|  |  
	                	|  | Generate Online HTML documentation |  
						|  |  
						                	|  | Use the browser to go through documentation and discuss design changes |  
											|  |  
						                	|  | Use the exported flowcharts, CallFlows, trees, etc to understand the code-flow. |  
						|  |  
						|  |  | You accomplish design review without actually transferring code. |  
						|  |  
						|  |  | You beat the deadlines. Your client is happy! |  
						|  |  | 
		
			|  | 
	
	| 
					                
										|  |  
	                	| Identify unused code and unused variables |  
						|  |  
	                	|  | Find unused functions |  
						|  |  
						                	|  | Find unused Global variables |  
											|  |  
						                	|  | Find unused local variables |  
											|  |  
						                	|  | Find unreachable code |  
											|  |  
						                	|  | Find Unused #includes too! |  
	                	|  |  
						| Identify the functions that are not used outside their files |  
						|  |  
						|  | Make such functions static ! |  
						|  |  
						|  |  |  |  | 
		
			|  | 
	
	| 
					
							|  |  
	                	| Crystal C/C++ provides smart operations for quick navigation within a file or a project |  
						|  |  
	                	|  | With a single click, you can: 
	                	And much more...
							|  |  
	                		|  |  Go to the outer indent - say, to the top of the loop. |  
							|  |  
	                		|  |  Skip deeper indents - go to the next case in a switch |  
							|  |  
	                		|  |  Go to an object's or function's declaration |  
							|  |  
	                		|  |  Go to an object's or function's definition |  
							|  |  
	                		|  |  From a [, {, or (, go to the matching ), }, ] and vice versa |  
							|  |  
	                		|  |  From a #if, #ifdef to the matching #else, #endif and vice versa |  
							|  |  
	                		|  |  Go to undeclared objects, unused objects, unmatched delimiters |  
							|  |  |  
						|  |  |  |  | 
	
		| 
						                
											|  |  
		                	| You modified code. |  
							|  |  
		                	| You are almost done and about to compile. |  
							|  |  
		                	| Before that, you want to revisit and review the modifications you made! |  
							|  |  
		                	|  | With a single click, you can: 
		                		
		                			|  |  
		                			|  |  Go to line you modified after the current line |  
		                			|  |  
		                			|  |  Go to line you modified before the current line |  
		                			|  |  
		                			|  |  Track all modifications till your changes are done! |  |  
							|  |  
							|  |  | Crystal C/C++ tracks the changes for you. |  
							|  |  
							|  |  | You focus on design, no need to keep track of such changes manually |  
							|  |  | 
		
			|  | 
	
	| 
					                
										|  |  
	                	| You are planning to use a variable in a new code addition |  
						|  |  
	                	| You want to see what values are being assigned to it! |  
						|  |  
	                	|  | Click on a button and view modified occurrences of that object. |  
						|  |  
						|  |  | Just by a simple click, you can view where all in the project the variable is being modified! |  
						|  |  | 
		
			|  | 
	
	| 
					                
										|  |  
	                	| While modifying code, you need to delete or condition out code |  
						|  |  
	                	| The code is within a compound statement |  
						|  |  
	                	| The code spans several lines or pages |  
						|  |  
	                	|  | Just go to the compound statement and fold it. |  
						|  |  
						                	|  | Now select it and perform the desired operation |  
						|  |  
						|  |  | A smart way to perform a lengthy operation! |  
						|  |  
						|  |  | And, you do it accurately, always! |  
						|  |  | 
		
			|  | 
	
	| 
					                
										|  |  
	                	| You have just written code for a new product feature. |  
						|  |  
	                	| Before integration, your Manager will review this code with you. |  
						|  |  
	                	|  | Before the review, you want to make sure that there are no errors in the code. |  
						|  |  
						|  | You also want to keep the time taken for review optimal. |  
						|  |  
						|  |  | Just go ahead and add comments with the Comments Panel |  
						|  |  
						|  |  | You can comment code rapidly - with just a few clicks |  
						|  |  
						|  |  | With commented code, reviews will be shorter. |  
						|  |  
						|  |  | Code maintenance is effortless! |  
						|  |  | 
	| 
					                
										|  |  
	                	| You have just joined a team working on a large project. |  
						|  |  
	                	| You want to be at par with the other members of the team. |  
						|  |  
	                	| You need to understand the design & the code to be up to speed! |  
						|  |  
	                	|  | Comment the code you are handling with the comments panel. |  
						|  |  
						|  | Add high-level comments to the major blocks of a function. |  
						|  |  
						|  | View CallFlow to make a fast attack. |  
						|  |  
						|  | Create comment-flowcharts for deep understanding of the design. |  
						|  |  
						|  |  |  |  | 
		
			|  | 
	
	| 
					                
										|  |  
	                	| You are writing code. |  
						|  |  
	                	| You are about to enter a switch statement. |  
						|  |  
	                	| The switch statement contains several case labels. |  
						|  |  
	                	| You want to ensure that you do not miss out on any, or, there are no duplicates! |  
						|  |  
	                	| What do you do? |  
						|  |  
	                	|  | Use the Phrase Window to enter those cases! |  
						|  |  
						|  | Enter the switch statement and then the first case statement. |  
						|  |  
						|  | As soon as you do so, insert the remaining case labels with just a single click! |  
						|  |  
						|  |  | The basic case frame-work is ready in less than a minute. |  
						|  |  
						|  |  | You save several minutes to a few hours. |  
						|  |  | 
		| 
						                
											|  |  
		                	| You are modifying pre-existing code. |  
							|  |  
		                	|  | Use the Tokens panel to enter new code. With just a few clicks, you can 
		                		
		                			|  |  
		                			|  |  Enter the identifiers |  
		                			|  |  
		                			|  |  Enter operators |  
		                			|  |  
		                			|  |  Enter operators and identifiers sequence. |  
									|  |  
		                			|  |  Enter structure variable and member sequences. |  
		                			|  |  
		                			|  |  Enter phrases and existing sentences. |  |  
							|  |  
							|  |  | You enter code effortlessly. |  
							|  |  
							|  |  | There are no spelling errors. |  
							|  |  
							|  |  | There are no syntax errors. |  
							|  |  
							|  |  | The code is compliable in the first go! |  
							|  |  | 
	| 
					                
										|  |  
	                	| You have just written a few new functions. |  
						|  |  
	                	| You want to use them now. |  
						|  |  
	                	| Before you use them you need to declare those functions in a header file! |  
						|  |  
	                	|  | Switch to the header file you want to declare those functions in. |  
						|  |  
						|  | The function prototypes will be presented in the phrase window. |  
						|  |  
						|  | Just click on them and enter them! |  
						|  |  
						|  |  |  |  | 
	| 
					                
										|  |  
	                	| You were writing code. |  
						|  |  
	                	| You introduced a few new structure members and used them. |  
						|  |  
	                	| Now you want to declare those structure members. |  
						|  |  
	                	|  | Use the Tokens panel to declare such members. |  
						|  |  
						|  | Go to the structure in which those members are to be declared. |  
						|  |  
						|  | The members will be displayed in the tokens panel. |  
						|  |  
						|  | Click on them and declare them! |  
						|  |  
						|  |  | No copy-paste-switch-switch back sequence. |  
						|  |  
						|  |  | You save time. Try it yourself! |  
						|  |  | 
         	
				|  | 
			
				|  Try Now    
				TOP |