public static void main()

in modules/asc/src/java/macromedia/asc/embedding/Main.java [79:380]


	public static void main(String[] args) throws Exception
	{
		String filename = "";
		String ext = "";

		if (args.length == 0)
		{
			do_help = true;
		}
		else
		{
			for (int i = 0; i < args.length; ++i)
			{
				String flag = args[i];
				if (flag.charAt(0) == '-')
				{
                    if( flag.length() < 2 )
                    {
                        do_help = true;
                        continue;
                    }
                    switch (flag.charAt(1))
					{
					case '!':
						use_static_semantics = true;
						break;
					case 'b':
						show_bytes = true;
						break;
					case 'f':
						show_flow = true;
						break;
					case 'p':
						show_parsetrees = true;
						break;
					case 'i':
						if (flag.length() == 3 && flag.charAt(2) == 'n') // -in
																			// <filespec>
						{
							++i;
							include_filespecs.add(args[i]);
						}
						else if (flag.length() == 7 && "-import".equals(flag)) // -import
																				// <filespec>
						{
							++i;
							import_filespecs.add(args[i].trim());
						}
						else
						{
							show_instructions = true;
						}
						break;
					case 'm':
						if (flag.length() == 10 && "-movieclip".equals(flag))
						{
							make_movieclip = true;
						}
						else if (flag.length() == 3 && "-md".equals(flag))
						{
							emit_metadata = true;
						}
						else
						{
							show_instructions = true; // -m implies -i
							show_machinecode = true;
						}
						break;

					case 'a':
						if (flag.length() == 10 && "-abcfuture".equals(flag))
						{
							FUTURE_ABC = true;
						}
                        else if ( flag.length() == 10 && "-avmtarget".equals(flag))
                        {
                            ++i;
                            try
                            {
                                String vm_target = args[i].trim();
                                int v = Integer.parseInt(vm_target);
                                switch(v) {
                                case 1:
                                    target = TARGET_AVM1;
                                    break;
                                case 2:
                                    target = TARGET_AVM2;
                                    break;
                                default:
                                    do_help = true;
                                    break;
                                }
                            }
                            catch(Exception e)
                            {
                                do_help = true;
                            }
                        }
						break;

					case 'c':
						if (flag.length() == 6 && "-coach".equals(flag))
						{
							lint_mode = true;
						}
                        else if( flag.length() == 7 && "-config".equals(flag))
                        {
                            ++i;
                            String temp = args[i];
                            ConfigVar cv = parseConfigVar(temp);
                            if( cv != null)
                                config_vars.push_back(cv);
                            else
                                do_help = true;
                        }
						break;

					case 'w':
						if (flag.length() == 9 && "-warnings".equals(flag))
						{
							lint_mode = true;
						}
						break;

					case 's':
						if (flag.length() == 7)
						{
							if ("-strict".equals(flag))
							{
								use_static_semantics = true;
							}
							else if ("-sanity".equals(flag))
							{
								sanity_mode = true;
							}
						}
						else if (flag.length() == 4 && "-swf".equals(flag))
						{
							++i;
							swf_options = args[i];
							if (swf_options.indexOf("-g") > -1) // -g means make it a debuggable swf
								emit_debug_info = true;
						}
						break;

					case 'e':
						if (flag.length() == 4)
						{
							if ("-exe".equals(flag))
							{
								++i;
								avmplus_exe = args[i];
							}
						}
						break;

					case 'd':
						if (flag.length() == 4 && "-doc".equals(flag))
						{
							emit_doc_info = true;
						}
						else
						{
							emit_debug_info = true;
						}
						break;
					case 'l':
						if (flag.length() == 4 && "-log".equals(flag))
						{
							log = true;
						}
						else if (flag.length() == 9 && "-language".equals(flag))
						{
							i++;
							language = args[i];
						}
						else
						{
							show_linenums = true;
						}
						break;
					case 't':
						do_test = true;
						break;
					case 'h':
						do_help = true;
						break;
                    case 'o':
                    	if ( "-O".equalsIgnoreCase(flag))
                    	{
                    		optimize = true;
                    	}
                    	else if (flag.substring(0, 3).equalsIgnoreCase("-O2") )
                    	{
                    		if ( null == optimizer_configs)
                    		{
                    			optimizer_configs = new ObjectList<ConfigVar>();
                    		}
                    		
                    		if ( flag.length() > 4)
                    		{
                    			String option_name = flag.substring(4);
                    			String option_value = "";
                    			
                    			int eq_pos = option_name.indexOf('=');
                    			
                    			if ( eq_pos != -1 )
                    			{
                    				option_value = option_name.substring(eq_pos+1);  //  Skip the "=" char
                    				option_name  = option_name.substring(0, eq_pos);
                    			}
                    		
	                    		optimizer_configs.add(new ConfigVar("o2", option_name, option_value));
                    		}
                    	}
                        break;
                    case 'A':
                    	if (flag.length() == 4 && "-AS3".equalsIgnoreCase(flag))
                    	{
                    		dialect = 10;
                    	}
                    	break;
                    case 'E':
                    	if (flag.length() == 3 && "-ES".equalsIgnoreCase(flag))
                    	{
                    		dialect = 9;
                    	}
                    	else if (flag.length() == 4 && "-ES4".equalsIgnoreCase(flag))
                    	{
                    		dialect = 11;
                    	}
                    	break;
                    case 'u':
						if (flag.length() == 4 && "-use".equals(flag)) // -use <namespace>
						{
							++i;
                            if (use_namespaces == null)
                                use_namespaces = new ObjectList<String>();
                            use_namespaces.add(args[i].trim());
						}
						break;
						
					default:
						try
						{
							if (flag.length() > 1
									&& (dialect = -1 * Integer.parseInt(flag)) != 0)
							{
								if (dialect < earliest_dialect
										|| dialect > latest_dialect)
								{
									do_help = true;
								}
								// otherwise, we have a valid dialect number
							}
						}
						catch (NumberFormatException nfe)
						{
							do_help = true;
						}
						break;
					}
				}

				// assume it's a filename
				else
				{
					filename = new String(args[i].trim());
					if (filename.endsWith(".as"))
					{
						ext = ".as";
					}
					else if (filename.endsWith(".es"))
					{
						ext = ".es";
					}
					else if (filename.endsWith(".js"))
					{
						ext = ".js";
					}
					else
					{
						ext = "";
					}
					filespecFound = true;
					handleFile(filename, ext);
				}
			}
		}

		if (!(do_help || filespecFound))
		{
            Context cx = new Context(new ContextStatics());

			System.err.println(cx.errorString(ErrorConstants.kError_MissingFilespec));
			System.exit(1);
		}
		else if (do_help)
		{
			handleFile("","");
		}
	}