The Amazing CODE/400 REXX Macros

  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

I was tickled pink the day I first ran CODE/400’s Live Parsing Extendable (LPEX) editor on my Windows PC and realized it’s programmable! It’s worlds apart from SEU. I learned SEU on a System/34 years ago and immediately suffered its inability to scroll backwards through a secondary browse/copy source member. (Does anyone else remember that?) SEU was supposed to bring me a great leap forward over punched tape and breakable cards; however, running SEU today seems like I’m watching 1960s black-and-white television with no remote control. I love remote controls. Joy filled me when my 1960s remoteless TV died, and an appliance store salesman subsequently showed me a new way to watch television with a modern remote control in hand: overlapping, multitasking, roving. More joy filled me when I threw orthodox SEU out my comfort nest and converted to the religion of CODE/400. Macros make the CODE/400 LPEX editor fun for a programmer. In this article, I’ll show you an easy way to begin writing LPEX editor macros.

Whether you are an SEU devotee or not, consider that once you start writing LPEX editor macros, you will never want to turn back. Macros open up a whole new world for you to enhance the editor to be anything you can think of. Running a macro in the LPEX editor is simple:

1. Press the Escape key.
2. A command line window pops up.
3. Type a macro name and optional parameters.
4. Press the Enter key.
5. The macro executes.
6. The command line window disappears.

Running a macro typically modifies something in your 0document. You can audition and discard all sorts of things in the command line window, from sensible and practical macro logic to crazy, corny, one-time-only macro logic. Want an RPG I-spec-to- O-spec converter? Write a macro. Want an alphabetical subroutine sorter? Write a macro. Want to convert CALLP to EVAL statements on alternate Tuesdays? Write a macro. If the macro isn’t just right, press Ctrl-Z to undo the changes. You can edit and reedit the macro

in a secondary editor session on the fly, save it, and immediately rerun the modified macro over your original document, without ever leaving the editor.

The Language of Choice

Object REXX is the language of editor macros. The object part of this language is optional, so if you know plain REXX, you can write editor macros. (Java can also create editor macros in the latest CODE/400 version, but that’s another story.) REXX is interpreted, not compiled, so you can develop and test macros fairly quickly. You get two online REXX manuals when you install CODE/400: Object REXX Programming Guide and Object REXX Programming Reference. You also get an online editor manual: LPEX Command Reference. Good luck finding them. I think IBM teases us with these manuals and hides them somewhere new inside each release of CODE/400. If you want to learn REXX in a hurry, I recommend you get the wonderful little book The REXX Language: A Practical Approach to Programming by Michael Cowlishaw.

A simple PC text file with an .LX extension contains a REXX editor macro. Over 100 ready-to-run REXX macros with .LX extensions come shipped in two CODE/400 subdirectories, ADTSWIN MACROS and ADTSWINEXTRAS. Reading through the
.LX files in these subdirectories is one way to learn tips and techniques for writing macros. Here are some examples of the ready-to-run macros:

• FIELDS.LX—The FIELDS.LX macro gets the AS/400 file name under the current cursor position on an RPG F-spec or a CL DCLF statement and inserts that file’s record and field names after the RPG F-spec or CL DCLF statement.

• RPGENT.LX—The RPGENT.LX macro, sometimes called “RPG Smart Enter,” creates a new line with a specification type in column 6 that is the same as the prior line. The cursor is placed where characters are most likely to be typed (for example, in the Factor One column on a C-spec).

• RPGINC.LX—The RPGINC.LX macro opens a new edit window containing the RPG source member named in the /COPY statement under the current cursor position.

• MATCH.LX—The MATCH.LX macro highlights all RPG lines between the cursor’s current position on an IFxx/CASxx/DOxx control statement, up to the matching END statement. An optional parameter (JUMP) moves the cursor between the IFxx/CASxx/DOxx control statement and the corresponding END statement.

• SIGNATUR.LX—The SIGNATUR.LX macro enables RPG signatures, which are unique five-character identifiers that some programmers like to write into the first five characters of each RPG line.

• ASCII.LX—The ASCII.LX macro queries the ASCII value of the character in the current cursor position. An optional parameter (ASSIST) pops up an ASCII value table; position the cursor on a character in this table and press the Enter key to insert the character into your original document.

Create Your Own PROFILE.LX Macro

Here’s a way to start writing your own custom macros. First of all, I recommend you create a new subdirectory to contain your custom macros. CODE/400 stores its own macros in the ADTSWINMACROS and ADTSWINEXTRAS subdirectories, which get overlaid during a CODE/400 upgrade. In this article, I’ll use C:MyMacros for a custom macro subdirectory name. If you want to use a different drive or subdirectory name on

your machine, then substitute your drive or subdirectory name anywhere this article uses C:MyMacros. The following DOS command will create the directory:

mkdir C:MyMacros

When CODE/400 starts, or when it loads a file into the editor, it searches for a macro named PROFILE.LX and runs it if found. The PROFILE.LX macro serves to initialize the editor with personal preference commands you specify. The first thing you’ll want to do is create a PROFILE.LX macro. From the Windows Run prompt, enter the following command to start the editor and create the PROFILE.LX macro:

codeedit C:MyMacrosProfile.LX

The file name must be PROFILE and the extension must be .LX. Case doesn’t matter. When the editor opens on a blank document, you need to tell the editor where it can find custom macros during future invocations of the editor. Press the Esc key to pop up the editor command line window. (The Escape key will move the cursor onto the command line footer, not the command line window, if you have previously checked Options/Controls/Command Line in the editor menu bar.) Type the following editor command and press the Enter key (again, case does not matter):

extras on C:MyMacros

It’s only necessary to do this once after you install CODE/400. You do not need to run the EXTRAS ON command every time you invoke the editor. The editor will save the path information you specify here (“C:MyMacros” in this case) in the Windows registry under the HKEY_LOCAL_MACHINESoftwareIBMEditorCODELPATH4 key. Once this is in place, the editor will search this path in addition to the ADTSWINMACROS and ADTSWINEXTRAS subdirectories to find macros.

After your macro path is set using the EXTRAS ON command, use the editor and type the following three lines of REXX source code into your PROFILE.LX, substituting your name in the third line.

‘set messages on’
‘msg Hello, Gene!’ /*substitute your name */

The first line is a standard REXX comment. Macros must begin with at least one comment. The remaining two lines are editor commands. Notice these commands are surrounded by quotes. REXX ordinarily passes a quoted command string out to an external command processor. On the AS/400, that external processor is typically CL, SQL, or CPIC. But in the LPEX editor on the PC, the external command processor is the processor for LPEX editor commands. The SET command on line two is an LPEX editor command that allows messages to be displayed at the bottom of the editor screen. The MSG editor command on line three displays Hello, [your name]! on the bottom of the editor screen.

Now, press the Function-3 key to save this PROFILE.LX macro and exit the editor. From the Windows Run prompt, type “codeedit,” and press Enter to invoke the editor again.

You should see Hello, [your name]! at the bottom of the editor. If it happens, congratulations, your macro worked! You can later remove the SET and MSG commands from PROFILE.LX if you find them annoying. If you don’t see Hello, [your name]!, then here are some troubleshooting tips. Try the following editor command from the editor command line or command window:

query lpath

This editor command will display the path names that the editor searches to find macros. If you don’t see C:MyMacros in the list, then execute the EXTRAS ON command again, exit the editor, and restart it. If no message line appears at all, select the Windows/Macro Log menu bar item to open a log file that contains messages sent from macros. The macro log opens in a separate editor ring, which is another instance of the editor. See if Hello, [your name]! appears in the macro log. Press the Alt-Ctrl-Right and Alt-Ctrl-Left keys to move between editor rings.

If you still don’t see Hello, [your name]!, then check for a preempting PROFILE.LX macro in the ADTSWINMACROS or ADTSWIN EXTRAS subdirectories. If it exists, rename the preempting PROFILE.LX file and try again.

Standard Comment Box

Some programmers like to start their source files with a standard comment box containing the name, language, compiler options, RPG indicator dictionary, etc. Figure 1 (page 83) shows a macro named BOXTOP.LX that inserts a CL-style comment box into the top of a document. You might use this as a template to develop your own comment box. Put this macro in your C:MyMacros directory. To call it, type the following macro name in the editor command line and press the Enter key:


You do not have to type the .lx extension to run a macro. The BOXTOP.LX macro will insert a standard comment box at the top of your file. The file name will be inserted after the word “NAME”. The cursor will position to row 3, line 25 after the word “PURPOSE”. Notice that this macro contains two commands that modify the current line: CONTENT and INSERT. The current line is the line that contains the cursor when you call a macro. Some commands can change the current line. For example, the TOP command in Figure 1 changes the current line to the top line. For more information on all of the editor commands, see the LPEX Editor Command Reference.

Set Records to a Date

You know how the F13 key in SEU gives you a way to set the last-changed dates through every record? The LPEX editor gives you a way to display the last-changed dates using the View/Date Area menu bar item, but no way to set them all at once. Figure 2 shows a macro I wrote, FILLDATE.LX, that lets you set the last-changed date in every record. Put this macro in your C:MyMacros directory. To run it, load an AS/400 source member into the editor, press the Esc key, and type the following in the editor command line and press the Enter key:


The macro accepts an optional six-digit date parameter. If you don’t enter a date, the macro prompts you for it. Figure 3 is a snapshot of the prompt that Figure 2 creates. Notice the SET LINEREAD.TITLE command sets the window title, and the SET LINEREAD.PROMPT command sets an input prompt. The window displays when the LINEREAD 255 command is executed. Perhaps this example of on-the-fly prompting will get you ruminating over more prompts you can create for the editor.

Customize the Menu Bar

If you write many macros, it may become hard to remember all of their names. Sometimes you might prefer to click the mouse in a pull-down menu to select a macro, rather than type

it from memory in the editor command line. The LPEX editor helps you in this regard by letting you create dynamic menu bar items. In your PROFILE.LX macro, use the SET ACTIONBAR command to create items for the menu bar. The following example shows a way to create a menu bar item, “My Macros,” with two subitems, “Comment box” and “Set records to date.” Put these commands in your PROFILE.LX macro:

‘set actionbar.~My_Macros.~Comment_box macro boxtop’
‘set actionbar.~My_Macros.~Set_records_to_date macro filldate’

Figure 4 shows a snapshot of the editor menu bar that is created when these two SET ACTIONBAR commands exist in the PROFILE.LX macro. Perhaps this example of on-the-fly menu bar items will get you ruminating on ways to make more custom menu bars, too!


/* PURPOSE - macro to insert standard comment box into top of file */

‘Extract Name’ /* get current file name */
‘Top’ /* position to top line */
‘SplitJoin’ /* insert above top line */
‘Content /’ || Copies( ‘*’, 78 ) || ‘/’ /* draw line 1 */
‘Insert’ Overlay( ‘*/’, ‘/* NAME - ‘ || Name, 79 ) /* insert line 2 */
‘Insert’ Overlay( ‘*/’, ‘/* PURPOSE - ‘, 79 ) /* insert line 3 */
‘Insert’ Overlay( ‘*/’, ‘/* LANGUAGE - ‘, 79 ) /* insert line 4 */
‘Insert /’ || Copies( ‘*’, 78 ) || ‘/’ /* insert line 5 */

‘Set CursorRow 3’
‘Set CursorCol 15’

Figure 1: The BOXTOP.LX macro adds a standard comment box.


/* PURPOSE - set all records to a date (like F13 in SEU) */

Arg OurDate /**** get optional command line parameter ****/
OurDate = Strip( OurDate )
Do While Length( OurDate ) = 0 /**** if no command line parameter ****/

‘Set LineRead.Title Set Records To Date’

‘Set LineRead.Prompt Enter date YYMMDD:’

‘LineRead 255’ /**** prompt the user ****/

‘Extract LastKey’

If LastKey = ‘ESC’ Then Return

‘Extract LastLine’ /**** retrieve user input ****/

OurDate = Strip( LastLine )
If Verify( OurDate, ‘0123456789’ ) > 0 | Length( OurDate ) <> 6 Then Do

‘Msg Date must be YYMMDD’

‘Extract AutoPrefix’ /**** save some current stuff ****/
‘Set AutoPrefix On’

‘Mark Set FillDateMark’
‘Set PrefixDefaultText’ OurDate /**** set our default date ****/
Do Until RC <> 0 /**** loop through every line ****/

‘Extract Content’

‘Set Content’ Content /**** rewrite line will update date ****/

‘Set AutoPrefix’ AutoPrefix /**** restore the current stuff ****/
‘Mark Find FillDateMark’

Figure 2: Set all records to a specific date with the FILLDATE.LX macro.

The_Amazing_CODE-_400_REXX_Macros06-00.png 444x165

Figure 3: The LINEREAD 255 command displays this window.

Figure 4: Two SET ACTIONBAR commands in PROFILE.LX can extend the menu bar.

The_Amazing_CODE-_400_REXX_Macros06-01.png 445x80



Support MC Press Online





  • White Paper: Node.js for Enterprise IBM i Modernization

    SB Profound WP 5539

    If your business is thinking about modernizing your legacy IBM i (also known as AS/400 or iSeries) applications, you will want to read this white paper first!

    Download this paper and learn how Node.js can ensure that you:
    - Modernize on-time and budget - no more lengthy, costly, disruptive app rewrites!
    - Retain your IBM i systems of record
    - Find and hire new development talent
    - Integrate new Node.js applications with your existing RPG, Java, .Net, and PHP apps
    - Extend your IBM i capabilties to include Watson API, Cloud, and Internet of Things

    Read Node.js for Enterprise IBM i Modernization Now!


  • Profound Logic Solution Guide

    SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation.
    Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects.
    The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the companyare not aligned with the current IT environment.

    Get your copy of this important guide today!


  • 2022 IBM i Marketplace Survey Results

    Fortra2022 marks the eighth edition of the IBM i Marketplace Survey Results. Each year, Fortra captures data on how businesses use the IBM i platform and the IT and cybersecurity initiatives it supports.

    Over the years, this survey has become a true industry benchmark, revealing to readers the trends that are shaping and driving the market and providing insight into what the future may bring for this technology.

  • Brunswick bowls a perfect 300 with LANSA!

    FortraBrunswick is the leader in bowling products, services, and industry expertise for the development and renovation of new and existing bowling centers and mixed-use recreation facilities across the entertainment industry. However, the lifeblood of Brunswick’s capital equipment business was running on a 15-year-old software application written in Visual Basic 6 (VB6) with a SQL Server back-end. The application was at the end of its life and needed to be replaced.
    With the help of Visual LANSA, they found an easy-to-use, long-term platform that enabled their team to collaborate, innovate, and integrate with existing systems and databases within a single platform.
    Read the case study to learn how they achieved success and increased the speed of development by 30% with Visual LANSA.


  • Progressive Web Apps: Create a Universal Experience Across All Devices

    LANSAProgressive Web Apps allow you to reach anyone, anywhere, and on any device with a single unified codebase. This means that your applications—regardless of browser, device, or platform—instantly become more reliable and consistent. They are the present and future of application development, and more and more businesses are catching on.
    Download this whitepaper and learn:

    • How PWAs support fast application development and streamline DevOps
    • How to give your business a competitive edge using PWAs
    • What makes progressive web apps so versatile, both online and offline



  • The Power of Coding in a Low-Code Solution

    LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed.
    Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

    • Discover the benefits of Low-code's quick application creation
    • Understand the differences in model-based and language-based Low-Code platforms
    • Explore the strengths of LANSA's Low-Code Solution to Low-Code’s biggest drawbacks



  • Why Migrate When You Can Modernize?

    LANSABusiness users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.
    In this white paper, you’ll learn how to think of these issues as opportunities rather than problems. We’ll explore motivations to migrate or modernize, their risks and considerations you should be aware of before embarking on a (migration or modernization) project.
    Lastly, we’ll discuss how modernizing IBM i applications with optimized business workflows, integration with other technologies and new mobile and web user interfaces will enable IT – and the business – to experience time-added value and much more.


  • UPDATED: Developer Kit: Making a Business Case for Modernization and Beyond

    Profound Logic Software, Inc.Having trouble getting management approval for modernization projects? The problem may be you're not speaking enough "business" to them.

    This Developer Kit provides you study-backed data and a ready-to-use business case template to help get your very next development project approved!

  • What to Do When Your AS/400 Talent Retires

    FortraIT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators is small.

    This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn:

    • Why IBM i skills depletion is a top concern
    • How leading organizations are coping
    • Where automation will make the biggest impact


  • Node.js on IBM i Webinar Series Pt. 2: Setting Up Your Development Tools

    Profound Logic Software, Inc.Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. In Part 2, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Attend this webinar to learn:

    • Different tools to develop Node.js applications on IBM i
    • Debugging Node.js
    • The basics of Git and tools to help those new to it
    • Using as a pre-built development environment



  • Expert Tips for IBM i Security: Beyond the Basics

    SB PowerTech WC GenericIn this session, IBM i security expert Robin Tatam provides a quick recap of IBM i security basics and guides you through some advanced cybersecurity techniques that can help you take data protection to the next level. Robin will cover:

    • Reducing the risk posed by special authorities
    • Establishing object-level security
    • Overseeing user actions and data access

    Don't miss this chance to take your knowledge of IBM i security beyond the basics.



  • 5 IBM i Security Quick Wins

    SB PowerTech WC GenericIn today’s threat landscape, upper management is laser-focused on cybersecurity. You need to make progress in securing your systems—and make it fast.
    There’s no shortage of actions you could take, but what tactics will actually deliver the results you need? And how can you find a security strategy that fits your budget and time constraints?
    Join top IBM i security expert Robin Tatam as he outlines the five fastest and most impactful changes you can make to strengthen IBM i security this year.
    Your system didn’t become unsecure overnight and you won’t be able to turn it around overnight either. But quick wins are possible with IBM i security, and Robin Tatam will show you how to achieve them.

  • Security Bulletin: Malware Infection Discovered on IBM i Server!

    SB PowerTech WC GenericMalicious programs can bring entire businesses to their knees—and IBM i shops are not immune. It’s critical to grasp the true impact malware can have on IBM i and the network that connects to it. Attend this webinar to gain a thorough understanding of the relationships between:

    • Viruses, native objects, and the integrated file system (IFS)
    • Power Systems and Windows-based viruses and malware
    • PC-based anti-virus scanning versus native IBM i scanning

    There are a number of ways you can minimize your exposure to viruses. IBM i security expert Sandi Moore explains the facts, including how to ensure you're fully protected and compliant with regulations such as PCI.



  • Encryption on IBM i Simplified

    SB PowerTech WC GenericDB2 Field Procedures (FieldProcs) were introduced in IBM i 7.1 and have greatly simplified encryption, often without requiring any application changes. Now you can quickly encrypt sensitive data on the IBM i including PII, PCI, PHI data in your physical files and tables.
    Watch this webinar to learn how you can quickly implement encryption on the IBM i. During the webinar, security expert Robin Tatam will show you how to:

    • Use Field Procedures to automate encryption and decryption
    • Restrict and mask field level access by user or group
    • Meet compliance requirements with effective key management and audit trails


  • Lessons Learned from IBM i Cyber Attacks

    SB PowerTech WC GenericDespite the many options IBM has provided to protect your systems and data, many organizations still struggle to apply appropriate security controls.
    In this webinar, you'll get insight into how the criminals accessed these systems, the fallout from these attacks, and how the incidents could have been avoided by following security best practices.

    • Learn which security gaps cyber criminals love most
    • Find out how other IBM i organizations have fallen victim
    • Get the details on policies and processes you can implement to protect your organization, even when staff works from home

    You will learn the steps you can take to avoid the mistakes made in these examples, as well as other inadequate and misconfigured settings that put businesses at risk.



  • The Power of Coding in a Low-Code Solution

    SB PowerTech WC GenericWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed.
    Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

    • Discover the benefits of Low-code's quick application creation
    • Understand the differences in model-based and language-based Low-Code platforms
    • Explore the strengths of LANSA's Low-Code Solution to Low-Code’s biggest drawbacks



  • Node Webinar Series Pt. 1: The World of Node.js on IBM i

    SB Profound WC GenericHave you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.
    Part 1 will teach you what Node.js is, why it's a great option for IBM i shops, and how to take advantage of the ecosystem surrounding Node.
    In addition to background information, our Director of Product Development Scott Klement will demonstrate applications that take advantage of the Node Package Manager (npm).
    Watch Now.

  • The Biggest Mistakes in IBM i Security

    SB Profound WC Generic The Biggest Mistakes in IBM i Security
    Here’s the harsh reality: cybersecurity pros have to get their jobs right every single day, while an attacker only has to succeed once to do incredible damage.
    Whether that’s thousands of exposed records, millions of dollars in fines and legal fees, or diminished share value, it’s easy to judge organizations that fall victim. IBM i enjoys an enviable reputation for security, but no system is impervious to mistakes.
    Join this webinar to learn about the biggest errors made when securing a Power Systems server.
    This knowledge is critical for ensuring integrity of your application data and preventing you from becoming the next Equifax. It’s also essential for complying with all formal regulations, including SOX, PCI, GDPR, and HIPAA
    Watch Now.

  • Comply in 5! Well, actually UNDER 5 minutes!!

    SB CYBRA PPL 5382

    TRY the one package that solves all your document design and printing challenges on all your platforms.

    Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product.

    Request your trial now!

  • Backup and Recovery on IBM i: Your Strategy for the Unexpected

    FortraRobot automates the routine tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:
    - Simplified backup procedures
    - Easy data encryption
    - Save media management
    - Guided restoration
    - Seamless product integration
    Make sure your data survives when catastrophe hits. Try the Robot Backup and Recovery Solution FREE for 30 days.

  • Manage IBM i Messages by Exception with Robot

    SB HelpSystems SC 5413Managing messages on your IBM i can be more than a full-time job if you have to do it manually. How can you be sure you won’t miss important system events?
    Automate your message center with the Robot Message Management Solution. Key features include:
    - Automated message management
    - Tailored notifications and automatic escalation
    - System-wide control of your IBM i partitions
    - Two-way system notifications from your mobile device
    - Seamless product integration
    Try the Robot Message Management Solution FREE for 30 days.

  • Easiest Way to Save Money? Stop Printing IBM i Reports

    FortraRobot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing.
    Manage your reports with the Robot Report Management Solution. Key features include:

    - Automated report distribution
    - View online without delay
    - Browser interface to make notes
    - Custom retention capabilities
    - Seamless product integration
    Rerun another report? Never again. Try the Robot Report Management Solution FREE for 30 days.

  • Hassle-Free IBM i Operations around the Clock

    SB HelpSystems SC 5413For over 30 years, Robot has been a leader in systems management for IBM i.
    Manage your job schedule with the Robot Job Scheduling Solution. Key features include:
    - Automated batch, interactive, and cross-platform scheduling
    - Event-driven dependency processing
    - Centralized monitoring and reporting
    - Audit log and ready-to-use reports
    - Seamless product integration
    Scale your software, not your staff. Try the Robot Job Scheduling Solution FREE for 30 days.