@Charles Any reason it must be URL Templating? I once wrote a little template engine in RPG which worked more like the Apache Velocity Engine (with various template loaders etc). Though I think you only need a little in-memory template engine.

Some example code of mine. It filled the command string to create a physical file:


ctl-opt dftactgrp(*no) actgrp(*caller) bnddir('TEMPLATE/TEMPLATE');

*inlr = *on;

dcl-proc main;
  dcl-s command char(1000);
  dcl-s abnormallyEnded ind;
  dcl-s mergedCommand varchar(1000);
  dcl-s templateLoader pointer;
  dcl-s context pointer;
  dcl-s engine pointer;
  dcl-s mergedContentPtr pointer;
  dcl-s info char(50);

  command = 'CRTPF FILE(${object_library}/${object_name}) ' +
              'SRCFILE(${source_library}/${source_file}) ' +
              'SRCMBR(${source_member})' + x'00';

  templateLoader = template_loader_memory_create(%addr(command));

  context = template_context_create();
  template_context_addCharValue(context : 'object_library':%trimr(destlibrary));
  template_context_addCharValue(context : 'object_name' : %trimr(member));
  template_context_addCharValue(context : 'source_library' : %trimr(library));
  template_context_addCharValue(context : 'source_file' : %trimr(file));
  template_context_addCharValue(context : 'source_member' : %trimr(member));
  template_context_addCharValue(context : 'source_member_type' : %trimr(type));

  engine = template_engine_create();
  template_engine_addTemplateLoader(engine : templateLoader);
  mergedContentPtr = template_engine_merge(engine : context : '*local');
  if (mergedContentPtr <> *null);
    mergedCommand = %str(mergedContentPtr);
    info = mergedCommand;
    dsply info;
    dsply 'no merged content';

  on-exit abnormallyEnded;
    if (engine <> *null);
    if (context <> *null);
    if (templateLoader <> *null);
    if (mergedContentPtr <> *null);


If you are interested I could provide the code. I haven't found the time to upload it to a repo.

Best regards


On 13.07.20 16:26, Charles Wilt wrote:
ILE C++ is easy to call..thus why we are trying to port it.

C++ in PASE is what is difficult...


On Fri, Jul 10, 2020 at 5:25 PM Roger Harman <roger.harman@xxxxxxxxxxx>

That's an interesting statement. If it's an ILE program (or module), why
would it be difficult to call?

I've only done a couple of C (not C++) programs on IBM i so I can't claim
any expertise - just curiosity.

Roger Harman
COMMON Certified Application Developer - ILE RPG on IBM i on Power


-----Original Message-----
From: C400-L [mailto:c400-l-bounces@xxxxxxxxxxxxxxxxxx] On Behalf Of
Charles Wilt
Sent: Friday, July 10, 2020 9:47 AM
To: Bare Metal Programming IBM i (AS/400 and iSeries)
Subject: Re: [C400-L] ILE C++ standards

That's an option..

Except I want to call the C++ code from RPG...

And while it appears that can be done, it doesn't appear
particularly simple.


On Fri, Jul 10, 2020 at 10:25 AM Mark Waterbury <
mark.s.waterbury@xxxxxxxxxxxxx> wrote:

Hi, Charles,

If you really need the latest and greatest C++ standards, you should be
looking into installing the GCC G++ compiler under PASE. :-)

All the best,

Mark S. Waterbury

On Friday, July 10, 2020, 12:22:07 PM EDT, Charles Wilt <
charles.wilt@xxxxxxxxx> wrote:

"You're surprised by this?"

A little yeah, I expected it to be behind...but 9+ years? :o

No, we don't do much C++, none in fact. But I'd really like to have URI
Templating functionality https://en.wikipedia.org/wiki/URL_Template in
and since there were some existing C++, I thought it'd be worthwhile to
if we could port one over.


On Fri, Jul 10, 2020 at 7:35 AM Kelly Beard <kenverybigliar@xxxxxxxxx>

You're surprised by this? :-) Not to sound rude or condescending, but
you, like most everyone else in the universe, probably don't do a lot
C++ work on the 400. Unfortunately, we do. We're on V7R3 here. IBM
not even on C++11, technically, but on C++0x, and you have to, for
some reason, enable a command option to get that going. Only God in
knows why they cannot stay current. I suspect that maybe the OS is
with whatever C++ was in force at the time and so that is what we're
with, but that's only my uneducated guess.

How many lines is this utility? Probably originally written on a Linux
system with g++?

On Thu, Jul 9, 2020 at 5:06 PM Charles Wilt <charles.wilt@xxxxxxxxx>

So we're trying to port a small C++ utility to ILE...

One of the compile errors is on the following...
for(auto& ele : inVars)

Apparently this the "for each" loop which was added to C++ in

We're on v7.2, but even the v7.4 manual doesn't show it as valid.

Looks like C++ on the IBM i include part of the C+11 standards, but
all. And of course C++14 and C++17 are nowhere to be found.

Bit surprised the i is so far behind the times, but I suppose most
use ILE C/C++...

This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L)
mailing list
To post a message email: C400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/c400-l.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2022 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.