xref: /aosp_15_r20/external/curl/packages/OS400/rpg-examples/SIMPLE2 (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker      * Curl simple URL request (free-format RPG)
2*6236dae4SAndroid Build Coastguard Worker      *
3*6236dae4SAndroid Build Coastguard Worker        ctl-opt dftactgrp(*NO) actgrp(*NEW)
4*6236dae4SAndroid Build Coastguard Worker                option(*NOSHOWCPY)
5*6236dae4SAndroid Build Coastguard Worker                bnddir('CURL');
6*6236dae4SAndroid Build Coastguard Worker      *
7*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
8*6236dae4SAndroid Build Coastguard Worker      *                                  _   _ ____  _
9*6236dae4SAndroid Build Coastguard Worker      *  Project                     ___| | | |  _ \| |
10*6236dae4SAndroid Build Coastguard Worker      *                             / __| | | | |_) | |
11*6236dae4SAndroid Build Coastguard Worker      *                            | (__| |_| |  _ <| |___
12*6236dae4SAndroid Build Coastguard Worker      *                             \___|\___/|_| \_\_____|
13*6236dae4SAndroid Build Coastguard Worker      *
14*6236dae4SAndroid Build Coastguard Worker      * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
15*6236dae4SAndroid Build Coastguard Worker      *
16*6236dae4SAndroid Build Coastguard Worker      * This software is licensed as described in the file COPYING, which
17*6236dae4SAndroid Build Coastguard Worker      * you should have received as part of this distribution. The terms
18*6236dae4SAndroid Build Coastguard Worker      * are also available at https://curl.se/docs/copyright.html.
19*6236dae4SAndroid Build Coastguard Worker      *
20*6236dae4SAndroid Build Coastguard Worker      * You may opt to use, copy, modify, merge, publish, distribute and/or sell
21*6236dae4SAndroid Build Coastguard Worker      * copies of the Software, and permit persons to whom the Software is
22*6236dae4SAndroid Build Coastguard Worker      * furnished to do so, under the terms of the COPYING file.
23*6236dae4SAndroid Build Coastguard Worker      *
24*6236dae4SAndroid Build Coastguard Worker      * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
25*6236dae4SAndroid Build Coastguard Worker      * ANY KIND, either express or implied.
26*6236dae4SAndroid Build Coastguard Worker      *
27*6236dae4SAndroid Build Coastguard Worker      * SPDX-License-Identifier: curl
28*6236dae4SAndroid Build Coastguard Worker      *
29*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
30*6236dae4SAndroid Build Coastguard Worker
31*6236dae4SAndroid Build Coastguard Worker      /include H,CURL.INC
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Worker      * Simple free-format RPG program to request the URL given as command line
34*6236dae4SAndroid Build Coastguard Worker      * parameter and output its response.
35*6236dae4SAndroid Build Coastguard Worker
36*6236dae4SAndroid Build Coastguard Worker        dcl-pi *N;
37*6236dae4SAndroid Build Coastguard Worker            url char(120);
38*6236dae4SAndroid Build Coastguard Worker        end-pi;
39*6236dae4SAndroid Build Coastguard Worker
40*6236dae4SAndroid Build Coastguard Worker        dcl-s urllen int(10);           // URL length
41*6236dae4SAndroid Build Coastguard Worker
42*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard Worker        urllen = trimmed_length(url: %len(url));
45*6236dae4SAndroid Build Coastguard Worker
46*6236dae4SAndroid Build Coastguard Worker        // Do the curl stuff.
47*6236dae4SAndroid Build Coastguard Worker
48*6236dae4SAndroid Build Coastguard Worker        curl_global_init(CURL_GLOBAL_ALL);
49*6236dae4SAndroid Build Coastguard Worker        main();
50*6236dae4SAndroid Build Coastguard Worker        curl_global_cleanup();
51*6236dae4SAndroid Build Coastguard Worker        *inlr = *on;            // Exit
52*6236dae4SAndroid Build Coastguard Worker
53*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
54*6236dae4SAndroid Build Coastguard Worker      * Main procedure: do the curl job.
55*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Worker        dcl-proc main;
58*6236dae4SAndroid Build Coastguard Worker            dcl-pi *N end-pi;
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker            dcl-s h pointer;                                            // Easy handle
61*6236dae4SAndroid Build Coastguard Worker            dcl-s result like(CURLcode) inz(CURLE_OUT_OF_MEMORY);       // Curl return code
62*6236dae4SAndroid Build Coastguard Worker            dcl-s errmsgp pointer;                                      // Error string pointer
63*6236dae4SAndroid Build Coastguard Worker            dcl-s response char(52);                                    // For error display
64*6236dae4SAndroid Build Coastguard Worker
65*6236dae4SAndroid Build Coastguard Worker            // Create and fill curl handle.
66*6236dae4SAndroid Build Coastguard Worker
67*6236dae4SAndroid Build Coastguard Worker            h = curl_easy_init();
68*6236dae4SAndroid Build Coastguard Worker            if h <> *NULL;
69*6236dae4SAndroid Build Coastguard Worker                curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen):
70*6236dae4SAndroid Build Coastguard Worker                                       0);
71*6236dae4SAndroid Build Coastguard Worker                curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
72*6236dae4SAndroid Build Coastguard Worker
73*6236dae4SAndroid Build Coastguard Worker                // Perform the request.
74*6236dae4SAndroid Build Coastguard Worker
75*6236dae4SAndroid Build Coastguard Worker                result = curl_easy_perform(h);
76*6236dae4SAndroid Build Coastguard Worker                curl_easy_cleanup(h);       // Release handle
77*6236dae4SAndroid Build Coastguard Worker            endif;
78*6236dae4SAndroid Build Coastguard Worker
79*6236dae4SAndroid Build Coastguard Worker            // Check for error and report if some.
80*6236dae4SAndroid Build Coastguard Worker
81*6236dae4SAndroid Build Coastguard Worker            if result <> CURLE_OK;
82*6236dae4SAndroid Build Coastguard Worker                errmsgp = curl_easy_strerror_ccsid(result: 0);
83*6236dae4SAndroid Build Coastguard Worker                response = %str(errmsgp);
84*6236dae4SAndroid Build Coastguard Worker                dsply '' '*EXT' response;
85*6236dae4SAndroid Build Coastguard Worker            endif;
86*6236dae4SAndroid Build Coastguard Worker        end-proc;
87*6236dae4SAndroid Build Coastguard Worker      *
88*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
89*6236dae4SAndroid Build Coastguard Worker      * Get the length of right-trimmed string
90*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
91*6236dae4SAndroid Build Coastguard Worker      *
92*6236dae4SAndroid Build Coastguard Worker        dcl-proc trimmed_length;
93*6236dae4SAndroid Build Coastguard Worker            dcl-pi *N uns(10);
94*6236dae4SAndroid Build Coastguard Worker                string char(9999999) const options(*varsize);
95*6236dae4SAndroid Build Coastguard Worker                length uns(10) value;
96*6236dae4SAndroid Build Coastguard Worker            end-pi;
97*6236dae4SAndroid Build Coastguard Worker
98*6236dae4SAndroid Build Coastguard Worker            dcl-s len uns(10);
99*6236dae4SAndroid Build Coastguard Worker
100*6236dae4SAndroid Build Coastguard Worker            len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
101*6236dae4SAndroid Build Coastguard Worker            if len = 0;
102*6236dae4SAndroid Build Coastguard Worker                len = length + 1;
103*6236dae4SAndroid Build Coastguard Worker            endif;
104*6236dae4SAndroid Build Coastguard Worker            if len <= 1;
105*6236dae4SAndroid Build Coastguard Worker                return 0;
106*6236dae4SAndroid Build Coastguard Worker            endif;
107*6236dae4SAndroid Build Coastguard Worker            return %checkr(' ': string: len - 1);  // Trim right
108*6236dae4SAndroid Build Coastguard Worker        end-proc;
109