1 // 2019, g Heavy Industries
2 // Blessed mother of Christ, please keep this readable
3 // and protect us from segfaults. For thine is the clock,
4 // the slave and the master. Until we return from main.
8 #include QMK_KEYBOARD_H
11 #include "keymap_steno.h"
14 extern size_t keymapsCount; // Total keymaps
15 extern uint32_t cChord; // Current Chord
16 extern uint32_t stenoLayers[]; // Chords that simulate QMK layers
17 extern size_t stenoLayerCount; // Number of simulated layers
18 uint32_t refChord; // Reference chord for PC macro
21 void processChord(bool useFakeSteno);
22 uint32_t processQwerty(bool lookup);
23 uint32_t processFakeSteno(bool lookup);
24 void saveState(uint32_t cChord);
25 void restoreState(void);
27 // Macros for use in keymap.c
28 void SEND(uint8_t kc);
30 void SET_STICKY(uint32_t);
31 void SWITCH_LAYER(int);
32 void CLICK_MOUSE(uint8_t);
35 #define P(chord, act) if (cChord == (chord)) { if (!lookup) {act;} return chord;}
36 #define PC(chord, act) if (cChord == (chord)) { if (!lookup) {act;} return chord;} \
37 for(int i = 0; i < stenoLayerCount; i++) { \
38 refChord = stenoLayers[i] | chord; \
39 if (cChord == (refChord)) { if (!lookup) {act;} return refChord;}; \
42 // Shift to internal representation
43 // i.e) S(teno)R(ight)F
44 #define STN(n) (1L<<n)
46 SFN = 0, SPWR, SST1, SST2, SST3, SST4, SNUML, SNUMR,
47 SLSU, SLSD, SLT, SLK, SLP, SLW, SLH, SLR, SLA, SLO,
48 SRE, SRU, SRF, SRR, SRP, SRB, SRL, SRG, SRT, SRS, SRD, SRZ, SRES1, SRES2
58 #define LNO STN(SNUML) // STN1-6
59 #define RNO STN(SNUMR) // STN7-C
60 #define RES1 STN(SRES1) // Use reserved for sticky state
61 #define RES2 STN(SRES2)
65 #define LFT STN(SLT) // (L)e(F)t (T), preprocessor conflict