**free
//  WATSONTR1R:  This is a demo of Watson's Language Translator V3
//               using input/output with JSON documents.
//
//               Requires HTTPAPI and YAJL.
//               This version uses DATA-INTO and DATA-GEN
//
ctl-opt option(*srcstmt) dftactGrp(*no)
        bnddir('HTTPAPI');

/copy httpapi_h

dcl-f WATSONTR1D workstn indds(dspf);

dcl-Ds dspf qualified;
   F3Exit ind pos(3);
end-Ds;

dcl-c UPPER 'ENESFRITPT';
dcl-c lower 'enesfritpt';

fromLang = 'en';
toLang   = 'es';

dou dspf.F3Exit = *on;

   exfmt screen1;
   if dspf.F3exit = *on;
      leave;
   endif;

   fromLang = %xlate(UPPER:lower:fromLang);
   toLang   = %xlate(UPPER:lower:toLang);
   toText = translate( fromLang: toLang: %trim(fromText) );

enddo;

*inlr = *on;
return;


dcl-proc translate;

   dcl-pi *n varchar(1000);
      fromLang char(2)       const;
      tolang   char(2)       const;
      fromText varchar(1000) const;
   end-pi;

   dcl-s url      varchar(2000);
   dcl-s request  varchar(2000);
   dcl-s response varchar(5000);
   dcl-s httpstatus int(10);

   dcl-ds reqds qualified;          // {
     source varchar(2);             //   "source": "{string}",
     target varchar(2);             //   "target": "{string}",
     text   varchar(1000) dim(1);   //   "text": [ "{string}" ]
   end-ds;                          // }

   dcl-ds result qualified;         // {
     dcl-ds translations dim(1);    //   "translations": [{
        translation varchar(1000);  //      "translation": "{string}"
     end-ds;                        //   },
     word_count int(10);            //   "word_count": {number},
     character_count int(10);       //   "character_count": {number}
   end-ds;                          // }

   // Generate the JSON document to send

   reqds.source  = fromLang;
   reqds.target  = toLang;
   reqds.text(1) = fromText;

   data-gen reqds %data(request) %gen('YAJLDTAGEN');

   // Set options to control how HTTPAPI communicates with Watson

   http_debug(*on: '/tmp/watson-diagnostic-log.txt');
   http_setOption('local-ccsid': '0');
   http_setOption('network-ccsid': '1208');

   http_setAuth( HTTP_AUTH_BASIC
               : 'apikey'
               : '8OD0RY71zMwXjkNiBLzTN8i848R9wXMOmADjuvoKY2zw');

   url = 'https://gateway.watsonplatform.net/language-translator/api'
       + '/v3/translate?version=2018-05-01';

   monitor;
      response = http_string('POST': url: request: 'application/json');
      http_error(*omit: httpstatus);
      httpcode = %char(httpstatus);
   on-error;
      httpcode = http_error();
   endmon;

   data-into result %DATA(response) %PARSER('YAJLINTO');
   return result.translations(1).translation;

end-Proc;
 
