[tt]
Example 1A; Remove spaces without utilizing go to, per byte
performs or per-byte moves. For compilers that allow
intrafield moves utilizing reference modifiers.
Compiled 11jun2004 on VC820R-P3 with Micro Focus COBOL2
Version 3.0.23
[/tt]
Code:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMP1A.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WK-LOCAL-STOR.
02 PACK-DATA PIC X(999).
02 PACK-LEN PIC 999.
02 PACK-PTR PIC 999.
PROCEDURE DIVISION.
OOOO-INIT.
DISPLAY SPACES AT 0101 WITH FOREGROUND-COLOR IS 7
BLANK SCREEN
END-DISPLAY
INITIALIZE WK-LOCAL-STOR
MOVE "Remove All Of My Spaces" TO PACK-DATA.
5000-PACKME.
INSPECT FUNCTION REVERSE(PACK-DATA)
TALLYING PACK-LEN FOR LEADING SPACE
SUBTRACT PACK-LEN FROM 999 GIVING PACK-LEN
PERFORM UNTIL PACK-PTR NOT LESS THAN PACK-LEN
ADD 0 TO 0 GIVING PACK-PTR
INSPECT PACK-DATA TALLYING PACK-PTR FOR CHARACTERS
BEFORE INITIAL SPACE
ADD 1 TO PACK-PTR
IF PACK-PTR LESS THAN PACK-LEN
THEN
MOVE PACK-DATA
((PACK-PTR + 1):(PACK-LEN - PACK-PTR))
TO PACK-DATA (PACK-PTR:)
MOVE SPACE TO PACK-DATA (PACK-LEN:1)
SUBTRACT 1 FROM PACK-LEN
END-IF
END-PERFORM.
8000-DISPLAY.
DISPLAY PACK-DATA AT 0502
DISPLAY ' ' AT 0601
END-DISPLAY.
9999-END.
STOP RUN.
[tt]
Example 1B; Remove spaces without utilizing go to, per byte
performs or per-byte moves. For compilers that do not allow
intrafield moves utilizing reference modifiers.
Compiled 11jun2004 on D875PBZ-P4 with Fujitsu COBOL97
Version 6.1L10
[/tt]
Code:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMP2B.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WK-LOCAL-STOR.
02 PACK-IN PIC X(999).
02 PACK-OUT PIC X(999).
02 PACK-LEN PIC 999.
02 PACK-PTR PIC 999.
PROCEDURE DIVISION.
OOOO-INIT.
INITIALIZE WK-LOCAL-STOR
MOVE "Remove All Of My Spaces"
TO PACK-IN PACK-OUT.
5000-PACKME.
INSPECT FUNCTION REVERSE(PACK-IN) TALLYING PACK-LEN
FOR LEADING SPACE
SUBTRACT PACK-LEN FROM 999 GIVING PACK-LEN
PERFORM UNTIL PACK-PTR NOT LESS THAN PACK-LEN
ADD 0 TO 0 GIVING PACK-PTR
INSPECT PACK-IN TALLYING PACK-PTR FOR
CHARACTERS BEFORE INITIAL SPACE
ADD 1 TO PACK-PTR
IF PACK-PTR LESS THAN PACK-LEN
THEN
MOVE PACK-IN ((PACK-PTR + 1):) TO
PACK-OUT (PACK-PTR:)
MOVE SPACE TO PACK-OUT (PACK-LEN:1)
SUBTRACT 1 FROM PACK-LEN
MOVE PACK-OUT TO PACK-IN
END-IF
END-PERFORM.
8000-DISPLAY.
DISPLAY PACK-OUT
END-DISPLAY.
9999-END.
STOP RUN.
[tt]
Example 2A; Remove spaces without utilizing go to, per byte
performs, per-byte moves or redundant inspects. For
compilers that allow intrafield moves utilizing reference
modifiers.
Compiled 11jun2004 on VC820R-P3 with Micro Focus COBOL2
Version 3.0.23
[/tt]
Code:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMP2A.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WK-LOCAL-STOR.
02 PACK-DATA PIC X(999).
02 PACK-LEN PIC 999.
02 PACK-PTR PIC 999.
02 PACK-CNT PIC 999.
PROCEDURE DIVISION.
OOOO-INIT.
DISPLAY SPACES AT 0101 WITH FOREGROUND-COLOR IS 7
BLANK SCREEN
END-DISPLAY
INITIALIZE WK-LOCAL-STOR
ADD 1 TO PACK-PTR
MOVE "Remove All Of My Spaces" TO PACK-DATA.
5000-PACKME.
INSPECT FUNCTION REVERSE(PACK-DATA)
TALLYING PACK-LEN FOR LEADING SPACE
SUBTRACT PACK-LEN FROM 999 GIVING PACK-LEN
PERFORM UNTIL PACK-PTR NOT LESS THAN PACK-LEN
ADD 0 TO 0 GIVING PACK-CNT
INSPECT PACK-DATA (PACK-PTR:) TALLYING
PACK-CNT FOR CHARACTERS BEFORE INITIAL SPACE
ADD PACK-CNT TO PACK-PTR
IF PACK-PTR LESS THAN PACK-LEN
THEN
MOVE PACK-DATA
((PACK-PTR + 1):(PACK-LEN - PACK-PTR))
TO PACK-DATA (PACK-PTR:)
MOVE SPACE TO PACK-DATA (PACK-LEN:1)
SUBTRACT 1 FROM PACK-LEN
END-IF
END-PERFORM.
8000-DISPLAY.
DISPLAY PACK-DATA at 0502
END-DISPLAY.
9999-END.
STOP RUN.
[tt]
Example 2B; Remove spaces without utilizing go to, per byte
performs, per-byte moves or redundant inspects. For
compilers do not allow intrafield moves utilizing reference
modifiers.
Compiled 11jun2004 on D875PBZ-P4 with Fujitsu COBOL97
Version 6.1L10
[/tt]
Code:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMP2B.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WK-LOCAL-STOR.
02 PACK-IN PIC X(999).
02 PACK-OUT PIC X(999).
02 PACK-LEN PIC 999.
02 PACK-PTR PIC 999.
02 PACK-CNT PIC 999.
PROCEDURE DIVISION.
OOOO-INIT.
INITIALIZE WK-LOCAL-STOR
ADD 1 TO 0 GIVING PACK-PTR
MOVE "Remove All Of My Spaces" TO PACK-IN PACK-OUT.
5000-PACKME.
INSPECT FUNCTION REVERSE(PACK-IN) TALLYING
PACK-LEN FOR LEADING SPACE
SUBTRACT PACK-LEN FROM 999 GIVING PACK-LEN.
PERFORM UNTIL PACK-PTR NOT LESS THAN PACK-LEN
ADD 0 TO 0 GIVING PACK-CNT
INSPECT PACK-IN (PACK-PTR:) TALLYING PACK-CNT FOR
CHARACTERS BEFORE INITIAL SPACE
ADD PACK-CNT TO PACK-PTR
IF PACK-PTR LESS THAN PACK-LEN
THEN
MOVE PACK-IN ((PACK-PTR + 1):) TO
PACK-OUT (PACK-PTR:)
MOVE SPACE TO PACK-OUT (PACK-LEN:1)
SUBTRACT 1 FROM PACK-LEN
MOVE PACK-OUT TO PACK-IN
END-IF
END-PERFORM.
8000-DISPLAY.
DISPLAY PACK-OUT
END-DISPLAY.
9999-END.
STOP RUN.