REPORT ZCOMMENT.
************************************************************************
* This program subtracts the comment lines from a program source.
* To get the line numbers right, run pp before the subtraction.
* It can be useful to document abap developments
************************************************************************
PARAMETERS: PROGRAM LIKE SY-REPID DEFAULT SY-REPID.
DATA :  BEGIN OF SOURCE OCCURS 1000,
     LINE(72),
END OF SOURCE.
DATA: I TYPE I, J TYPE I, K TYPE I, L TYPE I, LNUM(6) TYPE N.
DATA: EMPTY(72) VALUE
'
 '.                                    "Some ugly long line
DATA: P_STATEMENTS LIKE SSTMNT OCCURS 100 WITH HEADER LINE.
DATA: P_TOKENS LIKE STOKEN OCCURS 100 WITH HEADER LINE.
*
READ REPORT PROGRAM INTO SOURCE.
SCAN ABAP-SOURCE SOURCE STATEMENTS INTO P_STATEMENTS  "Comment in chain
                        TOKENS       INTO P_TOKENS.
*
* Remove the statement closing characters
LOOP AT P_STATEMENTS.
  IF P_STATEMENTS-TROW <> 0.
    READ TABLE SOURCE INDEX P_STATEMENTS-TROW.
    SOURCE+P_STATEMENTS-TCOL(1) = ' '.
    MODIFY SOURCE INDEX P_STATEMENTS-TROW.
  ENDIF.
ENDLOOP.
*
* Remove the tokens
LOOP AT P_TOKENS.
  I = P_TOKENS-ROW.
  J = P_TOKENS-COL.
  K = P_TOKENS-LEN - 1.
  L = J + K.
  DO.
    READ TABLE SOURCE INDEX I.
    IF L > 72.                         "Multi line token
      L = L - 72.
      SOURCE+J(72) = EMPTY.
      MODIFY SOURCE INDEX I.
      I = I + 1.
      K = L. J = 0.
    ELSE.
      IF L < 72.
        K = K + 1.
      ENDIF.
      SOURCE+J(K) = EMPTY.
      MODIFY SOURCE INDEX I.
      EXIT.
    ENDIF.
  ENDDO.
ENDLOOP.
*
* Remove ':' (chain statements)
LOOP AT SOURCE.
  CONDENSE SOURCE NO-GAPS.
  IF SOURCE(1) = ':'.
    DELETE SOURCE.
  ENDIF.
ENDLOOP.
*
* Print the result
FORMAT INPUT ON.
LOOP AT SOURCE.
  LNUM = LNUM + 10.
  IF NOT SOURCE IS INITIAL.
    FORMAT INTENSIFIED OFF.FORMAT INVERSE OFF.
    TRANSLATE LNUM USING ' 0'.
    WRITE /(6) LNUM COLOR 2.
    IF SOURCE(1) = '*'.
      FORMAT INTENSIFIED ON.
      WRITE 8 SOURCE COLOR 6.
      FORMAT INTENSIFIED OFF.
    ELSE.
      WRITE 8 SOURCE COLOR 2.
    ENDIF.
  ENDIF.
ENDLOOP.