The BLINK attribute in COBOL is a powerful screen display enhancement feature used to draw user attention to critical information, warnings, errors, or important status messages in interactive applications. This visual attribute causes text or fields to alternate between visible and invisible states at regular intervals, creating a flashing effect that immediately catches the user's eye. BLINK is essential for creating effective user interfaces in terminal-based applications, system monitoring displays, alert systems, and any scenario where urgent information must be prominently highlighted to ensure user awareness and appropriate response.
The BLINK attribute is a screen formatting feature that makes text flash on and off at regular intervals. It's typically used in screen section definitions to highlight critical information, warnings, or status indicators that require immediate user attention. The blinking effect is controlled by the terminal or display system and provides a dynamic visual cue.
12345678910111213141516SCREEN SECTION. 01 ALERT-SCREEN. 05 LINE 5 COL 20 VALUE "SYSTEM ALERT" BLINK HIGHLIGHT. 05 LINE 7 COL 10 VALUE "ERROR: Database connection lost!" BLINK FOREGROUND-COLOR 4. 05 LINE 9 COL 10 VALUE "Press F1 for help" BLINK. 01 STATUS-DISPLAY. 05 LINE 1 COL 60 VALUE "ONLINE" BLINK WHEN WS-SYSTEM-DOWN. 05 LINE 2 COL 60 VALUE "BACKUP IN PROGRESS" BLINK WHEN WS-BACKUP-RUNNING. PROCEDURE DIVISION. DISPLAY-ALERT. DISPLAY ALERT-SCREEN. ACCEPT DUMMY-FIELD.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576*> Comprehensive error handling with visual feedback DATA DIVISION. WORKING-STORAGE SECTION. 01 ERROR-CONDITIONS. 05 CRITICAL-ERROR PIC X VALUE 'N'. 88 CRITICAL-ERR VALUE 'Y'. 05 WARNING-CONDITION PIC X VALUE 'N'. 88 WARNING-ACTIVE VALUE 'Y'. 05 SYSTEM-STATUS PIC X VALUE 'N'. 88 SYSTEM-DOWN VALUE 'Y'. 01 ERROR-MESSAGES. 05 CRITICAL-MSG PIC X(60) VALUE SPACES. 05 WARNING-MSG PIC X(60) VALUE SPACES. 05 STATUS-MSG PIC X(40) VALUE SPACES. SCREEN SECTION. 01 ERROR-ALERT-SCREEN. 05 BLANK SCREEN. 05 LINE 3 COL 25 VALUE "SYSTEM STATUS MONITOR". 05 LINE 6 COL 10 FROM CRITICAL-MSG BLINK HIGHLIGHT FOREGROUND-COLOR 4 WHEN CRITICAL-ERR. 05 LINE 8 COL 10 FROM WARNING-MSG BLINK FOREGROUND-COLOR 3 WHEN WARNING-ACTIVE. 05 LINE 20 COL 10 FROM STATUS-MSG BLINK WHEN SYSTEM-DOWN. 01 DATA-ENTRY-VALIDATION. 05 LINE 15 COL 5 VALUE "Customer ID:" REQUIRED. 05 LINE 15 COL 18 PIC 9(6) TO CUSTOMER-ID. 05 LINE 16 COL 5 VALUE "INVALID ID - REQUIRED FIELD" BLINK FOREGROUND-COLOR 4 WHEN INVALID-CUSTOMER-ID. PROCEDURE DIVISION. MONITOR-SYSTEM-STATUS. PERFORM UNTIL USER-EXIT PERFORM CHECK-SYSTEM-CONDITIONS PERFORM UPDATE-STATUS-DISPLAY PERFORM DISPLAY-ALERTS CALL "SYSTEM_DELAY" USING 1000 *> 1 second delay END-PERFORM. CHECK-SYSTEM-CONDITIONS. *> Check for critical errors CALL "CHECK_DATABASE_CONNECTION" USING WS-DB-STATUS. IF WS-DB-STATUS NOT = 0 SET CRITICAL-ERR TO TRUE MOVE "CRITICAL: Database connection failed!" TO CRITICAL-MSG ELSE SET CRITICAL-ERR TO FALSE MOVE SPACES TO CRITICAL-MSG END-IF. *> Check for warnings CALL "CHECK_DISK_SPACE" USING WS-DISK-PERCENT. IF WS-DISK-PERCENT > 90 SET WARNING-ACTIVE TO TRUE STRING "WARNING: Disk space " WS-DISK-PERCENT "% full" DELIMITED BY SIZE INTO WARNING-MSG END-STRING ELSE SET WARNING-ACTIVE TO FALSE MOVE SPACES TO WARNING-MSG END-IF. DISPLAY-ALERTS. DISPLAY ERROR-ALERT-SCREEN. *> Play alert sound for critical errors IF CRITICAL-ERR CALL "SYSTEM_BEEP" USING 3 *> 3 beeps END-IF.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273*> Dynamic menu system with visual feedback DATA DIVISION. WORKING-STORAGE SECTION. 01 MENU-CONTROL. 05 SELECTED-OPTION PIC 9 VALUE 1. 05 INVALID-SELECTION PIC X VALUE 'N'. 88 INVALID-CHOICE VALUE 'Y'. 05 TIME-WARNING PIC X VALUE 'N'. 88 SESSION-TIMEOUT VALUE 'Y'. 01 MENU-OPTIONS. 05 OPTION-1 PIC X(30) VALUE "1. Customer Management". 05 OPTION-2 PIC X(30) VALUE "2. Order Processing". 05 OPTION-3 PIC X(30) VALUE "3. Reports". 05 OPTION-4 PIC X(30) VALUE "4. System Administration". 05 OPTION-5 PIC X(30) VALUE "5. Exit". SCREEN SECTION. 01 MAIN-MENU-SCREEN. 05 BLANK SCREEN. 05 LINE 2 COL 30 VALUE "MAIN MENU SYSTEM" HIGHLIGHT. 05 LINE 5 COL 20 FROM OPTION-1 BLINK WHEN SELECTED-OPTION = 1. 05 LINE 6 COL 20 FROM OPTION-2 BLINK WHEN SELECTED-OPTION = 2. 05 LINE 7 COL 20 FROM OPTION-3 BLINK WHEN SELECTED-OPTION = 3. 05 LINE 8 COL 20 FROM OPTION-4 BLINK WHEN SELECTED-OPTION = 4. 05 LINE 9 COL 20 FROM OPTION-5 BLINK WHEN SELECTED-OPTION = 5. 05 LINE 12 COL 20 VALUE "Enter your choice (1-5):". 05 LINE 12 COL 43 PIC 9 TO WS-MENU-INPUT. 05 LINE 15 COL 15 VALUE "INVALID SELECTION - TRY AGAIN" BLINK FOREGROUND-COLOR 4 WHEN INVALID-CHOICE. 05 LINE 20 COL 10 VALUE "SESSION WILL EXPIRE IN 60 SECONDS" BLINK FOREGROUND-COLOR 3 WHEN SESSION-TIMEOUT. PROCEDURE DIVISION. DISPLAY-INTERACTIVE-MENU. PERFORM UNTIL SELECTED-OPTION = 5 SET INVALID-CHOICE TO FALSE PERFORM DISPLAY-MENU-SCREEN PERFORM VALIDATE-MENU-SELECTION IF NOT INVALID-CHOICE PERFORM EXECUTE-MENU-OPTION END-IF END-PERFORM. DISPLAY-MENU-SCREEN. PERFORM CHECK-SESSION-TIMEOUT DISPLAY MAIN-MENU-SCREEN. ACCEPT WS-MENU-INPUT. VALIDATE-MENU-SELECTION. IF WS-MENU-INPUT < 1 OR WS-MENU-INPUT > 5 SET INVALID-CHOICE TO TRUE MOVE WS-MENU-INPUT TO SELECTED-OPTION ELSE MOVE WS-MENU-INPUT TO SELECTED-OPTION END-IF. CHECK-SESSION-TIMEOUT. CALL "GET_SESSION_TIME" USING WS-SESSION-MINUTES. IF WS-SESSION-MINUTES > 50 SET SESSION-TIMEOUT TO TRUE ELSE SET SESSION-TIMEOUT TO FALSE END-IF.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106*> Real-time processing status with visual indicators DATA DIVISION. WORKING-STORAGE SECTION. 01 PROCESSING-STATUS. 05 RECORDS-PROCESSED PIC 9(8) VALUE ZERO. 05 TOTAL-RECORDS PIC 9(8) VALUE ZERO. 05 PERCENT-COMPLETE PIC 999 VALUE ZERO. 05 PROCESSING-ACTIVE PIC X VALUE 'N'. 88 PROCESSING VALUE 'Y'. 05 ERROR-COUNT PIC 9(5) VALUE ZERO. 01 STATUS-INDICATORS. 05 PROGRESS-BAR PIC X(50) VALUE SPACES. 05 STATUS-MESSAGE PIC X(60) VALUE SPACES. SCREEN SECTION. 01 PROGRESS-SCREEN. 05 BLANK SCREEN. 05 LINE 2 COL 25 VALUE "DATA PROCESSING STATUS". 05 LINE 5 COL 10 VALUE "Records Processed:". 05 LINE 5 COL 30 FROM RECORDS-PROCESSED. 05 LINE 6 COL 10 VALUE "Total Records:". 05 LINE 6 COL 30 FROM TOTAL-RECORDS. 05 LINE 7 COL 10 VALUE "Percent Complete:". 05 LINE 7 COL 30 FROM PERCENT-COMPLETE. 05 LINE 7 COL 34 VALUE "%". 05 LINE 9 COL 10 VALUE "Progress:". 05 LINE 9 COL 20 FROM PROGRESS-BAR. 05 LINE 12 COL 10 VALUE "PROCESSING..." BLINK WHEN PROCESSING. 05 LINE 14 COL 10 FROM STATUS-MESSAGE BLINK FOREGROUND-COLOR 4 WHEN ERROR-COUNT > 0. 05 LINE 20 COL 25 VALUE "Press ESC to cancel" BLINK. PROCEDURE DIVISION. PROCESS-DATA-WITH-PROGRESS. PERFORM GET-TOTAL-RECORD-COUNT SET PROCESSING TO TRUE MOVE ZERO TO RECORDS-PROCESSED ERROR-COUNT PERFORM PROCESS-RECORD-LOOP UNTIL RECORDS-PROCESSED >= TOTAL-RECORDS OR USER-CANCELED SET PROCESSING TO FALSE PERFORM DISPLAY-COMPLETION-STATUS. PROCESS-RECORD-LOOP. PERFORM READ-NEXT-RECORD IF RECORD-FOUND PERFORM PROCESS-SINGLE-RECORD ADD 1 TO RECORDS-PROCESSED PERFORM UPDATE-PROGRESS-DISPLAY IF PROCESSING-ERROR ADD 1 TO ERROR-COUNT PERFORM UPDATE-ERROR-STATUS END-IF END-IF. UPDATE-PROGRESS-DISPLAY. COMPUTE PERCENT-COMPLETE = (RECORDS-PROCESSED * 100) / TOTAL-RECORDS. PERFORM BUILD-PROGRESS-BAR DISPLAY PROGRESS-SCREEN *> Check for user cancellation CALL "CHECK_KEYPRESS" USING WS-KEY-CODE IF WS-KEY-CODE = ESCAPE-KEY SET USER-CANCELED TO TRUE END-IF. BUILD-PROGRESS-BAR. MOVE SPACES TO PROGRESS-BAR COMPUTE WS-BAR-LENGTH = (PERCENT-COMPLETE * 50) / 100 PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-BAR-LENGTH MOVE "#" TO PROGRESS-BAR(WS-I:1) END-PERFORM. UPDATE-ERROR-STATUS. STRING "ERRORS DETECTED: " ERROR-COUNT DELIMITED BY SIZE INTO STATUS-MESSAGE END-STRING. DISPLAY-COMPLETION-STATUS. IF USER-CANCELED MOVE "PROCESSING CANCELED BY USER" TO STATUS-MESSAGE ELSE IF ERROR-COUNT > 0 STRING "COMPLETED WITH " ERROR-COUNT " ERRORS" DELIMITED BY SIZE INTO STATUS-MESSAGE END-STRING ELSE MOVE "PROCESSING COMPLETED SUCCESSFULLY" TO STATUS-MESSAGE END-IF DISPLAY PROGRESS-SCREEN DISPLAY "Press any key to continue..." AT LINE 22 COL 25 BLINK ACCEPT DUMMY-FIELD.
BLINK support depends on the terminal or display system. Most modern terminal emulators support it, but some may ignore the attribute. Always test on your target environment and provide alternative visual cues when possible.
The blink rate is typically controlled by the terminal or system, not by COBOL. Standard terminals usually blink at about 1-2 Hz (once or twice per second). You cannot directly control the timing from COBOL code.
No, reserve BLINK for urgent, critical, or attention-requiring information only. Overusing BLINK can be distracting and reduce its effectiveness. Use HIGHLIGHT, colors, or positioning for normal status messages.