3         PROGRAM-ID.  OrderReport.
  4         AUTHOR.  Alex
  5 
  6         ENVIRONMENT DIVISION.
  7         INPUT-OUTPUT SECTION.
  8         FILE-CONTROL.
  9             SELECT OrderReportFile ASSIGN TO "/tmp/COBOL/OrderReport.dat"
 10                    ORGANIZATION IS LINE SEQUENTIAL.
 11 
 12 
 13         DATA DIVISION.
 14         FILE SECTION.
 15         FD  OrderReportFile.
 16         01  OrderReportRecord.
 17             88 EndOfFile  VALUE HIGH-VALUES.
 18             02 orderline_orders_orderid PIC X(1).
 19             02 orderline_orders_userid PIC X(6).
 20             02 orderline_orders_orderdate PIC X(10).
 21             02 orderline_orders_shipfirstname PIC X(5).
 22             02 orderline_orders_shiplastname PIC X(6).
 23             02 orderline_orders_shipaddr1 PIC X(23).
 24             02 orderline_orders_shipaddr2 PIC X(1).
 25             02 orderline_orders_shipcity PIC X(30).
 26             02 orderline_orders_shipstate PIC X(2).
 27             02 orderline_orders_shipzip PIC X(7).
 28             02 orderline_orders_shipcountry PIC X(3).
 29             02 orderline_orders_billfirstname PIC X(5).
 30             02 orderline_orders_billlastname PIC X(6).
 31             02 orderline_orders_billaddr1 PIC X(23).
 32             02 orderline_orders_billaddr2 PIC X(1).
 33             02 orderline_orders_billcity PIC X(30).
 34             02 orderline_orders_billstate PIC X(2).
 35             02 orderline_orders_billzip PIC X(7).
 36             02 orderline_orders_billcountry PIC X(3).
 37             02 orderline_orders_totalprice PIC X(7).
 38             02 orderline_orders_creditcard PIC X(1).
 39             02 orderline_orders_exprdate PIC X(1).
 40             02 orderline_orders_cardtype PIC X(1).
 41             02 orderline_orders_sourceapp PIC X(3).
 42             02 orderline_account_userid PIC X(6).
 43             02 orderline_account_email PIC X(17).
 44             02 orderline_account_firstname PIC X(5).
 45             02 orderline_account_lastname PIC X(6).
 46             02 orderline_account_acstatus PIC X(2).
 47             02 orderline_account_addr1 PIC X(23).
 48             02 orderline_account_addr2 PIC X(1).
 49             02 orderline_account_city PIC X(30).
 50             02 orderline_account_state PIC X(2).
 51             02 orderline_account_zip PIC X(7).
 52             02 orderline_account_country PIC X(3).
 53             02 orderline_account_phone PIC X(21).
 54             02 orderline_account_langpref PIC X(7).
 55             02 orderline_account_favcategory PIC X(8).
 56             02 orderline_account_mylistopt PIC X(1).
 57             02 orderline_account_banneropt PIC X(1).
 58             02 orderline_account_sourceapp PIC X(3).
 59             02 orderline_country_code PIC X(3).
 60             02 orderline_country_codedesc PIC X(14).
 61             02 orderline_lineitem_orderid PIC X(1).
 62             02 orderline_lineitem_linenum PIC X(2).
 63             02 orderline_lineitem_itemid PIC X(8).
 64             02 orderline_lineitem_quantity PIC X(1).
 65             02 orderline_lineitem_unitprice PIC X(6).
 66             02 orderline_product_productid PIC X(6).
 67             02 orderline_product_catid PIC X(10).
 68             02 orderline_product_prodname PIC X(29).
 69             02 orderline_product_proddesc PIC X(43).
 70             02 orderline_product_prodpic PIC X(44).
 71             02 orderline_category_catid PIC X(10).
 72             02 orderline_category_catorder PIC X(1).
 73             02 orderline_category_catname PIC X(13).
 74             02 orderline_category_catdesc PIC X(1).
 75             02 orderline_category_catpic PIC X(30).
 76             02 orderline_item_itemid PIC X(8).
 77             02 orderline_item_productid PIC X(6).
 78             02 orderline_item_listprice PIC X(6).
 79             02 orderline_item_unitcost PIC X(3).
 80             02 orderline_item_supplier PIC X(1).
 81             02 orderline_item_itstatus PIC X(1).
 82             02 orderline_item_attr1 PIC X(18).
 83             02 orderline_item_attr2 PIC X(1).
 84             02 orderline_item_attr3 PIC X(1).
 85             02 orderline_item_attr4 PIC X(1).
 86             02 orderline_item_attr5 PIC X(1).
 87 
 88         WORKING-STORAGE SECTION.
 89 
 90        01 configuration_handler    USAGE POINTER.
 91        01 content_handler    USAGE POINTER.
 92        01 zero_terminated_string PIC X(100).
 93        01 field_name PIC X(100).
 94        01 field_value PIC X(100).
 95 
 96         PROCEDURE DIVISION.
 97         Begin.
 98             CALL "createRuntimeConfiguration" USING "OrderReport.4rp" & x"00" RETURNING configuration_handler.
 99             CALL "selectDevice" USING BY VALUE configuration_handler 0.
100             CALL "configureDistributedProcessing" USING BY VALUE configuration_handler BY REFERENCE "10.0.0.51" & x"00" BY VALUE 6401.
101             CALL "createContentHandler" USING BY VALUE configuration_handler RETURNING content_handler.
102             CALL "destroyRuntimeConfiguration" USING BY VALUE configuration_handler.
103 
104             CALL "startElement" USING BY VALUE content_handler BY REFERENCE "Report" & x"00".
105             CALL "startElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
106             CALL "startElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
107             CALL "startElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
108             OPEN INPUT OrderReportFile.
109             READ OrderReportFile
110                  AT END SET EndOfFile TO TRUE
111             END-READ.
112             PERFORM ShipOrderReportRow
113                     UNTIL EndOfFile.
114             CALL "endElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
115             CALL "endElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
116             CALL "endElement" USING BY VALUE content_handler BY REFERENCE "Group" & x"00".
117             CALL "endElement" USING BY VALUE content_handler BY REFERENCE "Report" & x"00".
118             CALL "destroy_content_handler" USING BY VALUE content_handler.
119             CLOSE OrderReportFile
120             STOP RUN.
121 
122 
123         ShipOrderReportRow.
124             CALL "startElement" USING BY VALUE content_handler BY REFERENCE "OnEveryRow" & x"00".
125 
126             MOVE "orderline.orders.orderid" TO field_name.
127             MOVE orderline_orders_orderid TO field_value.
128             PERFORM ShipOrderReportField
129             MOVE "orderline.orders.userid" TO field_name.
130             MOVE orderline_orders_userid TO field_value.
131             PERFORM ShipOrderReportField
132             MOVE "orderline.orders.orderdate" TO field_name.
133             MOVE orderline_orders_orderdate TO field_value.
134             PERFORM ShipOrderReportField
135             MOVE "orderline.orders.shipfirstname" TO field_name.
136             MOVE orderline_orders_shipfirstname TO field_value.
137             PERFORM ShipOrderReportField
138             MOVE "orderline.orders.shiplastname" TO field_name.
139             MOVE orderline_orders_shiplastname TO field_value.
140             PERFORM ShipOrderReportField
141             MOVE "orderline.orders.shipaddr1" TO field_name.
142             MOVE orderline_orders_shipaddr1 TO field_value.
143             PERFORM ShipOrderReportField
144             MOVE "orderline.orders.shipaddr2" TO field_name.
145             MOVE orderline_orders_shipaddr2 TO field_value.
146             PERFORM ShipOrderReportField
147             MOVE "orderline.orders.shipcity" TO field_name.
148             MOVE orderline_orders_shipcity TO field_value.
149             PERFORM ShipOrderReportField
150             MOVE "orderline.orders.shipstate" TO field_name.
151             MOVE orderline_orders_shipstate TO field_value.
152             PERFORM ShipOrderReportField
153             MOVE "orderline.orders.shipzip" TO field_name.
154             MOVE orderline_orders_shipzip TO field_value.
155             PERFORM ShipOrderReportField
156             MOVE "orderline.orders.shipcountry" TO field_name.
157             MOVE orderline_orders_shipcountry TO field_value.
158             PERFORM ShipOrderReportField
159             MOVE "orderline.orders.billfirstname" TO field_name.
160             MOVE orderline_orders_billfirstname TO field_value.
161             PERFORM ShipOrderReportField
162             MOVE "orderline.orders.billlastname" TO field_name.
163             MOVE orderline_orders_billlastname TO field_value.
164             PERFORM ShipOrderReportField
165             MOVE "orderline.orders.billaddr1" TO field_name.
166             MOVE orderline_orders_billaddr1 TO field_value.
167             PERFORM ShipOrderReportField
168             MOVE "orderline.orders.billaddr2" TO field_name.
169             MOVE orderline_orders_billaddr2 TO field_value.
170             PERFORM ShipOrderReportField
171             MOVE "orderline.orders.billcity" TO field_name.
172             MOVE orderline_orders_billcity TO field_value.
173             PERFORM ShipOrderReportField
174             MOVE "orderline.orders.billstate" TO field_name.
175             MOVE orderline_orders_billstate TO field_value.
176             PERFORM ShipOrderReportField
177             MOVE "orderline.orders.billzip" TO field_name.
178             MOVE orderline_orders_billzip TO field_value.
179             PERFORM ShipOrderReportField
180             MOVE "orderline.orders.billcountry" TO field_name.
181             MOVE orderline_orders_billcountry TO field_value.
182             PERFORM ShipOrderReportField
183             MOVE "orderline.orders.totalprice" TO field_name.
184             MOVE orderline_orders_totalprice TO field_value.
185             PERFORM ShipOrderReportField
186             MOVE "orderline.orders.creditcard" TO field_name.
187             MOVE orderline_orders_creditcard TO field_value.
188             PERFORM ShipOrderReportField
189             MOVE "orderline.orders.exprdate" TO field_name.
190             MOVE orderline_orders_exprdate TO field_value.
191             PERFORM ShipOrderReportField
192             MOVE "orderline.orders.cardtype" TO field_name.
193             MOVE orderline_orders_cardtype TO field_value.
194             PERFORM ShipOrderReportField
195             MOVE "orderline.orders.sourceapp" TO field_name.
196             MOVE orderline_orders_sourceapp TO field_value.
197             PERFORM ShipOrderReportField
198             MOVE "orderline.account.userid" TO field_name.
199             MOVE orderline_account_userid TO field_value.
200             PERFORM ShipOrderReportField
201             MOVE "orderline.account.email" TO field_name.
202             MOVE orderline_account_email TO field_value.
203             PERFORM ShipOrderReportField
204             MOVE "orderline.account.firstname" TO field_name.
205             MOVE orderline_account_firstname TO field_value.
206             PERFORM ShipOrderReportField
207             MOVE "orderline.account.lastname" TO field_name.
208             MOVE orderline_account_lastname TO field_value.
209             PERFORM ShipOrderReportField
210             MOVE "orderline.account.acstatus" TO field_name.
211             MOVE orderline_account_acstatus TO field_value.
212             PERFORM ShipOrderReportField
213             MOVE "orderline.account.addr1" TO field_name.
214             MOVE orderline_account_addr1 TO field_value.
215             PERFORM ShipOrderReportField
216             MOVE "orderline.account.addr2" TO field_name.
217             MOVE orderline_account_addr2 TO field_value.
218             PERFORM ShipOrderReportField
219             MOVE "orderline.account.city" TO field_name.
220             MOVE orderline_account_city TO field_value.
221             PERFORM ShipOrderReportField
222             MOVE "orderline.account.state" TO field_name.
223             MOVE orderline_account_state TO field_value.
224             PERFORM ShipOrderReportField
225             MOVE "orderline.account.zip" TO field_name.
226             MOVE orderline_account_zip TO field_value.
227             PERFORM ShipOrderReportField
228             MOVE "orderline.account.country" TO field_name.
229             MOVE orderline_account_country TO field_value.
230             PERFORM ShipOrderReportField
231             MOVE "orderline.account.phone" TO field_name.
232             MOVE orderline_account_phone TO field_value.
233             PERFORM ShipOrderReportField
234             MOVE "orderline.account.langpref" TO field_name.
235             MOVE orderline_account_langpref TO field_value.
236             PERFORM ShipOrderReportField
237             MOVE "orderline.account.favcategory" TO field_name.
238             MOVE orderline_account_favcategory TO field_value.
239             PERFORM ShipOrderReportField
240             MOVE "orderline.account.mylistopt" TO field_name.
241             MOVE orderline_account_mylistopt TO field_value.
242             PERFORM ShipOrderReportField
243             MOVE "orderline.account.banneropt" TO field_name.
244             MOVE orderline_account_banneropt TO field_value.
245             PERFORM ShipOrderReportField
246             MOVE "orderline.account.sourceapp" TO field_name.
247             MOVE orderline_account_sourceapp TO field_value.
248             PERFORM ShipOrderReportField
249             MOVE "orderline.country.code" TO field_name.
250             MOVE orderline_country_code TO field_value.
251             PERFORM ShipOrderReportField
252             MOVE "orderline.country.codedesc" TO field_name.
253             MOVE orderline_country_codedesc TO field_value.
254             PERFORM ShipOrderReportField
255             MOVE "orderline.lineitem.orderid" TO field_name.
256             MOVE orderline_lineitem_orderid TO field_value.
257             PERFORM ShipOrderReportField
258             MOVE "orderline.lineitem.linenum" TO field_name.
259             MOVE orderline_lineitem_linenum TO field_value.
260             PERFORM ShipOrderReportField
261             MOVE "orderline.lineitem.itemid" TO field_name.
262             MOVE orderline_lineitem_itemid TO field_value.
263             PERFORM ShipOrderReportField
264             MOVE "orderline.lineitem.quantity" TO field_name.
265             MOVE orderline_lineitem_quantity TO field_value.
266             PERFORM ShipOrderReportField
267             MOVE "orderline.lineitem.unitprice" TO field_name.
268             MOVE orderline_lineitem_unitprice TO field_value.
269             PERFORM ShipOrderReportField
270             MOVE "orderline.product.productid" TO field_name.
271             MOVE orderline_product_productid TO field_value.
272             PERFORM ShipOrderReportField
273             MOVE "orderline.product.catid" TO field_name.
274             MOVE orderline_product_catid TO field_value.
275             PERFORM ShipOrderReportField
276             MOVE "orderline.product.prodname" TO field_name.
277             MOVE orderline_product_prodname TO field_value.
278             PERFORM ShipOrderReportField
279             MOVE "orderline.product.proddesc" TO field_name.
280             MOVE orderline_product_proddesc TO field_value.
281             PERFORM ShipOrderReportField
282             MOVE "orderline.product.prodpic" TO field_name.
283             MOVE orderline_product_prodpic TO field_value.
284             PERFORM ShipOrderReportField
285             MOVE "orderline.category.catid" TO field_name.
286             MOVE orderline_category_catid TO field_value.
287             PERFORM ShipOrderReportField
288             MOVE "orderline.category.catorder" TO field_name.
289             MOVE orderline_category_catorder TO field_value.
290             PERFORM ShipOrderReportField
291             MOVE "orderline.category.catname" TO field_name.
292             MOVE orderline_category_catname TO field_value.
293             PERFORM ShipOrderReportField
294             MOVE "orderline.category.catdesc" TO field_name.
295             MOVE orderline_category_catdesc TO field_value.
296             PERFORM ShipOrderReportField
297             MOVE "orderline.category.catpic" TO field_name.
298             MOVE orderline_category_catpic TO field_value.
299             PERFORM ShipOrderReportField
300             MOVE "orderline.item.itemid" TO field_name.
301             MOVE orderline_item_itemid TO field_value.
302             PERFORM ShipOrderReportField
303             MOVE "orderline.item.productid" TO field_name.
304             MOVE orderline_item_productid TO field_value.
305             PERFORM ShipOrderReportField
306             MOVE "orderline.item.listprice" TO field_name.
307             MOVE orderline_item_listprice TO field_value.
308             PERFORM ShipOrderReportField
309             MOVE "orderline.item.unitcost" TO field_name.
310             MOVE orderline_item_unitcost TO field_value.
311             PERFORM ShipOrderReportField
312             MOVE "orderline.item.supplier" TO field_name.
313             MOVE orderline_item_supplier TO field_value.
314             PERFORM ShipOrderReportField
315             MOVE "orderline.item.itstatus" TO field_name.
316             MOVE orderline_item_itstatus TO field_value.
317             PERFORM ShipOrderReportField
318             MOVE "orderline.item.attr1" TO field_name.
319             MOVE orderline_item_attr1 TO field_value.
320             PERFORM ShipOrderReportField
321             MOVE "orderline.item.attr2" TO field_name.
322             MOVE orderline_item_attr2 TO field_value.
323             PERFORM ShipOrderReportField
324             MOVE "orderline.item.attr3" TO field_name.
325             MOVE orderline_item_attr3 TO field_value.
326             PERFORM ShipOrderReportField
327             MOVE "orderline.item.attr4" TO field_name.
328             MOVE orderline_item_attr4 TO field_value.
329             PERFORM ShipOrderReportField
330             MOVE "orderline.item.attr5" TO field_name.
331             MOVE orderline_item_attr5 TO field_value.
332             PERFORM ShipOrderReportField
333             MOVE "lineitemprice" TO field_name.
334             MOVE "0" TO field_value.
335             PERFORM ShipOrderReportField
336             MOVE "overalltotal" TO field_name.
337             MOVE "0" TO field_value.
338             PERFORM ShipOrderReportField
339             MOVE "usertotal" TO field_name.
340             MOVE "0" TO field_value.
341             PERFORM ShipOrderReportField
342             MOVE "ordertotal" TO field_name.
343             MOVE "0" TO field_value.
344             PERFORM ShipOrderReportField
345 
346             CALL "endElement" USING BY VALUE content_handler BY REFERENCE "OnEveryRow" & x"00".
347             READ OrderReportFile
348                   AT END SET EndOfFile TO TRUE
349             END-READ.
350 
351 
352         ShipOrderReportField SECTION.
353             STRING field_name
354                 DELIMITED BY SPACE
355                 X"00" DELIMITED BY SIZE
356                 INTO zero_terminated_string
357             CALL "startElement" USING BY VALUE content_handler BY REFERENCE zero_terminated_string.
358             STRING field_value
359                 DELIMITED BY SPACE
360                 X"00" DELIMITED BY SIZE
361                 INTO zero_terminated_string
362             CALL "characters" USING BY VALUE content_handler BY REFERENCE zero_terminated_string.
363             STRING field_name
364                 DELIMITED BY SPACE
365                 X"00" DELIMITED BY SIZE
366                 INTO zero_terminated_string
367             CALL "endElement" USING BY VALUE content_handler BY REFERENCE zero_terminated_string.
368