#!/bin/sh # # Create the source files containing the individual programs # and test data file # cat >removeHTMLtags.cbl < and any intervening characters). * Tectonics: cobc -m removeHTMLtags.cbl ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. removeHTMLtags. ENVIRONMENT DIVISION. CONFIGURATION SECTION. REPOSITORY. FUNCTION ALL INTRINSIC. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. *> Length of the buffer passed from caller: 01 BUFFER-SIZE PIC 9(6) COMP-5. *> Indices for traversing passed string: 01 X1 PIC S9(4) COMP. 01 X2 PIC S9(4) COMP. 01 X3 PIC S9(4) COMP. 01 X4 PIC S9(4) COMP. *> Length of segment of string to preserve: 01 S1L PIC S9(4) COMP. *> Switch to control iteration over string: 01 CLEAN-PASS-SWITCH PIC X VALUE 'N'. 88 CLEAN-PASS VALUE 'Y'. 88 DIRTY-PASS VALUE 'N'. *> Variable to hold buffer during processing: 01 WORK-BUFFER PIC X(32768). LINKAGE SECTION. 01 PASSED-BUFFER PIC X ANY LENGTH. PROCEDURE DIVISION USING PASSED-BUFFER. REMOVE-HTML-TAGS. ****************************************************************** * Retrieve length of passed string. ****************************************************************** CALL 'C\$PARAMSIZE' USING 1 GIVING BUFFER-SIZE END-CALL. ****************************************************************** * If argument passed is entirely spaces, simply return. ****************************************************************** IF PASSED-BUFFER (1:BUFFER-SIZE) = SPACES GOBACK END-IF. * - - - - - - - - - - - - - - - - - - - - - PROGRAM EXIT POINT ****************************************************************** * Passed buffer must not be greater than work buffer in Working- * Storage (the length of which may be changed by recompiling). ****************************************************************** IF BUFFER-SIZE > 32768 MOVE -1 TO RETURN-CODE GOBACK END-IF. * - - - - - - - - - - - - - - - - - - - - - PROGRAM EXIT POINT MOVE PASSED-BUFFER (1:BUFFER-SIZE) TO WORK-BUFFER. ****************************************************************** * Outer PERFORM will continue until no more tags found. First * inner PERFORM searches for opening bracket (<). Second inner * PERFORM searches for closing bracket (>). ****************************************************************** PERFORM WITH TEST AFTER UNTIL CLEAN-PASS SET CLEAN-PASS TO TRUE PERFORM VARYING X1 FROM 1 BY 1 UNTIL X1 > BUFFER-SIZE IF WORK-BUFFER (X1:1) = '<' SET DIRTY-PASS TO TRUE COMPUTE S1L = X1 - 1 PERFORM VARYING X3 FROM X1 BY 1 UNTIL X3 > BUFFER-SIZE IF WORK-BUFFER (X3:1) = '>' COMPUTE X4 = X3 + 1 MOVE CONCATENATE(WORK-BUFFER (1:S1L), WORK-BUFFER (X4:)) TO WORK-BUFFER EXIT PERFORM END-IF END-PERFORM END-IF END-PERFORM END-PERFORM. MOVE WORK-BUFFER (1:BUFFER-SIZE) TO PASSED-BUFFER (1:BUFFER-SIZE). GOBACK. * - - - - - - - - - - - - - - - - - - - - - PROGRAM EXIT POINT END PROGRAM removeHTMLtags. !EOF! # ------------------------------------------------------------------ cat >testSubs.cbl < ' & ' ' & '
' & '