## 3 Materials and Methods
### Cross-Platform and Faster Implementation  
PWCT1 was developed as a Microsoft Windows product, with no native support for other operating systems like Linux and macOS. Additionally, PWCT1 is 32-bit software. Since PWCT2 is developed using the Ring programming language, which is a lightweight, versatile, and cross-platform language, it was possible to create a cross-platform and 64-bit version of PWCT2 based on Ring and the Qt framework, supported by the RingQt extension. In Table 7, we present the modules, along with the count of files and lines of code. Figure 15 demonstrates using PWCT2 on macOS to develop the Tetris game using the Ring game engine for 2D games, which is based on the Allegro game programming library [81; 82]. The game engine provides classes that can be used to quickly prototype simple 2D games. These classes include Game, Text, Sprite, Animate, Map, etc. The PWCT2 project is one of the early advanced projects developed using Ring (see Figure 16). The Environment module provides the main window and creates the different dockable widgets. The General Functions module encompasses general functions required by the software. The Translation module handles various translation functions. The Goal Designer modules contain the Steps Tree Editor and the Time Machine. The Components Browser allows users to navigate through available components and select a component to use. \begin{table}
\begin{tabular}{c c} \hline
**Attribute** & **Value** \\ \hline Class Name & PrintComponentView \\ Parent Class & ComponentViewParent \\ \hline \end{tabular}
\end{table} 
Table 6: Using Ring2 PWCT to convert the PrintComponentView class. The VPL Components module, being the largest, includes all the RingPWCT visual programming language components necessary for creating and managing programs. The Component module provides the foundational elements required for the different visual components, including interaction pages and generating visual steps. The Form Designer module provides functionality for designing forms within the environment. The File System module manages the visual source files. Finally, the Tools module contains various utilities, including the textual-to-visual code converter (Ring2 PWCT). During the development of PWCT2, we made specific design decisions that resulted in improved performance compared to PWCT1. These design decisions helped enhance various aspects of PWCT2, with notable improvements in code generation time and storage requirements for the visual source files. These design decisions are as follows:  
* The Steps Tree is stored in the visual source files in the correct order of control flow, with PWCT2 adding steps at the end of the file or inserting them based on their actual position. In contrast, PWCT1 always adds new steps at the end of the file, requiring the Steps Tree to be ordered during the code generation process. * Storing the visual source in memory through Ring Lists during development and saving to storage only when needed, instead of using database files and storage on \begin{table}
\begin{tabular}{c c c c c} \hline
**ID** & **Module** & **Files** & **LOC** & **Comment** \\ \hline
1 & Environment & 5 & 2649 & 300 \\
2 & General Functions & 9 & 524 & 122 \\
3 & Translation & 3 & 584 & 20 \\
4 & Goal Designer & 27 & 4908 & 1473 \\
5 & Components Browser & 5 & 8876 & 70 \\
6 & VPL Components & 1185 & 57,612 & 7167 \\
7 & Component Parent Classes & 3 & 739 & 283 \\
8 & Form Designer & 52 & 9487 & 312 \\
9 & File System (Visual Source Files) & 6 & 368 & 415 \\
10 & Tools & 59 & 6484 & 546 \\ \hline \end{tabular}
\end{table} 
Table 7: PWCT2 modules. Figure 15: PWCT2 for macOS. the hard disk during development as in PWCT1. It is known that accessing computer memory is faster than accessing the hard disk drive. * Using the Ring programming language instead of Visual FoxPro. Since Ring development is active, the latest versions of the Ring Compiler/VM are produced using the latest versions of C/C++ compilers, which also benefit from the performance improvements in these tools.