separated all my changes into separate files, working on generalizing my relativity macros. (#4368)
* Updating to my local changes. * Added auto-complete for joins. * Added lights to imply current state better
This commit is contained in:
		
				
					committed by
					
						 Drashna Jaelre
						Drashna Jaelre
					
				
			
			
				
	
			
			
			
						parent
						
							f8d8005835
						
					
				
				
					commit
					8f5ac39fb9
				
			
							
								
								
									
										138
									
								
								keyboards/dz60/keymaps/marianas/customLogic.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								keyboards/dz60/keymaps/marianas/customLogic.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | |||||||
|  | #include QMK_KEYBOARD_H | ||||||
|  | #include "customLogic.h" | ||||||
|  | #include "keymap.h" | ||||||
|  | #include "keyDefinitions.h" | ||||||
|  | #include "relativity.h" | ||||||
|  | #include "timer.h" | ||||||
|  |  | ||||||
|  | static int16_t fnTimer = 0; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | uint32_t layer_state_set_user(uint32_t state) | ||||||
|  | { | ||||||
|  |   switch (biton32(state)) | ||||||
|  |   { | ||||||
|  |     case QWERTY: | ||||||
|  |       rgblight_mode(9); | ||||||
|  |       break; | ||||||
|  |     case NAV_CLUSTER: | ||||||
|  |       rgblight_mode(29); | ||||||
|  |       break; | ||||||
|  |     case GAMING: | ||||||
|  |       rgblight_mode(26); | ||||||
|  |       break; | ||||||
|  |     case SQLMACROS: | ||||||
|  |       rgblight_mode(1); | ||||||
|  |       break; | ||||||
|  |     case FN_LAYER: | ||||||
|  |       rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL+5); | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  |   return state; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool printSqlVerbs(uint16_t keycode, keyrecord_t *record) | ||||||
|  | { | ||||||
|  |   if (record->event.pressed) | ||||||
|  |   { | ||||||
|  |     switch (keycode) | ||||||
|  |     { | ||||||
|  |       case S_LFTJN:  | ||||||
|  |         SEND_STRING("LEFT JOIN");  | ||||||
|  |         activateRelativity(); | ||||||
|  |         return false; | ||||||
|  |       case S_INRJN:  | ||||||
|  |         SEND_STRING("INNER JOIN ");  | ||||||
|  |         activateRelativity(); | ||||||
|  |         return false; | ||||||
|  |       case S_SLCT:   | ||||||
|  |         SEND_STRING("SELECT "); return  | ||||||
|  |         false; | ||||||
|  |       case S_FROM:   | ||||||
|  |         SEND_STRING("FROM "); return  | ||||||
|  |         false; | ||||||
|  |       case S_DSNCT:  | ||||||
|  |         SEND_STRING("DISTINCT "); return  | ||||||
|  |         false; | ||||||
|  |       case S_ORDER:  | ||||||
|  |         SEND_STRING("ORDER BY "); return  | ||||||
|  |         false; | ||||||
|  |       case S_WHERE:  | ||||||
|  |         SEND_STRING("WHERE "); return  | ||||||
|  |         false; | ||||||
|  |       case S_ALTER:  | ||||||
|  |         SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = SUPPLY;"); return false; | ||||||
|  |       case S_ASTRK:  | ||||||
|  |         SEND_STRING("* "); return false; | ||||||
|  |          | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool isFn = false; | ||||||
|  | bool didFn = false; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool updateLayerState(uint16_t keycode, keyrecord_t *record) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   if (record->event.pressed) | ||||||
|  |   { | ||||||
|  |     switch (keycode) | ||||||
|  |     { | ||||||
|  |       case FN_QT: | ||||||
|  |         fnTimer = timer_read(); | ||||||
|  |         layer_on(FN_LAYER); | ||||||
|  |         isFn = true; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     if (isFn) | ||||||
|  |     { | ||||||
|  |       didFn = true; | ||||||
|  |       return true; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     switch(keycode) | ||||||
|  |     { | ||||||
|  |       case FN_QT: | ||||||
|  |         layer_off(FN_LAYER); | ||||||
|  |         if (!didFn) | ||||||
|  |         { | ||||||
|  |           #if fnTimeout | ||||||
|  |           if (TIMER_DIFF_16(timer_read(), fnTimer) <= fnTimeout) | ||||||
|  |           { | ||||||
|  |             activateRelativity(); | ||||||
|  |           } | ||||||
|  |           else | ||||||
|  |           { | ||||||
|  |             deactivateRelativity(); | ||||||
|  |           } | ||||||
|  |           #else | ||||||
|  |           activateRelativity(); | ||||||
|  |           #endif | ||||||
|  |         } | ||||||
|  |         didFn = false; | ||||||
|  |         isFn = false; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool process_record_user(uint16_t keycode, keyrecord_t *record) | ||||||
|  | { | ||||||
|  |   return | ||||||
|  |     storeShiftState(keycode, record) && | ||||||
|  |     printSqlVerbs(keycode, record) && | ||||||
|  |     updateLayerState(keycode, record) && | ||||||
|  |     handleSmartMacros(keycode, record); | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								keyboards/dz60/keymaps/marianas/customLogic.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								keyboards/dz60/keymaps/marianas/customLogic.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | #define fnTimeout 500 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | uint32_t layer_state_set_user(uint32_t state); | ||||||
|  |  | ||||||
|  | bool printSqlVerbs(uint16_t keycode, keyrecord_t *record); | ||||||
|  |  | ||||||
|  | bool updateLayerState(uint16_t keycode, keyrecord_t *record); | ||||||
|  |  | ||||||
|  | bool process_record_user(uint16_t keycode, keyrecord_t *record); | ||||||
							
								
								
									
										124
									
								
								keyboards/dz60/keymaps/marianas/keyDefinitions.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								keyboards/dz60/keymaps/marianas/keyDefinitions.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | |||||||
|  |  | ||||||
|  | //Control | ||||||
|  | #define MO_FNLR MO(FN_LAYER) | ||||||
|  | #define BACKSPC KC_BSPC | ||||||
|  | #define ENTER_OR_SQL LT(SQLMACROS,KC_ENT) | ||||||
|  | #define ESCAP KC_ESC | ||||||
|  | #define PSCR KC_PSCREEN | ||||||
|  | #define SCRL KC_SCROLLLOCK | ||||||
|  | #define PAUS KC_PAUSE | ||||||
|  | #define NSRT KC_INSERT | ||||||
|  | #define HOME KC_HOME | ||||||
|  | #define PGUP KC_PGUP | ||||||
|  | #define PGDN KC_PGDN | ||||||
|  | #define END_ KC_END | ||||||
|  | #define DELT KC_DELETE | ||||||
|  | #define UPUP KC_UP | ||||||
|  | #define D_WN KC_DOWN | ||||||
|  | #define LEFT KC_LEFT | ||||||
|  | #define RGHT KC_RIGHT | ||||||
|  |  | ||||||
|  | //KEYPAD | ||||||
|  | #define KP_1 KC_KP_1 | ||||||
|  | #define KP_2 KC_KP_2 | ||||||
|  | #define KP_3 KC_KP_3 | ||||||
|  | #define KP_4 KC_KP_4 | ||||||
|  | #define KP_5 KC_KP_5 | ||||||
|  | #define KP_6 KC_KP_6 | ||||||
|  | #define KP_7 KC_KP_7 | ||||||
|  | #define KP_8 KC_KP_8 | ||||||
|  | #define KP_9 KC_KP_9 | ||||||
|  | #define KP_0 KC_KP_0 | ||||||
|  | #define NMLK KC_NUMLOCK | ||||||
|  | #define STAR KC_KP_ASTERISK | ||||||
|  | #define KSSH KC_KP_SLASH | ||||||
|  | #define KMIN KC_KP_MINUS | ||||||
|  | #define PLUS KC_KP_PLUS | ||||||
|  | #define KNTR KC_KP_ENTER | ||||||
|  | #define KDOT KC_KP_DOT | ||||||
|  |  | ||||||
|  | //Modifiers | ||||||
|  | #define CTLL KC_LCTL | ||||||
|  | #define LEFTSHFT KC_LSPO | ||||||
|  | #define WINL KC_LGUI | ||||||
|  | #define ALTL KC_LALT | ||||||
|  | #define CTLR KC_RCTL | ||||||
|  | #define RIGHT_SHIFT__PAREN KC_RSPC | ||||||
|  | #define WINR KC_RGUI | ||||||
|  | #define ALTR KC_RALT | ||||||
|  | #define APPR KC_APP | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //Punctuation | ||||||
|  | #define CMMA KC_COMM | ||||||
|  | #define PRRD KC_DOT | ||||||
|  | #define SLSH KC_SLSH | ||||||
|  | #define QUOT KC_QUOT | ||||||
|  | #define COLN KC_SCLN | ||||||
|  | #define LBRC KC_LBRC | ||||||
|  | #define RBRC KC_RBRC | ||||||
|  | #define EQUL KC_EQL | ||||||
|  | #define MNUS KC_MINS | ||||||
|  | #define BSLASH KC_BSLS | ||||||
|  |  | ||||||
|  | //Layers | ||||||
|  | #define QWRTY TO(QWERTY) | ||||||
|  | #define NAVS TO(NAV_CLUSTER) | ||||||
|  | #define GAME TO(GAMING) | ||||||
|  |  | ||||||
|  | //Space | ||||||
|  | #define ____ KC_TRNS | ||||||
|  | #define _____ KC_TRNS | ||||||
|  | #define ______ KC_TRNS | ||||||
|  | #define _______ KC_TRNS | ||||||
|  | #define ________ KC_TRNS | ||||||
|  | #define ___________ KC_TRNS | ||||||
|  | #define _________________ KC_TRNS | ||||||
|  | #define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC | ||||||
|  | #define KCNO KC_NO | ||||||
|  |  | ||||||
|  | enum sql_macros { | ||||||
|  |   S_LFTJN = SAFE_RANGE, // L | ||||||
|  |   S_INRJN, // I | ||||||
|  |   S_SLCT,  // S | ||||||
|  |   S_FROM,  // F | ||||||
|  |   S_DSNCT, // D | ||||||
|  |   S_ORDER, // O | ||||||
|  |   S_WHERE, // W | ||||||
|  |   S_ALTER, // Esc | ||||||
|  |   S_ASTRK, // * | ||||||
|  |  | ||||||
|  |   TD_A, | ||||||
|  |   TD_B, | ||||||
|  |   TD_C, // Corp, Corporation, Company | ||||||
|  |   TD_D, // Distribution, Dist, Distributor | ||||||
|  |   TD_E, | ||||||
|  |   TD_F, | ||||||
|  |   TD_G, // GlobalLookup | ||||||
|  |   TD_H, | ||||||
|  |   TD_I, // Instance, Item | ||||||
|  |   TD_J, | ||||||
|  |   TD_K, | ||||||
|  |   TD_L, | ||||||
|  |   TD_M, | ||||||
|  |   TD_N, // NadRate | ||||||
|  |   TD_O, | ||||||
|  |   TD_P, // Product, Person, | ||||||
|  |   TD_Q, // Darden | ||||||
|  |   TD_R, | ||||||
|  |   TD_S, // Supplier, Step | ||||||
|  |   TD_T, // Task, Type | ||||||
|  |   TD_U, | ||||||
|  |   TD_V, | ||||||
|  |   TD_W, // Workflow, | ||||||
|  |   TD_X, | ||||||
|  |   TD_Y, | ||||||
|  |   TD_Z, | ||||||
|  |   TD_BSPC, | ||||||
|  |   TD_ENT, | ||||||
|  |   TD_ESC, | ||||||
|  |  | ||||||
|  |   FN_QT | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | bool isShifted(void); | ||||||
| @@ -1,505 +1,10 @@ | |||||||
| #include QMK_KEYBOARD_H | #include QMK_KEYBOARD_H | ||||||
| #include "keymap.h" | #include "keymap.h" | ||||||
|  | #include "relativity.h" | ||||||
|  | #include "keyDefinitions.h" | ||||||
|  | #include "customLogic.h" | ||||||
|  |  | ||||||
| enum marianas_layers { | // planned change: store previous table names and abbreviations to allow scrolling for inner joins on table name+id and abbreviation+id. | ||||||
|   QWERTY, |  | ||||||
| /* |  | ||||||
|   COLEMAK, |  | ||||||
|   DVORAK, |  | ||||||
| */ |  | ||||||
|   NAV_CLUSTER, |  | ||||||
|   GAMING, |  | ||||||
|   SQLMACROS, |  | ||||||
|   SQLNAMES, |  | ||||||
|   FN_LAYER |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| enum sql_macros { |  | ||||||
|   S_LFTJN = SAFE_RANGE, // L |  | ||||||
|   S_INRJN, // I |  | ||||||
|   S_SLCT,  // S |  | ||||||
|   S_FROM,  // F |  | ||||||
|   S_DSNCT, // D |  | ||||||
|   S_ORDER, // O |  | ||||||
|   S_WHERE, // W |  | ||||||
|   S_ALTER, // Esc |  | ||||||
|   S_ASTRK, // * |  | ||||||
|  |  | ||||||
|   TD_A, |  | ||||||
|   TD_B, |  | ||||||
|   TD_C, // Corp, Corporation, Company |  | ||||||
|   TD_D, // Distribution, Dist, Distributor |  | ||||||
|   TD_E, |  | ||||||
|   TD_F, |  | ||||||
|   TD_G, // GlobalLookup |  | ||||||
|   TD_H, |  | ||||||
|   TD_I, // Instance, Item |  | ||||||
|   TD_J, |  | ||||||
|   TD_K, |  | ||||||
|   TD_L, |  | ||||||
|   TD_M, |  | ||||||
|   TD_N, // NadRate |  | ||||||
|   TD_O, |  | ||||||
|   TD_P, // Product, Person, |  | ||||||
|   TD_Q, // Darden |  | ||||||
|   TD_R, |  | ||||||
|   TD_S, // Supplier, Step |  | ||||||
|   TD_T, // Task, Type |  | ||||||
|   TD_U, |  | ||||||
|   TD_V, |  | ||||||
|   TD_W, // Workflow, |  | ||||||
|   TD_X, |  | ||||||
|   TD_Y, |  | ||||||
|   TD_Z, |  | ||||||
|   TD_BSPC, |  | ||||||
|   TD_ENT, |  | ||||||
|   TD_ESC |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| uint16_t *macroTaps = 0; |  | ||||||
|  |  | ||||||
| char *tableNameList = 0; |  | ||||||
|  |  | ||||||
| uint8_t *charCount = 0; |  | ||||||
| uint8_t countPointer = 0; |  | ||||||
|  |  | ||||||
| bool shifted = false; |  | ||||||
|  |  | ||||||
| bool sendAbbr = false; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void initStringData(void) |  | ||||||
| { |  | ||||||
|   if (macroTaps == 0) |  | ||||||
|   { |  | ||||||
|     macroTaps = malloc(macroTapsLen*sizeof(uint16_t)); |  | ||||||
|     for(int i = 0; i < macroTapsLen; i++) |  | ||||||
|     { |  | ||||||
|       macroTaps[i] = 0; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (tableNameList == 0) |  | ||||||
|   { |  | ||||||
|     tableNameList = malloc(tableNameListLen*sizeof(char)); |  | ||||||
|     for(int i = 0; i < tableNameListLen; i++) |  | ||||||
|     { |  | ||||||
|       tableNameList[i] = 0; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   if (charCount == 0) |  | ||||||
|   { |  | ||||||
|     charCount = malloc(charCountLen*sizeof(uint8_t)); |  | ||||||
|     for (int i = 0; i < charCountLen; i++) |  | ||||||
|     { |  | ||||||
|       charCount[i] = 0; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| uint32_t layer_state_set_user(uint32_t state) |  | ||||||
| { |  | ||||||
|   switch (biton32(state)) |  | ||||||
|   { |  | ||||||
|     case QWERTY: |  | ||||||
|       rgblight_mode(9); |  | ||||||
|       break; |  | ||||||
|     case NAV_CLUSTER: |  | ||||||
|       rgblight_mode(29); |  | ||||||
|       break; |  | ||||||
|     case GAMING: |  | ||||||
|       rgblight_mode(26); |  | ||||||
|       break; |  | ||||||
|     case SQLMACROS: |  | ||||||
|       rgblight_mode(1); |  | ||||||
|       rgblight_setrgb(0x00, 0xFF, 0x80); |  | ||||||
|       break; |  | ||||||
|     case SQLNAMES: |  | ||||||
|       rgblight_mode(1); |  | ||||||
|       rgblight_setrgb(0x80, 0xFF, 0x00); |  | ||||||
|       break; |  | ||||||
|     case FN_LAYER: |  | ||||||
|       rgblight_mode(1); |  | ||||||
|       rgblight_setrgb(0x00, 0x80, 0xFF); |  | ||||||
|       break; |  | ||||||
|   } |  | ||||||
|   return state; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool containsCode(uint16_t kc) |  | ||||||
| { |  | ||||||
|   for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     if (macroTaps[i] == kc) return true; |  | ||||||
|   } |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool lastCodeIs(uint16_t kc) |  | ||||||
| { |  | ||||||
|   for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true; |  | ||||||
|   } |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool last2CodeAre(uint16_t kc) |  | ||||||
| { |  | ||||||
|   for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true; |  | ||||||
|   } |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool last2CodesAre(uint16_t kc, uint16_t kc2) |  | ||||||
| { |  | ||||||
|   for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true; |  | ||||||
|   } |  | ||||||
|   return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void addKeyCode(uint16_t kc) |  | ||||||
| { |  | ||||||
|   int i = 0; |  | ||||||
|   while (i < macroTapsLen-2 && macroTaps[i] > 0) i++; |  | ||||||
|   if (macroTaps[i] == 0) |  | ||||||
|   { |  | ||||||
|     macroTaps[i] = kc; |  | ||||||
|     macroTaps[i+1] = 0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void eraseKeyCodes(void) |  | ||||||
| { |  | ||||||
|   int i = 0; |  | ||||||
|   while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void eraseCharCounts(void) |  | ||||||
| { |  | ||||||
|   int i = 0; |  | ||||||
|   while (i < charCountLen) |  | ||||||
|   { |  | ||||||
|     charCount[i] = 0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void printTableAbbreviation(void) |  | ||||||
| { |  | ||||||
|   initStringData(); |  | ||||||
|   if (tableNameList[0] == 0) |  | ||||||
|   { |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
|   send_char(0x20); |  | ||||||
|   int i = 0; |  | ||||||
|   for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     if (tableNameList[i] >= 65 && tableNameList[i] <= 90) |  | ||||||
|     { |  | ||||||
|       send_char(tableNameList[i]+32); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|       send_char(tableNameList[i]); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   send_char(0x20); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void eraseTableAbbreviation(void) |  | ||||||
| { |  | ||||||
|   initStringData(); |  | ||||||
|   for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) |  | ||||||
|   { |  | ||||||
|     tableNameList[i] = '\0'; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void printString(char* str) |  | ||||||
| { |  | ||||||
|  |  | ||||||
|   if (str[0] != '\0') |  | ||||||
|   { |  | ||||||
|     int i = 0; |  | ||||||
|     while (true) |  | ||||||
|     { |  | ||||||
|       if (str[i] == 0) |  | ||||||
|       { |  | ||||||
|         break; |  | ||||||
|       } |  | ||||||
|       send_char(str[i++]); |  | ||||||
|       charCount[countPointer]++; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void printStringAndQueueChar(char* str) |  | ||||||
| { |  | ||||||
|   initStringData(); |  | ||||||
|   if (charCount[countPointer] != 0) |  | ||||||
|   { |  | ||||||
|     countPointer++; |  | ||||||
|   } |  | ||||||
|   sendAbbr = true; |  | ||||||
|   if (str[0] != '\0') |  | ||||||
|   { |  | ||||||
|     printString(str); |  | ||||||
|  |  | ||||||
|     for (int i = 0; i < tableNameListLen-1; i++) |  | ||||||
|     { |  | ||||||
|       if (tableNameList[i] == '\0') |  | ||||||
|       { |  | ||||||
|         tableNameList[i] = str[0]; |  | ||||||
|         tableNameList[i+1] = '\0'; |  | ||||||
|         break; |  | ||||||
|       } |  | ||||||
|       else if (i == tableNameListLen-2) |  | ||||||
|       { |  | ||||||
|         printTableAbbreviation(); |  | ||||||
|         break; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) |  | ||||||
|     //{ |  | ||||||
|     //  send_char(tableNameList[i]); |  | ||||||
|     //} |  | ||||||
|     //send_string_P("Darden"); |  | ||||||
|     //send_string_P(&myarray); |  | ||||||
|     //send_string_P(str); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void ReplaceString(char *orig, char *repl) |  | ||||||
| { |  | ||||||
|   int i = 0; |  | ||||||
|   while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i]) |  | ||||||
|    i++; |  | ||||||
|  |  | ||||||
|   if(orig[i] != 0x0) |  | ||||||
|   { |  | ||||||
|     int o = i; |  | ||||||
|     while (orig[o++] != 0x0) { |  | ||||||
|       charCount[countPointer]--; |  | ||||||
|       register_code(KC_BSPC); |  | ||||||
|       unregister_code(KC_BSPC); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   printString(repl+i); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void deletePrev(void) |  | ||||||
| { |  | ||||||
|   for (int i = 0; i < charCount[countPointer]; i++) |  | ||||||
|   { |  | ||||||
|       register_code(KC_BSPC); |  | ||||||
|       unregister_code(KC_BSPC); |  | ||||||
|   } |  | ||||||
|   charCount[countPointer] = 0; |  | ||||||
|   countPointer--; |  | ||||||
|   int i = 1; |  | ||||||
|   for (;i < tableNameListLen-1; i++) |  | ||||||
|   { |  | ||||||
|     if (tableNameList[i] == 0x0) |  | ||||||
|     { |  | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   tableNameList[i-1] = 0x0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void processSmartMacroTap(uint16_t kc) |  | ||||||
| { |  | ||||||
|   initStringData(); |  | ||||||
|   switch(kc) |  | ||||||
|   { |  | ||||||
|     case TD_C: |  | ||||||
|       if (containsCode(TD_D)) |  | ||||||
|       { |  | ||||||
|         printString("ribution"); |  | ||||||
|         printStringAndQueueChar("Center"); |  | ||||||
|       } |  | ||||||
|       else if (last2CodeAre(TD_C)) |  | ||||||
|       { |  | ||||||
|         ReplaceString("Corporation", "Contact"); |  | ||||||
|       } |  | ||||||
|       else if(lastCodeIs(TD_C)) |  | ||||||
|       { |  | ||||||
|         printString("oration"); |  | ||||||
|       } |  | ||||||
|       else |  | ||||||
|       { |  | ||||||
|         printStringAndQueueChar("Corp"); |  | ||||||
|       } |  | ||||||
|       break; |  | ||||||
|     case TD_D: |  | ||||||
|       if (last2CodeAre(TD_D)) |  | ||||||
|       { |  | ||||||
|         ReplaceString("Distribution", "Distributor"); |  | ||||||
|       } |  | ||||||
|       else if(lastCodeIs(TD_D)) |  | ||||||
|       { |  | ||||||
|         printString("ribution"); |  | ||||||
|       } |  | ||||||
|       else |  | ||||||
|       { |  | ||||||
|         printStringAndQueueChar("Dist"); |  | ||||||
|       } |  | ||||||
|       break; |  | ||||||
|     case TD_G: |  | ||||||
|         printStringAndQueueChar("Global"); |  | ||||||
|         printStringAndQueueChar("Lookup"); |  | ||||||
|       break; |  | ||||||
|     case TD_I: |  | ||||||
|       if (containsCode(TD_W)) |  | ||||||
|         printStringAndQueueChar("Instance"); |  | ||||||
|       else |  | ||||||
|         printStringAndQueueChar("Item"); |  | ||||||
|       break; |  | ||||||
|     case TD_N: |  | ||||||
|       printStringAndQueueChar("NadRate"); |  | ||||||
|       break; |  | ||||||
|     case TD_P: |  | ||||||
|       if (last2CodesAre(TD_D, TD_C)) |  | ||||||
|       { |  | ||||||
|         ReplaceString("DistributionCenter", "DistCenter"); |  | ||||||
|         printStringAndQueueChar("Pricing"); |  | ||||||
|       } |  | ||||||
|       else if (last2CodeAre(TD_P)) |  | ||||||
|       { |  | ||||||
|       } |  | ||||||
|       else if(lastCodeIs(TD_P)) |  | ||||||
|       { |  | ||||||
|         ReplaceString("Product", "Person"); |  | ||||||
|       } |  | ||||||
|       else |  | ||||||
|       { |  | ||||||
|         printStringAndQueueChar("Product"); |  | ||||||
|       } |  | ||||||
|       break; |  | ||||||
|     case TD_Q: |  | ||||||
|       printStringAndQueueChar("Darden"); |  | ||||||
|       break; |  | ||||||
|     case TD_S: |  | ||||||
|       if (containsCode(TD_W)) |  | ||||||
|         if (containsCode(TD_S) || containsCode(TD_D)) |  | ||||||
|           printStringAndQueueChar("Step"); |  | ||||||
|         else |  | ||||||
|           printStringAndQueueChar("Session"); |  | ||||||
|       else |  | ||||||
|         printStringAndQueueChar("Supplier"); |  | ||||||
|       break; |  | ||||||
|     case TD_T: |  | ||||||
|       if (containsCode(TD_W)) |  | ||||||
|         printStringAndQueueChar("Task"); |  | ||||||
|       else |  | ||||||
|         printStringAndQueueChar("Type"); |  | ||||||
|       break; |  | ||||||
|     case TD_W: |  | ||||||
|       printStringAndQueueChar("Workflow"); |  | ||||||
|       break; |  | ||||||
|   } |  | ||||||
|   addKeyCode(kc); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) |  | ||||||
| { |  | ||||||
|   if (record->event.pressed) |  | ||||||
|   { |  | ||||||
|     switch (keycode) |  | ||||||
|     { |  | ||||||
|       case KC_LSPO: |  | ||||||
|       case KC_RSPC: |  | ||||||
|         shifted = true; |  | ||||||
|         return true; |  | ||||||
|  |  | ||||||
|       case S_LFTJN: SEND_STRING("LEFT JOIN"); return false; |  | ||||||
|       case S_INRJN: SEND_STRING("INNER JOIN "); return false; |  | ||||||
|       case S_SLCT:  SEND_STRING("SELECT "); return false; |  | ||||||
|       case S_FROM:  SEND_STRING("FROM "); return false; |  | ||||||
|       case S_DSNCT: SEND_STRING("DISTINCT "); return false; |  | ||||||
|       case S_ORDER: SEND_STRING("ORDER "); return false; |  | ||||||
|       case S_WHERE: SEND_STRING("WHERE "); return false; |  | ||||||
|       case S_ALTER: SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = "); return false; |  | ||||||
|       case S_ASTRK: SEND_STRING("* "); return false; |  | ||||||
|  |  | ||||||
|       case KC_BSLS: |  | ||||||
|         initStringData(); |  | ||||||
|         layer_on(SQLNAMES); |  | ||||||
|         return false; |  | ||||||
|  |  | ||||||
|       case TD_BSPC: |  | ||||||
|         if (!shifted){ |  | ||||||
|           deletePrev(); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|           register_code(KC_BSPC); |  | ||||||
|           unregister_code(KC_BSPC); |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
|  |  | ||||||
|       case TD_A: |  | ||||||
|       case TD_B: |  | ||||||
|       case TD_C: |  | ||||||
|       case TD_D: |  | ||||||
|       case TD_E: |  | ||||||
|       case TD_F: |  | ||||||
|       case TD_G: |  | ||||||
|       case TD_H: |  | ||||||
|       case TD_I: |  | ||||||
|       case TD_J: |  | ||||||
|       case TD_K: |  | ||||||
|       case TD_L: |  | ||||||
|       case TD_M: |  | ||||||
|       case TD_N: |  | ||||||
|       case TD_O: |  | ||||||
|       case TD_P: |  | ||||||
|       case TD_Q: |  | ||||||
|       case TD_R: |  | ||||||
|       case TD_S: |  | ||||||
|       case TD_T: |  | ||||||
|       case TD_U: |  | ||||||
|       case TD_V: |  | ||||||
|       case TD_W: |  | ||||||
|       case TD_X: |  | ||||||
|       case TD_Y: |  | ||||||
|       case TD_Z: |  | ||||||
|         processSmartMacroTap(keycode); |  | ||||||
|         return false; |  | ||||||
|  |  | ||||||
|       case TD_ENT: |  | ||||||
|         printTableAbbreviation(); |  | ||||||
|       case TD_ESC: |  | ||||||
|         eraseKeyCodes(); |  | ||||||
|         eraseTableAbbreviation(); |  | ||||||
|         layer_off(SQLNAMES); |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     switch (keycode) |  | ||||||
|     { |  | ||||||
|  |  | ||||||
|       case KC_BSLS: |  | ||||||
|         if (macroTaps[0] == 0) |  | ||||||
|         { |  | ||||||
|           SEND_STRING("\\"); |  | ||||||
|           layer_off(SQLNAMES); |  | ||||||
|         } |  | ||||||
|         return true; |  | ||||||
|       case KC_LSPO: |  | ||||||
|       case KC_RSPC: |  | ||||||
|         shifted = false; |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return true; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|  |  | ||||||
| @@ -507,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|     LAYOUT_60_ansi( |     LAYOUT_60_ansi( | ||||||
|       ESCAP,  KC_1,  KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,  KC_9,  KC_0,  MNUS,  EQUL,  BACKSPC, |       ESCAP,  KC_1,  KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,  KC_9,  KC_0,  MNUS,  EQUL,  BACKSPC, | ||||||
|       KC_TAB,  KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,  KC_O,  KC_P,  LBRC,  RBRC,  BSLASH, |       KC_TAB,  KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,  KC_O,  KC_P,  LBRC,  RBRC,  BSLASH, | ||||||
|       MO_FNLR,  KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,  KC_L,  COLN,  QUOT,  ENTER_OR_SQL, |       FN_QT,    KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,  KC_L,  COLN,  QUOT,  ENTER_OR_SQL, | ||||||
|       LEFTSHFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  CMMA,  PRRD,  SLSH,  RIGHT_SHIFT__PAREN, |       LEFTSHFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  CMMA,  PRRD,  SLSH,  RIGHT_SHIFT__PAREN, | ||||||
|       CTLL,  WINL,  ALTL,  SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE,  ALTR,  WINR,  APPR,  CTLR), |       CTLL,  WINL,  ALTL,  SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE,  ALTR,  WINR,  APPR,  CTLR), | ||||||
|  |  | ||||||
| @@ -531,23 +36,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||||||
|     LAYOUT_60_ansi( |     LAYOUT_60_ansi( | ||||||
|       S_ALTER, ____, ____, ____, ____, ____, ____, ____, S_ASTRK, ____, ____, ____, ____,    ___________, |       S_ALTER, ____, ____, ____, ____, ____, ____, ____, S_ASTRK, ____, ____, ____, ____,    ___________, | ||||||
|       ______,    ____, S_WHERE, ____, ____, ____, ____, ____, S_INRJN, S_ORDER, ____, ____, ____, ______, |       ______,    ____, S_WHERE, ____, ____, ____, ____, ____, S_INRJN, S_ORDER, ____, ____, ____, ______, | ||||||
|       _______, KC_LBRC, S_SLCT, KC_PAST,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________, |       _______, KC_LBRC, S_SLCT, S_ASTRK ,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________, | ||||||
|       ________,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  _________________, |       ________,  RGB_VAI, RGB_VAD, ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  _________________, | ||||||
|       ____,  ____,  ____,  /*------------------*/_____/*------------------*/,  ____,  ____,  ____,  ____), |       ____,  ____,  ____,  /*------------------*/_____/*------------------*/,  ____,  ____,  ____,  ____), | ||||||
|  |  | ||||||
|   [SQLNAMES]= |  | ||||||
|     LAYOUT_60_ansi( |  | ||||||
|       TD_ESC,    ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____,  ____, TD_BSPC, |  | ||||||
|       ________,   TD_Q,  TD_W,  TD_E,  TD_R,  TD_T,  TD_Y,  TD_U,  TD_I,  TD_O,  TD_P,  ____,  ____,  _____, |  | ||||||
|       ___________, TD_A,  TD_S,  TD_D,  TD_F,  TD_G,  TD_H,  TD_J,  TD_K,  TD_L,  ____,  ____,       TD_ENT, |  | ||||||
|       ___________,  TD_Z,  TD_X,  TD_C,  TD_V,  TD_B,  TD_N,  TD_M,  ____,  ____,  ____,  _________________, |  | ||||||
|       ____, ____, ____, /*----------------------*/TD_ENT/*-----------------------*/, ____, ____, ____, RESET), |  | ||||||
|  |  | ||||||
|   [FN_LAYER]= |   [FN_LAYER]= | ||||||
|     LAYOUT_60_ansi( |     LAYOUT_60_ansi( | ||||||
|       KC_GRV, 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_GRV, 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_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), ____, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, ____, |       KC_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), ____, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, ____, | ||||||
|       ____, KC_VOLD, KC_MUTE, KC_VOLU, ____, ____, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, ____, |       ____, KC_VOLD, KC_MUTE, KC_VOLU, ____, ____, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, ____, | ||||||
|       ____, ____, ____, ____, ____, ____, KC_END, ____, QWRTY, NAVS, GAME, ____, |       ____, RGB_HUI, RGB_SAI, RGB_SAD, ____,  ____, KC_END, QWRTY, GAME, NAVS, ____, ____, | ||||||
|       ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, ____) |       ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, RESET) | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -1,105 +1,15 @@ | |||||||
| #include "quantum.h" | #include QMK_KEYBOARD_H | ||||||
|  |  | ||||||
| //Control |  | ||||||
| #define MO_FNLR MO(FN_LAYER) |  | ||||||
| #define BACKSPC KC_BSPC |  | ||||||
| #define ENTER_OR_SQL LT(SQLMACROS,KC_ENT) |  | ||||||
| #define ESCAP KC_ESC |  | ||||||
| #define PSCR KC_PSCREEN |  | ||||||
| #define SCRL KC_SCROLLLOCK |  | ||||||
| #define PAUS KC_PAUSE |  | ||||||
| #define NSRT KC_INSERT |  | ||||||
| #define HOME KC_HOME |  | ||||||
| #define PGUP KC_PGUP |  | ||||||
| #define PGDN KC_PGDN |  | ||||||
| #define END_ KC_END |  | ||||||
| #define DELT KC_DELETE |  | ||||||
| #define UPUP KC_UP |  | ||||||
| #define D_WN KC_DOWN |  | ||||||
| #define LEFT KC_LEFT |  | ||||||
| #define RGHT KC_RIGHT |  | ||||||
|  |  | ||||||
| //KEYPAD |  | ||||||
| #define KP_1 KC_KP_1 |  | ||||||
| #define KP_2 KC_KP_2 |  | ||||||
| #define KP_3 KC_KP_3 |  | ||||||
| #define KP_4 KC_KP_4 |  | ||||||
| #define KP_5 KC_KP_5 |  | ||||||
| #define KP_6 KC_KP_6 |  | ||||||
| #define KP_7 KC_KP_7 |  | ||||||
| #define KP_8 KC_KP_8 |  | ||||||
| #define KP_9 KC_KP_9 |  | ||||||
| #define KP_0 KC_KP_0 |  | ||||||
| #define NMLK KC_NUMLOCK |  | ||||||
| #define STAR KC_KP_ASTERISK |  | ||||||
| #define KSSH KC_KP_SLASH |  | ||||||
| #define KMIN KC_KP_MINUS |  | ||||||
| #define PLUS KC_KP_PLUS |  | ||||||
| #define KNTR KC_KP_ENTER |  | ||||||
| #define KDOT KC_KP_DOT |  | ||||||
|  |  | ||||||
| //Modifiers |  | ||||||
| #define CTLL KC_LCTL |  | ||||||
| #define LEFTSHFT KC_LSPO |  | ||||||
| #define WINL KC_LGUI |  | ||||||
| #define ALTL KC_LALT |  | ||||||
| #define CTLR KC_RCTL |  | ||||||
| #define RIGHT_SHIFT__PAREN KC_RSPC |  | ||||||
| #define WINR KC_RGUI |  | ||||||
| #define ALTR KC_RALT |  | ||||||
| #define APPR KC_APP |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //Punctuation | enum marianas_layers { | ||||||
| #define CMMA KC_COMM |   QWERTY, | ||||||
| #define PRRD KC_DOT | /* | ||||||
| #define SLSH KC_SLSH |   COLEMAK, | ||||||
| #define QUOT KC_QUOT |   DVORAK, | ||||||
| #define COLN KC_SCLN | */ | ||||||
| #define LBRC KC_LBRC |   NAV_CLUSTER, | ||||||
| #define RBRC KC_RBRC |   GAMING, | ||||||
| #define EQUL KC_EQL |   SQLMACROS, | ||||||
| #define MNUS KC_MINS |   FN_LAYER | ||||||
| #define BSLASH KC_BSLS | }; | ||||||
|  |  | ||||||
| //Layers |  | ||||||
| #define QWRTY TO(QWERTY) |  | ||||||
| #define NAVS TO(NAV_CLUSTER) |  | ||||||
| #define GAME TO(GAMING) |  | ||||||
|  |  | ||||||
| //Space |  | ||||||
| #define ____ KC_TRNS |  | ||||||
| #define _____ KC_TRNS |  | ||||||
| #define ______ KC_TRNS |  | ||||||
| #define _______ KC_TRNS |  | ||||||
| #define ________ KC_TRNS |  | ||||||
| #define ___________ KC_TRNS |  | ||||||
| #define _________________ KC_TRNS |  | ||||||
| #define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC |  | ||||||
| #define KCNO KC_NO |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #define macroTapsLen 32 |  | ||||||
| #define tableNameListLen 32 |  | ||||||
| #define charCountLen 32 |  | ||||||
|  |  | ||||||
| void initStringData(void); |  | ||||||
| uint32_t layer_state_set_user(uint32_t state); |  | ||||||
| bool containsCode(uint16_t kc); |  | ||||||
| bool lastCodeIs(uint16_t kc); |  | ||||||
| bool last2CodeAre(uint16_t kc); |  | ||||||
| bool last2CodesAre(uint16_t kc, uint16_t kc2); |  | ||||||
| void addKeyCode(uint16_t kc); |  | ||||||
| void eraseKeyCodes(void); |  | ||||||
| void eraseCharCounts(void); |  | ||||||
| void printTableAbbreviation(void); |  | ||||||
| void eraseTableAbbreviation(void); |  | ||||||
| void printString(char* str); |  | ||||||
| void printStringAndQueueChar(char* str); |  | ||||||
| void ReplaceString(char *orig, char *repl); |  | ||||||
| void deletePrev(void); |  | ||||||
| void processSmartMacroTap(uint16_t kc); |  | ||||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record); |  | ||||||
|   | |||||||
							
								
								
									
										510
									
								
								keyboards/dz60/keymaps/marianas/relativity.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										510
									
								
								keyboards/dz60/keymaps/marianas/relativity.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,510 @@ | |||||||
|  | #include "relativity.h" | ||||||
|  | #include "keymap.h" | ||||||
|  | #include "keyDefinitions.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | uint16_t *macroTaps = 0; | ||||||
|  |  | ||||||
|  | char *tableNameList = 0; | ||||||
|  |  | ||||||
|  | uint8_t *charCount = 0; | ||||||
|  | uint8_t countPointer = 0; | ||||||
|  |  | ||||||
|  | bool relativityActive = false; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool sendAbbr = false; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static int16_t relativityTimer = 0; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool tempOff = false; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void initStringData() | ||||||
|  | { | ||||||
|  |   if (macroTaps == 0) | ||||||
|  |   { | ||||||
|  |     macroTaps = malloc(macroTapsLen*sizeof(uint16_t)); | ||||||
|  |     for(int i = 0; i < macroTapsLen; i++) | ||||||
|  |     { | ||||||
|  |       macroTaps[i] = 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (tableNameList == 0) | ||||||
|  |   { | ||||||
|  |     tableNameList = malloc(tableNameListLen*sizeof(char)); | ||||||
|  |     for(int i = 0; i < tableNameListLen; i++) | ||||||
|  |     { | ||||||
|  |       tableNameList[i] = 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   if (charCount == 0) | ||||||
|  |   { | ||||||
|  |     charCount = malloc(charCountLen*sizeof(uint8_t)); | ||||||
|  |     for (int i = 0; i < charCountLen; i++) | ||||||
|  |     { | ||||||
|  |       charCount[i] = 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void activateRelativity(void) | ||||||
|  | { | ||||||
|  |   initStringData(); | ||||||
|  |   rgblight_mode(RGBLIGHT_MODE_KNIGHT); | ||||||
|  |   relativityTimer = timer_read(); | ||||||
|  |   relativityActive = true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool deactivateRelativity(void) | ||||||
|  | {   | ||||||
|  |   rgblight_mode(9); | ||||||
|  |   eraseKeyCodes(); | ||||||
|  |   eraseTableAbbreviation(); | ||||||
|  |   eraseCharCounts(); | ||||||
|  |   relativityActive = false; | ||||||
|  |   tempOff = false; | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool containsCode(uint16_t kc) | ||||||
|  | { | ||||||
|  |   for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (macroTaps[i] == kc) return true; | ||||||
|  |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool lastCodeIs(uint16_t kc) | ||||||
|  | { | ||||||
|  |   for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true; | ||||||
|  |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool last2CodeAre(uint16_t kc) | ||||||
|  | { | ||||||
|  |   for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true; | ||||||
|  |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool last2CodesAre(uint16_t kc, uint16_t kc2) | ||||||
|  | { | ||||||
|  |   for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true; | ||||||
|  |   } | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void addKeyCode(uint16_t kc) | ||||||
|  | { | ||||||
|  |   int i = 0; | ||||||
|  |   while (i < macroTapsLen-2 && macroTaps[i] > 0) i++; | ||||||
|  |   if (macroTaps[i] == 0) | ||||||
|  |   { | ||||||
|  |     macroTaps[i] = kc; | ||||||
|  |     macroTaps[i+1] = 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void eraseKeyCodes(void) | ||||||
|  | { | ||||||
|  |   int i = 0; | ||||||
|  |   while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void eraseCharCounts(void) | ||||||
|  | { | ||||||
|  |   while (countPointer > 0) | ||||||
|  |   { | ||||||
|  |     charCount[countPointer] = 0; | ||||||
|  |     countPointer--; | ||||||
|  |   } | ||||||
|  |   charCount[countPointer] = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void printTableAbbreviationLimited(void) | ||||||
|  | { | ||||||
|  |   if (tableNameList[0] == 0) | ||||||
|  |   { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |   int i = 0; | ||||||
|  |   for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (tableNameList[i] >= 65 && tableNameList[i] <= 90) | ||||||
|  |     { | ||||||
|  |       send_char(tableNameList[i]+32); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       send_char(tableNameList[i]); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void printTableAbbreviation(void) | ||||||
|  | { | ||||||
|  |   if (tableNameList[0] == 0) | ||||||
|  |   { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |   send_char(0x20); | ||||||
|  |   int i = 0; | ||||||
|  |   for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     if (tableNameList[i] >= 65 && tableNameList[i] <= 90) | ||||||
|  |     { | ||||||
|  |       send_char(tableNameList[i]+32); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       send_char(tableNameList[i]); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   send_char(0x20); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void eraseTableAbbreviation(void) | ||||||
|  | { | ||||||
|  |   for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) | ||||||
|  |   { | ||||||
|  |     tableNameList[i] = '\0'; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void printString(char* str) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   if (str[0] != '\0') | ||||||
|  |   { | ||||||
|  |     int i = 0; | ||||||
|  |     while (true) | ||||||
|  |     { | ||||||
|  |       if (str[i] == 0) | ||||||
|  |       { | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       send_char(str[i++]); | ||||||
|  |       charCount[countPointer]++; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void printStringAndQueueChar(char* str) | ||||||
|  | { | ||||||
|  |   if (charCount[countPointer] > 0 && countPointer < charCountLen) | ||||||
|  |   { | ||||||
|  |     countPointer++; | ||||||
|  |   } | ||||||
|  |   sendAbbr = true; | ||||||
|  |   if (str[0] != '\0') | ||||||
|  |   { | ||||||
|  |     printString(str); | ||||||
|  |  | ||||||
|  |     for (int i = 0; i < tableNameListLen-1; i++) | ||||||
|  |     { | ||||||
|  |       if (tableNameList[i] == '\0') | ||||||
|  |       { | ||||||
|  |         tableNameList[i] = str[0]; | ||||||
|  |         tableNameList[i+1] = '\0'; | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       else if (i == tableNameListLen-2) | ||||||
|  |       { | ||||||
|  |         printTableAbbreviation(); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++) | ||||||
|  |     //{ | ||||||
|  |     //  send_char(tableNameList[i]); | ||||||
|  |     //} | ||||||
|  |     //send_string_P("Darden"); | ||||||
|  |     //send_string_P(&myarray); | ||||||
|  |     //send_string_P(str); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void ReplaceString(char *orig, char *repl) | ||||||
|  | { | ||||||
|  |   int i = 0; | ||||||
|  |   while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i]) | ||||||
|  |    i++; | ||||||
|  |  | ||||||
|  |   if(orig[i] != 0x0) | ||||||
|  |   { | ||||||
|  |     int o = i; | ||||||
|  |     while (orig[o++] != 0x0) { | ||||||
|  |       charCount[countPointer]--; | ||||||
|  |       register_code(KC_BSPC); | ||||||
|  |       unregister_code(KC_BSPC); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   printString(repl+i); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void deletePrev(void) | ||||||
|  | { | ||||||
|  |   if (countPointer == 0 && charCount[countPointer] == 0) | ||||||
|  |     return; | ||||||
|  |   for (int i = 0; i < charCount[countPointer]; i++) | ||||||
|  |   { | ||||||
|  |       register_code(KC_BSPC); | ||||||
|  |       unregister_code(KC_BSPC); | ||||||
|  |   } | ||||||
|  |   charCount[countPointer] = 0; | ||||||
|  |   int i = 1; | ||||||
|  |   for (;i < tableNameListLen-1; i++) | ||||||
|  |   { | ||||||
|  |     if (tableNameList[i] == 0x0) | ||||||
|  |     { | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   tableNameList[i-1] = 0x0; | ||||||
|  |   if (countPointer > 0) | ||||||
|  |   { | ||||||
|  |     countPointer--; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool processSmartMacroTap(uint16_t kc) | ||||||
|  | { | ||||||
|  |   if (relativityTimer > 0 && TIMER_DIFF_16(timer_read(), relativityTimer) >= relTimeout) | ||||||
|  |   { | ||||||
|  |     deactivateRelativity(); | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |   relativityTimer = 0; | ||||||
|  |   switch(kc) | ||||||
|  |   { | ||||||
|  |     case KC_C: | ||||||
|  |       if (containsCode(KC_D)) | ||||||
|  |       { | ||||||
|  |         printString("ribution"); | ||||||
|  |         printStringAndQueueChar("Center"); | ||||||
|  |       } | ||||||
|  |       else if (last2CodeAre(KC_C)) | ||||||
|  |       { | ||||||
|  |         ReplaceString("Corporation", "Contact"); | ||||||
|  |       } | ||||||
|  |       else if(lastCodeIs(KC_C)) | ||||||
|  |       { | ||||||
|  |         printString("oration"); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |         printStringAndQueueChar("Corp"); | ||||||
|  |       } | ||||||
|  |       break; | ||||||
|  |     case KC_D: | ||||||
|  |       if (last2CodeAre(KC_D)) | ||||||
|  |       { | ||||||
|  |         ReplaceString("Distribution", "Distributor"); | ||||||
|  |       } | ||||||
|  |       else if(lastCodeIs(KC_D)) | ||||||
|  |       { | ||||||
|  |         printString("ribution"); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |         printStringAndQueueChar("Dist"); | ||||||
|  |       } | ||||||
|  |       break; | ||||||
|  |     case KC_G: | ||||||
|  |         printStringAndQueueChar("Global"); | ||||||
|  |         printStringAndQueueChar("Lookup"); | ||||||
|  |       break; | ||||||
|  |     case KC_I: | ||||||
|  |       if (containsCode(KC_W)) | ||||||
|  |         printStringAndQueueChar("Instance"); | ||||||
|  |       else | ||||||
|  |         printStringAndQueueChar("Item"); | ||||||
|  |       break; | ||||||
|  |     case KC_N: | ||||||
|  |       printStringAndQueueChar("NadRate"); | ||||||
|  |       break; | ||||||
|  |     case KC_P: | ||||||
|  |       if (last2CodesAre(KC_D, KC_C)) | ||||||
|  |       { | ||||||
|  |         ReplaceString("DistributionCenter", "DistCenter"); | ||||||
|  |         printStringAndQueueChar("Pricing"); | ||||||
|  |       } | ||||||
|  |       else if (last2CodeAre(KC_P)) | ||||||
|  |       { | ||||||
|  |       } | ||||||
|  |       else if(lastCodeIs(KC_P)) | ||||||
|  |       { | ||||||
|  |         ReplaceString("Product", "Person"); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |         printStringAndQueueChar("Product"); | ||||||
|  |       } | ||||||
|  |       break; | ||||||
|  |     case KC_Q: | ||||||
|  |       printStringAndQueueChar("Darden"); | ||||||
|  |       break; | ||||||
|  |     case KC_S: | ||||||
|  |       if (containsCode(KC_W)) | ||||||
|  |         if (containsCode(KC_S) || containsCode(KC_D)) | ||||||
|  |           printStringAndQueueChar("Step"); | ||||||
|  |         else | ||||||
|  |           printStringAndQueueChar("Session"); | ||||||
|  |       else | ||||||
|  |         printStringAndQueueChar("Supplier"); | ||||||
|  |       break; | ||||||
|  |     case KC_T: | ||||||
|  |       if (containsCode(KC_W)) | ||||||
|  |         printStringAndQueueChar("Task"); | ||||||
|  |       else | ||||||
|  |         printStringAndQueueChar("Type"); | ||||||
|  |       break; | ||||||
|  |     case KC_W: | ||||||
|  |       printStringAndQueueChar("Workflow"); | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  |   addKeyCode(kc); | ||||||
|  |   return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool shifted = false; | ||||||
|  | bool isShifted() | ||||||
|  | { | ||||||
|  |   return shifted; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void setShifted(bool val) | ||||||
|  | { | ||||||
|  |   shifted = val; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool storeShiftState(uint16_t keycode, keyrecord_t *record) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   if (record->event.pressed) | ||||||
|  |   { | ||||||
|  |     switch (keycode) | ||||||
|  |     { | ||||||
|  |       case KC_LSPO: | ||||||
|  |       case KC_RSPC: | ||||||
|  |         shifted = true; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     switch (keycode) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |       case KC_LSPO: | ||||||
|  |       case KC_RSPC: | ||||||
|  |         shifted = false; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool handleSmartMacros(uint16_t keycode, keyrecord_t *record) | ||||||
|  | { | ||||||
|  |   if (relativityActive != true) return true; | ||||||
|  |   if (record->event.pressed) | ||||||
|  |   { | ||||||
|  |     switch (keycode) | ||||||
|  |     { | ||||||
|  |       case KC_BSPC: | ||||||
|  |         if (!isShifted()){ | ||||||
|  |           deletePrev(); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |           register_code(KC_BSPC); | ||||||
|  |           unregister_code(KC_BSPC); | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |       case KC_A: | ||||||
|  |       case KC_B: | ||||||
|  |       case KC_C: | ||||||
|  |       case KC_D: | ||||||
|  |       case KC_E: | ||||||
|  |       case KC_F: | ||||||
|  |       case KC_G: | ||||||
|  |       case KC_H: | ||||||
|  |       case KC_I: | ||||||
|  |       case KC_J: | ||||||
|  |       case KC_K: | ||||||
|  |       case KC_L: | ||||||
|  |       case KC_M: | ||||||
|  |       case KC_N: | ||||||
|  |       case KC_O: | ||||||
|  |       case KC_P: | ||||||
|  |       case KC_Q: | ||||||
|  |       case KC_R: | ||||||
|  |       case KC_S: | ||||||
|  |       case KC_T: | ||||||
|  |       case KC_U: | ||||||
|  |       case KC_V: | ||||||
|  |       case KC_W: | ||||||
|  |       case KC_X: | ||||||
|  |       case KC_Y: | ||||||
|  |       case KC_Z: | ||||||
|  |         return processSmartMacroTap(keycode); | ||||||
|  |  | ||||||
|  |       case PRRD: | ||||||
|  |         if (tempOff) | ||||||
|  |         { | ||||||
|  |           SEND_STRING("Id = "); | ||||||
|  |           printTableAbbreviationLimited(); | ||||||
|  |           SEND_STRING(".Id"); | ||||||
|  |           return deactivateRelativity(); | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           printTableAbbreviation(); | ||||||
|  |           SEND_STRING("ON "); | ||||||
|  |           printTableAbbreviationLimited(); | ||||||
|  |           eraseKeyCodes(); | ||||||
|  |           eraseTableAbbreviation(); | ||||||
|  |           eraseCharCounts(); | ||||||
|  |           tempOff = true; | ||||||
|  |           return true; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |  | ||||||
|  |       case KC_SPC: | ||||||
|  |         printTableAbbreviation(); | ||||||
|  |           return deactivateRelativity(); | ||||||
|  |       case ENTER_OR_SQL: | ||||||
|  |         if (tempOff) | ||||||
|  |         { | ||||||
|  |           SEND_STRING("Id = "); | ||||||
|  |           printTableAbbreviationLimited(); | ||||||
|  |           SEND_STRING(".Id"); | ||||||
|  |           deactivateRelativity(); | ||||||
|  |           return true; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |           printTableAbbreviation(); | ||||||
|  |           deactivateRelativity(); | ||||||
|  |           return true; | ||||||
|  |         } | ||||||
|  |       case KC_ESC: | ||||||
|  |           return deactivateRelativity(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return true; | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								keyboards/dz60/keymaps/marianas/relativity.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								keyboards/dz60/keymaps/marianas/relativity.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | #include QMK_KEYBOARD_H | ||||||
|  | #define macroTapsLen 32 | ||||||
|  | #define tableNameListLen 32 | ||||||
|  | #define charCountLen 32 | ||||||
|  |  | ||||||
|  | #define relTimeout 1500 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void activateRelativity(void); | ||||||
|  | bool deactivateRelativity(void); | ||||||
|  | void initStringData(void); | ||||||
|  | bool containsCode(uint16_t kc); | ||||||
|  | bool lastCodeIs(uint16_t kc); | ||||||
|  | bool last2CodeAre(uint16_t kc); | ||||||
|  | bool last2CodesAre(uint16_t kc, uint16_t kc2); | ||||||
|  | void addKeyCode(uint16_t kc); | ||||||
|  | void eraseKeyCodes(void); | ||||||
|  | void eraseCharCounts(void); | ||||||
|  | void printTableAbbreviation(void); | ||||||
|  | void eraseTableAbbreviation(void); | ||||||
|  | void printString(char* str); | ||||||
|  | void printStringAndQueueChar(char* str); | ||||||
|  | void ReplaceString(char *orig, char *repl); | ||||||
|  | void deletePrev(void); | ||||||
|  | bool processSmartMacroTap(uint16_t kc); | ||||||
|  | bool isShifted(void); | ||||||
|  | void setShifted(bool); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool handleSmartMacros(uint16_t keycode, keyrecord_t *record); | ||||||
|  | bool storeShiftState(uint16_t keycode, keyrecord_t *record); | ||||||
| @@ -15,3 +15,7 @@ AUDIO_ENABLE = no | |||||||
| RGBLIGHT_ENABLE = yes | RGBLIGHT_ENABLE = yes | ||||||
| TAP_DANCE_ENABLE = no | TAP_DANCE_ENABLE = no | ||||||
| AUTO_SHIFT_ENABLE = no | AUTO_SHIFT_ENABLE = no | ||||||
|  |  | ||||||
|  |  | ||||||
|  | SRC += relativity.c | ||||||
|  | SRC += customLogic.c | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user