1 #include "relativity.h"
3 #include "keyDefinitions.h"
6 uint16_t *macroTaps = 0;
8 char *tableNameList = 0;
10 uint8_t *charCount = 0;
11 uint8_t countPointer = 0;
13 bool relativityActive = false;
16 bool sendAbbr = false;
19 static int16_t relativityTimer = 0;
31 macroTaps = malloc(macroTapsLen*sizeof(uint16_t));
32 for(int i = 0; i < macroTapsLen; i++)
37 if (tableNameList == 0)
39 tableNameList = malloc(tableNameListLen*sizeof(char));
40 for(int i = 0; i < tableNameListLen; i++)
47 charCount = malloc(charCountLen*sizeof(uint8_t));
48 for (int i = 0; i < charCountLen; i++)
55 void activateRelativity(void)
58 rgblight_mode(RGBLIGHT_MODE_KNIGHT);
59 relativityTimer = timer_read();
60 relativityActive = true;
63 bool deactivateRelativity(void)
67 eraseTableAbbreviation();
69 relativityActive = false;
74 bool containsCode(uint16_t kc)
76 for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++)
78 if (macroTaps[i] == kc) return true;
83 bool lastCodeIs(uint16_t kc)
85 for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++)
87 if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true;
92 bool last2CodeAre(uint16_t kc)
94 for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++)
96 if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true;
101 bool last2CodesAre(uint16_t kc, uint16_t kc2)
103 for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++)
105 if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true;
110 void addKeyCode(uint16_t kc)
113 while (i < macroTapsLen-2 && macroTaps[i] > 0) i++;
114 if (macroTaps[i] == 0)
121 void eraseKeyCodes(void)
124 while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0;
127 void eraseCharCounts(void)
129 while (countPointer > 0)
131 charCount[countPointer] = 0;
134 charCount[countPointer] = 0;
137 void printTableAbbreviationLimited(void)
139 if (tableNameList[0] == 0)
144 for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
146 if (tableNameList[i] >= 65 && tableNameList[i] <= 90)
148 send_char(tableNameList[i]+32);
152 send_char(tableNameList[i]);
157 void printTableAbbreviation(void)
159 if (tableNameList[0] == 0)
165 for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
167 if (tableNameList[i] >= 65 && tableNameList[i] <= 90)
169 send_char(tableNameList[i]+32);
173 send_char(tableNameList[i]);
179 void eraseTableAbbreviation(void)
181 for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
183 tableNameList[i] = '\0';
187 void printString(char* str)
200 charCount[countPointer]++;
205 void printStringAndQueueChar(char* str)
207 if (charCount[countPointer] > 0 && countPointer < charCountLen)
216 for (int i = 0; i < tableNameListLen-1; i++)
218 if (tableNameList[i] == '\0')
220 tableNameList[i] = str[0];
221 tableNameList[i+1] = '\0';
224 else if (i == tableNameListLen-2)
226 printTableAbbreviation();
230 //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
232 // send_char(tableNameList[i]);
234 //send_string_P("Darden");
235 //send_string_P(&myarray);
236 //send_string_P(str);
240 void ReplaceString(char *orig, char *repl)
243 while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i])
249 while (orig[o++] != 0x0) {
250 charCount[countPointer]--;
251 register_code(KC_BSPC);
252 unregister_code(KC_BSPC);
258 void deletePrev(void)
260 if (countPointer == 0 && charCount[countPointer] == 0)
262 for (int i = 0; i < charCount[countPointer]; i++)
264 register_code(KC_BSPC);
265 unregister_code(KC_BSPC);
267 charCount[countPointer] = 0;
269 for (;i < tableNameListLen-1; i++)
271 if (tableNameList[i] == 0x0)
276 tableNameList[i-1] = 0x0;
277 if (countPointer > 0)
283 bool processSmartMacroTap(uint16_t kc)
285 if (relativityTimer > 0 && TIMER_DIFF_16(timer_read(), relativityTimer) >= relTimeout)
287 deactivateRelativity();
294 if (containsCode(KC_D))
296 printString("ribution");
297 printStringAndQueueChar("Center");
299 else if (last2CodeAre(KC_C))
301 ReplaceString("Corporation", "Contact");
303 else if(lastCodeIs(KC_C))
305 printString("oration");
309 printStringAndQueueChar("Corp");
313 if (last2CodeAre(KC_D))
315 ReplaceString("Distribution", "Distributor");
317 else if(lastCodeIs(KC_D))
319 printString("ribution");
323 printStringAndQueueChar("Dist");
327 printStringAndQueueChar("Global");
328 printStringAndQueueChar("Lookup");
331 if (containsCode(KC_W))
332 printStringAndQueueChar("Instance");
334 printStringAndQueueChar("Item");
337 printStringAndQueueChar("NadRate");
340 if (last2CodesAre(KC_D, KC_C))
342 ReplaceString("DistributionCenter", "DistCenter");
343 printStringAndQueueChar("Pricing");
345 else if (last2CodeAre(KC_P))
348 else if(lastCodeIs(KC_P))
350 ReplaceString("Product", "Person");
354 printStringAndQueueChar("Product");
358 printStringAndQueueChar("Darden");
361 if (containsCode(KC_W))
362 if (containsCode(KC_S) || containsCode(KC_D))
363 printStringAndQueueChar("Step");
365 printStringAndQueueChar("Session");
367 printStringAndQueueChar("Supplier");
370 if (containsCode(KC_W))
371 printStringAndQueueChar("Task");
373 printStringAndQueueChar("Type");
376 printStringAndQueueChar("Workflow");
384 bool shifted = false;
390 void setShifted(bool val)
396 bool storeShiftState(uint16_t keycode, keyrecord_t *record)
399 if (record->event.pressed)
422 bool handleSmartMacros(uint16_t keycode, keyrecord_t *record)
424 if (relativityActive != true) return true;
425 if (record->event.pressed)
434 register_code(KC_BSPC);
435 unregister_code(KC_BSPC);
464 return processSmartMacroTap(keycode);
469 SEND_STRING("Id = ");
470 printTableAbbreviationLimited();
472 return deactivateRelativity();
476 printTableAbbreviation();
478 printTableAbbreviationLimited();
480 eraseTableAbbreviation();
488 printTableAbbreviation();
489 return deactivateRelativity();
493 SEND_STRING("Id = ");
494 printTableAbbreviationLimited();
496 deactivateRelativity();
501 printTableAbbreviation();
502 deactivateRelativity();
506 return deactivateRelativity();