REPORT ZPOPUPDE. ************************************************************************ * The programs ZPOPUP and ZPOPUPDE implement a talk utility - * - similar to the UNIX talk or write commands. * The two instances of zpopups will negotiate the communication * parameters and call zpopupde, the terminal module. Using the * terminal window's buttons you can chat, get help or exit. ************************************************************************ TABLES: USR02, SSCRFIELDS, INDX. DATA: C12(12), Q(12), LINE(90). DATA: FIRST_TIME VALUE '1'. DATA: I_AM. DATA: A_NAME(22), B_NAME(22), AB_NAME(22), BA_NAME(22), MY_NAME(22). DATA: MY_TURN. DATA: MESSAGE(30) VALUE ' Waiting for an answer'. DATA: NO_HELP_SCROLL. * Selection screen begin INITIALIZATION. * Receive area SET PF-STATUS 'ZCLEAR'. SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME. SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN POSITION 1. PARAMETERS: REMOTE(12) MODIF ID ABB. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: A(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: B(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: C(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: D(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: E(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: F(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. * Send area SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN POSITION 1. PARAMETERS: LOCAL(12) MODIF ID ABB. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: G(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: H(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: I(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: J(45) MODIF ID ABC LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: K(45) MODIF ID ABD LOWER CASE. SELECTION-SCREEN END OF LINE. selection-screen begin of line.selection-screen position 1. PARAMETERS: L(45) MODIF ID ABD LOWER CASE. SELECTION-SCREEN END OF LINE. * Buttons SELECTION-SCREEN SKIP 2. SELECTION-SCREEN PUSHBUTTON 1(13) TEXT-010 USER-COMMAND SND. SELECTION-SCREEN PUSHBUTTON 17(13) TEXT-011 USER-COMMAND EXI. SELECTION-SCREEN PUSHBUTTON 33(13) TEXT-012 USER-COMMAND HLP. SELECTION-SCREEN END OF BLOCK A. * End of selection screen * When a button is pressed AT SELECTION-SCREEN. * The SEND button or ENTER was pressed IF SSCRFIELDS-UCOMM = 'SND' OR SSCRFIELDS-UCOMM IS INITIAL OR SSCRFIELDS-UCOMM = 'AAAA'. IF I_AM = 'I'. " I am an initiator LINE = K. LINE+45(45) = L. EXPORT LINE TO DATABASE INDX(ST) ID AB_NAME. COMMIT WORK AND WAIT. MY_TURN = '0'. ELSEIF I_AM = 'R'. " I am a responder LINE = K. LINE+45(45) = L. EXPORT LINE TO DATABASE INDX(ST) ID BA_NAME. COMMIT WORK AND WAIT. MY_TURN = '0'. ENDIF. * The exit button was pressed (or green or yellow arrow, or red cross) ELSEIF SSCRFIELDS-UCOMM = 'EXI' OR SSCRFIELDS-UCOMM = 'BBBB' OR SSCRFIELDS-UCOMM = 'CCCC' OR SSCRFIELDS-UCOMM = 'DDDD'. * Send the exit message to the partner and exit. LINE = 'EXITEXITEXITEXITEXIT'. EXPORT LINE TO DATABASE INDX(ST) ID BA_NAME. EXPORT LINE TO DATABASE INDX(ST) ID AB_NAME. COMMIT WORK AND WAIT. LEAVE PROGRAM. * If the HELP button was pressed ELSEIF SSCRFIELDS-UCOMM = 'HLP'. NO_HELP_SCROLL = '1'. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING TITEL = 'HELP' TXT1 = 'Enter the message using the input lines at the bottom' TXT2 = 'Press ENTER or the SEND button to send the message' TXT3 = 'Wait for the answer' TXT4 = 'Press EXIT to close the connection'. ENDIF. * End: when a button is pressed * Prepare the selection screen for output AT SELECTION-SCREEN OUTPUT. * When the display module runs the first time: import the communication * parameters IF FIRST_TIME = 1. IMPORT I_AM A_NAME B_NAME AB_NAME BA_NAME FROM MEMORY ID 'AAA'. IF I_AM = 'I'. LOCAL = A_NAME. REMOTE = B_NAME. MY_TURN = '1'. ELSEIF I_AM = 'R'. LOCAL = B_NAME. REMOTE = A_NAME. MY_TURN = '0'. ENDIF. FIRST_TIME = 0. ENDIF. " First time * Wait for an answer (my_turn = '0') IF MY_TURN = '0'. " Wait for the partner CLEAR LINE. IF I_AM = 'I'. " Listen on BA DO. IMPORT LINE FROM DATABASE INDX(ST) ID BA_NAME. * Horray, a message has arrived IF NOT LINE IS INITIAL. DELETE FROM INDX WHERE RELID = 'ST' AND SRTFD = BA_NAME. COMMIT WORK AND WAIT. MY_TURN = '1'. EXIT. ENDIF. * No message yet: display a progress indicator SHIFT MESSAGE CIRCULAR RIGHT. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = '' TEXT = MESSAGE. ENDDO. * Wait for an answer (my_turn = '0') ELSEIF I_AM = 'R'. " Listen on AB DO. IMPORT LINE FROM DATABASE INDX(ST) ID AB_NAME. * Horray, a message has arrived IF NOT LINE IS INITIAL. " An answer came DELETE FROM INDX WHERE RELID = 'ST' AND SRTFD = AB_NAME. COMMIT WORK AND WAIT. MY_TURN = '1'. EXIT. ENDIF. * No message yet: display a progress indicator SHIFT MESSAGE CIRCULAR RIGHT. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = '' TEXT = MESSAGE. ENDDO. ENDIF. ENDIF. * my_turn = '1' * An exit message come: free up the communication area and exit IF LINE = 'EXITEXITEXITEXITEXIT'. DELETE FROM INDX WHERE RELID = 'ST' AND SRTFD = AB_NAME. DELETE FROM INDX WHERE RELID = 'ST' AND SRTFD = BA_NAME. COMMIT WORK AND WAIT. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING TITEL = 'INFORMATION' TXT1 = 'Partner closed the connection' TXT2 = ''. LEAVE PROGRAM. ENDIF. * Prepare the selection screen fields for output LOOP AT SCREEN. IF SCREEN-GROUP1 = 'ABC' OR SCREEN-GROUP1 = 'ABB'. SCREEN-INPUT = '0'. MODIFY SCREEN. ENDIF. IF SCREEN-GROUP1 = 'ABB'. SCREEN-INTENSIFIED = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. * Scroll the input and output lines IF NO_HELP_SCROLL <> '1'. G = I. H = J. I = K. J = L. CLEAR K. CLEAR L. CLEAR NO_HELP_SCROLL. ENDIF. IF NOT LINE IS INITIAL. " Refresh the receive lines. A = C. B = D. C = E. D = F. E = LINE(45). F = LINE+45(45). ENDIF.