diff options
author | jack <[email protected]> | 2023-11-01 12:11:39 -0600 |
---|---|---|
committer | jack <[email protected]> | 2023-11-01 12:11:39 -0600 |
commit | 608b9fb9b9aad1d50a1a6eefb969d6accab3f7bf (patch) | |
tree | df351a573da634f9b1968dfde9bd445e148268f1 | |
parent | 0c3876c937fcbb97de203ea9e65c12b93fd95455 (diff) | |
download | qmk_me-608b9fb9b9aad1d50a1a6eefb969d6accab3f7bf.tar.gz qmk_me-608b9fb9b9aad1d50a1a6eefb969d6accab3f7bf.zip |
thorough clean up
-rw-r--r-- | keyboards/vault35/keymaps/waffle/keymap.c | 2 | ||||
-rw-r--r-- | keyboards/xyz60/keymaps/waffle/keymap.c | 2 | ||||
-rw-r--r-- | keymaps/crkbd/keymap.c | 37 | ||||
-rw-r--r-- | keymaps/crkbd/readme.md | 2 | ||||
-rw-r--r-- | keymaps/crkbd/rules.mk | 1 | ||||
-rw-r--r-- | keymaps/f60/keymap.c | 2 | ||||
-rw-r--r-- | keymaps/ferris/keymap.c | 2 | ||||
-rw-r--r-- | keymaps/kyria/keymap.c | 12 | ||||
-rw-r--r-- | waffle/combos.def | 22 | ||||
-rw-r--r-- | waffle/tapping.c | 59 | ||||
-rw-r--r-- | waffle/waffle.c | 22 | ||||
-rw-r--r-- | waffle/waffle.h | 25 |
12 files changed, 78 insertions, 110 deletions
diff --git a/keyboards/vault35/keymaps/waffle/keymap.c b/keyboards/vault35/keymaps/waffle/keymap.c index 47185f7..ef41090 100644 --- a/keyboards/vault35/keymaps/waffle/keymap.c +++ b/keyboards/vault35/keymaps/waffle/keymap.c @@ -22,6 +22,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -void keyboard_post_init_user(void) { +void keyboard_post_init_keymap(void) { rgblight_sethsv_noeeprom(104,255,255); } diff --git a/keyboards/xyz60/keymaps/waffle/keymap.c b/keyboards/xyz60/keymaps/waffle/keymap.c index 3b4f8e7..99c1dac 100644 --- a/keyboards/xyz60/keymaps/waffle/keymap.c +++ b/keyboards/xyz60/keymaps/waffle/keymap.c @@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, ___BASE1___, KC_BSPC, _______, PNP, _______, ___BASE2___, _______, _______, _______, ___BASE3___, _______, - _______, _______, KC_ESC, LWRSPC, RSE, _______, _______ + _______, _______, KC_ESC, LWRSPC, RSEPST, _______, _______ ), [_LOWER] = LAYOUT_waffle_60_ts( _______, ___NONE___, diff --git a/keymaps/crkbd/keymap.c b/keymaps/crkbd/keymap.c index 70ecc63..a7c4fa6 100644 --- a/keymaps/crkbd/keymap.c +++ b/keymaps/crkbd/keymap.c @@ -4,43 +4,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_waffle_3x6( - STAR, ___BASE1___, H_S, - LINKS, ___BASE2___, RWORD, - TABLE1, ___BASE3___, TABLE2, - ___BASE4___ + KC_NO, ___BASE1___, KC_NO, + LINKS, ___BASE2___, RWORD, + KC_NO, ___BASE3___, KC_NO, + ___BASE4___ ), [_LOWER] = LAYOUT_waffle_3x6( KC_NO, ___LOWER1___, KC_NO, KC_NO, ___LOWER2___, KC_NO, KC_NO, ___LOWER3___, KC_NO, - ___LOWER4___ + ___LOWER4___ ), [_RAISE] = LAYOUT_waffle_3x6( KC_NO, ___RAISE1___, KC_NO, KC_NO, ___RAISE2___, KC_NO, KC_NO, ___RAISE3___, KC_NO, - ___RAISE4___ + ___RAISE4___ ) }; -void housekeeping_task_user(void) { - if (last_input_activity_elapsed() > 5000) { +void housekeeping_task_keymap(void) { + if (last_input_activity_elapsed() > 15000) { const pin_t row_pins[] = MATRIX_ROW_PINS, col_pins[] = MATRIX_COL_PINS; - for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) { + for (uint8_t i = 0; i < ARRAY_SIZE(col_pins); ++i) { setPinOutput(col_pins[i]); writePinLow(col_pins[i]); } - for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) { + for (uint8_t i = 0; i < ARRAY_SIZE(row_pins); ++i) { setPinInputHigh(row_pins[i]); palEnableLineEvent(row_pins[i], PAL_EVENT_MODE_BOTH_EDGES); } __WFI(); - for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) { + for (uint8_t i = 0; i < ARRAY_SIZE(row_pins); ++i) { palDisableLineEvent(row_pins[i]); writePinHigh(row_pins[i]); setPinInputHigh(row_pins[i]); } - for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) { + for (uint8_t i = 0; i < ARRAY_SIZE(col_pins); ++i) { writePinHigh(col_pins[i]); setPinInputHigh(col_pins[i]); } @@ -53,7 +53,7 @@ void keyboard_pre_init_user(void) { //thank you to @sigprof for this palSetLineMode(B1, PAL_MODE_INPUT_ANALOG); } -void keyboard_post_init_user(void) { +void keyboard_post_init_keymap(void) { // enable OPAMP1 as A5 → B1 follower OPAMP3->CSR = OPAMP3_CSR_VMSEL_1 | OPAMP3_CSR_VMSEL_0 | OPAMP3_CSR_VPSEL_0 | OPAMP3_CSR_OPAMP3EN; } @@ -124,15 +124,4 @@ void matrix_init_user(void) { 2, 2, 2, 2, 2 } }; } - -extern rgb_led_t rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT]; -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { -#ifdef POINTING_DEVICE_ENABLE - pimoroni_trackball_set_rgbw(rgb_matrix_ws2812_array[29].r, rgb_matrix_ws2812_array[29].g, rgb_matrix_ws2812_array[29].b, 0); -#endif - for (uint8_t i = led_min; i <= led_max; i++) - if (g_led_config.flags[i] & LED_FLAG_UNDERGLOW) - rgb_matrix_set_color(i, RGB_YELLOW); - return false; -} #endif //rgb matrix diff --git a/keymaps/crkbd/readme.md b/keymaps/crkbd/readme.md index 308791e..5a47a50 100644 --- a/keymaps/crkbd/readme.md +++ b/keymaps/crkbd/readme.md @@ -14,4 +14,4 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { return false; } ``` -above snippet aligns pimoronic trackball rgb led with the active rgb matrix animation, & sets the underglow leds to yellow. +above snippet aligns pimoroni trackball rgb led with the active rgb matrix animation, & sets the underglow leds to yellow. diff --git a/keymaps/crkbd/rules.mk b/keymaps/crkbd/rules.mk index c7ab7d4..d8f79a0 100644 --- a/keymaps/crkbd/rules.mk +++ b/keymaps/crkbd/rules.mk @@ -4,6 +4,7 @@ WS2812_DRIVER = pwm OLED_ENABLE = yes AUDIO_ENABLE = yes AUDIO_DRIVER = dac_basic +RGBLIGHT_ENABLE = no RGB_MATRIX_ENABLE = yes ENCODER_ENABLE = yes ENCODER_MAP_ENABLE = yes diff --git a/keymaps/f60/keymap.c b/keymaps/f60/keymap.c index de8b686..74e8ec7 100644 --- a/keymaps/f60/keymap.c +++ b/keymaps/f60/keymap.c @@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, ___BASE1___, KC_BSPC, _______, PNP, LINKS, ___BASE2___, _______, _______, _______, ___BASE3___, _______, - _______, _______, KC_ESC, LWRSPC, RSE, _______, _______ + _______, _______, KC_ESC, LWRSPC, RSEPST, _______, _______ ), [_LOWER] = LAYOUT_waffle_60_ts( _______, ___NONE___, diff --git a/keymaps/ferris/keymap.c b/keymaps/ferris/keymap.c index 9813fc2..7191507 100644 --- a/keymaps/ferris/keymap.c +++ b/keymaps/ferris/keymap.c @@ -8,7 +8,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ___BASE1___, ___BASE2___, ___BASE3___, - ESCLWR, QSPC, KC_BSPC, RSE + ESCLWR, KC_SPC, KC_BSPC, RSEPST ), [_LOWER] = LAYOUT_waffle( ___LOWER1___, diff --git a/keymaps/kyria/keymap.c b/keymaps/kyria/keymap.c index e6368ce..c262ba2 100644 --- a/keymaps/kyria/keymap.c +++ b/keymaps/kyria/keymap.c @@ -4,17 +4,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_waffle( - KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO, - KC_NO, HRML(KC_A, KC_S, KC_D, KC_F), KC_G, KC_H, HRMR(KC_J, KC_K, KC_L, KC_SCLN), KC_NO, - KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, LINKS, KC_NO, KC_NO, NUKE, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, - KC_NO, UPDIR, ESCLWR, QSPC, KC_NO, KC_NO, KC_BSPC, RSE, PNP, KC_NO + KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO, + KC_NO, HRML(KC_A, KC_S, KC_D, KC_F), KC_G, KC_H, HRMR(KC_J, KC_K, KC_L, KC_SCLN), KC_NO, + KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, LINKS, KC_NO, KC_NO, NUKE, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, + KC_NO, UPDIR, ESCLWR, KC_SPC, KC_NO, KC_NO, KC_BSPC, RSEPST, PNP, KC_NO ), [_LOWER] = LAYOUT_waffle( - _______, KC_1, KC_2 , KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, DEG0, _______, + _______, KC_1, KC_2 , KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, HRML(KC_EXLM, KC_AT, KC_HASH, KC_DLR), KC_PERC, KC_CIRC, HRMR(KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN), _______, _______, _______, KC_TAB, KC_CAPS, KC_TILD, KC_GRV, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, - _______, _______, _______, H_S, _______, _______, STAR, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), [_RAISE] = LAYOUT_waffle( diff --git a/waffle/combos.def b/waffle/combos.def index 8a7e051..97dab59 100644 --- a/waffle/combos.def +++ b/waffle/combos.def @@ -1,14 +1,14 @@ // Copyright 2022 jack (@waffle87) // SPDX-License-Identifier: GPL-2.0-or-later -// name output keys -CMB(ru_ent, KC_ENT, KC_R, KC_U) -CMB(dk_eql, KC_EQL, LCTL_T(KC_D), RCTL_T(KC_K)) -CMB(gh_quot, TD(QUOT_DQUO), KC_G, KC_H) -CMB(ty_coln, KC_COLN, KC_T, KC_Y) -CMB(bn_unds, KC_UNDS, KC_B, KC_N) -CMB(er_cbkt, TD(CBRKT), KC_E, KC_R) -CMB(ui_brkt, TD(BRKT), KC_U, KC_I) -CMB(ccom_plus, KC_PLUS, KC_C, KC_COMM) -CMB(ei_bsls, TD(BSLS_PIPE), KC_E, KC_I) -CMB(vm_mins, TD(EM_DASH), KC_V, KC_M) +// name output keys +CMB(ru_ent, KC_ENT, KC_R, KC_U) +CMB(dk_eql, KC_EQL, LCTL_T(KC_D), RCTL_T(KC_K)) +CMB(gh_quot, TD(QUOT_DQUO), KC_G, KC_H) +CMB(ty_coln, KC_COLN, KC_T, KC_Y) +CMB(bn_unds, KC_UNDS, KC_B, KC_N) +CMB(er_cbkt, TD(CURLY_BRACKET), KC_E, KC_R) +CMB(ui_brkt, TD(SQR_BRACKET), KC_U, KC_I) +CMB(ccom_plus, KC_PLUS, KC_C, KC_COMM) +CMB(ei_bsls, TD(BSLS_PIPE), KC_E, KC_I) +CMB(vm_mins, TD(EM_DASH_MINS), KC_V, KC_M) diff --git a/waffle/tapping.c b/waffle/tapping.c index ce2bd1b..3bc1bbd 100644 --- a/waffle/tapping.c +++ b/waffle/tapping.c @@ -4,7 +4,7 @@ #include "secrets.h" #ifdef RANDWORD #include "users/ridingqwerty/dict.h" -uint16_t word; +uint16_t word = 0; #endif #define INTERCEPT_MOD_TAP(mod, keycode) \ @@ -19,15 +19,15 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case LWRSPC: case ESCLWR: + case RSEBSP: return TAPPING_TERM - 40; - case LINKS: - case PNP: - case TD(QUOT_DQUO): - case TD(EM_DASH): - case TD(CBRKT): - case TD(BRKT): + case TD(QMK_LINKS): + case TD(EM_DASH_MINS): + case TD(PLY_NXT_PRV): + case TD(CURLY_BRACKET): + case TD(SQR_BRACKET): case TD(BSLS_PIPE): - case TD(SPC_QUAD): + case TD(QUOT_DQUO): return TAPPING_TERM + 60; default: return TAPPING_TERM; @@ -39,7 +39,7 @@ void td_reset(tap_dance_state_t *state, void *user_data) { layer_clear(); } -void repo_config(tap_dance_state_t *state, void *user_data) { +void qmk_links(tap_dance_state_t *state, void *user_data) { if (state->count == 1) { tap_code16(C(KC_T)); send_string(qmkstr); @@ -52,24 +52,15 @@ void repo_config(tap_dance_state_t *state, void *user_data) { } void em_dash_mins(tap_dance_state_t *state, void *user_data) { - if (state->count == 1) + if (state->count < 3) tap_code(KC_MINS); #ifdef UNICODE_COMMON_ENABLE else - register_unicode(0x2014); //— -#endif -} - -void zero_degree(tap_dance_state_t *state, void *user_data) { - if (state->count == 1) - tap_code(KC_0); -#ifdef UNICODE_COMMON_ENABLE - else - register_unicode(0x00B0); //° + register_unicode(0x2014); // — #endif } -void media_control(tap_dance_state_t *state, void *user_data) { +void ply_nxt_prv(tap_dance_state_t *state, void *user_data) { switch (state->count) { case 1: tap_code(KC_MPLY); @@ -83,32 +74,20 @@ void media_control(tap_dance_state_t *state, void *user_data) { } } -void spc_quadspc(tap_dance_state_t *state, void *user_data) { - if (state->count == 1) - tap_code(KC_SPC); - else - tap_code(KC_SPC), tap_code(KC_SPC), - tap_code(KC_SPC), tap_code(KC_SPC); -} - -void rse_pst_srch(tap_dance_state_t *state, void *user_data) { +void raise_paste(tap_dance_state_t *state, void *user_data) { if (state->pressed && !state->interrupted) layer_on(_RAISE); else if (state->count == 1) tap_code16(C(S(KC_V))); - else if (state->count == 2) - tap_code16(C(S(KC_F))); } tap_dance_action_t tap_dance_actions[] = { - [QMK_LINKS] = ACTION_TAP_DANCE_FN(repo_config), - [EM_DASH] = ACTION_TAP_DANCE_FN(em_dash_mins), - [DEG_0] = ACTION_TAP_DANCE_FN(zero_degree), - [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(media_control), - [SPC_QUAD] = ACTION_TAP_DANCE_FN(spc_quadspc), - [SRCH_PST_RSE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rse_pst_srch, td_reset), - [CBRKT] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), - [BRKT] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), + [QMK_LINKS] = ACTION_TAP_DANCE_FN(qmk_links), + [EM_DASH_MINS] = ACTION_TAP_DANCE_FN(em_dash_mins), + [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(ply_nxt_prv), + [RAISE_PASTE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, raise_paste, td_reset), + [CURLY_BRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), + [SQR_BRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), [BSLS_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_BSLS, KC_PIPE), [QUOT_DQUO] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO), }; diff --git a/waffle/waffle.c b/waffle/waffle.c index dccb7a5..55b9970 100644 --- a/waffle/waffle.c +++ b/waffle/waffle.c @@ -19,7 +19,7 @@ void keylogger_sync(uint8_t initiator2target_buffer_size, const void *initiator2 memcpy(&keylog_str, initiator2target_buffer, initiator2target_buffer_size); } -__attribute__ ((weak)) void housekeeping_task_user(void) { +void housekeeping_task_user(void) { if (is_keyboard_master()) { static uint32_t last_sync; bool needs_sync = false; @@ -35,10 +35,11 @@ __attribute__ ((weak)) void housekeeping_task_user(void) { last_sync = timer_read32(); } } + housekeeping_task_keymap(); } #endif -__attribute__ ((weak)) void keyboard_post_init_user(void) { +void keyboard_post_init_user(void) { #if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE) transaction_register_rpc(RPC_ID_USER_KEYLOG_STR, keylogger_sync); #endif @@ -62,6 +63,7 @@ __attribute__ ((weak)) void keyboard_post_init_user(void) { if (!autocorrect_is_enabled()) autocorrect_enable(); #endif + keyboard_post_init_keymap(); } #ifdef ENCODER_MAP_ENABLE @@ -76,13 +78,13 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { uint8_t red = 255, green = 0, blue = 0; void trackball_hue(void) { - if (red != 255 && green != 255 && blue != 255) red = 255; - if (red == 255 && green < 255 && blue == 0) green += 15; - else if (green == 255 && blue == 0 && red > 0) red -= 15; - else if (red == 0 && blue < 255 && green == 255 ) blue += 15; - else if (blue == 255 && green > 0 && red == 0) green -= 15; - else if (green == 0 && blue == 255 && red < 255) red += 15; - else if (green == 0 && blue > 0 && red == 255) blue -= 15; + if (red != 255 && green != 255 && blue != 255) red = 255; + if (red == 255 && green < 255 && !blue) green += 15; + else if (green == 255 && !blue && red) red -= 15; + else if (!red && blue < 255 && green == 255) blue += 15; + else if (blue == 255 && green && !red) green -= 15; + else if (!green && blue == 255 && red < 255) red += 15; + else if (!green && blue && red == 255) blue -= 15; pimoroni_trackball_set_rgbw(red, green, blue, 0); } #endif @@ -109,7 +111,7 @@ layer_state_t layer_state_set_user(layer_state_t state) { #endif } } - return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); + return state; } report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { diff --git a/waffle/waffle.h b/waffle/waffle.h index 7082eea..64527b3 100644 --- a/waffle/waffle.h +++ b/waffle/waffle.h @@ -6,8 +6,11 @@ #include "oled.h" #endif +void housekeeping_task_keymap(void); +void keyboard_post_init_keymap(void); + #ifdef RAW_ENABLE -#pragma message "check other device's vid/pid" +#pragma message "check other device's vid/pid!" typedef struct user_config { uint8_t cpu_temp; uint8_t hour; @@ -24,13 +27,11 @@ enum layers { enum tapdances { QMK_LINKS, - EM_DASH, - DEG_0, + EM_DASH_MINS, PLY_NXT_PRV, - SPC_QUAD, - SRCH_PST_RSE, - CBRKT, - BRKT, + RAISE_PASTE, + CURLY_BRACKET, + SQR_BRACKET, BSLS_PIPE, QUOT_DQUO }; @@ -67,13 +68,9 @@ enum unicode_mode { }; #endif -#define DEG0 TD(DEG_0) #define LINKS TD(QMK_LINKS) #define PNP TD(PLY_NXT_PRV) -#define RSE TD(SRCH_PST_RSE) -#define QSPC TD(SPC_QUAD) -#define H_S UC(0x262D) //☭ -#define STAR UC(0x2605) //★ +#define RSEPST TD(RAISE_PASTE) #define ESCLWR LT(_LOWER, KC_ESC) #define LWRSPC LT(_LOWER, KC_SPC) #define RSEBSP LT(_RAISE, KC_BSPC) @@ -83,9 +80,9 @@ enum unicode_mode { #define ___BASE1___ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P #define ___BASE2___ HRML(KC_A, KC_S, KC_D, KC_F), KC_G, KC_H, HRMR(KC_J, KC_K, KC_L, KC_SCLN) #define ___BASE3___ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH -#define ___BASE4___ UPDIR, ESCLWR, QSPC, KC_BSPC, RSE, PNP +#define ___BASE4___ UPDIR, ESCLWR, KC_SPC, KC_BSPC, RSEPST, PNP -#define ___LOWER1___ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, DEG0 +#define ___LOWER1___ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 #define ___LOWER2___ HRML(KC_EXLM, KC_AT, KC_HASH, KC_DLR), KC_PERC, KC_CIRC, HRMR(KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN) #define ___LOWER3___ KC_VOLD, KC_TAB, KC_CAPS, KC_TILD, KC_GRV, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU #define ___LOWER4___ _______, _______, _______, _______, _______, _______ |