*&---------------------------------------------------------------------* *& Report ZZPRU_AT_LINE_SELECTION *& *&---------------------------------------------------------------------* *& AUTOR: todoABAP.com.ar *& *&---------------------------------------------------------------------* REPORT zzpru_at_line_selection NO STANDARD PAGE HEADING. *&---------------------------------------------------------------------* * TYPES. *&---------------------------------------------------------------------* TYPE-POOLS: icon, line. *&---------------------------------------------------------------------* * CONSTANTS. *&---------------------------------------------------------------------* ** ######################################################### ** Posiciones parte de números: ** 30 36 37 41 47 53 54 58 64 70 71 75 81 ** | < nro > | < nro > | < nro > | ** < > < > < > ** ######################################################### ** Posiciones parte de chance: ** 1 12 13 14 30 81 90 91 92 110 ** | < nro > | Tablero | < nro > | ** ######################################################### CONSTANTS: * Posición para incrementar la apuesta de los números. c_nro_pos1(2) TYPE n VALUE 36, c_nro_pos2(2) TYPE n VALUE 53, c_nro_pos3(2) TYPE n VALUE 70, * Posición para incrementar la apuesta de los números. c_nro1(2) TYPE n VALUE 37, c_nro2(2) TYPE n VALUE 54, c_nro3(2) TYPE n VALUE 71, * Posición de la apuesta de los números. c_nro_apu1(2) TYPE n VALUE 40, c_nro_apu2(2) TYPE n VALUE 57, c_nro_apu3(2) TYPE n VALUE 74, * Posición para disminuir la apuesta de los números. c_nro_neg1(2) TYPE n VALUE 41, c_nro_neg2(2) TYPE n VALUE 58, c_nro_neg3(2) TYPE n VALUE 75, * Posición de las barras de los números. c_n_vline1(2) TYPE n VALUE 30, c_n_vline2(2) TYPE n VALUE 47, c_n_vline3(2) TYPE n VALUE 64, c_n_vline4(2) TYPE n VALUE 81, * Posición de apuesta de las barras de los números. c_apu_pos1(2) TYPE n VALUE 29, c_apu_pos2(2) TYPE n VALUE 46, c_apu_pos3(2) TYPE n VALUE 63, c_apu_neg1(2) TYPE n VALUE 31, c_apu_neg2(2) TYPE n VALUE 48, c_apu_neg3(2) TYPE n VALUE 65, * Posición de apuesta de las barras de chance. c_ch_pos1(2) TYPE n VALUE 12, c_ch_pos2(2) TYPE n VALUE 90, c_ch_neg1(2) TYPE n VALUE 14, c_ch_neg2(2) TYPE n VALUE 92, * Posición de la apuesta de chance. c_ch_apu1(2) TYPE n VALUE 13, c_ch_apu2(2) TYPE n VALUE 91, * Atributos del número. c_par TYPE c VALUE 'X', c_impar TYPE c VALUE ' ', c_menor TYPE c VALUE 'X', c_mayor TYPE c VALUE ' ', * Docena del número. c_1doc(2) TYPE c VALUE '1D', c_2doc(2) TYPE c VALUE '2D', c_3doc(2) TYPE c VALUE '3D', * Columna del número. c_1col(2) TYPE c VALUE '1C', c_2col(2) TYPE c VALUE '2C', c_3col(2) TYPE c VALUE '3C', * Otras apuestas. c_apu_ple(3) TYPE c VALUE 'PLE', c_apu_cab(3) TYPE c VALUE 'CAB', c_apu_tra(3) TYPE c VALUE 'TRA', c_apu_cua(3) TYPE c VALUE 'CUA', c_apu_sei(3) TYPE c VALUE 'SEI', c_apu_par(3) TYPE c VALUE 'PAR', c_apu_imp(3) TYPE c VALUE 'IMP', c_apu_may(3) TYPE c VALUE 'MAY', c_apu_men(3) TYPE c VALUE 'MEN', c_apu_red(3) TYPE c VALUE 'RED', c_apu_whi(3) TYPE c VALUE 'WHI', * Colores. c_green TYPE c VALUE 'G', c_red TYPE c VALUE 'R', c_white TYPE c VALUE 'W'. CONSTANTS: * Renglones. c_row_reng(2) TYPE n VALUE 4, * Primer fila de números. c_row_nro_ini(2) TYPE n VALUE 3, * Primer fila de caballo horizontal. c_row_cab_h_ini(2) TYPE n VALUE 5, * Primer fila de transversales. c_row_tra_ini(2) TYPE n VALUE 7, * Primer fila de seisenas y cuadros. c_row_sei_ini(2) TYPE n VALUE 9, * Última fila del paño de números que se puede apostar: 51. c_row_nro_fin(2) TYPE n VALUE 51. CONSTANTS c_time TYPE sy-timlo VALUE '000105'. CONSTANTS: c_fichas TYPE rstable-tabname VALUE 'ZZFIC', c_apuestas TYPE rstable-tabname VALUE 'ZZAPU', c_no_va_mas TYPE rstable-tabname VALUE 'ZZNVM', c_nro TYPE rstable-tabname VALUE 'ZZNRO', c_player TYPE rstable-tabname VALUE 'ZZPLY'. *&---------------------------------------------------------------------* * TABLES INTERNAS. *&---------------------------------------------------------------------* DATA: BEGIN OF t_rula OCCURS 0, name(2) TYPE c, color TYPE c, col(2) TYPE c, END OF t_rula. DATA: BEGIN OF t_apu OCCURS 0, tipo(5) TYPE c, nro TYPE c, "Nro o chance paga(2) TYPE n, "Cuanto paga. apu(1) TYPE n, "Apuesta. nro1(2) TYPE c, "Nros relacionados. nro2(2) TYPE c, nro3(2) TYPE c, nro4(2) TYPE c, nro5(2) TYPE c, nro6(2) TYPE c, END OF t_apu. DATA: ti_seqg3 TYPE STANDARD TABLE OF seqg3 WITH HEADER LINE, ti_nro TYPE STANDARD TABLE OF qf00-ran_int WITH HEADER LINE. DATA: BEGIN OF ti_usr OCCURS 0, guname TYPE seqg3-guname, gttime TYPE seqg3-gttime, gtcode TYPE seqg3-gtcode, garg TYPE seqg3-garg, name_first TYPE adrp-name_first, name_last TYPE adrp-name_last, END OF ti_usr. *&---------------------------------------------------------------------* * VARIABLES. *&---------------------------------------------------------------------* DATA: v_nro(2) TYPE c, v_apu(6) TYPE n, v_curow(2) TYPE n, v_lisel TYPE sy-lisel, v_lilli TYPE sy-lilli, v_cucol TYPE sy-cucol. DATA: g_init_once, ok_code(20), g_ref_from_timer. DATA: v_time TYPE sy-timlo, v_timlo TYPE sy-timlo, v_ficha_old(6) TYPE n, v_varkey TYPE rstable-varkey, v_status TYPE rstable-tabname VALUE 'ZZFIC'. DATA: v_nro_f TYPE c, v_pago_f TYPE c. *&---------------------------------------------------------------------* * MACROS. *&---------------------------------------------------------------------* DEFINE set_new_line. write: / ''. END-OF-DEFINITION. "set_new_line DEFINE write_fichas. write: 1 'Fichas:', p_ficha. END-OF-DEFINITION. "write_fichas DEFINE write_apuesta. write: 1 'Apuesta:', v_apu. END-OF-DEFINITION. "write_apuesta DEFINE write_nro. write: 1 'Número:', v_nro. END-OF-DEFINITION. "write_nro DEFINE write_time. write: 1 'Tiempo:', v_time. END-OF-DEFINITION. "write_time DEFINE set_uline. write: 30 sy-uline(52). END-OF-DEFINITION. "set_uline DEFINE set_1uline. write: 1 sy-uline(29). END-OF-DEFINITION. "set_1uline DEFINE set_2uline. write: 82 sy-uline(29). END-OF-DEFINITION. "set_2uline DEFINE set_2vline. write at: c_n_vline1 '|', c_n_vline4 '|'. END-OF-DEFINITION. "set_2vline DEFINE set_ch_2vline. write at: 1 '|', 110 '|'. END-OF-DEFINITION. "set_ch_2vline DEFINE set_ch_text. write at: c_ch_pos1 &1, c_ch_pos2 &2. END-OF-DEFINITION. "set_ch_text DEFINE set_4vline. write at: c_n_vline1 '|', c_n_vline2 '|', c_n_vline3 '|', c_n_vline4 '|'. END-OF-DEFINITION. "set_4vline DEFINE set_nro. t_rula-name = &1. t_rula-color = &2. t_rula-col = &3. append t_rula. END-OF-DEFINITION. "set_nro DEFINE get_apu . * &1 - Tipo de apuesta. * &2 - Número o chance. * &3 al &8 - Números. * &9 - Apuesta. clear &9. read table t_apu with key tipo = &1 nro = &2 nro1 = &3 nro2 = &4 nro3 = &5 nro4 = &6 nro5 = &7 nro6 = &8. if sy-subrc is initial. move t_apu-apu to &9. endif. END-OF-DEFINITION. "get_apu DEFINE add_v_curow. add 2 to v_curow. END-OF-DEFINITION. "add_v_curow DEFINE check_v_pago_f. check v_pago_f is initial. END-OF-DEFINITION. "check_v_pago_f *----------------------------------------------------------------------* * PARAMETROS *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME. SELECTION-SCREEN: BEGIN OF LINE, COMMENT 1(15) text1, POSITION 20. PARAMETERS: p_ficha(6) TYPE n. "Fichas SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN END OF BLOCK bl01. SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit1. SELECTION-SCREEN: BEGIN OF LINE, COMMENT 1(15) text2, POSITION 20. PARAMETERS: p_turq RADIOBUTTON GROUP rg1. "Turquesa SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE, COMMENT 1(15) text3, POSITION 20. PARAMETERS: p_amar RADIOBUTTON GROUP rg1. "Amarillo SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE, COMMENT 1(15) text4, POSITION 20. PARAMETERS: p_cele RADIOBUTTON GROUP rg1. "Celeste SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE, COMMENT 1(15) text5, POSITION 20. PARAMETERS: p_nara RADIOBUTTON GROUP rg1. "Naranja SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN END OF BLOCK bl02. *----------------------------------------------------------------------- * INICIALIZACIÓN DE VARIABLES *----------------------------------------------------------------------- INITIALIZATION. tit1 = 'Color de las fichas'. text1 = 'Fichas'. text2 = 'Turquesa'. text3 = 'Amarillo'. text4 = 'Celeste'. text5 = 'Naranja'. v_ficha_old = p_ficha = 2000. * Griso el campo de fichas. LOOP AT SCREEN. IF screen-name EQ 'P_FICHA'. screen-input = 0. MODIFY SCREEN. ENDIF. ENDLOOP. *&---------------------------------------------------------------------* * AT LINE-SELECTION. *&---------------------------------------------------------------------* AT LINE-SELECTION. PERFORM at_line_selection. *&---------------------------------------------------------------------* * AT USER-COMMAND. *&---------------------------------------------------------------------* AT USER-COMMAND. DATA l_subrc TYPE sy-subrc. CASE ok_code. WHEN 'RULA'. PERFORM validar_croupier. PERFORM set_msg CHANGING l_subrc. PERFORM refresh_time. sy-lsind = 0. IF g_ref_from_timer = 'X'. CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK 'INFO' PERFORMING when_finished ON END OF TASK EXPORTING seconds = 5 " Refresh time busy_waiting = space EXCEPTIONS resource_failure = 1 communication_failure = 2 system_failure = 3 OTHERS = 4. g_ref_from_timer = ''. ENDIF. ENDCASE. *&---------------------------------------------------------------------* * START-OF-SELECTION. *&---------------------------------------------------------------------* START-OF-SELECTION. PERFORM validar_croupier. PERFORM set_player. MESSAGE 'Ludópatas abstenerse !!!.' TYPE 'I'. IF g_init_once <> 'X'. g_init_once = 'X'. CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK 'WAIT' PERFORMING when_finished ON END OF TASK EXPORTING seconds = 5 " Refresh time busy_waiting = space EXCEPTIONS resource_failure = 1 communication_failure = 2 system_failure = 3 OTHERS = 4. ENDIF. v_timlo = sy-timlo + c_time. v_time = c_time. PERFORM set_table. PERFORM set_cuadro. *&---------------------------------------------------------------------* *& Form set_cuadro *&---------------------------------------------------------------------* * Defino el gráfico de la ruleta. *----------------------------------------------------------------------* FORM set_cuadro . DATA: l_apu(1) TYPE n, l_subrc TYPE sy-subrc. * COLOR = 6 (Rojo). * COLOR = 2 INTENSIFIED OFF (Blanco). * PERFORM set_test_color. * Recuadro del cero. set_new_line. write_fichas. set_uline. set_new_line. write_apuesta. set_2vline. PERFORM set_back_color USING c_n_vline1 50 c_green. PERFORM marcar_nro USING '' ' 0' '' c_green c_green c_green. set_new_line. write_nro. set_2vline. v_curow = 3. PERFORM set_back_color USING c_n_vline1 50 c_green. WRITE AT c_nro_pos2 '<' COLOR = 5 INTENSIFIED ON HOTSPOT. WRITE AT c_nro2 ' 0' COLOR = 5 INTENSIFIED ON. get_apu c_apu_ple 'X' ' 0' space space space space space l_apu. PERFORM write_apu USING c_nro_apu2 l_apu. WRITE AT c_nro_neg2 '>' COLOR = 5 INTENSIFIED ON HOTSPOT. set_new_line. write_time. set_2vline. PERFORM set_back_color USING c_n_vline1 50 c_green. set_new_line. set_uline. set_1uline. set_2uline. add_v_curow. * Caballo horizontal. get_apu c_apu_cab 'X' ' 0' ' 1' space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos1 c_nro_apu1 c_nro_neg1 l_apu '' ''. get_apu c_apu_cab 'X' ' 0' ' 2' space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos2 c_nro_apu2 c_nro_neg2 l_apu '' ''. get_apu c_apu_cab 'X' ' 0' ' 3' space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos3 c_nro_apu3 c_nro_neg3 l_apu '' ''. * Recuadro 1 - 2 - 3. set_new_line. set_ch_2vline. set_ch_text 'MENORES' 'MAYORES'. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING ' 1' ' 2' ' 3' c_red c_white c_red. set_new_line. set_ch_2vline. PERFORM set_nro_color USING ' 1' c_red ' 2' c_white ' 3' c_red. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 4 - 5 - 6. set_new_line. set_ch_2vline. set_ch_text 'PARES' 'IMPARES'. PERFORM set_background USING c_white c_red c_white. PERFORM marcar_nro USING ' 4' ' 5' ' 6' c_white c_red c_white. set_new_line. set_ch_2vline. PERFORM set_nro_color USING ' 4' c_white ' 5' c_red ' 6' c_white. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_white c_red c_white. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 7 - 8 - 9. set_new_line. set_ch_2vline. set_ch_text 'ROJO' 'BLANCO'. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING ' 7' ' 8' ' 9' c_red c_white c_red. set_new_line. set_ch_2vline. PERFORM set_nro_color USING ' 7' c_red ' 8' c_white ' 9' c_red. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 10 - 11 - 12. set_new_line. set_ch_2vline. set_ch_text '1er DOCENA' '1er COLUMNA'. PERFORM set_background USING c_white c_white c_red. PERFORM marcar_nro USING '10' '11' '12' c_white c_white c_red. set_new_line. set_ch_2vline. PERFORM set_nro_color USING '10' c_white '11' c_white '12' c_red. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_white c_white c_red. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 13 - 14 - 15. set_new_line. set_ch_2vline. set_ch_text '2da DOCENA' '2da COLUMNA'. PERFORM set_background USING c_white c_red c_white. PERFORM marcar_nro USING '13' '14' '15' c_white c_red c_white. set_new_line. set_ch_2vline. PERFORM set_nro_color USING '13' c_white '14' c_red '15' c_white. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_white c_red c_white. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 16 - 17 - 18. set_new_line. set_ch_2vline. set_ch_text '3er DOCENA' '3er COLUMNA'. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING '16' '17' '18' c_red c_white c_red. set_new_line. set_ch_2vline. PERFORM set_nro_color USING '16' c_red '17' c_white '18' c_red. PERFORM set_chance. set_new_line. set_ch_2vline. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. set_1uline. set_2uline. PERFORM set_seisenas_caballo. * Recuadro 19 - 20 - 21. set_new_line. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING '19' '20' '21' c_red c_white c_red. set_new_line. PERFORM set_nro_color USING '19' c_red '20' c_white '21' c_red. set_new_line. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. PERFORM set_seisenas_caballo. * Recuadro 22 - 23 - 24. set_new_line. PERFORM set_background USING c_white c_red c_white. PERFORM marcar_nro USING '22' '23' '24' c_white c_red c_white. set_new_line. PERFORM set_nro_color USING '22' c_white '23' c_red '24' c_white. set_new_line. PERFORM set_background USING c_white c_red c_white. set_new_line. set_uline. PERFORM set_seisenas_caballo. * Recuadro 25 - 26 - 27. set_new_line. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING '25' '26' '27' c_red c_white c_red. set_new_line. PERFORM set_nro_color USING '25' c_red '26' c_white '27' c_red. set_new_line. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. PERFORM set_seisenas_caballo. * Recuadro 28 - 29 - 30. set_new_line. PERFORM set_background USING c_white c_white c_red. PERFORM marcar_nro USING '28' '29' '30' c_white c_white c_red. set_new_line. PERFORM set_nro_color USING '28' c_white '29' c_white '30' c_red. set_new_line. PERFORM set_background USING c_white c_white c_red. set_new_line. set_uline. PERFORM set_seisenas_caballo. * Recuadro 31 - 32 - 33. set_new_line. PERFORM set_background USING c_white c_red c_white. PERFORM marcar_nro USING '31' '32' '33' c_white c_red c_white. set_new_line. PERFORM set_nro_color USING '31' c_white '32' c_red '33' c_white. set_new_line. PERFORM set_background USING c_white c_red c_white. set_new_line. set_uline. PERFORM set_seisenas_caballo. * Recuadro 34 - 35 - 36. set_new_line. PERFORM set_background USING c_red c_white c_red. PERFORM marcar_nro USING '34' '35' '36' c_red c_white c_red. set_new_line. PERFORM set_nro_color USING '34' c_red '35' c_white '36' c_red. set_new_line. PERFORM set_background USING c_red c_white c_red. set_new_line. set_uline. PERFORM set_footer. ENDFORM. " set_cuadro *&---------------------------------------------------------------------* *& Form at_line_selection *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM at_line_selection . DATA: l_cucol TYPE sy-cucol, l_subrc TYPE sy-subrc. v_lilli = sy-lilli. v_lisel = sy-lisel. v_cucol = sy-cucol - 1. l_cucol = sy-cucol - 2. IF sy-lisel+l_cucol(1) EQ '<' OR sy-lisel+l_cucol(1) EQ '>'. PERFORM set_msg CHANGING l_subrc. IF l_subrc IS INITIAL. PERFORM set_apuesta USING sy-lisel+l_cucol(1). ENDIF. ENDIF. * Trigger an event to run the at user-command SET USER-COMMAND 'RULA'. ok_code = 'RULA'. sy-ucomm = 'RULA'. * Seteo con cero, para evitar el dump. sy-lsind = 0. ENDFORM. " at_line_selection *&---------------------------------------------------------------------* *& Form set_test_color *&---------------------------------------------------------------------* * Test de colores. *----------------------------------------------------------------------* FORM set_test_color . DATA col TYPE i VALUE 0. DO 8 TIMES. col = sy-index - 1. FORMAT COLOR = col. WRITE: / col COLOR OFF, 'INTENSIFIED ON' INTENSIFIED ON, 'INTENSIFIED OFF' INTENSIFIED OFF, 'INVERSE ON' INVERSE ON. ENDDO. ENDFORM. " set_test_color *&---------------------------------------------------------------------* *& Form set_nro_color *&---------------------------------------------------------------------* * Creo un grupo de 3 nros. *----------------------------------------------------------------------* FORM set_nro_color USING p_nro1 TYPE any p_color1 TYPE c p_nro2 TYPE any p_color2 TYPE c p_nro3 TYPE any p_color3 TYPE c. DATA l_apu(1) TYPE n. PERFORM set_back_color USING c_n_vline1 16 p_color1. PERFORM set_back_color USING c_n_vline2 16 p_color2. PERFORM set_back_color USING c_n_vline3 16 p_color3. add_v_curow. PERFORM get_apu USING c_apu_tra 'X' c_apu_pos1 CHANGING l_apu. PERFORM set_v_caballo USING c_apu_pos1 c_n_vline1 c_apu_neg1 l_apu '' p_color1. * 1er número. get_apu c_apu_ple 'X' p_nro1 space space space space space l_apu. PERFORM write_nro USING p_nro1 p_color1 l_apu c_nro_pos1 c_nro1 c_nro_apu1 c_nro_neg1. get_apu c_apu_cab 'X' p_nro1 p_nro2 space space space space l_apu. PERFORM set_v_caballo USING c_apu_pos2 c_n_vline2 c_apu_neg2 l_apu p_color1 p_color2. * 2do número. get_apu c_apu_ple 'X' p_nro2 space space space space space l_apu. PERFORM write_nro USING p_nro2 p_color2 l_apu c_nro_pos2 c_nro2 c_nro_apu2 c_nro_neg2. get_apu c_apu_cab 'X' p_nro2 p_nro3 space space space space l_apu. PERFORM set_v_caballo USING c_apu_pos3 c_n_vline3 c_apu_neg3 l_apu p_color2 p_color3. * 3er número. get_apu c_apu_ple 'X' p_nro3 space space space space space l_apu. PERFORM write_nro USING p_nro3 p_color3 l_apu c_nro_pos3 c_nro3 c_nro_apu3 c_nro_neg3. WRITE AT c_n_vline4 '|'. ENDFORM. " set_nro_color *&---------------------------------------------------------------------* *& Form set_table *&---------------------------------------------------------------------* * Defino los atributos de los números. *----------------------------------------------------------------------* FORM set_table . set_nro: * NAME COLUMNA. * COLOR ' 0' c_green space, ' 1' c_red c_1col, ' 2' c_white c_2col, ' 3' c_red c_3col, ' 4' c_white c_1col, ' 5' c_red c_2col, ' 6' c_white c_3col, ' 7' c_red c_1col, ' 8' c_white c_2col, ' 9' c_red c_3col, '10' c_white c_1col, '11' c_white c_2col, '12' c_red c_3col, '13' c_white c_1col, '14' c_red c_2col, '15' c_white c_1col, '16' c_red c_1col, '17' c_white c_2col, '18' c_red c_3col, '19' c_red c_1col, '20' c_white c_2col, '21' c_red c_3col, '22' c_white c_1col, '23' c_red c_2col, '24' c_white c_3col, '25' c_red c_1col, '26' c_white c_2col, '27' c_red c_3col, '28' c_white c_1col, '29' c_white c_2col, '30' c_red c_3col, '31' c_white c_1col, '32' c_red c_2col, '33' c_white c_3col, '34' c_red c_1col, '35' c_white c_2col, '36' c_red c_3col. ENDFORM. " set_table *&---------------------------------------------------------------------* *& Form write_nro *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM write_nro USING p_nro p_color TYPE c p_apu TYPE n p_c_nro_pos p_c_nro p_c_nro_apu p_c_nro_neg. IF p_color EQ c_red. WRITE AT p_c_nro_pos '<' COLOR = 6 HOTSPOT. WRITE AT p_c_nro p_nro COLOR = 6. PERFORM write_apu USING p_c_nro_apu p_apu. WRITE AT p_c_nro_neg '>' COLOR = 6 HOTSPOT. ELSEIF p_color EQ c_white. WRITE AT p_c_nro_pos '<' COLOR = 2 INTENSIFIED OFF HOTSPOT. WRITE AT p_c_nro p_nro COLOR = 2 INTENSIFIED OFF. PERFORM write_apu USING p_c_nro_apu p_apu. WRITE AT p_c_nro_neg '>' COLOR = 2 INTENSIFIED OFF HOTSPOT. ENDIF. ENDFORM. " write_nro *&---------------------------------------------------------------------* *& Form set_back_color *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_back_color USING p_pos p_cant p_color TYPE c. DATA: l_pos(2) TYPE n, l_string(200) TYPE c, l_cant(2) TYPE n. l_cant = p_cant. l_pos = p_pos + 1. IF p_color EQ c_red. WRITE AT l_pos l_string(l_cant) COLOR = 6. ELSEIF p_color EQ c_white. WRITE AT l_pos l_string(l_cant) COLOR = 2 INTENSIFIED OFF. ELSEIF p_color EQ c_green. WRITE AT l_pos l_string(l_cant) COLOR = 5 INTENSIFIED ON. ENDIF. ENDFORM. " set_back_color *&---------------------------------------------------------------------* *& Form set_background *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_background USING p_color1 TYPE c p_color2 TYPE c p_color3 TYPE c. set_4vline. PERFORM set_back_color USING c_n_vline1 16 p_color1. PERFORM set_back_color USING c_n_vline2 16 p_color2. PERFORM set_back_color USING c_n_vline3 16 p_color3. ENDFORM. " set_background *&---------------------------------------------------------------------* *& Form set_v_caballo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_v_caballo USING p_pos TYPE any p_n_vline TYPE any p_neg TYPE any p_apu TYPE n p_color1 TYPE c p_color2 TYPE c. IF p_color1 EQ c_red. WRITE AT p_pos '<' COLOR = 6 HOTSPOT. ELSEIF p_color1 EQ c_white. WRITE AT p_pos '<' COLOR = 2 INTENSIFIED OFF HOTSPOT. ELSE. WRITE AT p_pos '<' HOTSPOT. ENDIF. PERFORM write_apu USING p_n_vline p_apu. IF p_color2 EQ c_red. WRITE AT p_neg '>' COLOR = 6 HOTSPOT. ELSEIF p_color2 EQ c_white. WRITE AT p_neg '>' COLOR = 2 INTENSIFIED OFF HOTSPOT. ELSE. WRITE AT p_neg '>' HOTSPOT. ENDIF. ENDFORM. " set_v_caballo *&---------------------------------------------------------------------* *& Form set_seisenas_caballo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_seisenas_caballo . DATA: l_apu(1) TYPE n, ls_apu LIKE LINE OF t_apu. add_v_curow. * Seisena. PERFORM get_sei_nro USING v_curow CHANGING ls_apu. get_apu c_apu_sei 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 ls_apu-nro5 ls_apu-nro6 l_apu. PERFORM set_v_caballo USING c_apu_pos1 c_n_vline1 c_apu_neg1 l_apu '' ''. * Cuadro. PERFORM get_cua_nro USING v_curow c_apu_pos2 CHANGING ls_apu. get_apu c_apu_cua 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 space space l_apu. PERFORM set_v_caballo USING c_apu_pos2 c_n_vline2 c_apu_neg2 l_apu '' ''. PERFORM get_cua_nro USING v_curow c_apu_pos3 CHANGING ls_apu. get_apu c_apu_cua 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 space space l_apu. PERFORM set_v_caballo USING c_apu_pos3 c_n_vline3 c_apu_neg3 l_apu '' ''. * Caballo. PERFORM get_cab_nro USING v_curow c_nro_pos1 'H' CHANGING ls_apu. get_apu c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos1 c_nro_apu1 c_nro_neg1 l_apu '' ''. PERFORM get_cab_nro USING v_curow c_nro_pos2 'H' CHANGING ls_apu. get_apu c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos2 c_nro_apu2 c_nro_neg2 l_apu '' ''. PERFORM get_cab_nro USING v_curow c_nro_pos3 'H' CHANGING ls_apu. get_apu c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space l_apu. PERFORM set_v_caballo USING c_nro_pos3 c_nro_apu3 c_nro_neg3 l_apu '' ''. ENDFORM. " set_seisenas_caballo *&---------------------------------------------------------------------* *& Form write_apu *&---------------------------------------------------------------------* * Seteo la apuesta con el color de la ficha. *----------------------------------------------------------------------* FORM write_apu USING p_c_nro_apu p_apu. DATA l_color TYPE c. IF p_turq EQ 'X'. l_color = '1'. ELSEIF p_amar EQ 'X'. l_color = '3'. ELSEIF p_cele EQ 'X'. l_color = '4'. ELSEIF p_nara EQ 'X'. l_color = '7'. ENDIF. WRITE AT p_c_nro_apu p_apu COLOR = l_color. ENDFORM. " write_apu *&---------------------------------------------------------------------* *& Form set_apuesta *&---------------------------------------------------------------------* * Apuesta. *----------------------------------------------------------------------* FORM set_apuesta USING p_tipo TYPE c. DATA: l_nro(2) TYPE c, l_cucol TYPE sy-cucol, l_cucolp TYPE sy-cucol, l_curow TYPE sy-curow, l_tipo LIKE t_apu-tipo, l_ent(5) TYPE p DECIMALS 3, l_res(5) TYPE p DECIMALS 3. DATA: ls_apu LIKE LINE OF t_apu. *sy-cucol *sy-CUROW * Cada 5 filas tengo un número ( sumar 4 al sy-CUROW ). * Verifico que tengas fichas para apostar. CHECK p_ficha IS NOT INITIAL. l_cucol = sy-cucol - 1. IF l_cucol EQ c_nro_pos1 OR l_cucol EQ c_nro_pos2 OR l_cucol EQ c_nro_pos3 OR l_cucol EQ c_nro_neg1 OR l_cucol EQ c_nro_neg2 OR l_cucol EQ c_nro_neg3. * l_curow = sy-curow - c_row_nro_ini. l_curow = sy-lilli - c_row_nro_ini. l_ent = l_curow / c_row_reng. l_res = FRAC( l_ent ). IF l_res IS INITIAL. * PLENO. PERFORM get_nro USING l_cucol sy-lilli CHANGING l_nro. PERFORM set_apu USING c_apu_ple 'X' l_nro space space space space space p_tipo. PERFORM refresh_apu USING c_apu_ple 'X' l_nro space space space space space p_tipo l_cucol. ELSE. * CABALLO horizontal. PERFORM get_cab_nro USING sy-lilli l_cucol 'H' CHANGING ls_apu. PERFORM set_apu USING c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_tipo. PERFORM refresh_apu USING c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_tipo l_cucol. ENDIF. ELSEIF l_cucol EQ c_apu_pos1 OR l_cucol EQ c_apu_pos2 OR l_cucol EQ c_apu_pos3 OR l_cucol EQ c_apu_neg1 OR l_cucol EQ c_apu_neg2 OR l_cucol EQ c_apu_neg3. * CABALLO, TRANSVERSAL, CUADRO, SEISENA. l_curow = sy-lilli - c_row_nro_ini. l_ent = l_curow / c_row_reng. l_res = FRAC( l_ent ). IF l_res IS INITIAL. * CABALLO vertical o TRANSVERSAL. IF l_cucol EQ c_apu_pos1 OR l_cucol EQ c_apu_neg1. * TRANSVERSAL. PERFORM get_tra_nro USING sy-lilli CHANGING ls_apu. PERFORM set_apu USING c_apu_tra 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 space space space p_tipo. PERFORM refresh_apu USING c_apu_tra 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 space space space p_tipo l_cucol. ELSEIF l_cucol EQ c_apu_pos2 OR l_cucol EQ c_apu_pos3 OR l_cucol EQ c_apu_neg2 OR l_cucol EQ c_apu_neg3. * CABALLO vertical. PERFORM get_cab_nro USING sy-lilli l_cucol 'V' CHANGING ls_apu. PERFORM set_apu USING c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_tipo. PERFORM refresh_apu USING c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_tipo l_cucol. ENDIF. ELSE. * CUADRO, SEISENA. IF l_cucol EQ c_apu_pos1 OR l_cucol EQ c_apu_neg1. * SEISENA. PERFORM get_sei_nro USING sy-lilli CHANGING ls_apu. PERFORM set_apu USING c_apu_sei 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 ls_apu-nro5 ls_apu-nro6 p_tipo. PERFORM refresh_apu USING c_apu_sei 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 ls_apu-nro5 ls_apu-nro6 p_tipo l_cucol. ELSEIF l_cucol EQ c_apu_pos2 OR l_cucol EQ c_apu_pos3 OR l_cucol EQ c_apu_neg2 OR l_cucol EQ c_apu_neg3. * CUADRO. PERFORM get_cua_nro USING sy-lilli l_cucol CHANGING ls_apu. PERFORM set_apu USING c_apu_cua 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 space space p_tipo. PERFORM refresh_apu USING c_apu_cua 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 space space p_tipo l_cucol. ENDIF. ENDIF. ELSEIF l_cucol EQ c_ch_pos1 OR l_cucol EQ c_ch_pos2 OR l_cucol EQ c_ch_neg1 OR l_cucol EQ c_ch_neg2. * CHANCE. PERFORM get_ch_tipo USING sy-lilli l_cucol CHANGING l_tipo. PERFORM set_apu USING l_tipo ' ' space space space space space space p_tipo. PERFORM refresh_apu USING l_tipo ' ' space space space space space space p_tipo l_cucol. ENDIF. ENDFORM. " set_apuesta *&---------------------------------------------------------------------* *& Form get_nro *&---------------------------------------------------------------------* * Determino el nro al cual se apostó. *----------------------------------------------------------------------* FORM get_nro USING p_cucol TYPE sy-cucol p_curow TYPE sy-curow CHANGING p_nro TYPE any. DATA: l_nro TYPE i. CASE p_cucol. WHEN c_nro_pos1 OR c_nro_neg1. IF p_curow EQ c_row_nro_ini. WRITE ' 0' TO p_nro. ELSE. l_nro = 1 + ( ( ( p_curow - 7 ) / 4 ) * 3 ). WRITE l_nro TO p_nro RIGHT-JUSTIFIED. ENDIF. WHEN c_nro_pos2 OR c_nro_neg2. IF p_curow EQ c_row_nro_ini. WRITE ' 0' TO p_nro. ELSE. l_nro = 2 + ( ( ( p_curow - 7 ) / 4 ) * 3 ). WRITE l_nro TO p_nro. ENDIF. WHEN c_nro_pos3 OR c_nro_neg3. IF p_curow EQ c_row_nro_ini. WRITE ' 0' TO p_nro. ELSE. l_nro = 3 + ( ( ( p_curow - 7 ) / 4 ) * 3 ). WRITE l_nro TO p_nro. ENDIF. WHEN OTHERS. * DO NOTHING !!. ENDCASE. l_nro = STRLEN( p_nro ). CHECK l_nro EQ 1. SHIFT p_nro RIGHT. ENDFORM. " get_nro *&---------------------------------------------------------------------* *& Form set_apu *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_apu USING p_apu TYPE any p_nro TYPE c p_nro1 TYPE any p_nro2 TYPE any p_nro3 TYPE any p_nro4 TYPE any p_nro5 TYPE any p_nro6 TYPE any p_tipo TYPE c. * Verifico que tengas fichas para apostar. CHECK p_ficha IS NOT INITIAL. CLEAR t_apu. get_apu p_apu p_nro p_nro1 p_nro2 p_nro3 p_nro4 p_nro5 p_nro6 t_apu-apu. IF sy-subrc IS INITIAL. * Ya se realizó una apuesta de este tipo. IF t_apu-apu < 9 AND p_tipo EQ '>'. * Incremento la apuesta. ADD 1 TO t_apu-apu. MODIFY t_apu FROM t_apu INDEX sy-tabix. PERFORM set_ficha USING p_nro p_tipo. ELSEIF t_apu-apu > 0 AND p_tipo EQ '<'. * Disminuyo la apuesta. t_apu-apu = t_apu-apu - 1. MODIFY t_apu FROM t_apu INDEX sy-tabix. PERFORM set_ficha USING p_nro p_tipo. ENDIF. ELSEIF p_tipo EQ '>'. * Crear una nueva apuesta. PERFORM set_paga USING p_apu CHANGING t_apu-paga. MOVE: p_apu TO t_apu-tipo, p_nro TO t_apu-nro, * to t_apu-paga, 1 TO t_apu-apu, p_nro1 TO t_apu-nro1, p_nro2 TO t_apu-nro2, p_nro3 TO t_apu-nro3, p_nro4 TO t_apu-nro4, p_nro5 TO t_apu-nro5, p_nro6 TO t_apu-nro6. APPEND t_apu. PERFORM set_ficha USING p_nro p_tipo. ENDIF. ENDFORM. " set_apu *&---------------------------------------------------------------------* *& Form set_paga *&---------------------------------------------------------------------* * Determino cuanto para la apuesta. *----------------------------------------------------------------------* FORM set_paga USING p_apu TYPE any CHANGING p_paga LIKE t_apu-paga. CASE p_apu. WHEN c_apu_ple. * Pleno. p_paga = 35. WHEN c_apu_cab. * Caballo. p_paga = 17. WHEN c_apu_tra. * Transversal. p_paga = 11. WHEN c_apu_cua. * Cuadro. p_paga = 8. WHEN c_apu_sei. * Seisenas. p_paga = 5. WHEN c_1doc OR c_2doc OR c_3doc OR c_1col OR c_2col OR c_3col. * Columnas y docenas. p_paga = 2. WHEN c_apu_par OR c_apu_imp OR c_apu_may OR c_apu_men OR c_apu_red OR c_apu_whi. * Suertes sencillas. p_paga = 1. WHEN OTHERS. * DO NOTHING !!. ENDCASE. ENDFORM. " set_paga *&---------------------------------------------------------------------* *& Form get_apu *&---------------------------------------------------------------------* * Devuelve la apuesta correspondiente. *----------------------------------------------------------------------* FORM get_apu USING p_tipo TYPE any p_nro TYPE c p_pos TYPE any CHANGING p_apu TYPE any. DATA: l_cucol TYPE sy-cucol, l_lilli TYPE sy-curow. DATA: ls_apu LIKE LINE OF t_apu. CLEAR p_apu. IF p_nro IS NOT INITIAL. CASE p_tipo. WHEN c_apu_ple. * PLENO. MOVE: p_pos TO l_cucol, v_curow TO l_lilli. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro1. get_apu c_apu_ple 'X' ls_apu-nro1 space space space space space p_apu. WHEN c_apu_cab. * CABALLO. * Verificar cual de los 2 tipos de caballo es. Para así poder * determinar los números correspondientes. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_pos3 OR p_pos EQ c_apu_neg2 OR p_pos EQ c_apu_neg3. * Caballo en la linea vertical. MOVE v_curow TO l_lilli. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. MOVE c_nro_pos1 TO l_cucol. ELSE. MOVE c_nro_pos2 TO l_cucol. ENDIF. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro1. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. MOVE c_nro_pos2 TO l_cucol. ELSE. MOVE c_nro_pos3 TO l_cucol. ENDIF. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro2. get_apu c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_apu. ELSEIF p_pos EQ c_apu_pos2. * Caballo en la linea horizontal. MOVE p_pos TO l_cucol. l_lilli = v_curow - 2. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro1. l_lilli = v_curow + 2. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro2. get_apu c_apu_cab 'X' ls_apu-nro1 ls_apu-nro2 space space space space p_apu. ENDIF. WHEN c_apu_tra. * TRANSVERSAL. MOVE v_curow TO l_lilli. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro1. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro2. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ls_apu-nro3. get_apu c_apu_tra 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 space space space p_apu. WHEN c_apu_cua. * CUADRO. PERFORM get_cua_nro USING v_curow p_pos CHANGING ls_apu. get_apu c_apu_cua 'X' ls_apu-nro1 ls_apu-nro2 ls_apu-nro3 ls_apu-nro4 space space p_apu. WHEN OTHERS. * DO NOTHING !!. ENDCASE. ELSE. ENDIF. ENDFORM. " get_apu *&---------------------------------------------------------------------* *& Form get_cua_nro *&---------------------------------------------------------------------* * Obtengo los nros de un cuadro. *----------------------------------------------------------------------* FORM get_cua_nro USING p_curow TYPE any p_pos TYPE any CHANGING ps_apu LIKE LINE OF t_apu. DATA: l_cucol TYPE sy-cucol, l_lilli TYPE sy-curow. l_lilli = p_curow - 2. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. ELSEIF p_pos EQ c_apu_pos3 OR p_pos EQ c_apu_neg3. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. ENDIF. l_lilli = p_curow + 2. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro3. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro4. ELSEIF p_pos EQ c_apu_pos3 OR p_pos EQ c_apu_neg3. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro3. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro4. ENDIF. ENDFORM. " get_cua_nro *&---------------------------------------------------------------------* *& Form get_sei_nro *&---------------------------------------------------------------------* * Obtengo los nros de una seisena. *----------------------------------------------------------------------* FORM get_sei_nro USING p_curow TYPE any CHANGING ps_apu LIKE LINE OF t_apu. DATA: l_cucol TYPE sy-cucol, l_lilli TYPE sy-curow. l_lilli = p_curow - 2. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro3. l_lilli = p_curow + 2. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro4. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro5. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro6. ENDFORM. " get_sei_nro *&---------------------------------------------------------------------* *& Form get_tra_nro *&---------------------------------------------------------------------* * Obtengo los nros de un transversal. *----------------------------------------------------------------------* FORM get_tra_nro USING p_curow TYPE any CHANGING ps_apu LIKE LINE OF t_apu. DATA: l_cucol TYPE sy-cucol, l_lilli TYPE sy-curow. MOVE p_curow TO l_lilli. MOVE c_nro_pos1 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. MOVE c_nro_pos2 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. MOVE c_nro_pos3 TO l_cucol. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro3. ENDFORM. " get_tra_nro *&---------------------------------------------------------------------* *& Form get_cab_nro *&---------------------------------------------------------------------* * Obtengo los nros de un caballo. *----------------------------------------------------------------------* FORM get_cab_nro USING p_curow TYPE any p_pos TYPE any p_tipo TYPE c CHANGING ps_apu LIKE LINE OF t_apu. DATA: l_cucol TYPE sy-cucol, l_lilli TYPE sy-curow. IF p_tipo EQ 'H'. MOVE p_pos TO l_cucol. l_lilli = p_curow - 2. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. l_lilli = p_curow + 2. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. ELSEIF p_tipo EQ 'V'. MOVE p_curow TO l_lilli. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. * 1er nro de la 1er columna. MOVE c_nro_pos1 TO l_cucol. ELSE. * 1er nro de la 2da columna. MOVE c_nro_pos2 TO l_cucol. ENDIF. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro1. IF p_pos EQ c_apu_pos2 OR p_pos EQ c_apu_neg2. * 2do nro de la 2da columna. MOVE c_nro_pos2 TO l_cucol. ELSE. * 2do nro de la 3er columna. MOVE c_nro_pos3 TO l_cucol. ENDIF. PERFORM get_nro USING l_cucol l_lilli CHANGING ps_apu-nro2. ENDIF. ENDFORM. " get_cab_nro *&---------------------------------------------------------------------* *& Form set_chance *&---------------------------------------------------------------------* * Visualizo la apuesta de la chance correspondiente. *----------------------------------------------------------------------* FORM set_chance . DATA: l_apu(1) TYPE n, l_tipo LIKE t_apu-tipo. * Chance 1. PERFORM get_ch_tipo USING v_curow c_ch_pos1 CHANGING l_tipo. get_apu l_tipo ' ' space space space space space space l_apu. PERFORM set_v_caballo USING c_ch_pos1 c_ch_apu1 c_ch_neg1 l_apu '' ''. * Chance 2. PERFORM get_ch_tipo USING v_curow c_ch_pos2 CHANGING l_tipo. get_apu l_tipo ' ' space space space space space space l_apu. PERFORM set_v_caballo USING c_ch_pos2 c_ch_apu2 c_ch_neg2 l_apu '' ''. ENDFORM. " set_chance *&---------------------------------------------------------------------* *& Form get_ch_tipo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_ch_tipo USING p_curow TYPE any p_pos TYPE any CHANGING p_tipo LIKE t_apu-tipo. IF p_curow EQ 7. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_apu_men TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_apu_may TO p_tipo. ENDIF. ELSEIF p_curow EQ 11. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_apu_par TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_apu_imp TO p_tipo. ENDIF. ELSEIF p_curow EQ 15. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_apu_red TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_apu_whi TO p_tipo. ENDIF. ELSEIF p_curow EQ 19. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_1doc TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_1col TO p_tipo. ENDIF. ELSEIF p_curow EQ 23. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_2doc TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_2col TO p_tipo. ENDIF. ELSEIF p_curow EQ 27. IF p_pos EQ c_ch_pos1 OR p_pos EQ c_ch_neg1. MOVE c_3doc TO p_tipo. ELSEIF p_pos EQ c_ch_pos2 OR p_pos EQ c_ch_neg2. MOVE c_3col TO p_tipo. ENDIF. ENDIF. ENDFORM. " get_ch_tipo *---------------------------------------------------------------------* * FORM WHEN_FINISHED * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM when_finished USING taskname. RECEIVE RESULTS FROM FUNCTION 'Z_ENQUE_SLEEP'. g_ref_from_timer = 'X'. * Trigger an event to run the at user-command SET USER-COMMAND 'RULA'. ok_code = 'RULA'. sy-ucomm = 'RULA'. ENDFORM. " WHEN_FINISHED *&---------------------------------------------------------------------* *& Form set_player *&---------------------------------------------------------------------* * Seteo el jugador. *----------------------------------------------------------------------* FORM set_player . DATA l_varkey TYPE rstable-varkey. l_varkey = sy-uname. CALL FUNCTION 'ENQUEUE_E_TABLE' EXPORTING tabname = c_player varkey = l_varkey EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Creo el nuevo registro de fichas. CONCATENATE c_fichas sy-uname v_ficha_old INTO v_varkey SEPARATED BY space. PERFORM enq USING v_varkey. ENDFORM. " set_player *&---------------------------------------------------------------------* *& Form get_enqueue *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_enqueue . CALL FUNCTION 'ENQUEUE_READ' EXPORTING guname = '*' TABLES enq = ti_seqg3 EXCEPTIONS communication_failure = 1 system_failure = 2 OTHERS = 3. DELETE ti_seqg3 WHERE gobj NE 'E_TABLE'. ENDFORM. " get_enqueue *&---------------------------------------------------------------------* *& Form validar_croupier *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM validar_croupier . DATA: l_flag TYPE c, l_cant TYPE i. DO 2 TIMES. ADD 1 TO l_cant. PERFORM get_enqueue. LOOP AT ti_seqg3. CHECK ti_seqg3-garg(5) EQ c_apuestas OR ti_seqg3-garg(5) EQ c_no_va_mas OR ti_seqg3-garg(5) EQ c_nro. l_flag = 'X'. EXIT. ENDLOOP. IF l_flag IS INITIAL AND l_cant EQ 2. MESSAGE 'Falta croupier.' TYPE 'I'. LEAVE PROGRAM. ELSEIF l_flag IS INITIAL. WAIT UP TO 1 SECONDS. ELSE. EXIT. ENDIF. ENDDO. ENDFORM. " validar_croupier *&---------------------------------------------------------------------* *& Form set_footer *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_footer . DATA: l_number TYPE qf00-ran_int, l_nro(2) TYPE c, l_tnro(200) TYPE c, l_first TYPE c. WRITE:/ 'Hora:', sy-uzeit. WRITE:/ 'Mandante:', sy-mandt. SKIP. LOOP AT ti_nro. AT FIRST. l_first = 'X'. ENDAT. WRITE ti_nro TO l_nro. CONDENSE l_nro NO-GAPS. IF l_first NE 'X'. CONCATENATE l_tnro l_nro INTO l_tnro SEPARATED BY ', '. ELSE. CLEAR l_first. MOVE l_nro TO l_tnro. ENDIF. ENDLOOP. WRITE: 'Últimos 30 números:', l_tnro. SKIP. WRITE / sy-uline. PERFORM set_players. ENDFORM. " set_footer *&---------------------------------------------------------------------* *& Form get_nro_e *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_nro_e USING p_garg TYPE seqg3-garg CHANGING p_nro TYPE qf00-ran_int. DATA l_garg TYPE seqg3-garg. l_garg = p_garg. REPLACE ALL OCCURRENCES OF c_nro IN l_garg WITH space. CONDENSE l_garg NO-GAPS. MOVE l_garg TO p_nro. CHECK v_nro_f IS INITIAL. v_nro_f = 'X'. * Agrego el último número obtenido. APPEND p_nro TO ti_nro. DESCRIBE TABLE ti_nro. CHECK sy-tfill > 30. * Borro el número más antiguo. DELETE ti_nro INDEX 1. ENDFORM. " get_nro_e *&---------------------------------------------------------------------* *& Form set_msg *&---------------------------------------------------------------------* * Mensaje de status. *----------------------------------------------------------------------* FORM set_msg CHANGING p_subrc TYPE sy-subrc. DATA: l_str TYPE string, l_nro(2) TYPE c, l_number TYPE qf00-ran_int. CLEAR p_subrc. LOOP AT ti_seqg3. CASE ti_seqg3-garg(5). WHEN c_apuestas. v_time = v_timlo - sy-timlo. CLEAR v_pago_f. MESSAGE 'Hagan sus apuestas.' TYPE 'S'. EXIT. WHEN c_no_va_mas. CLEAR: v_time, v_timlo. MESSAGE 'No va más !!' TYPE 'S'. CLEAR v_nro_f. p_subrc = 4. EXIT. WHEN c_nro. v_timlo = sy-timlo + c_time. v_time = c_time. PERFORM get_nro_e USING ti_seqg3-garg CHANGING l_number. WRITE l_number TO : l_nro, v_nro. CONCATENATE 'Número.' l_nro INTO l_str SEPARATED BY space. MESSAGE l_str TYPE 'S'. PERFORM set_cuadro. * PERFORM marcar_nro USING v_nro 'X'. PERFORM pagar_apu USING l_nro. p_subrc = 4. EXIT. WHEN OTHERS. * DO NOTHING !!. ENDCASE. ENDLOOP. ENDFORM. " set_msg *&---------------------------------------------------------------------* *& Form pagar_apu *&---------------------------------------------------------------------* * Realizo el pago de las apuestas realizadas. *----------------------------------------------------------------------* FORM pagar_apu USING p_nro TYPE any. DATA: l_nro TYPE i, l_cant TYPE i, l_str TYPE string, l_ficha(6) TYPE n, l_tot(6) TYPE n. check_v_pago_f. * Verifico si se realizaron apuestas. CHECK t_apu[] IS NOT INITIAL. l_nro = p_nro. l_cant = STRLEN( p_nro ). IF l_cant EQ 1. SHIFT p_nro RIGHT. ENDIF. * Verifico apuestas en el tablero de números. LOOP AT t_apu WHERE nro EQ 'X' AND ( nro1 EQ p_nro OR nro2 EQ p_nro OR nro3 EQ p_nro OR nro4 EQ p_nro OR nro5 EQ p_nro OR nro6 EQ p_nro ). * Calculo las fichas ganadas. l_ficha = t_apu-apu + ( t_apu-apu * t_apu-paga ). * Agrego las fichas ganadas. ADD l_ficha TO l_tot. ENDLOOP. IF p_nro NE ' 0'. PERFORM pagar_par_imp USING l_nro CHANGING l_tot. PERFORM pagar_men_may USING l_nro CHANGING l_tot. PERFORM pagar_red_whi USING p_nro CHANGING l_tot. PERFORM pagar_docena USING l_nro CHANGING l_tot. PERFORM pagar_columna USING p_nro CHANGING l_tot. ENDIF. IF l_tot IS NOT INITIAL. ADD l_tot TO p_ficha. CONCATENATE 'Fichas ganadas:' l_tot INTO l_str SEPARATED BY space. MESSAGE l_str TYPE 'S'. ENDIF. * Borro todas las apuestas realizadas. REFRESH t_apu. CLEAR v_apu. * Borro el viejo registro de fichas. CONCATENATE c_fichas sy-uname v_ficha_old INTO v_varkey SEPARATED BY space. PERFORM deq USING v_varkey. v_ficha_old = p_ficha. * Creo el nuevo registro de fichas. CONCATENATE c_fichas sy-uname v_ficha_old INTO v_varkey SEPARATED BY space. PERFORM enq USING v_varkey. ENDFORM. " pagar_apu *&---------------------------------------------------------------------* *& Form pagar_par_imp *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM pagar_par_imp USING p_nro TYPE i CHANGING p_tot TYPE any. DATA: l_ent(5) TYPE p DECIMALS 3, l_res(5) TYPE p DECIMALS 3. l_ent = p_nro / 2. l_res = FRAC( l_ent ). IF l_res IS INITIAL. * PAR. PERFORM get_apu_ch USING c_apu_par CHANGING p_tot. ELSE. * IMPAR. PERFORM get_apu_ch USING c_apu_imp CHANGING p_tot. ENDIF. ENDFORM. " pagar_par_imp *&---------------------------------------------------------------------* *& Form pagar_men_may *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM pagar_men_may USING p_nro TYPE i CHANGING p_tot TYPE any. CHECK p_nro IS NOT INITIAL. IF p_nro < 19. PERFORM get_apu_ch USING c_apu_men CHANGING p_tot. ELSE. PERFORM get_apu_ch USING c_apu_may CHANGING p_tot. ENDIF. ENDFORM. " pagar_men_may *&---------------------------------------------------------------------* *& Form pagar_red_whi *&---------------------------------------------------------------------* * Pago color. *----------------------------------------------------------------------* FORM pagar_red_whi USING p_nro TYPE any CHANGING p_tot TYPE any. READ TABLE t_rula WITH KEY name = p_nro. CHECK sy-subrc IS INITIAL. IF t_rula-color EQ c_red. PERFORM get_apu_ch USING c_apu_red CHANGING p_tot. ELSEIF t_rula-color EQ c_white. PERFORM get_apu_ch USING c_apu_whi CHANGING p_tot. ENDIF. ENDFORM. " pagar_red_whi *&---------------------------------------------------------------------* *& Form pagar_docena *&---------------------------------------------------------------------* * Pagar docena. *----------------------------------------------------------------------* FORM pagar_docena USING p_nro TYPE i CHANGING p_tot TYPE any. DATA: l_ent(5) TYPE p DECIMALS 3. CHECK p_nro IS NOT INITIAL. l_ent = p_nro / 12. IF l_ent <= 1. PERFORM get_apu_ch USING c_1doc CHANGING p_tot. ELSEIF l_ent <= 2. PERFORM get_apu_ch USING c_2doc CHANGING p_tot. ELSEIF l_ent <= 3. PERFORM get_apu_ch USING c_3doc CHANGING p_tot. ENDIF. ENDFORM. " pagar_docena *&---------------------------------------------------------------------* *& Form get_apu_ch *&---------------------------------------------------------------------* * Pago chance. *----------------------------------------------------------------------* FORM get_apu_ch USING p_tipo TYPE any CHANGING p_tot TYPE any. DATA l_ficha(6) TYPE n. get_apu p_tipo space space space space space space space t_apu-apu. IF sy-subrc IS INITIAL. * Calculo las fichas ganadas. l_ficha = ( t_apu-apu + ( t_apu-apu * t_apu-paga ) ) * 10. * Agrego las fichas ganadas. ADD l_ficha TO p_tot. ENDIF. ENDFORM. " get_apu_ch *&---------------------------------------------------------------------* *& Form pagar_columna *&---------------------------------------------------------------------* * Pago columna. *----------------------------------------------------------------------* FORM pagar_columna USING p_nro TYPE any CHANGING p_tot TYPE any. READ TABLE t_rula WITH KEY name = p_nro. CHECK sy-subrc IS INITIAL. IF t_rula-col EQ c_1col. PERFORM get_apu_ch USING c_1col CHANGING p_tot. ELSEIF t_rula-col EQ c_2col. PERFORM get_apu_ch USING c_2col CHANGING p_tot. ELSEIF t_rula-col EQ c_3col. PERFORM get_apu_ch USING c_3col CHANGING p_tot. ENDIF. ENDFORM. " pagar_columna *&---------------------------------------------------------------------* *& Form set_ficha *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_ficha USING p_nro TYPE c p_tipo TYPE c. IF p_tipo EQ '>'. IF p_nro EQ 'X'. p_ficha = p_ficha - 1. v_apu = v_apu + 1. ELSE. * CHANCE vale 10 fichas. p_ficha = p_ficha - 10. v_apu = v_apu + 10. ENDIF. ELSEIF p_tipo EQ '<'. IF p_nro EQ 'X'. p_ficha = p_ficha + 1. v_apu = v_apu - 1. ELSE. * CHANCE vale 10 fichas. p_ficha = p_ficha + 10. v_apu = v_apu - 10. ENDIF. ENDIF. ENDFORM. " set_ficha *&---------------------------------------------------------------------* *& Form refresh_apu *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM refresh_apu USING p_apu TYPE any p_nro TYPE c p_nro1 TYPE any p_nro2 TYPE any p_nro3 TYPE any p_nro4 TYPE any p_nro5 TYPE any p_nro6 TYPE any p_tipo TYPE c p_cucol TYPE sy-cucol. DATA l_pos(2) TYPE n. * Verifico que tengas fichas para apostar. CHECK p_ficha IS NOT INITIAL. CLEAR t_apu. get_apu p_apu p_nro p_nro1 p_nro2 p_nro3 p_nro4 p_nro5 p_nro6 t_apu-apu. CHECK sy-subrc IS INITIAL. IF p_cucol EQ c_nro_pos1 OR p_cucol EQ c_nro_neg1. l_pos = c_nro_apu1 - 1. ELSEIF p_cucol EQ c_nro_pos2 OR p_cucol EQ c_nro_neg2. l_pos = c_nro_apu2 - 1. ELSEIF p_cucol EQ c_nro_pos3 OR p_cucol EQ c_nro_neg3. l_pos = c_nro_apu3 - 1. ELSEIF p_cucol EQ c_apu_pos1 OR p_cucol EQ c_apu_neg1. l_pos = c_n_vline1 - 1. ELSEIF p_cucol EQ c_apu_pos2 OR p_cucol EQ c_apu_neg2. l_pos = c_n_vline2 - 1. ELSEIF p_cucol EQ c_apu_pos3 OR p_cucol EQ c_apu_neg3. l_pos = c_n_vline3 - 1. ELSEIF p_cucol EQ c_ch_pos1 OR p_cucol EQ c_ch_neg1. l_pos = c_ch_apu1 - 1. ELSEIF p_cucol EQ c_ch_pos2 OR p_cucol EQ c_ch_neg2. l_pos = c_ch_apu2 - 1. ENDIF. MOVE t_apu-apu TO v_lisel+l_pos(1). MODIFY CURRENT LINE LINE VALUE FROM v_lisel. * Actualizo la cantidad de fichas. READ LINE 1 LINE VALUE INTO v_lisel. CONCATENATE 'Fichas:' p_ficha INTO v_lisel(29) SEPARATED BY space. MODIFY LINE 1 LINE VALUE FROM v_lisel. * Actualizo la cantidad de fichas apostadas. READ LINE 2 LINE VALUE INTO v_lisel. CONCATENATE 'Apuesta:' v_apu INTO v_lisel(29) SEPARATED BY space. MODIFY LINE 2 LINE VALUE FROM v_lisel. PERFORM refresh_time. ENDFORM. " refresh_apu *&---------------------------------------------------------------------* *& Form enq *&---------------------------------------------------------------------* * Bloqueo el objeto correspondiente. *----------------------------------------------------------------------* FORM enq USING p_varkey TYPE rstable-varkey. CALL FUNCTION 'ENQUEUE_E_TABLE' EXPORTING tabname = v_status varkey = p_varkey EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " enq *&---------------------------------------------------------------------* *& Form deq *&---------------------------------------------------------------------* * Desbloqueo el objeto correspondiente. *----------------------------------------------------------------------* FORM deq USING p_varkey TYPE rstable-varkey. CALL FUNCTION 'DEQUEUE_E_TABLE' EXPORTING tabname = v_status varkey = p_varkey. ENDFORM. " deq *&---------------------------------------------------------------------* *& Form set_players *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM set_players . DATA lt_str TYPE TABLE OF string WITH HEADER LINE. REFRESH ti_usr. LOOP AT ti_seqg3. CHECK ti_seqg3-garg(5) EQ c_fichas. * Se trata de un jugador. CONDENSE ti_seqg3-garg. * Obtengo las fichas del jugador. SPLIT ti_seqg3-garg AT space INTO TABLE lt_str. READ TABLE lt_str INDEX 4. CHECK sy-subrc IS INITIAL. MOVE-CORRESPONDING ti_seqg3 TO ti_usr. MOVE lt_str TO ti_usr-garg. * Obtengo los nombres de los usuarios. SELECT SINGLE b~name_first b~name_last INTO (ti_usr-name_first, ti_usr-name_last) FROM usr21 AS a INNER JOIN adrp AS b ON a~persnumber = b~persnumber AND a~mandt = b~client CLIENT SPECIFIED WHERE a~mandt EQ sy-mandt AND a~bname EQ ti_seqg3-guname. APPEND ti_usr. ENDLOOP. CHECK ti_usr[] IS NOT INITIAL. WRITE:/ 'Usuario', 13 'Hora inicio', 25 'Transacción', 47 'Fichas', 58 'Nombre', 98 'Apellido'. WRITE / sy-uline. LOOP AT ti_usr. WRITE:/ ti_usr-guname, 13 ti_usr-gttime, 25 ti_usr-gtcode, 47 ti_usr-garg(10), 58 ti_usr-name_first, 98 ti_usr-name_last. ENDLOOP. SKIP. ENDFORM. " set_players *&---------------------------------------------------------------------* *& Form refresh_time *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM refresh_time . DATA l_time(10) TYPE c. * Actualizo el tiempo restante. READ LINE 4 LINE VALUE INTO v_lisel. WRITE v_time TO l_time. CONCATENATE 'Tiempo:' l_time INTO v_lisel(29) SEPARATED BY space. MODIFY LINE 4 LINE VALUE FROM v_lisel. ENDFORM. " refresh_time *&---------------------------------------------------------------------* *& Form marcar_nro *&---------------------------------------------------------------------* * Marco el nro que salió. *----------------------------------------------------------------------* FORM marcar_nro USING p_nro1 TYPE any p_nro2 TYPE any p_nro3 TYPE any p_color1 TYPE c p_color2 TYPE c p_color3 TYPE c. DATA: l_cant TYPE i, l_nro(2) TYPE c. CHECK v_nro IS NOT INITIAL. l_nro = v_nro. l_cant = STRLEN( l_nro ). IF l_cant EQ 1. SHIFT l_nro RIGHT. ENDIF. IF p_nro1 EQ l_nro. WRITE AT c_nro1 icon_color AS ICON. ELSEIF p_nro1 IS NOT INITIAL. PERFORM set_back_color USING c_nro1 1 p_color1. ENDIF. IF p_nro2 EQ l_nro. WRITE AT c_nro2 icon_color AS ICON. ELSEIF p_nro2 IS NOT INITIAL. PERFORM set_back_color USING c_nro2 1 p_color2. ENDIF. IF p_nro3 EQ l_nro. WRITE AT c_nro3 icon_color AS ICON. ELSEIF p_nro3 IS NOT INITIAL. PERFORM set_back_color USING c_nro3 1 p_color3. ENDIF. ENDFORM. " marcar_nro