]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
Keyboard: Add IBM 122-key Terminal keyboard and my Ergodox EZ keymap (Programmer...
[qmk_firmware.git] / keyboards / handwired / ibm122m / keymaps / lukaus / keymap.c
1 /* Copyright 2018 REPLACE_WITH_YOUR_NAME
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16 #include QMK_KEYBOARD_H
17
18 enum custom_keycodes {
19   PLACEHOLDER = SAFE_RANGE, 
20
21   DVP_ESC, // Grave escape basically i think
22   DVP_AMPR,
23   DVP_LBRACKET,
24   DVP_LCBR,
25   DVP_RCBR,
26   DVP_LPRN,
27   DVP_AT,
28   DVP_EQUAL,
29   DVP_ASTERISK,
30   DVP_RPRN,
31   DVP_PLUS,
32   DVP_RBRACKET,
33   DVP_EXLM,
34   DVP_HASH,
35   SHFT_DOT,
36   SHFT_COMMA
37 };
38
39 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
40 // Programmer's Dvorak
41 [0] = LAYOUT( 
42                         KC_F13,   KC_F14,   KC_F15,       KC_F16,   KC_F17,   KC_F18,   KC_F19,   KC_F20,       KC_F21,   KC_F22,   KC_F23,       KC_F24,                       KC_INS,   KC_HOME, KC_PGUP,
43                         KC_F1,    KC_F2,    KC_F3,        KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,        KC_F9,    KC_F10,   KC_F11,       KC_F12,                       KC_DEL,   KC_END,  KC_PGDN,
44 KC_ESC,     TO(1),      DVP_ESC,  DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC,                                KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
45 KC_NO,      TO(2),      KC_TAB,   KC_SCOLON,KC_COMMA,     KC_DOT,   KC_P,     KC_Y,     KC_F,     KC_G,         KC_C,     KC_R,     KC_L,         KC_SLSH,  DVP_AT,   KC_ENTER,                               KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
46 KC_NO,      KC_NO,      MO(3),    KC_A,     KC_O,         KC_E,     KC_U,     KC_I,     KC_D,     KC_H,         KC_T,     KC_N,     KC_S,         KC_MINUS, KC_BSLS,                                          KC_P4,   KC_P5,   KC_P6,   MO(4),
47 LCTL(KC_F), KC_LALT,    KC_LSHIFT,KC_ESC,   KC_QUOT,      KC_Q,     KC_J,     KC_K,     KC_X,     KC_B,         KC_M,     KC_W,     KC_V,         KC_Z,     KC_RSFT,                      KC_UP,              KC_P1,   KC_P2,   KC_P3,   KC_PENT,
48 LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI,                                    KC_SPC,                                                             KC_RALT,  KC_RCTRL,           KC_LEFT,  KC_BTN3, KC_RIGHT,  KC_P0,            KC_PDOT,    
49                                                                                                                                                                                     KC_DOWN
50 ),
51
52 // Qwerty layer + function
53 [1] = LAYOUT( 
54                 KC_F13,   KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22,   KC_F23,    KC_F24,                     KC_INS, KC_HOME, KC_PGUP,
55                 KC_F1,    KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,   KC_F11,    KC_F12,                     KC_DEL, KC_END,  KC_PGDN,
56 KC_ESC, TO(0),  KC_GRV,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,     KC_0,      KC_MINUS, KC_EQL, KC_BSPC,                            KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
57 KC_NO,  KC_NO,  KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,     KC_P,      KC_LBRC,  KC_RBRC,KC_ENTER,                           KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
58 KC_NO,  KC_NO,  MO(3),    KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,     KC_SCOLON, KC_QUOT,  KC_BSLS,                                    KC_P4,   KC_P5,   KC_P6,   KC_BSPC,
59 KC_NO,  KC_NO,  KC_LSHIFT,KC_NO,  KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMMA, KC_DOT,    KC_SLSH,  KC_RSFT,                  KC_UP,            KC_P1,   KC_P2,   KC_P3,   KC_PENT,
60 KC_NO,  KC_LALT,KC_LCTRL, KC_LGUI,                                      KC_SPC,                                KC_RALT,  KC_RCTRL,        KC_LEFT, KC_WH_D, KC_RIGHT,KC_P0,            KC_PDOT,    
61                                                                                                                                                   KC_DOWN
62 ),
63 // Orirginal Layer
64 [2] = LAYOUT( 
65                 KC_F13,   KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22,   KC_F23,    KC_F24,                     KC_INS, KC_HOME, KC_PGUP,
66                 KC_F1,    KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,   KC_F11,    KC_F12,                     KC_DEL, KC_END,  KC_PGDN,
67 KC_ESC, TO(1),  KC_GRV,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,     KC_0,      KC_MINUS, KC_EQL, KC_BSPC,                            KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
68 KC_NO,  TO(0),  KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,     KC_P,      KC_LBRC,  KC_RBRC,KC_ENTER,                           KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
69 KC_NO,  KC_NO,  KC_CAPS,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,     KC_SCOLON, KC_QUOT,  KC_BSLS,                                    KC_P4,   KC_P5,   KC_P6,   KC_BSPC,
70 KC_NO,  KC_NO,  KC_LSHIFT,KC_NO,  KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMMA, KC_DOT,    KC_SLSH,  KC_RSFT,                  KC_UP,            KC_P1,   KC_P2,   KC_P3,   KC_PENT,
71 KC_NO,  KC_LALT,KC_LCTRL, KC_LGUI,                                        KC_SPC,                              KC_RALT,  KC_RCTRL,        KC_LEFT, KC_WH_D, KC_RIGHT,KC_P0,            KC_PDOT,    
72                                                                                                                                                   KC_DOWN
73 ),
74
75 // Function Layer
76 [3] = LAYOUT( 
77                   KC_F1,    KC_F2,  KC_F3,                KC_F4,                KC_F5,                KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,     KC_F12,                     KC_INS, KC_HOME, KC_PGUP,
78                   KC_F13,   KC_F14, KC_F15,               KC_F16,               KC_F17,               KC_F18,   KC_F19,   KC_F20,   KC_F21,   KC_F22,   KC_F23,     KC_F24,                     KC_DEL, KC_END,  KC_PGDN,
79 MU_TOG, KC_NO,    KC_ESC,   KC_1,   KC_2,                 KC_3,                 KC_4,                 KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,       KC_MINUS, KC_EQL, KC_BSPC,                              KC_NLCK,    KC_PSLS,    KC_PAST,    KC_PMNS,
80 MU_MOD, KC_NO,    KC_TAB,   KC_NO,  KC_MEDIA_PREV_TRACK,  KC_MEDIA_PLAY_PAUSE,  KC_MEDIA_NEXT_TRACK,  KC_NO,    KC_NO,    KC_PGUP,  KC_DEL,   KC_NO,    KC_NO,      KC_LBRC,  KC_RBRC,KC_ENTER,                             KC_NO,      KC_NO,      KC_NO,      KC_PPLS,
81 KC_NO,  KC_NO,    KC_TRNS,  KC_NO,  KC_AUDIO_VOL_DOWN,    KC_AUDIO_VOL_UP,      KC_AUDIO_MUTE,        KC_NO,    KC_LEFT,  KC_DOWN,  KC_UP,    KC_RIGHT, KC_SCOLON,  KC_QUOT,  KC_BSLS,                                      LSFT(KC_E), LSFT(KC_F), KC_NO,      KC_BSPC,
82 KC_NO,  KC_LALT,  KC_LSHIFT,KC_NO,  KC_NO,                KC_NO,                KC_NO,                KC_NO,    KC_NO,    KC_NO,    KC_PGDN,  KC_COMMA, KC_DOT,     KC_SLSH,  KC_RSFT,                    KC_UP,            LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
83 KC_NO,  KC_NO,    KC_LCTRL, KC_LGUI,                                                                            KC_SPC,                                 KC_RALT,    KC_CAPS,                    KC_LEFT,  KC_WH_D, KC_RIGHT,LSFT(KC_A),             KC_PDOT,    
84                                                                                                                                                                     KC_DOWN
85 ),
86 // Literally just the numpad is different
87 [4] = LAYOUT( 
88                         KC_F13,   KC_F14,   KC_F15,       KC_F16,   KC_F17,   KC_F18,   KC_F19,   KC_F20,       KC_F21,   KC_F22,   KC_F23,       KC_F24,                       KC_INS,   KC_HOME, KC_PGUP,
89                         KC_F1,    KC_F2,    KC_F3,        KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,        KC_F9,    KC_F10,   KC_F11,       KC_F12,                       KC_DEL,   KC_END,  KC_PGDN,
90 KC_ESC,     TO(1),      DVP_ESC,  DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC,                                KC_NO,    KC_NO,    KC_NO,    KC_NO,
91 KC_NO,      TO(2),      KC_TAB,   KC_SCOLON,KC_COMMA,     KC_DOT,   KC_P,     KC_Y,     KC_F,     KC_G,         KC_C,     KC_R,     KC_L,         KC_SLSH,  DVP_AT,   KC_ENTER,                               KC_BTN1,  KC_MS_U,  KC_BTN2,  KC_NO,
92 KC_NO,      KC_NO,      TO(0),    KC_A,     KC_O,         KC_E,     KC_U,     KC_I,     KC_D,     KC_H,         KC_T,     KC_N,     KC_S,         KC_MINUS, KC_BSLS,                                          KC_MS_L,  KC_NO,    KC_MS_R,  KC_TRNS,
93 LCTL(KC_F), KC_LALT,    KC_LSHIFT,KC_NO,    KC_QUOT,      KC_Q,     KC_J,     KC_K,     KC_X,     KC_B,         KC_M,     KC_W,     KC_V,         KC_Z,     KC_RSFT,                      KC_UP,              KC_GT,    KC_MS_D,  KC_GT,    KC_PENT,
94 LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI,                                    KC_SPC,                                                             KC_RALT,  KC_RCTRL,           KC_LEFT,  KC_BTN3, KC_RIGHT,  KC_BTN1,            KC_PDOT,    
95                                                                                                                                                                                     KC_DOWN
96 ),
97 /*
98 [4] = LAYOUT( 
99                   KC_F13,   KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22,   KC_F23, KC_F24,                     KC_INS, KC_HOME, KC_PGUP,
100                   KC_F1,    KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,   KC_F11, KC_F12,                     KC_DEL, KC_END,  KC_PGDN,
101 MU_TOG, TO(0),    KC_DLR,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,     KC_0,   KC_MINUS, KC_EQL, KC_BSPC,                              KC_NLCK,    KC_PSLS,    KC_PAST,    KC_PMNS,
102 MU_MOD, KC_NO,    KC_TAB,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,  KC_LBRC,  KC_RBRC,KC_ENTER,                             KC_NO,      KC_NO,      KC_NO,      KC_PPLS,
103 KC_NO,  KC_NO,    KC_TRNS,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,  KC_QUOT,  KC_BSLS,                                      LSFT(KC_E), LSFT(KC_F), KC_NO,      KC_BSPC,
104 KC_NO,  KC_LALT,  KC_LSHIFT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_COMMA, KC_DOT, KC_SLSH,  KC_RSFT,                  KC_UP,              LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
105 KC_NO,  KC_LGUI,  KC_LCTRL, KC_LALT,                                                  KC_SPC,                 KC_RALT,  KC_RCTRL,       KC_LEFT,  KC_WH_D, KC_RIGHT,  LSFT(KC_A),             KC_PDOT,    
106                                                                                                                                                   KC_DOWN
107 ),*/
108 /*[0] = LAYOUT( 
109    KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_NO,TO(1),KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1,   
110    KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, TO(2),KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2,   
111    KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3,   
112    KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_BSPC,KC_4,KC_4,KC_4, KC_4,   
113    KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5,   
114    KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6,   
115    KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7,   
116    KC_8, KC_SPC,KC_8,KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, TO(1)   
117   
118 ),
119 [1] = LAYOUT( 
120    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, TO(0),KC_NO,KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
121    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, TO(2),KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
122    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
123    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_BSPC,KC_Q,KC_R,KC_S, KC_T,   
124    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
125    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
126    KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,   
127    KC_A, KC_SPC,KC_C,KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, TO(0)   
128 ),
129 [2] = LAYOUT(
130    KC_LCTRL,    KC_LALT,  KC_C,     KC_RALT,    KC_E,       KC_F, KC_G, KC_G, KC_H, KC_J, TO(0),  TO(1),  KC_M,     KC_N,   KC_QUOT,    KC_DOWN,  KC_UP,  KC_R,     KC_S,       KC_ENTER,   
131    KC_PPLS,     KC_B,     KC_C,     KC_D,       KC_A,       KC_S, KC_D, KC_F, KC_J, KC_J, KC_K,   KC_NO,  KC_K,     KC_L,   KC_SCOLON,  KC_P4,    KC_DEL, KC_P5,    KC_P6,      KC_RIGHT,   
132    KC_PMNS,     KC_1,     KC_C,    KC_D,       KC_1,       KC_2, KC_3, KC_4, KC_7, KC_J, KC_K,   KC_L,   KC_8,     KC_9,   KC_0,       KC_NLCK,  KC_PGUP,KC_PSLS,  KC_PAST,    KC_T,   
133    KC_A,        KC_ESC,   TO(0),KC_D,     KC_GRV,     KC_F, KC_G, KC_5, KC_6, KC_J, KC_K,   KC_L,   KC_EQL,   KC_N,   KC_MINUS,   KC_BSPC,  KC_INS, KC_HOME,  KC_S,       KC_T,   
134    KC_PPLS,     KC_NO,    KC_TAB,   KC_D,       KC_Q,       KC_W, KC_E, KC_R, KC_U, KC_J, KC_K,   KC_L,   KC_I,     KC_O,   KC_P,       KC_P7,    KC_PGDN,KC_P8,    KC_P9,      KC_T,   
135    KC_A,        KC_B,     KC_C,     KC_D,       KC_E,       KC_F, KC_G, KC_T, KC_Y, KC_J, KC_K,   KC_L,   KC_RBRC,  KC_N,   KC_LBRC,    KC_P,     KC_END, KC_R,     KC_S,       KC_T,   
136    KC_LEFT,     KC_P1,    KC_CAPS,  KC_RSFT,    KC_Z,       KC_X, KC_C, KC_V, KC_M, KC_J, KC_K,   KC_L,   KC_COMMA, KC_DOT, KC_BSLS,    KC_PENT,  KC_Q,   KC_P2,    KC_P3,      KC_T,   
137    KC_LGUI,     KC_SPACE, KC_RCTRL, KC_LSHIFT,  KC_E,       KC_F, KC_G, KC_B, KC_N, KC_J, KC_K,   KC_L,   KC_M,     KC_N,   KC_SLSH,    KC_P,     KC_Q,   KC_P0,    KC_PDOT,    KC_KP_ENTER   
138   ),*/
139 };
140
141 const uint16_t PROGMEM fn_actions[] = {
142
143 };
144
145 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
146 {
147   // MACRODOWN only works in this function
148       switch(id) {
149         case 0:
150           if (record->event.pressed) {
151             register_code(KC_RSFT);
152           } else {
153             unregister_code(KC_RSFT);
154           }
155         break;
156       }
157     return MACRO_NONE;
158 };
159
160
161 void matrix_init_user(void) {
162
163 }
164
165 void matrix_scan_user(void) {
166
167 }
168
169 bool left_shift_down = false; 
170 bool right_shift_down = false;
171
172 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
173      switch (keycode) {
174     case KC_LSHIFT:
175     if (record->event.pressed)
176       {
177         left_shift_down = true;
178       return true;
179       }
180       else
181       {
182         left_shift_down = false;
183         return true;
184       }
185     break;
186     case KC_RSHIFT:
187
188       if (record->event.pressed)
189       {
190         right_shift_down = true;
191       return true;
192       }
193       else
194       {
195         right_shift_down = false;
196         return true;
197       }
198     break;
199   
200   
201     case DVP_ESC:
202     if (left_shift_down || right_shift_down)
203     {  
204       if(record->event.pressed)
205         SEND_STRING("~");
206       return false;
207     }
208     else
209     {
210       if(record->event.pressed)
211         SEND_STRING("$");
212       return false;
213     }
214     break;
215
216     case DVP_AMPR:
217     if (left_shift_down || right_shift_down) 
218     {
219       if(record->event.pressed)
220       {
221         SEND_STRING("%");
222
223       }
224     }
225     else
226     {
227       if(record->event.pressed)
228         SEND_STRING("&");
229       return false;
230     }
231     break; 
232   
233     case DVP_LBRACKET:
234     if (left_shift_down || right_shift_down) 
235     {
236       if(record->event.pressed)
237         {
238           if(left_shift_down)
239             unregister_code(KC_LSHIFT);
240           if(right_shift_down)
241             unregister_code(KC_RSHIFT);
242
243           register_code(KC_7);
244           unregister_code(KC_7);
245
246           if(left_shift_down)
247             register_code(KC_LSHIFT);
248           if(right_shift_down)
249             register_code(KC_RSHIFT);
250         }
251       return false;
252     }
253     else
254     {
255       if(record->event.pressed)
256         SEND_STRING("[");
257       return false;
258     }
259     break; 
260   
261     case DVP_LCBR:
262     if (left_shift_down || right_shift_down) 
263     {
264       if(record->event.pressed)
265        { 
266           if(left_shift_down)
267             unregister_code(KC_LSHIFT);
268           if(right_shift_down)
269             unregister_code(KC_RSHIFT);
270
271           register_code(KC_5);
272           unregister_code(KC_5);
273           
274           if(left_shift_down)
275             register_code(KC_LSHIFT);
276           if(right_shift_down)
277             register_code(KC_RSHIFT);
278         }
279       return false;
280     }
281     else
282     {
283       if(record->event.pressed)
284         SEND_STRING("{");
285       return false;
286     }
287     break; 
288    
289     case DVP_RCBR:
290     if (left_shift_down || right_shift_down) 
291     {
292       if(record->event.pressed)
293       {
294         if(left_shift_down)
295           unregister_code(KC_LSHIFT);
296         if(right_shift_down)
297           unregister_code(KC_RSHIFT);
298
299         register_code(KC_3);
300         unregister_code(KC_3);
301         
302         if(left_shift_down)
303           register_code(KC_LSHIFT);
304         if(right_shift_down)
305           register_code(KC_RSHIFT);
306       }
307       return false;
308     }
309     else
310     {
311       if(record->event.pressed)
312         SEND_STRING("}");
313       return false;
314     }
315     break; 
316
317
318     case DVP_LPRN:
319     if (left_shift_down || right_shift_down) 
320     {
321       if(record->event.pressed)
322       {
323         if(left_shift_down)
324           unregister_code(KC_LSHIFT);
325         if(right_shift_down)
326           unregister_code(KC_RSHIFT);
327
328         register_code(KC_1);
329         unregister_code(KC_1);
330         
331         if(left_shift_down)
332           register_code(KC_LSHIFT);
333         if(right_shift_down)
334           register_code(KC_RSHIFT);
335       }
336     return false;
337     }
338     else
339     {
340       if(record->event.pressed)
341         SEND_STRING("(");
342     return false;
343     }
344     break; 
345 //   
346     case DVP_AT:
347     if (left_shift_down || right_shift_down) 
348     {
349       if(record->event.pressed)
350       {
351         if(left_shift_down)
352           unregister_code(KC_LSHIFT);
353         if(right_shift_down)
354           unregister_code(KC_RSHIFT);
355
356         register_code(KC_LSHIFT);
357         register_code(KC_6);
358         unregister_code(KC_6);
359         unregister_code(KC_LSHIFT);
360           
361         if(left_shift_down)
362           register_code(KC_LSHIFT);
363         if(right_shift_down)
364           register_code(KC_RSHIFT);
365       }
366     return false;
367     }
368     else
369     {
370       if(record->event.pressed)
371         SEND_STRING("@");
372     return false;
373     }
374     break; 
375
376     
377     case DVP_EQUAL:
378     if (left_shift_down || right_shift_down) 
379     {
380       if(record->event.pressed)
381       {
382         if(left_shift_down)
383           unregister_code(KC_LSHIFT);
384         if(right_shift_down)
385           unregister_code(KC_RSHIFT);
386
387         register_code(KC_9);
388         unregister_code(KC_9);
389         
390         if(left_shift_down)
391           register_code(KC_LSHIFT);
392         if(right_shift_down)
393           register_code(KC_RSHIFT);
394       }
395     return false;
396     }
397     else
398     {
399       if(record->event.pressed)
400         SEND_STRING("=");
401     return false;
402     }
403     break; 
404     
405     case DVP_ASTERISK:
406     if (left_shift_down || right_shift_down) 
407     {
408       if(record->event.pressed)
409       {
410         if(left_shift_down)
411           unregister_code(KC_LSHIFT);
412         if(right_shift_down)
413           unregister_code(KC_RSHIFT);
414
415         register_code(KC_0);
416         unregister_code(KC_0);
417         
418         if(left_shift_down)
419           register_code(KC_LSHIFT);
420         if(right_shift_down)
421           register_code(KC_RSHIFT);
422       }
423     return false;
424     }
425     else
426     {
427       if(record->event.pressed)
428         SEND_STRING("*");
429     return false;
430     }
431     break; 
432     
433     case DVP_RPRN:
434     if (left_shift_down || right_shift_down) 
435     {
436       if(record->event.pressed)
437       {
438         if(left_shift_down)
439           unregister_code(KC_LSHIFT);
440         if(right_shift_down)
441           unregister_code(KC_RSHIFT);
442
443         register_code(KC_2);
444         unregister_code(KC_2);
445         
446         if(left_shift_down)
447           register_code(KC_LSHIFT);
448         if(right_shift_down)
449           register_code(KC_RSHIFT);
450       }
451     return false;
452     }
453     else
454     {
455       if(record->event.pressed)
456         SEND_STRING(")");
457     return false;
458     }
459     break; 
460
461     case DVP_PLUS:
462     if (left_shift_down || right_shift_down) 
463     {
464       if(record->event.pressed)
465       {
466         if(left_shift_down)
467           unregister_code(KC_LSHIFT);
468         if(right_shift_down)
469           unregister_code(KC_RSHIFT);
470
471         register_code(KC_4);
472         unregister_code(KC_4);
473         
474         if(left_shift_down)
475           register_code(KC_LSHIFT);
476         if(right_shift_down)
477           register_code(KC_RSHIFT);
478       }
479     }
480     else
481     {
482       if(record->event.pressed)
483         SEND_STRING("+");
484     }
485     return false;
486     break; 
487     
488     case DVP_RBRACKET:
489     if (left_shift_down || right_shift_down) 
490     {
491       if(record->event.pressed)
492       {
493         if(left_shift_down)
494           unregister_code(KC_LSHIFT);
495         if(right_shift_down)
496           unregister_code(KC_RSHIFT);
497
498         register_code(KC_6);
499         unregister_code(KC_6);
500         
501         if(left_shift_down)
502           register_code(KC_LSHIFT);
503         if(right_shift_down)
504           register_code(KC_RSHIFT);
505       }
506     }
507     else
508     {
509       if(record->event.pressed)
510         SEND_STRING("]");
511     }
512     return false;
513     break; 
514     
515     case DVP_EXLM:
516     if (left_shift_down || right_shift_down) 
517     {
518       if(record->event.pressed)
519       {
520         if(left_shift_down)
521           unregister_code(KC_LSHIFT);
522         if(right_shift_down)
523           unregister_code(KC_RSHIFT);
524
525         register_code(KC_8);
526         unregister_code(KC_8);
527         
528         if(left_shift_down)
529           register_code(KC_LSHIFT);
530         if(right_shift_down)
531           register_code(KC_RSHIFT);
532       }
533     }
534     else
535     {
536       if(record->event.pressed)
537         SEND_STRING("!");
538     }
539     return false;
540     break; 
541     
542     case DVP_HASH:
543     if (left_shift_down || right_shift_down) 
544     {
545       if(record->event.pressed)
546       {
547         if(left_shift_down)
548           unregister_code(KC_LSHIFT);
549         if(right_shift_down)
550           unregister_code(KC_RSHIFT);
551
552         register_code(KC_GRAVE);
553         unregister_code(KC_GRAVE);
554         
555         if(left_shift_down)
556           register_code(KC_LSHIFT);
557         if(right_shift_down)
558           register_code(KC_RSHIFT);
559       }
560     }
561     else
562     {
563       if(record->event.pressed)
564         SEND_STRING("#");
565     }
566     return false;
567     break; 
568      case SHFT_DOT:
569       if(record->event.pressed)
570         SEND_STRING(">");
571       break;
572
573     case SHFT_COMMA:
574       if(record->event.pressed)
575         SEND_STRING("<");
576       break;
577
578   } 
579   
580   
581   
582   return true;
583 }
584
585 void led_set_user(uint8_t usb_led) {
586
587 }