The AI Accelerated version of FmPro Migrator Platinum Edition
11.28 - Adds a new Code Conversion Workbench Training feature which trains the machine learning models to improve the converted code for all programming languages.
FmPro Migrator Custom Development Edition has been enhanced with support for using AI models running on your local computer using the Ollama software package. The use of locally running models is designed to support secure computing environments where the computer may be "air gapped" - unable to access the internet for security reasons.
Visual FoxPro to C# Conversion with the VFP Code Conversion Workbench
The VFP Code Conversion Workbench enables developers to manage the automated conversion of hundreds of PRG files and form code within an entire VFP project in a single window. Individual procedure/functions can be selected by name for single-click submission to the selected AI provider and machine learning model. Output files are saved automatically as the results are received into a folder of converted scripts. Completed scripts can be further processed by GitHub Copilot X and Visual Studio IntelliCode to complete the integration into the new project. The VFP Code Conversion Workbench supports conversions into the top 50 most popular programming languages as found in the TIOBE index. Machine learning prompts are generated automatically, but the prompt text and source code fields are fully editable. Part of the secret sauce of this tool includes the system prompts and setup parameters which are built into the workbench software.
Code Conversion Workbench Model Training Records
Top 10 Features - VFP Code Conversion Workbench
Converts PRG/Form code to 50+ programming languages.
Up to 500,000 daily AI Tokens included.
Efficient workflow manages importing, processing, naming and saving of all scripts.
To-Do list checklist shows project status at a glance.
Finely tuned system messages and properties are built in and sent automatically.
Procedure/Function splitting sends manageable sized chunks of code for processing.
Flexible GUI provides full control of AI model, source text, prompt text and output filename.
Customize the conversion process by adding model training records for your unique code base.
Included with the AI Accelerated version of FmPro Migrator Platinum Edition.
FoxPro 2.6 to Visual FoxPro code conversion with form creation code generated too.
Top 10 Features - FmPro Migrator
Included with FmPro Migrator Platinum Edition, keeps your Visual FoxPro migration project
affordable.
Quickly and economically test 5 different development environments - including for IOS and Android.
Automated
conversion of Visual FoxPro Forms/Reports to multiple development tools.
Prepares VFP9 projects for further conversion into 64-bit server apps using FmPro Migrator Server App Builder.
Data bound fields and grid controls are converted into equivalent SQL database data bound controls.
Persistent Visual FoxPro relations are converted into SQL database relationships (if needed).
Custom ComboBox lists are de-duped and centrally located as Value Lists.
Transfer data from locally stored DBF files into 9 SQL databases.
Converts pageframe form controls into Tab Controls including embedded objects.
Saves
many hours of manual work converting each Form/Report.
The Visual FoxPro Migration Service built into FmPro
Migrator Platinum Edition provides an economical fixed-price migration or conversion service
for Visual FoxPro projects.
This service converts forms, reports, functions, procedures, persistent relations,
and DBF data file conversion within a predefined budget. A wide range of target development environments are supported, including:.NET 4 Visual Studio 2010, Microsoft Access, FileMaker Pro, PHP, and LiveCode. All 6 conversion options are included for one fixed price.
Scale-up & Transition Visual FoxPro to a Cloud Hosted Web Application
Scale up desktop applications well beyond the capacity of DBF files, save money on recurring license billing, and own all of the source code for your application, so you can customize or resell it at any time. Competing systems can cost thousands of dollars annually, and provide no access to the underlying source code. You can think of the PHP Conversion process as a way to improve and optimize performance by building a scalable web application infrastructure from your Visual FoxPro database application.
The features and benefits of using the automated Visual FoxPro
Migration Service include:
Multiple Conversion Options - Not sure which development environment you want to use? FmPro Migrator makes it possible for Visual FoxPro developers to quickly convert Visual FoxPro projects into 5 different development environments (including:.NET 4 Visual Studio 2010, Microsoft Access, FileMaker Pro, PHP, and LiveCode). All 5 conversion options are included for one fixed price.
Save
Time, Get Up and Running Quickly - It can be a tedious and time consuming
process to manually re-create each form/report object into
any other development environment. Rather than spending days or even
weeks of valuable time manually converting hundreds of forms/reports, Visual FoxPro
developers can utilize the Visual FoxPro Migration Service as an
economical alternative. FmPro Migrator Developer Edition typically
processes each form/report within less than 1 second - much faster than
you could perform the task manually!
The ability to efficiently perform Visual FoxPro migrations makes it possible to quickly show prototypes to
prospective customers. An automated migration process represents the
ultimate in rapid application development, which can't be matched
by any other development environment. Being able to show customers
a rapid prototype may make the difference in getting approval for
a new client project.
The PHP Conversion feature can be used to convert Visual FoxPro applications into PHP web applications. Though the process generally works better using FileMaker Pro as the source database due to the guaranteed data binding information available from the original FileMaker Pro layout objects. It will generally be faster to data bind all FoxPro forms/fields prior to doing a conversion. Alternatively, the FoxPro application could be converted into a FileMaker Pro database, then the Layouts and fields could be data bound - then the FileMaker Pro database would be imported and converted using the PHP Conversion feature.
Code Conversion Workbench Training
The Code Conversion Workbench Training feature enables developers to customize the automated conversion process to match their unique code base.
Do you have specific user-written functions you want to use to replace the original Visual FoxPro functions everywhere in your code base? Do you prefer to use the VFP Toolkit for .NET functions?
This is where you define the unique features you want performed by the machine learning model with plain English text examples as shown in the screenshot above. This feature works across all models from all vendors and instructs the model exactly how you want the converted code to be written. Add as many training records as you need and enable/disable records as needed while converting your code base.
Code Conversion Workbench Training Results
Example
VFP Code
C# Converted Script
C# Converted Script With Training
Conversion Notes
inlist()
procedure ValidateOptions_299
if mod.option=249 and mod.num2>96 and inlist(job.option,'ABC','DEF','XYZ')
lcmsg='This option is not available with a value over 8 feet.'
lnret=-1
endif
endproc
public int ValidateOptions_299(Mod mod, Job job)
{
if (mod.option == 249 && mod.num2 > 96 && (job.option == "ABC" || job.option == "DEF" || job.option == "XYZ"))
{
string lcmsg = "This option is not available with a value over 8 feet."; // This variable isn't used. Consider removing or using it appropriately.
return -1;
}
return 0; // Implicitly returning 0 if the condition is false, mirroring VFP's behavior.
}
public class Validator
{
public int ValidateOptions_299(Module mod, Job job)
{
if (mod.option == 249 && mod.num2 > 96 && StartsWithAny(job.option, "ABC", "DEF", "XYZ"))
{
string lcmsg = "This option is not available with a value over 8 feet.";
return -1;
}
return 0; // Or whatever the default successful return value should be
}
public static class StringExtensions
{ public static bool StartsWithAny(this string str, params string[] values)
{
return values.Any(str.StartsWith);
}
public static bool StartsWithAny(this int num, params int[] values)
{
return values.Contains(num);
}
}
}
In order to improve readability and maintainability in the C# code we want to replace the VFP inlist() function with a user written StartsWithAny() class.
Without training, the LLM creates individual comparisons for each option being checked.
Adding the traing record results in the StartsWithAny() class being used within the code. As a bonus - the Google Gemini 1.5-Pro model has written the class for us and implemented method overloading to handle both string and integer comparisons.
empty()
procedure ValidateOptions_299
if !empty(mod.char3) and !'ABC'$upper(mod.char1)
lnret=-1
lcmsg='Either select ABC in the options or do not select an alternate size'
endif
endproc
public static int ValidateOptions_299(dynamic mod)
{
if (!string.IsNullOrEmpty(mod.char3) && !mod.char1.ToUpper().Contains("ABC"))
{
return -1;
}
return 0;
}
public int ValidateOptions_299(dynamic mod)
{
if (!String.IsNullOrWhiteSpace(mod.char3) && !mod.char1.ToUpper().Contains("ABC"))
{
return -1; // lnret = -1
// lcmsg = 'Either select ABC in the options or do not select an alternate size' - This would likely be handled by displaying a message to the user in the UI.
}
return 0; // Assumed default return value if the condition is not met.
}
Instead of just checking for Null or Empty values, we also want to check for white space. By default, only Null or Empty values are checked.
But by adding the training record the LLM will also check for white space in every place where it finds empty() in the VFP code base.
$
procedure ValidateOptions_299
if !empty(mod.char3) and !'ABC'$upper(mod.char1)
lnret=-1
lcmsg='Either select ABC in the options or do not select an alternate size'
endif
endproc
public void ValidateOptions_299()
{
if (!string.IsNullOrEmpty(mod.char3) && !("ABC".ToUpper().Equals(mod.char1, StringComparison.OrdinalIgnoreCase)))
{
return -1;
MessageBox.Show("Either select ABC in the options or do not select an alternate size");
}
}
public void ValidateOptions_299()
{
if (!string.IsNullOrEmpty(modChar3) && !modChar1.ToUpper().Contains("ABC"))
{
lnRet = -1;
lcMsg = "Either select ABC in the options or do not select an alternate size";
}
}
When converting the VFP $ operator, we want to use Contains, which is used by default with most public models. But when using Ollama to run the llama3 (8B) locally we get the output shown here. Therefore using the training record enables the output of the local LLM to match the output of the much more expensive public LLMs.
Also, notice that the IsNullOrWhiteSpace() results shown in the row above weren't generated for this example. This is because that training record wasn't enabled for this row of results. These training records can and should be enabled at once in order to achieve the desired output.
Parenthesis around numeric comparisons
procedure ValidateExtra_299
if job.custom='E'
if mod.option=249 and mod.num2>96
lnret=-1
lcmsg='Maximum height is 96"'
endif
if mod.option=248 and mod.num2>48
lnret=-1
lcmsg='Maximum height is 4 feet"'
endif
endif
endproc
public int ValidateExtra_299(Job job, Mod mod)
{
if (job.custom == 'E')
{
if (mod.option == 249 && mod.num2 > 96)
{
return -1; // Implied: Sets lnret = -1 and lcmsg = "Maximum height is 96"""
}
if (mod.option == 248 && mod.num2 > 48)
{
return -1; // Implied: Sets lnret = -1 and lcmsg = "Maximum height is 4 feet"""
}
}
return 0; // Implied: Successful validation (lnret remains at its default value, presumably 0)
}
public int ValidateExtra_299(Job job, Mod mod)
{
int lnret = 0; // Initialize lnret to a default value (assuming 0 means success)
string lcmsg = "";
if (job.custom == 'E')
{
if ((mod.option == 249) && (mod.num2 > 96))
{
lnret = -1;
lcmsg = "Maximum height is 96\"";
}
// In C#, it's common to return a value indicating success/failure
return lnret;
}
Adding training records is also a good way to improve the style and readability of the code beyond just getting the functional aspects correct. In this example we want to improve readability and insure proper precedence by putting each comparison within parenthisis. Without this instruction the LLMs won't generally perform this task automatically.
Visual FoxPro Static MetaData Export Process
FmPro Migrator uses a 2 step process to import the metadata from within Visual FoxPro projects. Thru the use of the included VFPExport.exe Utility, Visual FoxPro project metadata is read directly from the VCX, SCX, FRX, DBC, DBF, MNX and PRG files referenced within the .PJX project file. This information is written into a new database file named VFPExport.DBF.
FmPro Migrator reads the contents of the VFPExport.DBF file and converts its contents into a standardized XML format which is stored within the FmPro Migrator MigrationProcess.db3 project database. Once the Visual FoxPro metadata has been converted into the standardized XML format, it can then be converted into any of the other database or development environments which are supported by FmPro Migrator.
Visual FoxPro Code Conversion Videos
Scalability
Costs
Is LiveCode the Modern Replacement for Visual FoxPro?
CakePHP Views
The free Visual FoxPro Project Analyzer Utility provides a quick way to assess the complexity and cost of a Visual FoxPro Migration or Conversion project. Click the image to download a copy.