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
			| 
								 
											7 years ago
										 
									 | 
							
								#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
							 |