You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							1.9 KiB
						
					
					
				#ifndef USERSPACE
 | 
						|
#define USERSPACE
 | 
						|
 | 
						|
#include "quantum.h"
 | 
						|
 | 
						|
#define NO_ACTION_ONESHOT
 | 
						|
#define NO_ACTION_MACRO
 | 
						|
 | 
						|
#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
 | 
						|
 | 
						|
// Layer the calculator is on
 | 
						|
#define CALC_LAYER 2
 | 
						|
 | 
						|
// Inside is whether when you are in calc mode it should automatically force numlock, outside is whether it should do it outside of calculator mode
 | 
						|
#define CALC_FORCE_NUM_LOCK_INSIDE_CALC true
 | 
						|
#define CALC_FORCE_NUM_LOCK_OUTSIDE_CALC true
 | 
						|
 | 
						|
// Maximum number of characters the calculator can have
 | 
						|
#define CALC_BUFFER_SIZE 32
 | 
						|
 | 
						|
// Minimum width of the printed text / the number of decimal places
 | 
						|
#define CALC_PRINT_SIZE 6
 | 
						|
 | 
						|
/*-----
 | 
						|
  Special
 | 
						|
-----*/
 | 
						|
#define CALC_CHAR_BEG '('
 | 
						|
#define CALC_CHAR_END ')'
 | 
						|
#define CALC_CHAR_DEC '.'
 | 
						|
 | 
						|
/*-----
 | 
						|
  Operators - Can add more here such as modulo %, factorial !
 | 
						|
-----*/
 | 
						|
#define CALC_CHAR_ADD '+'
 | 
						|
#define CALC_PRIO_ADD 1
 | 
						|
 | 
						|
#define CALC_CHAR_SUB '-'
 | 
						|
#define CALC_PRIO_SUB 1
 | 
						|
 | 
						|
#define CALC_CHAR_MUL '*'
 | 
						|
#define CALC_PRIO_MUL 2
 | 
						|
 | 
						|
#define CALC_CHAR_DIV '/'
 | 
						|
#define CALC_PRIO_DIV 2
 | 
						|
 | 
						|
#define CALC_CHAR_EXP '^'
 | 
						|
#define CALC_PRIO_EXP 3
 | 
						|
 | 
						|
/*-----
 | 
						|
  Functions
 | 
						|
-----*/
 | 
						|
#define CALC_CHAR_SIN 's'
 | 
						|
#define CALC_CHAR_COS 'c'
 | 
						|
#define CALC_CHAR_TAN 't'
 | 
						|
 | 
						|
#define CALC_CHAR_ASN 'S'
 | 
						|
#define CALC_CHAR_ACS 'C'
 | 
						|
#define CALC_CHAR_ATN 'T'
 | 
						|
 | 
						|
#define CALC_CHAR_LGE 'l'
 | 
						|
#define CALC_CHAR_LOG 'L'
 | 
						|
 | 
						|
#define CALC_CHAR_SQT 'q'
 | 
						|
 | 
						|
/*-----
 | 
						|
  Constants
 | 
						|
-----*/
 | 
						|
#define CALC_CHAR_EUL 'e'
 | 
						|
#define CALC_VALU_EUL 2.71828182845904523536
 | 
						|
 | 
						|
#define CALC_CHAR_PI 'p'
 | 
						|
#define CALC_VALU_PI 3.14159265358979323846
 | 
						|
 | 
						|
struct OP // Operator/function
 | 
						|
{
 | 
						|
  char c;
 | 
						|
  unsigned char priority;
 | 
						|
  bool ltr;
 | 
						|
};
 | 
						|
 | 
						|
union TokenRaw // A token after the input has been processed, can either be a number or an operator/function
 | 
						|
{
 | 
						|
  double num;
 | 
						|
  struct OP op;
 | 
						|
};
 | 
						|
 | 
						|
struct Token // Encapsulator
 | 
						|
{
 | 
						|
  bool isNum;
 | 
						|
  union TokenRaw raw;
 | 
						|
};
 | 
						|
 | 
						|
enum CalcFunctions // Hardware calculator key functionality
 | 
						|
{
 | 
						|
  CALC = SAFE_RANGE,
 | 
						|
  ENDCALC
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |