<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2181920555119164542</id><updated>2010-01-13T21:55:42.432+01:00</updated><title type='text'>Mick McCarthy</title><subtitle type='html'>Software Engineer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-3148258676373257318</id><published>2009-05-12T17:52:00.006+02:00</published><updated>2009-05-12T18:54:56.260+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Useful RPM commands in Mandriva</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.mandriva.com"&gt;Mandriva&lt;/a&gt; provides some very nice commands which wrap rpm and allow you  to install/remove packages directly from the repositories and query package information. Heres a short list of some the more useful commands....&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmi&lt;/span&gt; blahblah&lt;br /&gt;Install package blahblah.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpme&lt;/span&gt; blahblah&lt;br /&gt;Remove package blahblah.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpme --auto-orphans&lt;/span&gt;&lt;br /&gt;Remove all orphaned packages (I believe this is a recent addition).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmi --auto-update&lt;/span&gt;&lt;br /&gt;Update all packages which have update available from one of the update repositories.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmi --clean&lt;/span&gt;&lt;br /&gt;Clean the package cache on the local harddrive.  Useful if a package gets corrupted during download and you cannot install it. Each successive attempt to repeat the install will use the cached version - gotta clean that cache first.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmi --test&lt;/span&gt; blahblah&lt;br /&gt;Tests the install of a package without actually installing anything.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq --summary&lt;/span&gt; blahblah&lt;br /&gt;Display summary information about package blahblah.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmf regex&lt;/span&gt;&lt;br /&gt;List all packages which contain a file whose name matches the regular expression regex. regex can therefore be the full filename, a partial filename or a more complex regular expression.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmf -f regex&lt;/span&gt;&lt;br /&gt;Lists all packages as before and also displays the full package version and architecture information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq regex&lt;/span&gt;&lt;br /&gt;Find if a package exists which has a name exactly matching regex. The parameter regex can be a Perl like regular expression.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq -i regex&lt;/span&gt;&lt;br /&gt;Display detailed information about a package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq -a regex&lt;/span&gt;&lt;br /&gt;List all packages whose name fully or partially matches the regular expression regex.  Useful when you don't know the full name of a package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq -f regex&lt;/span&gt;&lt;br /&gt;Display the package name, version and architecture of matching package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;urpmq -l regex&lt;/span&gt;&lt;br /&gt;List all files in matching package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rpm -q blahblah&lt;/span&gt;&lt;br /&gt;Check if package blahblah is installed.&lt;br /&gt;&lt;br /&gt;The raw rpm command does allow you to query package information however the package must already be installed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rpm -qa&lt;/span&gt;&lt;br /&gt;List all installed packages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rpm -ql&lt;/span&gt; blahblah&lt;br /&gt;List the files in installed package blahblah&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rpm -qi&lt;/span&gt; blahblah&lt;br /&gt;Display detailed information about the installed package blahblah.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rpm -qR&lt;/span&gt; blahblah&lt;br /&gt;List the packages which package blahblah depends on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-3148258676373257318?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/3148258676373257318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mickmccarthy.com/2009/05/useful-rpm-commands-in-mandriva.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3148258676373257318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3148258676373257318'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2009/05/useful-rpm-commands-in-mandriva.html' title='Useful RPM commands in Mandriva'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-3715597019207637916</id><published>2009-05-07T16:03:00.004+02:00</published><updated>2009-05-07T17:24:20.180+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><title type='text'>Payment Processing for the ISV</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've recently completed a review of the services available for Independent Software Vendors who distribute their products over the internet. Here is a brief list of the various companies I came across during the review.  I haven't gone into the details of pricing and features as these change over time, however this list should help you encounter the key service providers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.digitalriver.com/"&gt;Digital River&lt;/a&gt; is a large US company which provides e-commerce solutions to software vendors.  They offer sales, licensing and payment processing services to large vendors such as Symmantec and Kaspersky.  They also provide these services to smaller vendors, shareware providers etc., marketing their platform through a range of websites.  Their sites include &lt;a href="http://www.regnow.com/"&gt;RegNow&lt;/a&gt;, &lt;a href="http://www.regsoft.com/"&gt;RegSoft&lt;/a&gt;, &lt;a href="http://www.esellerate.net/"&gt;esellerate&lt;/a&gt; and &lt;a href="http://www.shareit.com/"&gt;Share-IT&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.e-junkie.com/"&gt;E-Junkie&lt;/a&gt; provide order processing, license key distribution, downloads but do not provide payment processing. Their platform integrates with PayPal, Google Checkout and other payment processors. For this reason, they charge a flat monthly fee and the payment processors percentage fee is charged independently. E-Junkie are based in Arizona.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fastspring.com/"&gt;FastSpring&lt;/a&gt; provides payment processing and distribution to software vendors. They are based in California.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.kagi.com/"&gt;Kagi&lt;/a&gt; also provide payment processing and software distribution services.Yes, they are also based in California.&lt;br /&gt;&lt;br /&gt;There are several issues you should have in mind when choosing a company which provides these services:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exclusivity. Are you free to sell your software product through other channels concurrently or do their terms and conditions restrict you to selling through their website?&lt;/li&gt;&lt;li&gt;Fraud Prevention. How good is their fraud prevention? You don't want a high proportion of your sales to consist of providing the license key or software download and then a couple of days later being informed that the payment was canceled because the purchaser's credit card was fraudulently used.&lt;/li&gt;&lt;li&gt;Chargebacks. If a user complains to the credit card company about not receiving the product or the product not being fit for purpose - how does the payment processor communicate with you and the customer?&lt;/li&gt;&lt;li&gt;Fees. How do their percentage fees compare to other providers? What is the minimum charge? Are you charged per download or for storage space?&lt;/li&gt;&lt;li&gt;Taxes. How does the service provider handle sales tax rates or EU VAT rates?&lt;/li&gt;&lt;li&gt;Funds Transfer. How do you get your funds from the service provider? Must you pay a fee for funds transfers? How frequently does the vendor receive their funds - monthly, bi-weekly, daily?&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-3715597019207637916?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/3715597019207637916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mickmccarthy.com/2009/05/payment-processing-for-isv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3715597019207637916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3715597019207637916'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2009/05/payment-processing-for-isv.html' title='Payment Processing for the ISV'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-6756515631638958495</id><published>2009-01-30T10:15:00.008+01:00</published><updated>2009-01-30T11:24:00.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Bug Tracking for the Lone Developer</title><content type='html'>Recently, I was looking for an bug and issue tracking application which I could install on my workstation.  I need it to manage the issues associated with a fairly large and complex project but I'm not sharing development with anyone on this project so no support for multiple users or remote access is required. There are only a few open source issue tracking applications available which are mature enough to support a large project.&lt;br /&gt;Some time ago I started using &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;. Trac is a web application, written in Python, which requires a web server and database server to be installed. It provides Ticket management and Subversion integration. Tickets can be organised into a pseudo-schedule using Milestones. Unfortunately, most of Trac's configuration is achieved on the command line - there is no administrator interface. This is OK for a very rudimentary project, however, it gets very tedious once the number of tickets starts to grow. (On a side note, I was able to find a Mylyn plug-in for Trac which allowed integration with Eclipse which is a bonus.) So, its goodbye to Trac, largely due to its poor administration interface.&lt;br /&gt;&lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt; sets the standard for Bug tracking applications. It allows a lot of customisation and is very mature at this stage.  The only problem with Bugzilla, as with most web applications, is that to install it on your workstation it will require the installation of a lot of dependencies. Bugzilla will require the install of Apache, a mail transfer agent such as Sendmail and some extra Perl modules. Now I for one, don't feel comfortable having a full web server running on my machine just so I can track issues. Its an extra security risk and another application which requires updates. A safer option is to install Bugzilla within a virtual machine using Xen, VirtualBox or VMWare.&lt;br /&gt;So that's the option I went for but, unfortunately, Bugzilla is a dog to install. Getting Bugzilla to play nicely with Apache is not easy. The standard packages (3.2) for both Ubuntu Server 8.10 and Debian 4.0 do not run OK after install. The forums are full of 'help' on which Apache and Bugzilla config files need to be updated. I won't get bogged down in the details - lets just say I wasted way too much time on this. (I haven't tested the install on Mandriva,CentOS or Fedora.) So its goodbye Bugzilla - life is too short.&lt;br /&gt;The next application I looked at is &lt;a href="http://www.mantisbt.org/"&gt;Mantis&lt;/a&gt;. Its like a simplified version of Bugzilla. As with the others its a web app and requires Apache and MySQL. The install is less troublesome and it provides all the basic issue and bug tracking functionality required. It still has the downside of needing Apache etc. installed so the virtual machine route seemed a good move.&lt;br /&gt;Then I remembered &lt;a href="http://bitnami.org/"&gt;BitNami&lt;/a&gt;! BitNami provide open source application stacks which are self-contained. You can install the stack any place on your machine i.e. you are not installing an rpm with root privileges. Not only do they provide the basic LAMP stack, they also provide a large range of packaged applications. And yes, they package Mantis. The stack installer is excellent and the stack's directory can be moved around on your machine with no problems. To run the web server, there are start-up and shutdown scripts provided.&lt;br /&gt;The advantage of BitNami is that everything: Apache, MySQL, PHPMyAdmin and Mantis, is contained within that one directory. Apache runs with the standard user's privileges and you can add links to the start-up and shutdown scripts to KDE's start and shutdown directories. Hey Presto - you have a locally installed version of Mantis with nearly zero configuration required.&lt;br /&gt;BitNami seems like a great solution to me for developers who want LAMP based applications installed locally on their machine for testing and development. Its great advantage is that each install directory is self contained - you can install and run multiple stacks and configurations and it requires less maintenance than a VM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-6756515631638958495?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/6756515631638958495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mickmccarthy.com/2009/01/bug-tracking-for-lone-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6756515631638958495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6756515631638958495'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2009/01/bug-tracking-for-lone-developer.html' title='Bug Tracking for the Lone Developer'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-7867505178631930070</id><published>2008-01-11T16:10:00.004+01:00</published><updated>2009-05-12T18:56:44.037+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Creative Zen with Mandriva 2008.0</title><content type='html'>Recently got a Creative Zen 8GB and wanted to manage its music using Amarok. The PC runs Mandriva 2008.0 which comes with Amarok 1.4.8.  The Creative Zen does not provide a standard USB mass storage interface so you can't just plug it into the USB port of your PC and start copying files. Creative devices use their own proprietary Media Transport Protocol so Amarok uses libmtp to access the device.&lt;br /&gt;Unfortunately, the version of libmtp which comes with Mandriva 2008.0 is 0.2.1 which does not recognise the 8GB Zen (USB vid:0x41e pid:0x4157) so Amarok cannot connect to the Zen. However, the latest version of the libmtp code does recognise this Zen so the only solution was to rebuild Amarok using the latest libmtp.&lt;br /&gt;Users who want to use their shiny new iPod may also face a similar issue. Mandriva 2008.0 comes with version 0.5.2 of libgpod, whereas the latest version of the code which supports new iPods such as the 80GB Classic is 0.6.0. You'll need a version of Amarok or gtkPod built against version 0.6 if you want to use a newer iPod.&lt;br /&gt;I couldn't find adequate versions of these libraries on a site such as the &lt;a href="http://easyurpmi.zarb.org/"&gt;PLF&lt;/a&gt;. Luckily the Mandiva wiki has quiet a good description of how to go about the whole process of rebuilding your packages see &lt;a href="http://wiki.mandriva.com/en/Development/Howto/RPM"&gt;Mandriva RPM HowTo&lt;/a&gt;. I'm not going into the full details but heres an overview of the steps required:&lt;br /&gt;&lt;br /&gt;Create an rpm directory in your home directory and create the required sub-directories as described in the HOWTO.&lt;br /&gt;&lt;br /&gt;$ cd rpm&lt;br /&gt;$ ls&lt;br /&gt;BUILD/  RPMS/  SOURCES/  SPECS/  SRPMS/  tmp/&lt;br /&gt;&lt;br /&gt;Rather than using the raw library source code to create the new rpms, a faster solution was to find more up-to-date rpms for a later version of Mandriva i.e. 2008.1 or Cooker and use these to build the new rpms for 2008.0. This is done by extracting the spec file and zipped source from the rpm and putting them in SPEC and SOURCES. Edit the spec file to build for 2008.0. When building, it will be built against the -devel libraries you have installed on your machine. Each rpm will have several dependencies so you'll have to install several -devel rpms before the new rpm is build successfully. These will include KDE devel libs, curl-devel, openssl-devel, musicbrainz-devel and many others.&lt;br /&gt;Once all the new rpms are built, remove the old amarok, libmtp, libgpod etc. rpms and install your new rpms. I can confirm that the 8GB Zen works fine with libmtp version 0.2.5.&lt;br /&gt;&lt;br /&gt;RPMS which I had to build:&lt;br /&gt;&lt;br /&gt;$ cd SPECS&lt;br /&gt;$ ls&lt;br /&gt;amarok.spec   gtkpod.spec   gnomad2.spec  libgpod.spec   libmtp.spec&lt;br /&gt;&lt;br /&gt;I can also confirm that the iPod Classic 80GB works with libgpod 0.6.0. Just remember that you must edit a text file on the actual iPod to get around Apple's stupid hash. README.sysinfo which comes with libgpod describes the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-7867505178631930070?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/7867505178631930070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mickmccarthy.com/2008/11/creative-zen-with-mandriva-20080.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7867505178631930070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7867505178631930070'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2008/11/creative-zen-with-mandriva-20080.html' title='Creative Zen with Mandriva 2008.0'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-7371731853325718195</id><published>2007-05-11T14:14:00.001+02:00</published><updated>2008-12-03T17:23:32.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Setting Wakeup Time in BIOS</title><content type='html'>I have MythTV 0.20 running on a PC which has an ASROCK K7S11 motherboard. After some googling and testing I was able to get the automatic wakeup for recording working. Included below is the script which is now working with this motherboard. If you have a different motherboard, be careful and don't use this script without understanding what you are doing. Got most of this online from other folks (sorry, can't remember who) and just needed to adapt the processing of the timestamp.&lt;br /&gt;&lt;br /&gt;setwakeuptime.sh&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# set ACPI Wakup time in UTC format&lt;br /&gt;&lt;br /&gt;stamp_file=/home/mythtv/timestamp&lt;br /&gt;#echo $1\ $2 &gt; $stamp_file&lt;br /&gt;&lt;br /&gt;#echo $1\ $2 &gt; /home/mythtv/setwakeuptime.inputs.log&lt;br /&gt;&lt;br /&gt;# If using mythwelcome you can try the next line instead on the one above.&lt;br /&gt;# echo  &gt;$stamp_file&lt;br /&gt;&lt;br /&gt;# Read the date in the locale time format and add the time-zone info to the stamp_file&lt;br /&gt;# datum=$(/bin/date -f $stamp_file +%F\ %T\ %z)&lt;br /&gt;datum=$(/bin/date -u -d@$2 +%F\ %T)&lt;br /&gt;echo $datum &gt; $stamp_file&lt;br /&gt;&lt;br /&gt;# reinterpret this in utc and write to alarm&lt;br /&gt;# utcdatum=$(/bin/date -u -f $stamp_file +%F\ %T)&lt;br /&gt;# echo $utcdatum &gt; $stamp_file&lt;br /&gt;&lt;br /&gt;#rm -f $stamp_file&lt;br /&gt;echo $datum &gt;/proc/acpi/alarm&lt;br /&gt;&lt;br /&gt;exit 0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-7371731853325718195?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7371731853325718195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7371731853325718195'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2007/05/setting-wakeup-time-in-bios.html' title='Setting Wakeup Time in BIOS'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-3886012993703420602</id><published>2007-04-18T21:56:00.000+02:00</published><updated>2008-12-03T17:12:15.799+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Hauppauge IR Remote with Linux</title><content type='html'>I've recently built a home media center using MythTV. It has two DVB-T decoders, for which I'm using Hauppauge WinTV-Nova-T PCI cards. These cards work perfectly as they are supported by the linux dvb drivers. The cards come with an IR Remote, so to get this working you need to use LIRC and edit the LIRC config files.  I've included my versions of both config files here since I had do some tricking about to get them working correctly. These are based on the config files which come with LIRC and MythTV with updates to support this remote. The remote serial number is A415-HPG-WE.&lt;br /&gt;&lt;br /&gt;lircrc &lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = TV&lt;br /&gt; repeat = 3&lt;br /&gt; config = F1&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Videos&lt;br /&gt; repeat = 3&lt;br /&gt; config = F2&lt;br /&gt; end&lt;br /&gt;# Not yet defined&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Music&lt;br /&gt; repeat = 3&lt;br /&gt; config = F3&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Pictures&lt;br /&gt; repeat = 3&lt;br /&gt; config = F4&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Guide&lt;br /&gt; repeat = 3&lt;br /&gt; config = S&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Radio&lt;br /&gt; repeat = 3&lt;br /&gt; config = F6&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Up&lt;br /&gt; repeat = 3&lt;br /&gt; config = Up&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Down&lt;br /&gt; repeat = 3&lt;br /&gt; config = Down&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Left&lt;br /&gt; repeat = 3&lt;br /&gt; config = Left&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Right&lt;br /&gt; repeat = 3&lt;br /&gt; config = Right&lt;br /&gt; end&lt;br /&gt;# Channel Up&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = ChannelUp&lt;br /&gt; repeat = 3&lt;br /&gt; config = Up&lt;br /&gt; end&lt;br /&gt;# Channel Down&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = ChannelDown&lt;br /&gt; repeat = 3&lt;br /&gt; config = Down&lt;br /&gt; end&lt;br /&gt;# OK/Select&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = OK&lt;br /&gt; config = Space&lt;br /&gt; end&lt;br /&gt;# Play&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Play&lt;br /&gt; config = Return&lt;br /&gt; end&lt;br /&gt;# Stop&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Stop&lt;br /&gt; config = I&lt;br /&gt; end&lt;br /&gt;# Escape/Exit/Back&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Back&lt;br /&gt; config = Esc&lt;br /&gt; end&lt;br /&gt;# Power Off/Exit&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Power&lt;br /&gt; config = Esc&lt;br /&gt; end&lt;br /&gt;# Pause&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Pause&lt;br /&gt; repeat = 3&lt;br /&gt; config = P&lt;br /&gt; end&lt;br /&gt;# Mute&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Mute&lt;br /&gt; repeat = 3&lt;br /&gt; config = |&lt;br /&gt; end&lt;br /&gt;# Fast forward (30 sec default)&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = NextTrack&lt;br /&gt; repeat = 3&lt;br /&gt; config = &gt;&lt;br /&gt; end&lt;br /&gt;# Rewind (10 sec default)&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = PreviousTrack&lt;br /&gt; repeat = 3&lt;br /&gt; config = &lt;&lt;br /&gt; end&lt;br /&gt;# Skip forward (10 min default)&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Skip&lt;br /&gt; repeat = 3&lt;br /&gt; config = End&lt;br /&gt; end&lt;br /&gt;# Skip backward (10 min default)&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Replay&lt;br /&gt; repeat = 3&lt;br /&gt; config = Home&lt;br /&gt; end&lt;br /&gt;# Record&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Record&lt;br /&gt; repeat = 3&lt;br /&gt; config = R&lt;br /&gt; end&lt;br /&gt;# Delete&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Red&lt;br /&gt; repeat = 3&lt;br /&gt; config = D&lt;br /&gt; end&lt;br /&gt;# Decrease play speed&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Green&lt;br /&gt; repeat = 3&lt;br /&gt; config = J&lt;br /&gt; end&lt;br /&gt;# Display EPG while in live TV,&lt;br /&gt; # View selected show while in EPG&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Menu&lt;br /&gt; repeat = 3&lt;br /&gt; config = I&lt;br /&gt; end&lt;br /&gt;# Scroll up&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = VolumeUp&lt;br /&gt; repeat = 3&lt;br /&gt; config = F11&lt;br /&gt; end&lt;br /&gt;# Scroll down&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = VolumeDown&lt;br /&gt; repeat = 3&lt;br /&gt; config = F10&lt;br /&gt; end&lt;br /&gt;# Bring up OSD info&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Go&lt;br /&gt; repeat = 3&lt;br /&gt; config = O&lt;br /&gt; end&lt;br /&gt;# Change display aspect ratio&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = PreviousChannel&lt;br /&gt; repeat = 3&lt;br /&gt; config = W&lt;br /&gt; end&lt;br /&gt;# double speed watch&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Yellow&lt;br /&gt; repeat = 3&lt;br /&gt; config = J&lt;br /&gt; end&lt;br /&gt;# change tuners&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Subtitles&lt;br /&gt; repeat = 3&lt;br /&gt; config = Y&lt;br /&gt; end&lt;br /&gt;# Bring up Time stretch&lt;br /&gt; begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = Blue&lt;br /&gt; repeat = 3&lt;br /&gt; config = A&lt;br /&gt; end&lt;br /&gt;# Numbers 0-9&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 0&lt;br /&gt; repeat = 3&lt;br /&gt; config = 0&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 1&lt;br /&gt; repeat = 3&lt;br /&gt; config = 1&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 2&lt;br /&gt; repeat = 3&lt;br /&gt; config = 2&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 3&lt;br /&gt; repeat = 3&lt;br /&gt; config = 3&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 4&lt;br /&gt; repeat = 3&lt;br /&gt; config = 4&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 5&lt;br /&gt; repeat = 3&lt;br /&gt; config = 5&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 6&lt;br /&gt; repeat = 3&lt;br /&gt; config = 6&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 7&lt;br /&gt; repeat = 3&lt;br /&gt; config = 7&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 8&lt;br /&gt; repeat = 3&lt;br /&gt; config = 8&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = mythtv&lt;br /&gt; button = 9&lt;br /&gt; repeat = 3&lt;br /&gt; config = 9&lt;br /&gt; end&lt;br /&gt;### MPlayer lirc setup&lt;br /&gt;# Show OSD&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Menu&lt;br /&gt; repeat = 3&lt;br /&gt; config = osd&lt;br /&gt; end&lt;br /&gt;# Pause playback&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Pause&lt;br /&gt; repeat = 3&lt;br /&gt; config = pause&lt;br /&gt; end&lt;br /&gt;# Skip ahead a minute if playing&lt;br /&gt; # If paused, resume playing&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Play&lt;br /&gt; repeat = 3&lt;br /&gt; config = seek +1&lt;br /&gt; end&lt;br /&gt;# Stop playback and exit&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Stop&lt;br /&gt; repeat = 3&lt;br /&gt; config = quit&lt;br /&gt; end&lt;br /&gt;# Mute&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Mute&lt;br /&gt; repeat = 3&lt;br /&gt; config = mute&lt;br /&gt; end&lt;br /&gt;# Seek back 10 seconds&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = FRW&lt;br /&gt; repeat = 3&lt;br /&gt; config = seek -10&lt;br /&gt; end&lt;br /&gt;# Seek forward 30 seconds&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = FFW&lt;br /&gt; repeat = 3&lt;br /&gt; config = seek +30&lt;br /&gt; end&lt;br /&gt;# Quit&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Back&lt;br /&gt; repeat = 3&lt;br /&gt; config = quit&lt;br /&gt; end&lt;br /&gt;# Seek forward 10 minutes&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Skip-For&lt;br /&gt; repeat = 3&lt;br /&gt; config = seek +600&lt;br /&gt; end&lt;br /&gt;# Seek backward 10 minutes&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = Skip-Back&lt;br /&gt; repeat = 3&lt;br /&gt; config = seek -600&lt;br /&gt; end&lt;br /&gt;# Toggle full-screen&lt;br /&gt; begin&lt;br /&gt; prog = mplayer&lt;br /&gt; button = FULL&lt;br /&gt; repeat = 3&lt;br /&gt; config = vo_fullscreen&lt;br /&gt; end&lt;br /&gt;### Xine lirc setup&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Play&lt;br /&gt; repeat = 3&lt;br /&gt; config = Play&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Stop&lt;br /&gt; repeat = 3&lt;br /&gt; config = Stop&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Power&lt;br /&gt; repeat = 3&lt;br /&gt; config = Quit&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Pause&lt;br /&gt; repeat = 3&lt;br /&gt; config = Pause&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = CH+&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventUp&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = CH-&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventDown&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Vol-&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventLeft&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Vol+&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventRight&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = OK&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventSelect&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Back&lt;br /&gt; repeat = 3&lt;br /&gt; config = Menu&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = FFW&lt;br /&gt; repeat = 3&lt;br /&gt; #config = SpeedFaster&lt;br /&gt; config = SeekRelative+60&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = FRW&lt;br /&gt; repeat = 3&lt;br /&gt; #config = SpeedSlower&lt;br /&gt; config = SeekRelative-60&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = FULL&lt;br /&gt; repeat = 3&lt;br /&gt; config = Volume+&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = BLANK&lt;br /&gt; repeat = 3&lt;br /&gt; config = Volume-&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Mute&lt;br /&gt; repeat = 3&lt;br /&gt; config = Mute&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Menu&lt;br /&gt; repeat = 3&lt;br /&gt; config = RootMenu&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = SKIP&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventNext&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = REPLAY&lt;br /&gt; repeat = 3&lt;br /&gt; config = EventPrior&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Go&lt;br /&gt; repeat = 3&lt;br /&gt; config = OSDStreamInfos&lt;br /&gt; end&lt;br /&gt;begin&lt;br /&gt; prog = xine&lt;br /&gt; button = Red&lt;br /&gt; repeat = 3&lt;br /&gt; config = Quit&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;and heres my version of /etc/lircd.conf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;begin remote&lt;br /&gt;&lt;br /&gt;  name  hauppauge_nova_t_uk&lt;br /&gt;  bits           16&lt;br /&gt;  eps            30&lt;br /&gt;  aeps          100&lt;br /&gt;&lt;br /&gt;  one             0     0&lt;br /&gt;  zero            0     0&lt;br /&gt;  pre_data_bits   16&lt;br /&gt;  pre_data       0x8001&lt;br /&gt;  gap          135803&lt;br /&gt;  toggle_bit      0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      begin codes&lt;br /&gt;          Power                    0x0074&lt;br /&gt;          Go                       0x0161&lt;br /&gt;          TV                       0x0179&lt;br /&gt;          Videos                   0x0189&lt;br /&gt;          Music                    0x0188&lt;br /&gt;          Pictures                 0x016F&lt;br /&gt;          Guide                    0x016D&lt;br /&gt;          Radio                    0x0181&lt;br /&gt;          Up                       0x0067&lt;br /&gt;          Left                     0x0069&lt;br /&gt;          Right                    0x006A&lt;br /&gt;          Down                     0x006C&lt;br /&gt;          OK                       0x001C&lt;br /&gt;          Back                     0x00AE&lt;br /&gt;          Menu                     0x008B&lt;br /&gt;          VolumeUp                 0x0073&lt;br /&gt;          VolumeDown               0x0072&lt;br /&gt;          PreviousChannel          0x019C&lt;br /&gt;          Mute                     0x0071&lt;br /&gt;          ChannelUp                0x0192&lt;br /&gt;          ChannelDown              0x0193&lt;br /&gt;          Record                   0x00A7&lt;br /&gt;          Stop                     0x0080&lt;br /&gt;          Replay                   0x00A8&lt;br /&gt;          Play                     0x00CF&lt;br /&gt;          Skip                     0x00D0&lt;br /&gt;          PreviousTrack            0x00A5&lt;br /&gt;          Pause                    0x0077&lt;br /&gt;          NextTrack                0x00A3&lt;br /&gt;          1                        0x0002&lt;br /&gt;          2                        0x0003&lt;br /&gt;          3                        0x0004&lt;br /&gt;          4                        0x0005&lt;br /&gt;          5                        0x0006&lt;br /&gt;          6                        0x0007&lt;br /&gt;          7                        0x0008&lt;br /&gt;          8                        0x0009&lt;br /&gt;          9                        0x000A&lt;br /&gt;          0                        0x000B&lt;br /&gt;          Text                     0x0184&lt;br /&gt;          Subtitles                0x0172&lt;br /&gt;          Red                      0x018E&lt;br /&gt;          Green                    0x018F&lt;br /&gt;          Yellow                   0x0190&lt;br /&gt;          Blue                     0x0191&lt;br /&gt;      end codes&lt;br /&gt;&lt;br /&gt;end remote&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-3886012993703420602?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3886012993703420602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3886012993703420602'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2008/04/hauppauge-ir-remote-with-linux.html' title='Hauppauge IR Remote with Linux'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-765423513719107735</id><published>2006-03-01T20:01:00.012+01:00</published><updated>2008-11-26T12:48:01.785+01:00</updated><title type='text'>A Quick Overview of Character Encoding Schemes</title><content type='html'>&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;Most writing systems are based on the representation of consonants, vowels, syllables or meanings using graphical characters. Alphabets such as the Latin or Greek alphabets represent vowels and consonants by characters. Abjads such as Arabic or Hebrew normally represent only consonants by characters. Syllabic alphabets such as Bengali represent each syllable (a consonant and vowel combination) by a character. More complex scripts such as Japanese Kanji use characters that represent both a syllable and meaning.&lt;/p&gt;&lt;p&gt;Alphabets such as that used by the English language have a small number of characters in the range of 20 to 50 characters. However in this English-centric world of computing, it is easy to forget that complex scripts such as Chinese can have up to 10,000 different characters. Technology must therefore support character sets far larger than the small set the English alphabet requires.&lt;/p&gt;&lt;p&gt;A character set encoding allows the representation of a graphical character in a numerical format so that it may be manipulated and stored using software or hardware. We need to map each character to a numerical code that can then be converted to binary and represented as one or several bytes.&lt;/p&gt;&lt;p&gt;A single byte, with its 8 bits, can represent 256 values ranging from zero (all bits set to zero) to 255 (all bits set to 1). It is therefore apparent that using a single byte to represent each character in a complex script is not feasible several bytes are required. Various character encoding schemes have been developed that map a large range of characters to multiple byte sequences and some of these are now examined.&lt;/p&gt;&lt;h2&gt;Comparison&lt;/h2&gt;&lt;p&gt; Rather than examining the representation of every character for every encoding scheme, two representative characters are chosen and compared for each character encoding scheme. The characters used are the Latin alphabet's A and the Arabic character ۸, which is the number 8 . Since it all comes down to bits and bytes in the end, the byte values used to represent each character are represented in hexadecimal format. &lt;/p&gt;&lt;h3&gt;ASCII&lt;/h3&gt;&lt;p&gt;ASCII was first published as a standard by the American Standards Association in 1963. The latest version was published by ANSI (American National Standards Institute) in 1986 as ANSI specification X3.4-1986. ASCII characters are represented by 7 bits although extended versions are available that use the 8th bit to represent a larger range of characters. ASCII can therefore support a maximum of 128 characters which falls far short of the requirement to support large character sets. The ASCII specification is not freely available and must be purchased from ANSI.&lt;/p&gt;&lt;p&gt;Key features;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Characters represented by 7-bit code&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Includes 95 printable characters&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Includes non-printable character codes&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.nobrtable br { display: none } table { border-collapse: collapse } td { border-style: solid; border-width: 1px; padding: 4px 4px 4px 4px; } th { border-style: solid; border-width: 1px; padding: 4px 4px 4px 4px; } &lt;/style&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 1: ASCII Example&lt;/caption&gt;&lt;br /&gt;&lt;thead&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;Character&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Representation in Bytes&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;Latin A&lt;/td&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;۸&lt;/td&gt;&lt;td&gt;not supported&lt;/td&gt;&lt;td&gt;not supported&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="ISO_2FIEC_8859"&gt;&lt;/a&gt;ISO/IEC 8859&lt;/h3&gt;&lt;p&gt;The ISO/IEC developed this character encoding specification that represents a large range of characters using 8 bits. The specification is divided into 15 different parts, each of which deals with a specific group of characters. ISO/IEC 8859-1, also known as Latin1, represents the most common Latin alphabet characters. Final versions of the specification must be purchased from the ISO, however draft versions are available from the W3C and other sites online.&lt;/p&gt;&lt;p&gt;Features;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Each character represented by 8 bits i.e. 1 byte&lt;/li&gt;&lt;br /&gt;&lt;li&gt;15 parts to the specification&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Each part represents up to 256 characters&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some characters are present in more than one part of the specification&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 2: ISO/IEC 8859 Example&lt;/caption&gt;&lt;br /&gt;&lt;thead&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Character&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Description&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Representation in Bytes&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td rowspan="4"&gt;A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;ISO 8859-1 (Latin1)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;ISO 8859-2 (Latin2)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;ISO 8859-3 (Latin3)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;ISO 8859-6 (Arabic)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;span&gt;۸&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;ISO 8859-6 (Arabic)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;not supported&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt; Table 2 demonstrates that multiple tables have codes for a core set of characters. The table also demonstrates that part 6 does not support all Arabic characters as there is no representation for the character&lt;span&gt;۸&lt;/span&gt;. As all characters must be stored in 1 byte and each part of the specification contains a core set of characters, the actual range of complex characters supported is small. Also, as each part uses the same character codes for different characters, the part of the specification that text uses must be known for the correct interpretation of characters. &lt;/p&gt;&lt;h3&gt;Unicode&lt;/h3&gt;&lt;p&gt; The Unicode Consortium, a U.S-based industry group, published a first version of this standard in 1991 and continues to develop the standard today. It is closely related to the ISO/IEC 10646 specification as the two organisations aim to keep the standards synchronised. Each character is represented by a unique&lt;span&gt;code point&lt;/span&gt;&lt;span&gt;and when writing a code point it is normal to precede the code point number by U+ e.g. U+0041.&lt;/span&gt;&lt;/p&gt;&lt;p&gt; The Universal Character Set (UCS) contains all possible characters and this large set is divided into planes, each of which contains 65,536 characters (the maximum number that can be represented by 2 bytes). The Basic Multilingual Plane (BMP) is the first plane and it contains most of the commonly used characters. &lt;/p&gt;&lt;p&gt; Two types of encodings are available for Unicode characters. They can be encoded using the Unicode Transformation Format (UTF) format or using the UCS format, defined by ISO/IEC 10646. &lt;/p&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 3: Unicode Code Points&lt;/caption&gt;&lt;br /&gt;&lt;thead&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Character&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Code Point &lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;A&lt;/td&gt;&lt;br /&gt;&lt;td&gt; U+0041&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;span&gt;۸&lt;/span&gt; &lt;/td&gt;&lt;br /&gt;&lt;td&gt; U+06F8&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;UTF-8&lt;/h3&gt;&lt;p&gt; This is a variable length encoding scheme that uses one to four bytes to encode each code point. RFC 3629 defines the UTF-8 encoding and it is also described in the Unicode specification. Code points from U+0000 to U+007F map directly to the ASCII character set therefore ASCII character codes form correct UTF-8 characters. Table 4 shows the number of bytes needed to encode a character depending on its code point. &lt;/p&gt;&lt;p&gt; Features;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Variable length encoding&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Code points encoded using from 1 to 4 bytes&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 4: UTF-8 Byte Requirements&lt;/caption&gt;&lt;br /&gt;&lt;thead&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Code Point Range&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Bytes Used&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;U+0000 – U+007F &lt;/td&gt;&lt;br /&gt;&lt;td&gt;1&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;span&gt;U+0080 – U+07FF&lt;/span&gt; &lt;/td&gt;&lt;br /&gt;&lt;td&gt;2&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;U+0800 – U+0FFF&lt;/td&gt;&lt;br /&gt;&lt;td&gt;3&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;U+10000 –&lt;/td&gt;&lt;br /&gt;&lt;td&gt;4&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 5: UTF-8 Example&lt;/caption&gt;&lt;br /&gt;&lt;thead&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Character&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Description&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Representation in Bytes&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Code point U+0041&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;span class="T2"&gt;۸&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Code point U+06F8&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0xDB 0xB8&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="UTF-16"&gt;&lt;/a&gt;UTF-16&lt;/h3&gt;&lt;p&gt; This is a variable length encoding scheme that encodes code points as 16-bit code values. If a character is not in the BMP i.e. its code point is greater than U+FFFF, then two or more code values are used to represent the character. RFC 2781 defines the UTF-16 encoding and it is also described in the Unicode specification. Windows NT, Java and Qt use UTF-16 to internally represent characters. &lt;/p&gt;&lt;p&gt; As each code value requires 2 bytes, the endianess of the bytes must be communicated so that the code values are interpreted correctly. For this reason, the Byte Order Mark (BOM) is used. The code point U+FEFF is appended before the UTF-16 data. Therefore a byte sequence 0xFE 0xFF indicates the data is in big-endian order. &lt;/p&gt;&lt;p&gt;Features;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;p&gt;Variable length encoding scheme&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;A code point is represented by one or more two-byte code values&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="nobrtable"&gt;&lt;table&gt;&lt;br /&gt;&lt;caption&gt;Table 6: UTF-16 Example&lt;/caption&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Character&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Description&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Representation in Bytes&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;A&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Code point U+0041&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x41&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;span&gt;۸&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Code point U+06F8&lt;/td&gt;&lt;br /&gt;&lt;td&gt;0x06 0xF8&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="Base64"&gt;&lt;/a&gt;Base64&lt;/h3&gt;&lt;p&gt; Base64 is not a character encoding scheme but is nonetheless interesting. Base64 encoding is used to transform a sequence of byte values (they may be image information, program data or anything else) to a textual representation. In Base 64 the byte values are transformed to a subset of the ASCII printable characters. The character sequence may then be transmitted by a protocol that only accepts ASCII encoding and later it can be transformed to its original format. RFC 2045 describes Base64 encoding as used in the MIME email format. &lt;/p&gt;&lt;h2&gt;&lt;a name="Conclusion"&gt;&lt;/a&gt;Conclusion&lt;/h2&gt;&lt;p&gt; Several of the most common character encoding schemes have been briefly described. Each scheme has its own advantages and disadvantages but all have a similar aim, which they achieve to varying degrees of success. Unicode is the most comprehensive specification and it continues to be developed, adding support for new character sets. Multiple other character encoding exist, however Unicode and ISO 10646 are the prevalent standards today. &lt;/p&gt;&lt;h2&gt;&lt;a name="References"&gt;&lt;/a&gt;References&lt;/h2&gt;&lt;p&gt; &lt;a href="http://www.omniglot.com/index.htm"&gt;http://www.omniglot.com/index.htm&lt;/a&gt; provides an informative overview of alphabets and complex writing systems. &lt;/p&gt;&lt;p&gt; &lt;a href="http://www.ietf.org/rfc/rfc1345.txt"&gt;http://www.ietf.org/rfc/rfc1345.txt&lt;/a&gt;  RFC 1345 provides standardised names for characters that should be used in other Internet protocol definitions. &lt;/p&gt;&lt;p&gt; &lt;a href="http://www.ietf.org/rfc/rfc3629.txt"&gt;http://www.ietf.org/rfc/rfc3629.txt&lt;/a&gt;  RFC 3629 describes the UTF-8 encoding scheme.&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.ietf.org/rfc/rfc2781.txt"&gt;http://www.ietf.org/rfc/rfc2781.txt&lt;/a&gt;  RFC 2781 describes the UTF-16 encoding scheme.&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.ietf.org/rfc/rfc2045.txt"&gt;http://www.ietf.org/rfc/rfc2045.txt&lt;/a&gt;  RFC 2045 describes the MIME email format and Base64 encoding.&lt;/p&gt;&lt;p&gt; &lt;a href="http://en.wikipedia.org/wiki/Character_encoding"&gt;http://en.wikipedia.org/wiki/Character_encoding&lt;/a&gt;  Wikipedia provides an extensive discussion of many character encoding schemes and standards. &lt;/p&gt;&lt;br /&gt;&lt;h2&gt;&lt;a name="Author_Information"&gt;&lt;/a&gt;Author Information&lt;/h2&gt;&lt;p&gt; Michael McCarthy is a professional Software Engineer who specialises in Java and open source software development. For more information on his activities, visit http://www.mickmccarthy.com . &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-765423513719107735?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/765423513719107735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/765423513719107735'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2006/03/quick-overview-of-character-encoding.html' title='A Quick Overview of Character Encoding Schemes'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-907729866334798744</id><published>2006-01-26T10:22:00.001+01:00</published><updated>2008-11-24T13:27:19.949+01:00</updated><title type='text'>No more CMS....back to static html</title><content type='html'>&lt;p class="intro"&gt;After tiring of a second CMS, the time came to rethink the website and now you can see the results.&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;A Content Management System is great - you can add new text and pages using your web browser and all the site layout is already there. The problem with CMSs is that to make the site interactive, a lot of functionality must be added which exposes a lot more functionality that can be exploited. Before Christmas I was using b2evolution (v0.9.0.11), a blogging CMS, which I had to remove because of a constant bombardment of robots trying to add links for tracebacks to the site. I believe this vulnerability was fixed in later versions but I used the opportunity to try e107 (v0.6172). e107 is all full featured CMS, built with PHP like b2evolution, that has lots of functionality. However, it has vulberabilities of course and these were expoited before I could upgrade to the latest version.&lt;/p&gt;  &lt;p&gt;To me, the problem seems to be that using a CMS requires almost constant upgrading to the very latest version. This is ok if you want to upgrade several hours a week to a website but not ok if the website is a background task. So I've decided to go from using a CMS i.e. GNU/Linux, Apache, PHP and mySQL to using plain old XHTML and CSS i.e. GNU/Linux and Apache. This will definitely reduce the attack vectors and hopefully reduce the attacks. Time will tell and remembering that nothing is 100% secure.&lt;/p&gt;  &lt;p&gt;There is a great site called &lt;a href="http://www.oswd.org/"&gt;Open Source Web Design&lt;/a&gt; where web designers showcase their templates and designs - its like Sourceforge for designers. I found this design that was put together by a guy caled Andreas Viklund. Its pure XHTML and CSS and W3C compliant.&lt;/p&gt;  &lt;p&gt;On a last note, if you are interested in trying out some CMSs, &lt;a href="http://opensourcecms.com/"&gt;this site&lt;/a&gt; is great - it lets you try out the CMS without downloading anything.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-907729866334798744?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/907729866334798744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/907729866334798744'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2006/01/no-more-cmsback-to-static-html.html' title='No more CMS....back to static html'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-4201813444809682272</id><published>2006-01-19T10:58:00.001+01:00</published><updated>2008-11-24T13:27:33.322+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET v0.0.6 - here at last</title><content type='html'>&lt;p class="intro"&gt;Arriving some weeks later than planned, the new version includes new functionality, several bug fixes and refactored code. &lt;/p&gt;  &lt;p&gt;I've added two new commandine options: --phase and --scan, that allow the user to specify a particular range of tests to run. Several bugs have been fixed and the Group code (and concept) is now gone - this makes the code size more manageable and hasn't removed any currently used functionality.&lt;/p&gt;  &lt;p&gt;I also had a chance to analyse the performance of FRET for the first time. As expected, the ScanGrind analysis (it looks for data that is common to two of more files) is the major contributor. Its analysis duration grows exponentially with file size. This can unfortunately lead to very long durations for files over 1 MB - I estimated that it takes 27 hours to analyse two 1.7 MB files. This is not unexpected although I am sure there is room for improvement in the algorithm. However, currently the algorithm is totally brute force - it compares the start of one file with the end of another etc. and I don't think that this makes sense when examining file formats. A more intelligent approach would be to divide a file into zones, maybe based on already detected Grams, and then to look for commonalities between those zones.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-4201813444809682272?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4201813444809682272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4201813444809682272'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2006/01/fret-v006-here-at-last.html' title='FRET v0.0.6 - here at last'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-8744647577567543379</id><published>2005-09-14T23:58:00.001+02:00</published><updated>2008-11-24T13:27:42.131+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET v0.0.5 Released</title><content type='html'>Quoting from the FRET website, " Wednesday 14 September 2005. The worlds press gathered today in front of a small Unix terminal to watch the release of v0.0.5 of FRET into the wild. The tarball was reticent at first, looked back once at the gathered crowd and then swiftly ran away to join its own kind."  &lt;p&gt;Actually, its a bug-fix release with one significant change - the improved ScanGrind function. (As a side note, I'm thinking of spinning off the ScanGrind function as a self-contained C module for other developers to use, maybe even in the Public Domain). Now I need to decide what will go into release 0.0.6. The three main options I am considering at the moment are: - Add a test framework for libfret, probably using CUnit - Add a way of measuring FRET's functionality i.e. how much of a set of test files does it correctly analyse. - Make libfret thread-safe I've also noticed that FRETs been added to the &lt;a href="http://www.fileformat.info/"&gt;FileFormat&lt;/a&gt; site in the tools section - always good to see some interest! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-8744647577567543379?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8744647577567543379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8744647577567543379'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/09/fret-v005-released.html' title='FRET v0.0.5 Released'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-1858763403614714334</id><published>2005-09-02T17:57:00.010+02:00</published><updated>2008-11-24T13:27:52.322+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET v0.0.5 Design Changes</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqL-eRhJEI/AAAAAAAAAKM/P1EZNFU0bs0/s1600-h/fret.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 130px;" src="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqL-eRhJEI/AAAAAAAAAKM/P1EZNFU0bs0/s200/fret.jpg" alt="" id="BLOGGER_PHOTO_ID_5272180219185275970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Currently work is progressing on FRET version 0.0.5 and the major change for this version is a swap in the order of the Phase 4 and Phase 5 Scans. An improvement in ScanGrind was the driving force for this change. Previously, when a data structure, which was common to two Buffers, was identified by ScanGrind, a Group Gram was created with the offset from the first Buffer. This caused the loss of valuable information about the structures location in the second Buffer. The new version of ScanGrind now creates two Buffer Grams, one for each Buffer and no Group Gram is created. A Phase 5 Scan will then notice that two Buffer Grams are identical and will create a Group Gram with frequency 2.  &lt;h2&gt;Order of analysis phases modified&lt;/h2&gt;  &lt;p&gt;Detecting data structures and formats in a buffer or file is a complex task. For this reason the process has been sub-divided into multiple sub-tasks, each of which performs a small piece of analysis. It is through the amalgamation of these functions that a clear picture is derived of the structures within the target data. FRET divides these tasks into 6 Phases. Each small task that performs a specific function in the analysis is called a Scan. Each Phase contains multiple Scans and all the Scans within a Phase share the same characteristics (and interface). This modular design allows for the easy addition, deletion or re-ordering of Scans. As new Scans are added and refined, the program will grow in ability. Each phase of analysis is now briefly described.&lt;/p&gt;  &lt;p&gt;Before commencing the description of the phases, it is key to remember the aim of FRET. It is designed as a commandline utility (and library) that takes a number of similar raw data files (or buffers), analyses them and outputs a table describing the layout of data in these files. If all the files are different then it will find little in common between the files. However, if the data follows the same format i.e. values change but the layout is the same, then a lot can be learned from the analysis and a good guess can be taken at the file format. In FRET terminology a detected pattern of bytes in a file is called a Gram, a term derived from the Greek for a letter, which is commonly used in cryptanalysis.&lt;/p&gt;  &lt;p&gt;The first step in the analysis of a buffer are the Phase 1 Scans. These Scans examine the raw data, identify if compression or obfuscation is used and transform the data to its original order. If the later Phases were to try and analyse compressed data, for example, then it would be like trying to analyse random data for patterns - some would be found but they would be meaningless. Currently, there are no Phase 1 Scans implemented in FRET. It is probable that the first Scan to be added will be to uncompress a buffer.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqMJWY9BqI/AAAAAAAAAKU/JvRfBaNd-Sk/s1600-h/fret_0_0_5_phase1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 124px;" src="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqMJWY9BqI/AAAAAAAAAKU/JvRfBaNd-Sk/s320/fret_0_0_5_phase1.png" alt="" id="BLOGGER_PHOTO_ID_5272180406047540898" border="0" /&gt;&lt;/a&gt;Phase 2 Scans look at each file individually and attempt to identify data structures that are file format independent. These include ASCII strings, Unicode strings, fill bytes, x86 instructions and limitless other recognisable data formats. Depending on the Scan and raw data, there is a varying level of confidence that a detected Gram is valid, it may be a false positive, therefore each Gram is assigned a risk. The risk of a Gram is the probability that it is a randomly occurring pattern in the data and is not valid. This allows for the later sanity checking of Grams.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqMcxRCguI/AAAAAAAAAKc/JLiijE9kmoE/s1600-h/fret_0_0_5_phase2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 124px;" src="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqMcxRCguI/AAAAAAAAAKc/JLiijE9kmoE/s320/fret_0_0_5_phase2.png" alt="" id="BLOGGER_PHOTO_ID_5272180739679617762" border="0" /&gt;&lt;/a&gt;Once a Buffer of data has been analysed and Grams have been detected, it may be possible to use these Grams to detect further patterns in the data. Phase 3 Scans compare detected Grams against the raw data looking for relationships. One example of this is an offset to data in a file - often within a file format there is a table that contains identifiers and offsets to data later in the file. For example, if a string is detected in the file and earlier in the file a value that points to the start of this string is detected, it is possible that this is an offset. It may also be possible to detect fields that describe the length of other fields in a file.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xIRilFfoJ2A/SSqMv7mM6WI/AAAAAAAAAKk/b66dahCK3Q8/s1600-h/fret_0_0_5_phase3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 181px;" src="http://4.bp.blogspot.com/_xIRilFfoJ2A/SSqMv7mM6WI/AAAAAAAAAKk/b66dahCK3Q8/s320/fret_0_0_5_phase3.png" alt="" id="BLOGGER_PHOTO_ID_5272181068870248802" border="0" /&gt;&lt;/a&gt;At this stage, no more information can be gained from looking at a file in isolation. It is now time to compare it to its peers and this is where the real power of FRET is unleashed. Phase 4 Scans compare the raw data in multiple files, looking for commonalities and differences. Historically binary diff tools have been used for this type of analysis and they remain a valuable tool, yet there is value in focusing on the similarities between files, not the differences. scanGrind compares two files looking for all the byte patterns that are the same and they don't have to be in the same place in both files.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqM9cZE7OI/AAAAAAAAAKs/dPmqkApBgeY/s1600-h/fret_0_0_5_phase4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 181px;" src="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqM9cZE7OI/AAAAAAAAAKs/dPmqkApBgeY/s320/fret_0_0_5_phase4.png" alt="" id="BLOGGER_PHOTO_ID_5272181301011868898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now you may think it is finished but no, there are two more phases of analysis left. Firstly, the Phase 5 Scans compare the Grams that have been detected for each Buffer and create new Group Grams. This analysis needs to be fuzzy - a file format may specify a string at a certain location but the length and exact offset of the string will be different between the two files. The algorithms for the Phase 5 scans must compare Grams, looking at factors such as 'approximate' location, preceding Grams, Gram type etc. and take a guess.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqNGJDqmPI/AAAAAAAAAK0/0OJc_22ihoU/s1600-h/fret_0_0_5_phase5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 181px;" src="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqNGJDqmPI/AAAAAAAAAK0/0OJc_22ihoU/s320/fret_0_0_5_phase5.png" alt="" id="BLOGGER_PHOTO_ID_5272181450440612082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqNN4H3a4I/AAAAAAAAAK8/0GOMx4zCJl0/s1600-h/fret_0_0_5_phase6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 82px;" src="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqNN4H3a4I/AAAAAAAAAK8/0GOMx4zCJl0/s320/fret_0_0_5_phase6.png" alt="" id="BLOGGER_PHOTO_ID_5272181583333780354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, once all this is completed, it is time to clean-up the results. Phase 6 Scans iterate through the detected Grams, removing or amalgamating Grams based on a range of criteria. After Phase 6, the Grams for the Buffers and Group can be passed to the user who can further process the data using custom scripts or tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-1858763403614714334?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/1858763403614714334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/1858763403614714334'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/09/fret-v005-design-changes.html' title='FRET v0.0.5 Design Changes'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqL-eRhJEI/AAAAAAAAAKM/P1EZNFU0bs0/s72-c/fret.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-6401610998838921637</id><published>2005-08-02T12:21:00.003+02:00</published><updated>2008-11-24T13:29:47.846+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Using the Olympus C-770 with GNU/Linux</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqPhBsaceI/AAAAAAAAALE/BSrbOxmXbFQ/s1600-h/olympusc770.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 130px;" src="http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqPhBsaceI/AAAAAAAAALE/BSrbOxmXbFQ/s200/olympusc770.jpg" alt="" id="BLOGGER_PHOTO_ID_5272184111343759842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The Camedia C-770 Ultra Zoom was released in early 2004 by Olympus as the top-of-the-range camera in their UZ series. It features a 10x optical zoom with 4 Megapixel sensor, however the distinguishing feature of this camera is its ability to record 640x480 video at 30fps in MPEG-4 format. This allows the camera to record 30 minutes of TV quality video on a 512MB xD card. Olympus only includes Windows and Mac applications with the camera, therefore GNU/Linux or other OS users must find other software applications to utilise the camera. Olympus Camedia Master 4.2 for Windows and Macintosh provides the ability to upload, organise and print your photos. Also included is VideoStudio 7 (SE Basic) which provides video editing capabilities.&lt;/span&gt;  &lt;h2&gt;Connecting to your PC&lt;/h2&gt;  &lt;p&gt;The camera supports both the USB Mass Storage and PTP protocols therefore connecting the camera to a PC should not be a problem. In fact, if you use a modern distribution (such as Mandriva 2005 LE) you should not have to change your PC's configuration before uploading your photos and videos.&lt;/p&gt;  &lt;p&gt;It is advisable to connect the camera to the recommended DC power source before uploading your photos since otherwise you will drain your batteries quickly. Connect the camera to the PC using the supplied USB cable and power-on the camera. Select the PC option and the camera will connect to PC. If you use an up-to-date desktop then an icon should appear that identifies the camera. If no icon appeared on the desktop then configure the desktop to display icons for newly mounted storage devices. However it may be that the OS has not mounted the device correctly. Check the directory /mnt/ to see if the camera is listed - if it is not listed then the OS requires correct configuration. This configuration is outside the scope of this document, however there is a lot of good documentation describing how to do this.&lt;/p&gt;  &lt;p&gt;The Linux Documentation Project provides a HOWTO on connecting USB cameras to GNU/Linux PCs. The guide is a little out-dated but will point you in the right direction. The HOWTO is available at http://www.tldp.org/HOWTO/USB-Digital-Camera-HOWTO/index.html. A better option is to investigate web forums for your particular distribution - it is guaranteed that several users have solved the same problem already.&lt;/p&gt;  &lt;h2&gt;Photo Manipulation&lt;/h2&gt;  &lt;p&gt;Once the camera is correctly connected, photos can be uploaded to the PC using a variety of the methods. The most basic method is to open the directory on the camera that contains the photo and video files and to copy these to a directory on the PC. This works perfectly well but can become boring after a while so it is recommended to automate this process as much as possible. Use a photo album application to organise and automate the upload of your photos. One example of such an application is Digikam, the KDE photo application. Digikam allows the definition of one or multiple cameras and it then handles the upload of photos for these cameras and their organisation into albums. More information of Digikam is available at http://www.digikam.org/ and there should be a packaged version available for your distribution.&lt;/p&gt;  &lt;h2&gt;MPEG-4 Movies&lt;/h2&gt;  &lt;p&gt;The C-770 stores video in the MPEG-4 format and the soundtrack is stored in the AAC audio format. Both the audio and video streams are then packaged in the MP4 file format, which is essentially a Quicktime file format. As of the time of writing, common GNU/Linux media players such as Kaffeine may or may not play these files, depending on the version of the application you have. All of the software is available, however due to patent and licensing concerns it is not included as default in some distributions. Playing and editing MPEG-4 videos is possible, it justs requires a little know-how. Currently there are two options and these are now examined.&lt;/p&gt;  &lt;p&gt;The first option is to acquire application software that will allow you to play and edit the MP4 files. The best option for playing the movies is Xine, a movie player that includes MPEG-4 support and which can use FAAD2 to provided AAC decoding. A FAAD2 enabled version of Xine is required therefore some investigation may be needed. As for the editing of MPEG-4 video and audio, I am not aware of a satisfactory application - the best option is to transcode the movies to a more editable format such as MPEG-2 (see below).&lt;/p&gt;  &lt;p&gt;The second option is to convert these MP4 files to a more commonly supported format that will allow you to play, share and edit these movies. Converting the format of an audio or video stream is called transcoding and several tools are available to accomplish this task. FAAD2 is a decoder for AAC streams that can transcode them to other audio formats such as mp2, mp3 or AC3. FFMPEG is a powerful video decoder that supports the MPEG-4 video format. FFMPEG also includes a basic movie player called ffplay but this does not currently (version 0.4.9) support the AAC format. MENCODER can also be used to transcode the video from MPEG-4 to a range of other formats. The next decision to make is to decide the target file format to use. The most common GNU/Linux movie players such as Kaffeine and MPlayer support several movie formats such as mpg, avi and divx so if playing the movies on a GNU/Linux PC is the aim then any of these formats will suffice. If care is taken during the transcoding process then the movie quality will not be degraded but the file size may increase depending on the file format you use. If the aim is to create DVDs from the mp4 movies, then transcode the movies to either an MPEG-2 VOB format or a DivX format and use a tool such as QDVDAuthor to create the DVD. The movies can be edited and amalgamated with a tool such as Kdenlive or LVE if they are in the MPEG-2 format.&lt;/p&gt;  &lt;p&gt;As with all GNU/Linux software, the choices are almost limitless and can be confusing. To simplify the process for users of the C-770 and other mp4 capable cameras, I have created a Perl script that automates the transcoding of the mp4 files to more usable formats.&lt;/p&gt;  &lt;h2&gt;mp4conv&lt;/h2&gt;  &lt;p&gt;mp4conv.pl is a perl script that uses the FAAD2, FFMPEG and MPEG2ENC tools to transcode mp4 file to other common formats. Download the script and place it in a directory that is on your PATH so that you can execute it. Also, don't forget to chmod +x it to make the script executable. The command mp4conv --help will then print the usage options of the script. It currently supports the following operations;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;MPEG2: --mpeg2 transcodes the video and audio to plain old MPEG2 at the same quality and packages then in an mpg file. Expect a much larger file that can be viewed almost anywhere.&lt;/li&gt;&lt;li&gt;MPEG4. --mpeg4 doesn´t touch the video, transcodes the audio to MPEG2 and stores the movie in the avi format. This makes the movie more viewable but keeps the same level of compression.&lt;/li&gt;&lt;li&gt;DVD. --dvd creates a PAL compatible MPEG2 stream, with MP2 soundtrack and DVD NAV packets that you can then use to create DVDs. Supporting NTSC only requires changing the image dimensions and fps within the script.&lt;/li&gt;&lt;li&gt;WINDOWS. --windows creates an avi file that all your sad Windows-using friends can view.&lt;/li&gt;&lt;li&gt;DV. --dv is supposed to create a DVI file that you can then edit. This option is currently not completed.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;The power of this script is that with one command you can convert all your mp4 files to a range or common movie formats - no more pointing and clicking for hours!&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;The C-770 is a good camera with impressive movie recording abilities but some effort is required to use it to full effect with current GNU/Linux distributions. Use the following references to investigate the options and utilize the mp4conv.pl script to automate the drudgery. Happy snapping!&lt;/p&gt;  &lt;h2&gt;References&lt;/h2&gt;  &lt;p&gt;http://linux.omnipotent.net/article.php?article_id=11500 gives a basic introduction to the AAC audio format.&lt;/p&gt;  &lt;p&gt;http://www.ndeepak.info/tech/c770uz.php provides a guide to connecting the camera to an older Debian PC. Debian Sarge may provide better support out of the box - I'm not sure.&lt;/p&gt;  &lt;p&gt;http://www.audiocoding.com is home of the FAAD2 audio decoder.&lt;/p&gt;  &lt;p&gt;http://ffmpeg.sourceforge.net/ is the home of FFMPEG, the video decoder.&lt;/p&gt;  &lt;p&gt;http://mjpeg.sourceforge.net/ is home to the excellent MJPEG toolset, which provides mpeg2enc.&lt;/p&gt;  &lt;p&gt;http://xinehq.de/ is the HQ of Xine, a powerful media player.&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;The Script&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;#! /usr/bin/perl -w&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# Olympus C-770 MPEG-4 Movie Conversion Script&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# M.McCarthy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# Version 0.6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;use&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;strict&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 108, 108); font-family: courier new;"&gt;vars&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;use&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; English;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# constants&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;77&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# Video formats&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;       = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;MPEG2 MPG&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG2EXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_mpeg2&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;         = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;DVD AVI&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVDEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;      = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_dvd&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;       = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;MPEG4 AVI&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4EXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_mpeg4&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$WINMV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;       = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;WINDOWS AVI&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$WINMVEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_wmv&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;          = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;DV&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;       = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_dv&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$YOUTUBE&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;     = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;YOUTUBE PREFERRED&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$YOUTUBEEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_youtube&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$VERSION&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;0.6&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# function prototypes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;sub &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;mp4convert&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;sub &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;printHelp&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;#### Main Function starts here ####&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# print header info&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;*************************************************&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;* Olympus C-770 Movie Conversion Utility v.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$VERSION&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; *&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;*    (c) M.McCarthy 2005,2006                   *&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;*************************************************&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# check dependencies&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsFaad&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = (&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;which&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;faad&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsFaad&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;die&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: FAAD2 not available&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsMencoder&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = (&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;which&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;ffmpeg&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsMencoder&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;die&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: FFMPEG not available&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsMencoder&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = (&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;which&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;mpeg2enc&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@clargsMencoder&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;die&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: mpeg2enc not available&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# set defaults&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;; &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# default is MPEG-4 AVI with sound&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# used to generate statistics at end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfFiles&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfConversions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;not&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;@ARGV&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;and&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;die&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: No filename passed as argument&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# parse the commandline arguements&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;@ARGV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;and&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;mp4&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;$&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfFiles&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;= &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfFiles&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( mp4convert( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ) != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; could not be converted&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfConversions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfConversions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; + &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--mpeg2&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--dvd&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--mpeg4&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--windows&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$WINMV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--dv&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--youtube&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outputFormat&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$YOUTUBE&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; =~ &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;m/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;--help&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        printHelp();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Warning: &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$file&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; is not a valid option or filename&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;**********************************************&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; Summary:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;     Files Processed : &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfFiles&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;     Successful      : &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfConversions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;     Errors          : &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, (&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfFiles&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;-&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$numOfConversions&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;), &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;**********************************************&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;exit&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# passed an mp4 filename, converts to avi format&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;sub &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;mp4convert&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;shift&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Source File: &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;shift&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;@_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Target Format: &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# generate temp audio filename&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;s/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;mp4&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)$&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;wav&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; Temp audio file: &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# extract audio from mp4 file&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$faadArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;faad -o &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$faadArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$faadArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: Could not extract audio from MPEG-4 file&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;OK: Audio extraction completed.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    { &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: No temp audio file produced&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# setup output options for conversion&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-sameq -s 640x480 -aspect 4:3 -vcodec mpeg2video -acodec mp2&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG2EXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.mpg&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-b 2000 -s 720x576 -r 25 -an -f yuv4mpegpipe&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# $outOpts = "-sameq -target pal-dvd -an";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVDEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.yuv&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-sameq -s 640x480 -vcodec mpeg4 -acodec mp2&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$MPEG4EXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.avi&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$WINMV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-sameq -s 640x480 -vcodec wmv2 -acodec mp2&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$WINMVEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.avi&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DV&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-sameq -s 720x576 -vcodec dvvideo&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.dv&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;elsif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$YOUTUBE&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;-sameq -s 320x240 -vcodec mpeg4 -acodec mp3&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$YOUTUBEEXT&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;.mpg&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: No output option selected&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# generate target filename&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;s/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;\.mp4&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)$&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$nameExt&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Target File: &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# generate the target file&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;ffmpeg -y -i &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; -i &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outOpts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; == &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: could not convert &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;OK: Video conversion successful.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# if dvd source required, then generate a DVD standard stream&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# generate temp mp2 filename&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;s/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;\.wav&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)$&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_tmp\.ac3&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# convert pcm file to MPEG-2 audio&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; == &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# print "AC3 Audio File: ", $m2aFile, "\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;ffmpeg -i &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; -acodec ac3 -ab 128 &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: could not convert &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; to AC3 format&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;OK: AC3 Audio conversion successful.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# generate temp mpeg-2 filename&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$srcFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;s/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;\.mp4&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;)$&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;_tmp\.mpg&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# convert MPEG-2 video to DVD standard MPEG-2 video&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; == &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# print "MPEG-2 Video File: ", $m2vFile, "\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;mpeg2enc -n p -f 8 -s -o &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: could not convert &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; to MPEG-2 DVD video format&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;OK: MPEG-2 DVD video conversion successful.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# multiplex MPEG-2 video, MP2 audio and DVD NAV packets&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; == &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$SUCCESS&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;# multiplex the files together&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;s/&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); font-family: courier new;"&gt;dvd\.yuv&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;dvdvob\.mpg&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;my&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$dvdFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(192, 0, 0); font-family: courier new;"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Target File: &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;mplex -f 8 -o &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$dvdFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;==&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;( &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$mencArgs&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) != &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Error: could not create DVD VOB file&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; = &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$FAIL&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;OK: DVD VOB file creation was successful.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(128, 128, 128); font-family: courier new;"&gt;#cleanup temporary files&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;rm -f &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Warning: Could not remove temp file &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$audioFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;rm -f &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Warning: Could not remove temp file &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2aFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;rm -f &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Warning: Could not remove temp file &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$m2vFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; ( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$output&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;eq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$DVD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;         &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;-e&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;system&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;rm -f &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;) == &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-family: courier new;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;            &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;warn&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;Warning: Could not remove temp file &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$outFile&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$status&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;sub &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;printHelp&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-family: courier new;"&gt;$PROGRAM_NAME&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt; &lt;options&gt; input filename(s)&lt;/options&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --help&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           Print this screen&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --mpeg2&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           MPEG-2 Video with MP2 Audio&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --divx&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           MPEG-4 DIVX-5 Video with AC-3 Audio&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --mpeg4 (default)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           MPEG-4 Video with MP2 Audio&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --windows&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           WMV Video with MP2Audio&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --dv&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           Digital Video DV&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;    --youtube&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); font-family: courier new;"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0); font-family: courier new;"&gt;           Youtube Preferred Format&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255); font-family: courier new;"&gt;\n&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 128, 0); font-family: courier new;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0); font-family: courier new;"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-6401610998838921637?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mickmccarthy.com/feeds/6401610998838921637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mickmccarthy.com/2005/08/using-olympus-c-770-with-gnulinux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6401610998838921637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6401610998838921637'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/08/using-olympus-c-770-with-gnulinux.html' title='Using the Olympus C-770 with GNU/Linux'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xIRilFfoJ2A/SSqPhBsaceI/AAAAAAAAALE/BSrbOxmXbFQ/s72-c/olympusc770.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-4809419784557503436</id><published>2005-07-22T10:55:00.001+02:00</published><updated>2008-11-24T13:29:57.406+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET version 0.0.4 released!</title><content type='html'>After spending too much time re-writing the "Grinding" funcionality - what detects data structures that are common to multiple files or buffers - I´ve released a tarball of version 0.0.4 of the code.  &lt;p&gt;This version of FRET is much improved, I think its the first version that a developer may actually find useful. All junk output has been eliminated and the scanGrind function is now quite smart - it will only detect common structures that are not part of a larger "common structure" (or Gram) and also it will not detect common structures that consist of fill bytes.&lt;/p&gt;  &lt;p&gt;The rewrite of the scanGrind function gave me a lot more problems than I thought it would. Eliminating superflous data i.e. sub-Grams of larger Grams and Grams that contain fill bytes was hard to do cleanly. Even now I´m not happy that the implementation is efficient but thats not a concern - fast is not a goal - correct and exhaustive is the goal. The next round of development will probably focus on adding either x86 instruction detection or improved text detection. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-4809419784557503436?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4809419784557503436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4809419784557503436'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/07/fret-version-004-released.html' title='FRET version 0.0.4 released!'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-4911561508747773322</id><published>2005-07-12T14:33:00.001+02:00</published><updated>2008-11-24T13:30:05.959+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Olympus C-770 with GNU/Linux</title><content type='html'>Currently working on a HOWTO for using the latest MPEG-4 recording digital cameras with GNU/Linux systems. I have a pretty good perl script that I use to go along with the article but it´ll be a week or two before thats finished. If you use an Olympus C-770 with a GNU/Linux system and would like a script to batch convert your mp4 movies to more usable MPEG-2, AVI or DVD-VOB formats, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-4911561508747773322?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4911561508747773322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/4911561508747773322'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/07/olympus-c-770-with-gnulinux.html' title='Olympus C-770 with GNU/Linux'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-5207163343073173582</id><published>2005-07-08T22:53:00.001+02:00</published><updated>2008-11-24T13:30:14.564+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET version 0.0.3 Released!</title><content type='html'>I have finally published version 0.0.3 on Sourceforge.net. This is definitely the most significant release to date as it now actually provides some useful functionality. Ok, its still pretty limited but its coming along. So if your a looking for a *NIX commandline tool to help you understand the inner workings of an undocumented file format, you now have to look no further.  &lt;p&gt;In this release I have added the hashing of raw data to create a fingerprint of each proposed data structure. This allows for the efficient comparison of structures (Grams). For the hash algorithm I used Landon Curt Noll's FNV algorithm, which he has kindly released in the Public Domain, see &lt;a href="http://www.isthe.com/chongo/tech/comp/fnv"&gt;Landon's website&lt;/a&gt;. This release has also removed the annoying over-zealous detection of offsets within the data. However, there is still lots of work to be done....... &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-5207163343073173582?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/5207163343073173582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/5207163343073173582'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/07/fret-version-003-released.html' title='FRET version 0.0.3 Released!'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-7386586392710321012</id><published>2005-06-29T18:55:00.001+02:00</published><updated>2008-11-24T13:30:25.018+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET version 0.0.2 Released</title><content type='html'>Version 0.0.2 of FRET has gone live on Sourceforge about a half hour ago. I have included some obvious improvements to the commandline tool so the output is now formatted much better. On the libfret side of things, the offset scanning code has been updated substantially, but it is now over-detecting offsets within files - I have to throttle that back in next release. So now its on to working on the next release and firstly what will be included in this - so much to do and so little time. So what is FRET and where is it going?  &lt;p&gt;FRET is a Unix commandline tool that is designed to slot into the Unix tool chain. As there is no point in developing a solution if no hard problem exists, I've looked at a lot of needs within the free software community before going down this road. The problem FRET attempts to solve is that if a developer needs to parse a file format and that format isn't documented (there are lots of potential reasons for this) then (s)he must spend days, weeks or months studying raw files to identify the layout of data within those files. The tools normally utilised to do this are hex editors and binary diff tools. This is inefficient - why not get a program to do what its good at - perform a repetitive, rigerous, boring analysis of a large group of these files and take a guess at the file layout. So thats the end goal: develop a tool that will crunch a large group of files and at the end provide a guess at the layout. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-7386586392710321012?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7386586392710321012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/7386586392710321012'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/06/fret-version-002-released.html' title='FRET version 0.0.2 Released'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-3052310447583176929</id><published>2005-06-15T21:30:00.003+02:00</published><updated>2008-11-24T13:30:32.753+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET version 0.0.1 Released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqVb4k68pI/AAAAAAAAALc/79FSffY1jxw/s1600-h/fret.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 130px;" src="http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqVb4k68pI/AAAAAAAAALc/79FSffY1jxw/s200/fret.jpg" alt="" id="BLOGGER_PHOTO_ID_5272190620066837138" border="0"&gt;&lt;/a&gt;&lt;br /&gt;Today I published the first version of FRET. I´ve placed a tarball of the source on the project website. It works ok and does analyse files as planned but is very light on functionality. But you have to start someplace and "release early, release often" is the FOSS motto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-3052310447583176929?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3052310447583176929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/3052310447583176929'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/06/fret-version-001-released.html' title='FRET version 0.0.1 Released'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xIRilFfoJ2A/SSqVb4k68pI/AAAAAAAAALc/79FSffY1jxw/s72-c/fret.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-8320731771435159238</id><published>2005-06-14T19:09:00.002+02:00</published><updated>2008-11-24T13:30:41.589+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>Sourceforge project site up and running</title><content type='html'>Sourceforge.net has accepted the proposal for FRET and an initial version of the project website is now in place. Putting the website itself together consisted of....  &lt;ul&gt;&lt;li&gt;a two day crash course in xhtml and css stylesheets.&lt;/li&gt;&lt;li&gt;finding a good css template to use for the website, thanks to snop for this.&lt;/li&gt;&lt;li&gt;configuring the sourceforge site which took a bit of time but is all well documented.&lt;/li&gt;&lt;li&gt;implementing the site. all coded by hand using Bluefish. I now know I have to automate most of this process or investigate a CMS.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;The site works and is LoFi - just the way I like it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-8320731771435159238?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8320731771435159238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8320731771435159238'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/06/sourceforge-project-site-up-and-running.html' title='Sourceforge project site up and running'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-8178334938448210134</id><published>2005-06-10T15:28:00.001+02:00</published><updated>2008-11-24T13:30:49.063+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET - helping understand file formats</title><content type='html'>fret is a developers tool that analyses multiple files and attempts to identify the data structures within these files. libfret provides the core functionality and is designed to be integrated with other tools. I am currently working on the development of this tool with the aim of publishing the first version within the next 3-4 days. There is a small code clean-up to be done prior to freezing the code for release. Then its package and test and publish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-8178334938448210134?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8178334938448210134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/8178334938448210134'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/06/fret-helping-understand-file-formats.html' title='FRET - helping understand file formats'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-551415713478622381</id><published>2005-05-05T17:20:00.002+02:00</published><updated>2008-11-24T13:30:55.444+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>First Rev design done</title><content type='html'>Have completed a first paper design of FRET. It will analyse a group of files in three phases, each phase performing a different task;  &lt;ul&gt;&lt;li&gt;Phase 1: Parse each file individually and store detected structures in a database.&lt;/li&gt;&lt;li&gt;Phase 2: Parse each file, comparing its raw data to the already detected structures and use this to identify new structures.&lt;/li&gt;&lt;li&gt;Phase 3: Compare all the detected structures for each file and all the files raw data against each other, identifying new structures.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;I´ve also developed (borrowed really) the following terminology to describe whats happening: &lt;strong&gt;GRAM&lt;/strong&gt; - a data structure or pattern of bytes detected in a file or buffer. Each GRAM will have a position, length, type, confidence level and parent. The term GRAM is taken from the classical Greek for a letter. I´m using it because it is the root of the words bigram and trigram that are used in cryptography when performing statistical analysis. FRET, after all, was inspired by coincidence counting - why not treat an unknown file format like an encrypted file for analysis purposes? &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-551415713478622381?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/551415713478622381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/551415713478622381'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/05/first-rev-design-done.html' title='First Rev design done'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-2171699298430288910</id><published>2005-05-04T10:23:00.002+02:00</published><updated>2008-11-24T13:31:03.525+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>FRET - it has a name</title><content type='html'>I have seen it and it has a name! Actually, I haven´t seen &lt;strong style="font-weight: normal;"&gt;it&lt;/strong&gt; but I have mapped it out roughly on paper. Since ealy March, I´ve been investigating needs within the free software community with the idea in mind of starting development of a Unix tool. I've looked at tools such as hex editors and binary diff tools and think I''ve spotted a gap. There is no tool available that will use sheer computing muscle to analyse black-box files and describe their internal structure - this could potentially save man-months if not man-years of development time - now I need to decide if there is a real need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-2171699298430288910?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/2171699298430288910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/2171699298430288910'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/05/fret-it-has-name.html' title='FRET - it has a name'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-6618242746551050333</id><published>2005-05-01T23:32:00.001+02:00</published><updated>2008-11-24T13:31:10.561+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FRET'/><title type='text'>and then there was 6</title><content type='html'>FRET now has 6 phases of analysis. I´ve done some pretty deep thinking (and scribbling) about this and identified 6 phases of analysis and optimised the order of execution. The phases are;  &lt;ul&gt;&lt;li&gt;Buffer preprocessing - remove obfuscation etc.&lt;/li&gt;&lt;li&gt;Single Buffer Scans - analyse raw data in each buffer&lt;/li&gt;&lt;li&gt;Raw data to Gram comparison for each buffer&lt;/li&gt;&lt;li&gt;Comparison of Grams for each buffer&lt;/li&gt;&lt;li&gt;Comparison of raw data of each buffer&lt;/li&gt;&lt;li&gt;Rationalise and amalgamate results&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Don´t worry, it may all make sense in the end. I´m not sure if this will work either. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-6618242746551050333?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6618242746551050333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/6618242746551050333'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/05/and-then-there-was-6.html' title='and then there was 6'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry><entry><id>tag:blogger.com,1999:blog-2181920555119164542.post-5692263731171328637</id><published>2005-02-19T16:34:00.001+01:00</published><updated>2008-11-24T13:31:28.796+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>KDE Bug 97831</title><content type='html'>I've spent the last two weeks burrowing through the internals of KDE, the GNU/Linux desktop in an attempt to see from the inside how KDE development works. I´ve picked Bug 98930 to be my vehicle - a nasty crash during the shutdown of Kivio. Tracking down a bug is the best way to explore unfamiliar code and this bug took a lot a tracing. I´ve finally traced the cause to a race condition between KConfig XT and KLibFactory. I´ve verified the cause and posted a full analysis and demo patch - it will be interesting to see what the maintainer does with this information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2181920555119164542-5692263731171328637?l=www.mickmccarthy.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/5692263731171328637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2181920555119164542/posts/default/5692263731171328637'/><link rel='alternate' type='text/html' href='http://www.mickmccarthy.com/2005/02/kde-bug-97831.html' title='KDE Bug 97831'/><author><name>Mick McCarthy</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='00750870359626381997'/></author></entry></feed>