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:
		
							parent
							
								
									f8d8005835
								
							
						
					
					
						commit
						8f5ac39fb9
					
				
					 8 changed files with 839 additions and 614 deletions
				
			
		
							
								
								
									
										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;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue