Problem:
If you have migrated an application from Windows to UNIX/Linux, which uses line drawing (to draw boxes etc), you may find that it doesn't work as expected.
Under Windows, you may have inserted the specific characters used to draw (corners, vertical and horizontal lines etc) into working storage fields, or your screen section, and displayed these directly onto the screen. If you port these to a UNIX or Linux environment, the characters used for drawing may not be correctly represented, the possible exception being if you use ansi emulation.
Resolution:
The best way to solve this, is to use the CBL_GET_SCR_LINE_DRAW library routine. This will load the characters required for line/box drawing into working-storage screen section fields, for manual drawing. This allows you to load the required characters without needing to be concerned with the terminal emulation being used, and provides a platform independent way (including Windows) of drawing boxes.
In the original Windows program the characters may have been represented something like:
*
01 BORDER-DATA.
05 BD-TOP-L PIC X VALUE "ú".
05 BD-TOP-R PIC X VALUE "¿".
05 BD-BOT-L PIC X VALUE "Á".
05 BD-BOT-R PIC X VALUE "Ú".
05 BD-VER PIC X VALUE "³".
05 BD-HOR PIC X VALUE "ä".
These would then display as lines and corners etc.
Here is a full program, showing how to use the CBL_GET_SCR_LINE_DRAW routine.
WORKING-STORAGE SECTION.
01 FUNCTION-CODE PIC X COMP-X.
01 SINGLE-BYTE-TABLE.
05 SB-LINE-DRAW-CODE PIC X COMP-X.
05 PIC X.
05 SB-LINE-DRAW-CHAR PIC X OCCURS 256.
05 SB-LINE-DRAW-CHAR PIC XX OCCURS 256.
01 STATUS-CODE PIC X(2) COMP-5.
01 WS-INPUT PIC X.
01 BOX-CO-ORDINATES.
05 ROW-FROM PIC 99.
05 ROW-TO PIC 99.
05 COL-FROM PIC 99.
05 COL-TO PIC 99.
01 XX-WHICH-COLOR.
05 WHICH-COLOR PIC 9.
01 BOX-ROWCOL.
05 BOX-ROW PIC 99.
05 BOX-COL PIC 99.
01 BORDER-DATA.
05 BD-TOP-L PIC X.
05 BD-TOP-R PIC X.
05 BD-BOT-L PIC X.
05 BD-BOT-R PIC X.
05 BD-V PIC X.
05 BD-H PIC X.
*01 BORDER-DATA. As directly represented for Windows screens
* 05 BD-TOP-L PIC X VALUE "ú".
* 05 BD-TOP-R PIC X VALUE "¿".
* 05 BD-BOT-L PIC X VALUE "Á".
* 05 BD-BOT-R PIC X VALUE "Ú".
* 05 BD-V PIC X VALUE "³".
* 05 BD-H PIC X VALUE "ä".
01 CLR-BOX-LINE.
05 BOX-LINE PIC X(80) VALUE SPACES.
01 FROM-ROW PIC 99.
01 TO-ROW PIC 99.
01 FROM-COL PIC 99.
01 TO-COL PIC 99.
PROCEDURE DIVISION.
STEP-1.
MOVE 0 TO FUNCTION-CODE.
CALL "CBL_GET_SCR_LINE_DRAW" USING FUNCTION-CODE
SINGLE-BYTE-TABLE
RETURNING STATUS-CODE.
MOVE SB-LINE-DRAW-CHAR(17) TO BD-TOP-L.
MOVE SB-LINE-DRAW-CHAR(20) TO BD-TOP-R.
MOVE SB-LINE-DRAW-CHAR(65) TO BD-BOT-L.
MOVE SB-LINE-DRAW-CHAR(68) TO BD-BOT-R.
MOVE SB-LINE-DRAW-CHAR(80) TO BD-V.
MOVE SB-LINE-DRAW-CHAR(5) TO BD-H.
DISPLAY SPACES UPON CRT.
*Co-ordinates below are simple ro and column from and to positions
*In this case we're going to draw 2 boxes, one inside the other
MOVE 01240279 TO BOX-CO-ORDINATES.
PERFORM DRAW-BOX.
MOVE 10201070 TO BOX-CO-ORDINATES.
PERFORM DRAW-BOX.
DISPLAY "Box Test" AT 0335 WITH REVERSE-VIDEO.
DISPLAY "Press Enter to EXIT " AT 1925.
ACCEPT WS-INPUT AT 1950.
STOP RUN.
DRAW-BOX SECTION.
CC-DRAW-BOX.
PERFORM SHOW-TOP-BORDER.
MOVE ROW-FROM TO BOX-ROW.
ADD 1 TO BOX-ROW.
PERFORM SHOW-VER
UNTIL BOX-ROW = ROW-TO.
PERFORM SHOW-BOT-BORDER.
PERFORM CLEAR-BOX.
SHOW-TOP-BORDER SECTION.
CC-SHOW-TOP-BORDER.
MOVE ROW-FROM TO BOX-ROW.
MOVE COL-FROM TO BOX-COL.
DISPLAY BD-TOP-L AT BOX-ROWCOL.
MOVE COL-FROM TO BOX-COL.
ADD 1 TO BOX-COL.
PERFORM SHOW-HOR
UNTIL BOX-COL = COL-TO.
MOVE COL-TO TO BOX-COL.
DISPLAY BD-TOP-R AT BOX-ROWCOL.
SHOW-VER SECTION.
CC-SHOW-VER.
MOVE COL-FROM TO BOX-COL.
DISPLAY BD-V AT BOX-ROWCOL.
MOVE COL-TO TO BOX-COL.
DISPLAY BD-V AT BOX-ROWCOL.
ADD 1 TO BOX-ROW.
SHOW-BOT-BORDER SECTION.
CC-SHOW-BOT-BORDER.
MOVE ROW-TO TO BOX-ROW.
MOVE COL-FROM TO BOX-COL.
DISPLAY BD-BOT-L AT BOX-ROWCOL.
MOVE COL-FROM TO BOX-COL.
ADD 1 TO BOX-COL.
PERFORM SHOW-HOR
UNTIL BOX-COL = COL-TO.
MOVE COL-TO TO BOX-COL.
DISPLAY BD-BOT-R AT BOX-ROWCOL.
SHOW-HOR SECTION.
CC-SHOW-HOR.
DISPLAY BD-H AT BOX-ROWCOL.
ADD 1 TO BOX-COL.