Teensy 4.1 core updated for C++20
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.

преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 8 години
преди 11 години
преди 10 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 8 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 8 години
преди 10 години
преди 11 години
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788
  1. /* Teensyduino Core Library
  2. * http://www.pjrc.com/teensy/
  3. * Copyright (c) 2013 PJRC.COM, LLC.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining
  6. * a copy of this software and associated documentation files (the
  7. * "Software"), to deal in the Software without restriction, including
  8. * without limitation the rights to use, copy, modify, merge, publish,
  9. * distribute, sublicense, and/or sell copies of the Software, and to
  10. * permit persons to whom the Software is furnished to do so, subject to
  11. * the following conditions:
  12. *
  13. * 1. The above copyright notice and this permission notice shall be
  14. * included in all copies or substantial portions of the Software.
  15. *
  16. * 2. If the Software is incorporated into a build system that allows
  17. * selection among a list of target devices, then similar target
  18. * devices manufactured by PJRC.COM must be included in the list of
  19. * target devices and selectable in the same manner.
  20. *
  21. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  25. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  26. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  27. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  28. * SOFTWARE.
  29. */
  30. #ifndef KEYLAYOUTS_H__
  31. #define KEYLAYOUTS_H__
  32. #include <stdint.h>
  33. #include <avr/pgmspace.h>
  34. #ifdef __cplusplus
  35. extern "C"{
  36. #endif
  37. //#define LAYOUT_US_ENGLISH
  38. //#define LAYOUT_CANADIAN_FRENCH
  39. //#define LAYOUT_CANADIAN_MULTILINGUAL
  40. //#define LAYOUT_DANISH
  41. //#define LAYOUT_FINNISH
  42. //#define LAYOUT_FRENCH
  43. //#define LAYOUT_FRENCH_BELGIAN
  44. //#define LAYOUT_FRENCH_SWISS
  45. //#define LAYOUT_GERMAN
  46. //#define LAYOUT_GERMAN_MAC
  47. //#define LAYOUT_GERMAN_SWISS
  48. //#define LAYOUT_ICELANDIC
  49. //#define LAYOUT_IRISH
  50. //#define LAYOUT_ITALIAN
  51. //#define LAYOUT_NORWEGIAN
  52. //#define LAYOUT_PORTUGUESE
  53. //#define LAYOUT_PORTUGUESE_BRAZILIAN
  54. //#define LAYOUT_SPANISH
  55. //#define LAYOUT_SPANISH_LATIN_AMERICA
  56. //#define LAYOUT_SWEDISH
  57. //#define LAYOUT_TURKISH
  58. //#define LAYOUT_UNITED_KINGDOM
  59. //#define LAYOUT_US_INTERNATIONAL
  60. // http://en.wikipedia.org/wiki/Keyboard_layout
  61. #define MODIFIERKEY_CTRL ( 0x01 | 0xE000 )
  62. #define MODIFIERKEY_SHIFT ( 0x02 | 0xE000 )
  63. #define MODIFIERKEY_ALT ( 0x04 | 0xE000 )
  64. #define MODIFIERKEY_GUI ( 0x08 | 0xE000 )
  65. #define MODIFIERKEY_LEFT_CTRL ( 0x01 | 0xE000 )
  66. #define MODIFIERKEY_LEFT_SHIFT ( 0x02 | 0xE000 )
  67. #define MODIFIERKEY_LEFT_ALT ( 0x04 | 0xE000 )
  68. #define MODIFIERKEY_LEFT_GUI ( 0x08 | 0xE000 )
  69. #define MODIFIERKEY_RIGHT_CTRL ( 0x10 | 0xE000 )
  70. #define MODIFIERKEY_RIGHT_SHIFT ( 0x20 | 0xE000 )
  71. #define MODIFIERKEY_RIGHT_ALT ( 0x40 | 0xE000 )
  72. #define MODIFIERKEY_RIGHT_GUI ( 0x80 | 0xE000 )
  73. #define KEY_SYSTEM_POWER_DOWN ( 0x81 | 0xE200 )
  74. #define KEY_SYSTEM_SLEEP ( 0x82 | 0xE200 )
  75. #define KEY_SYSTEM_WAKE_UP ( 0x83 | 0xE200 )
  76. #define KEY_MEDIA_PLAY ( 0xB0 | 0xE400 )
  77. #define KEY_MEDIA_PAUSE ( 0xB1 | 0xE400 )
  78. #define KEY_MEDIA_RECORD ( 0xB2 | 0xE400 )
  79. #define KEY_MEDIA_FAST_FORWARD ( 0xB3 | 0xE400 )
  80. #define KEY_MEDIA_REWIND ( 0xB4 | 0xE400 )
  81. #define KEY_MEDIA_NEXT_TRACK ( 0xB5 | 0xE400 )
  82. #define KEY_MEDIA_PREV_TRACK ( 0xB6 | 0xE400 )
  83. #define KEY_MEDIA_STOP ( 0xB7 | 0xE400 )
  84. #define KEY_MEDIA_EJECT ( 0xB8 | 0xE400 )
  85. #define KEY_MEDIA_RANDOM_PLAY ( 0xB0 | 0xE400 )
  86. #define KEY_MEDIA_PLAY_PAUSE ( 0xCD | 0xE400 )
  87. #define KEY_MEDIA_PLAY_SKIP ( 0xCE | 0xE400 )
  88. #define KEY_MEDIA_MUTE ( 0xE2 | 0xE400 )
  89. #define KEY_MEDIA_VOLUME_INC ( 0xE9 | 0xE400 )
  90. #define KEY_MEDIA_VOLUME_DEC ( 0xEA | 0xE400 )
  91. #define KEY_A ( 4 | 0xF000 )
  92. #define KEY_B ( 5 | 0xF000 )
  93. #define KEY_C ( 6 | 0xF000 )
  94. #define KEY_D ( 7 | 0xF000 )
  95. #define KEY_E ( 8 | 0xF000 )
  96. #define KEY_F ( 9 | 0xF000 )
  97. #define KEY_G ( 10 | 0xF000 )
  98. #define KEY_H ( 11 | 0xF000 )
  99. #define KEY_I ( 12 | 0xF000 )
  100. #define KEY_J ( 13 | 0xF000 )
  101. #define KEY_K ( 14 | 0xF000 )
  102. #define KEY_L ( 15 | 0xF000 )
  103. #define KEY_M ( 16 | 0xF000 )
  104. #define KEY_N ( 17 | 0xF000 )
  105. #define KEY_O ( 18 | 0xF000 )
  106. #define KEY_P ( 19 | 0xF000 )
  107. #define KEY_Q ( 20 | 0xF000 )
  108. #define KEY_R ( 21 | 0xF000 )
  109. #define KEY_S ( 22 | 0xF000 )
  110. #define KEY_T ( 23 | 0xF000 )
  111. #define KEY_U ( 24 | 0xF000 )
  112. #define KEY_V ( 25 | 0xF000 )
  113. #define KEY_W ( 26 | 0xF000 )
  114. #define KEY_X ( 27 | 0xF000 )
  115. #define KEY_Y ( 28 | 0xF000 )
  116. #define KEY_Z ( 29 | 0xF000 )
  117. #define KEY_1 ( 30 | 0xF000 )
  118. #define KEY_2 ( 31 | 0xF000 )
  119. #define KEY_3 ( 32 | 0xF000 )
  120. #define KEY_4 ( 33 | 0xF000 )
  121. #define KEY_5 ( 34 | 0xF000 )
  122. #define KEY_6 ( 35 | 0xF000 )
  123. #define KEY_7 ( 36 | 0xF000 )
  124. #define KEY_8 ( 37 | 0xF000 )
  125. #define KEY_9 ( 38 | 0xF000 )
  126. #define KEY_0 ( 39 | 0xF000 )
  127. #define KEY_ENTER ( 40 | 0xF000 )
  128. #define KEY_ESC ( 41 | 0xF000 )
  129. #define KEY_BACKSPACE ( 42 | 0xF000 )
  130. #define KEY_TAB ( 43 | 0xF000 )
  131. #define KEY_SPACE ( 44 | 0xF000 )
  132. #define KEY_MINUS ( 45 | 0xF000 )
  133. #define KEY_EQUAL ( 46 | 0xF000 )
  134. #define KEY_LEFT_BRACE ( 47 | 0xF000 )
  135. #define KEY_RIGHT_BRACE ( 48 | 0xF000 )
  136. #define KEY_BACKSLASH ( 49 | 0xF000 )
  137. #define KEY_NON_US_NUM ( 50 | 0xF000 )
  138. #define KEY_SEMICOLON ( 51 | 0xF000 )
  139. #define KEY_QUOTE ( 52 | 0xF000 )
  140. #define KEY_TILDE ( 53 | 0xF000 )
  141. #define KEY_COMMA ( 54 | 0xF000 )
  142. #define KEY_PERIOD ( 55 | 0xF000 )
  143. #define KEY_SLASH ( 56 | 0xF000 )
  144. #define KEY_CAPS_LOCK ( 57 | 0xF000 )
  145. #define KEY_F1 ( 58 | 0xF000 )
  146. #define KEY_F2 ( 59 | 0xF000 )
  147. #define KEY_F3 ( 60 | 0xF000 )
  148. #define KEY_F4 ( 61 | 0xF000 )
  149. #define KEY_F5 ( 62 | 0xF000 )
  150. #define KEY_F6 ( 63 | 0xF000 )
  151. #define KEY_F7 ( 64 | 0xF000 )
  152. #define KEY_F8 ( 65 | 0xF000 )
  153. #define KEY_F9 ( 66 | 0xF000 )
  154. #define KEY_F10 ( 67 | 0xF000 )
  155. #define KEY_F11 ( 68 | 0xF000 )
  156. #define KEY_F12 ( 69 | 0xF000 )
  157. #define KEY_PRINTSCREEN ( 70 | 0xF000 )
  158. #define KEY_SCROLL_LOCK ( 71 | 0xF000 )
  159. #define KEY_PAUSE ( 72 | 0xF000 )
  160. #define KEY_INSERT ( 73 | 0xF000 )
  161. #define KEY_HOME ( 74 | 0xF000 )
  162. #define KEY_PAGE_UP ( 75 | 0xF000 )
  163. #define KEY_DELETE ( 76 | 0xF000 )
  164. #define KEY_END ( 77 | 0xF000 )
  165. #define KEY_PAGE_DOWN ( 78 | 0xF000 )
  166. #define KEY_RIGHT ( 79 | 0xF000 )
  167. #define KEY_LEFT ( 80 | 0xF000 )
  168. #define KEY_DOWN ( 81 | 0xF000 )
  169. #define KEY_UP ( 82 | 0xF000 )
  170. #define KEY_NUM_LOCK ( 83 | 0xF000 )
  171. #define KEYPAD_SLASH ( 84 | 0xF000 )
  172. #define KEYPAD_ASTERIX ( 85 | 0xF000 )
  173. #define KEYPAD_MINUS ( 86 | 0xF000 )
  174. #define KEYPAD_PLUS ( 87 | 0xF000 )
  175. #define KEYPAD_ENTER ( 88 | 0xF000 )
  176. #define KEYPAD_1 ( 89 | 0xF000 )
  177. #define KEYPAD_2 ( 90 | 0xF000 )
  178. #define KEYPAD_3 ( 91 | 0xF000 )
  179. #define KEYPAD_4 ( 92 | 0xF000 )
  180. #define KEYPAD_5 ( 93 | 0xF000 )
  181. #define KEYPAD_6 ( 94 | 0xF000 )
  182. #define KEYPAD_7 ( 95 | 0xF000 )
  183. #define KEYPAD_8 ( 96 | 0xF000 )
  184. #define KEYPAD_9 ( 97 | 0xF000 )
  185. #define KEYPAD_0 ( 98 | 0xF000 )
  186. #define KEYPAD_PERIOD ( 99 | 0xF000 )
  187. #define KEY_MENU ( 101 | 0xF000 )
  188. #define KEY_F13 ( 104 | 0xF000 )
  189. #define KEY_F14 ( 105 | 0xF000 )
  190. #define KEY_F15 ( 106 | 0xF000 )
  191. #define KEY_F16 ( 107 | 0xF000 )
  192. #define KEY_F17 ( 108 | 0xF000 )
  193. #define KEY_F18 ( 109 | 0xF000 )
  194. #define KEY_F19 ( 110 | 0xF000 )
  195. #define KEY_F20 ( 111 | 0xF000 )
  196. #define KEY_F21 ( 112 | 0xF000 )
  197. #define KEY_F22 ( 113 | 0xF000 )
  198. #define KEY_F23 ( 114 | 0xF000 )
  199. #define KEY_F24 ( 115 | 0xF000 )
  200. // for compatibility with Leonardo's slightly different names
  201. #define KEY_UP_ARROW KEY_UP
  202. #define KEY_DOWN_ARROW KEY_DOWN
  203. #define KEY_LEFT_ARROW KEY_LEFT
  204. #define KEY_RIGHT_ARROW KEY_RIGHT
  205. #define KEY_RETURN KEY_ENTER
  206. #define KEY_LEFT_CTRL MODIFIERKEY_LEFT_CTRL
  207. #define KEY_LEFT_SHIFT MODIFIERKEY_LEFT_SHIFT
  208. #define KEY_LEFT_ALT MODIFIERKEY_LEFT_ALT
  209. #define KEY_LEFT_GUI MODIFIERKEY_LEFT_GUI
  210. #define KEY_RIGHT_CTRL MODIFIERKEY_RIGHT_CTRL
  211. #define KEY_RIGHT_SHIFT MODIFIERKEY_RIGHT_SHIFT
  212. #define KEY_RIGHT_ALT MODIFIERKEY_RIGHT_ALT
  213. #define KEY_RIGHT_GUI MODIFIERKEY_RIGHT_GUI
  214. // Everything below this line is not intended for use in "normal" programs.
  215. // These private symbols populate lookup tables, which are used to translate
  216. // ascii and UTF8 unicode into keystroke sequences.
  217. #ifdef LAYOUT_US_ENGLISH
  218. #define SHIFT_MASK 0x40
  219. #define KEYCODE_TYPE uint8_t
  220. #define KEYCODE_MASK 0x007F
  221. #define ASCII_20 KEY_SPACE // 32
  222. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  223. #define ASCII_22 KEY_QUOTE + SHIFT_MASK // 34 "
  224. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  225. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  226. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  227. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  228. #define ASCII_27 KEY_QUOTE // 39 '
  229. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  230. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  231. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  232. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  233. #define ASCII_2C KEY_COMMA // 44 ,
  234. #define ASCII_2D KEY_MINUS // 45 -
  235. #define ASCII_2E KEY_PERIOD // 46 .
  236. #define ASCII_2F KEY_SLASH // 47 /
  237. #define ASCII_30 KEY_0 // 48 0
  238. #define ASCII_31 KEY_1 // 49 1
  239. #define ASCII_32 KEY_2 // 50 2
  240. #define ASCII_33 KEY_3 // 51 3
  241. #define ASCII_34 KEY_4 // 52 4
  242. #define ASCII_35 KEY_5 // 53 5
  243. #define ASCII_36 KEY_6 // 54 6
  244. #define ASCII_37 KEY_7 // 55 7
  245. #define ASCII_38 KEY_8 // 55 8
  246. #define ASCII_39 KEY_9 // 57 9
  247. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  248. #define ASCII_3B KEY_SEMICOLON // 59 ;
  249. #define ASCII_3C KEY_COMMA + SHIFT_MASK // 60 <
  250. #define ASCII_3D KEY_EQUAL // 61 =
  251. #define ASCII_3E KEY_PERIOD + SHIFT_MASK // 62 >
  252. #define ASCII_3F KEY_SLASH + SHIFT_MASK // 63 ?
  253. #define ASCII_40 KEY_2 + SHIFT_MASK // 64 @
  254. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  255. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  256. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  257. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  258. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  259. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  260. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  261. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  262. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  263. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  264. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  265. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  266. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  267. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  268. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  269. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  270. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  271. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  272. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  273. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  274. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  275. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  276. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  277. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  278. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  279. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  280. #define ASCII_5B KEY_LEFT_BRACE // 91 [
  281. #define ASCII_5C KEY_BACKSLASH // 92
  282. #define ASCII_5D KEY_RIGHT_BRACE // 93 ]
  283. #define ASCII_5E KEY_6 + SHIFT_MASK // 94 ^
  284. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  285. #define ASCII_60 KEY_TILDE // 96 `
  286. #define ASCII_61 KEY_A // 97 a
  287. #define ASCII_62 KEY_B // 98 b
  288. #define ASCII_63 KEY_C // 99 c
  289. #define ASCII_64 KEY_D // 100 d
  290. #define ASCII_65 KEY_E // 101 e
  291. #define ASCII_66 KEY_F // 102 f
  292. #define ASCII_67 KEY_G // 103 g
  293. #define ASCII_68 KEY_H // 104 h
  294. #define ASCII_69 KEY_I // 105 i
  295. #define ASCII_6A KEY_J // 106 j
  296. #define ASCII_6B KEY_K // 107 k
  297. #define ASCII_6C KEY_L // 108 l
  298. #define ASCII_6D KEY_M // 109 m
  299. #define ASCII_6E KEY_N // 110 n
  300. #define ASCII_6F KEY_O // 111 o
  301. #define ASCII_70 KEY_P // 112 p
  302. #define ASCII_71 KEY_Q // 113 q
  303. #define ASCII_72 KEY_R // 114 r
  304. #define ASCII_73 KEY_S // 115 s
  305. #define ASCII_74 KEY_T // 116 t
  306. #define ASCII_75 KEY_U // 117 u
  307. #define ASCII_76 KEY_V // 118 v
  308. #define ASCII_77 KEY_W // 119 w
  309. #define ASCII_78 KEY_X // 120 x
  310. #define ASCII_79 KEY_Y // 121 y
  311. #define ASCII_7A KEY_Z // 122 z
  312. #define ASCII_7B KEY_LEFT_BRACE + SHIFT_MASK // 123 {
  313. #define ASCII_7C KEY_BACKSLASH + SHIFT_MASK // 124 |
  314. #define ASCII_7D KEY_RIGHT_BRACE + SHIFT_MASK // 125 }
  315. #define ASCII_7E KEY_TILDE + SHIFT_MASK // 126 ~
  316. #define ASCII_7F KEY_BACKSPACE // 127
  317. #endif // LAYOUT_US_ENGLISH
  318. #ifdef LAYOUT_US_INTERNATIONAL
  319. #define SHIFT_MASK 0x0040
  320. #define ALTGR_MASK 0x0080
  321. #define DEADKEYS_MASK 0x0700
  322. #define CIRCUMFLEX_BITS 0x0100
  323. #define ACUTE_ACCENT_BITS 0x0200
  324. #define GRAVE_ACCENT_BITS 0x0300
  325. #define TILDE_BITS 0x0400
  326. #define DIAERESIS_BITS 0x0500
  327. #define KEYCODE_TYPE uint16_t
  328. #define KEYCODE_MASK 0x07FF
  329. #define DEADKEY_CIRCUMFLEX KEY_6 + SHIFT_MASK
  330. #define DEADKEY_ACUTE_ACCENT KEY_QUOTE
  331. #define DEADKEY_GRAVE_ACCENT KEY_TILDE
  332. #define DEADKEY_TILDE KEY_TILDE + SHIFT_MASK
  333. #define DEADKEY_DIAERESIS KEY_QUOTE + SHIFT_MASK
  334. #define ASCII_20 KEY_SPACE // 32
  335. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  336. #define ASCII_22 DIAERESIS_BITS + KEY_SPACE // 34 "
  337. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  338. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  339. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  340. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  341. #define ASCII_27 ACUTE_ACCENT_BITS + KEY_SPACE // 39 '
  342. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  343. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  344. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  345. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  346. #define ASCII_2C KEY_COMMA // 44 ,
  347. #define ASCII_2D KEY_MINUS // 45 -
  348. #define ASCII_2E KEY_PERIOD // 46 .
  349. #define ASCII_2F KEY_SLASH // 47 /
  350. #define ASCII_30 KEY_0 // 48 0
  351. #define ASCII_31 KEY_1 // 49 1
  352. #define ASCII_32 KEY_2 // 50 2
  353. #define ASCII_33 KEY_3 // 51 3
  354. #define ASCII_34 KEY_4 // 52 4
  355. #define ASCII_35 KEY_5 // 53 5
  356. #define ASCII_36 KEY_6 // 54 6
  357. #define ASCII_37 KEY_7 // 55 7
  358. #define ASCII_38 KEY_8 // 55 8
  359. #define ASCII_39 KEY_9 // 57 9
  360. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  361. #define ASCII_3B KEY_SEMICOLON // 59 ;
  362. #define ASCII_3C KEY_COMMA + SHIFT_MASK // 60 <
  363. #define ASCII_3D KEY_EQUAL // 61 =
  364. #define ASCII_3E KEY_PERIOD + SHIFT_MASK // 62 >
  365. #define ASCII_3F KEY_SLASH + SHIFT_MASK // 63 ?
  366. #define ASCII_40 KEY_2 + SHIFT_MASK // 64 @
  367. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  368. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  369. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  370. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  371. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  372. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  373. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  374. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  375. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  376. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  377. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  378. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  379. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  380. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  381. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  382. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  383. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  384. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  385. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  386. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  387. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  388. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  389. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  390. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  391. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  392. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  393. #define ASCII_5B KEY_LEFT_BRACE // 91 [
  394. #define ASCII_5C KEY_BACKSLASH // 92
  395. #define ASCII_5D KEY_RIGHT_BRACE // 93 ]
  396. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  397. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  398. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  399. #define ASCII_61 KEY_A // 97 a
  400. #define ASCII_62 KEY_B // 98 b
  401. #define ASCII_63 KEY_C // 99 c
  402. #define ASCII_64 KEY_D // 100 d
  403. #define ASCII_65 KEY_E // 101 e
  404. #define ASCII_66 KEY_F // 102 f
  405. #define ASCII_67 KEY_G // 103 g
  406. #define ASCII_68 KEY_H // 104 h
  407. #define ASCII_69 KEY_I // 105 i
  408. #define ASCII_6A KEY_J // 106 j
  409. #define ASCII_6B KEY_K // 107 k
  410. #define ASCII_6C KEY_L // 108 l
  411. #define ASCII_6D KEY_M // 109 m
  412. #define ASCII_6E KEY_N // 110 n
  413. #define ASCII_6F KEY_O // 111 o
  414. #define ASCII_70 KEY_P // 112 p
  415. #define ASCII_71 KEY_Q // 113 q
  416. #define ASCII_72 KEY_R // 114 r
  417. #define ASCII_73 KEY_S // 115 s
  418. #define ASCII_74 KEY_T // 116 t
  419. #define ASCII_75 KEY_U // 117 u
  420. #define ASCII_76 KEY_V // 118 v
  421. #define ASCII_77 KEY_W // 119 w
  422. #define ASCII_78 KEY_X // 120 x
  423. #define ASCII_79 KEY_Y // 121 y
  424. #define ASCII_7A KEY_Z // 122 z
  425. #define ASCII_7B KEY_LEFT_BRACE + SHIFT_MASK // 123 {
  426. #define ASCII_7C KEY_BACKSLASH + SHIFT_MASK // 124 |
  427. #define ASCII_7D KEY_RIGHT_BRACE + SHIFT_MASK // 125 }
  428. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  429. #define ASCII_7F KEY_BACKSPACE // 127
  430. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  431. #define ISO_8859_1_A1 KEY_1 + ALTGR_MASK // 161 ¡ Inverted Exclamation
  432. #define ISO_8859_1_A2 KEY_C + ALTGR_MASK + SHIFT_MASK // 162 ¢ Cent SIGN
  433. #define ISO_8859_1_A3 KEY_4 + ALTGR_MASK + SHIFT_MASK // 163 £ Pound Sign
  434. #define ISO_8859_1_A4 KEY_4 + ALTGR_MASK // 164 ¤ Currency or Euro Sign
  435. #define ISO_8859_1_A5 KEY_MINUS + ALTGR_MASK // 165 ¥ YEN SIGN
  436. #define ISO_8859_1_A6 KEY_BACKSLASH + ALTGR_MASK + SHIFT_MASK // 166 ¦ BROKEN BAR ??
  437. #define ISO_8859_1_A7 KEY_S + ALTGR_MASK + SHIFT_MASK // 167 § SECTION SIGN
  438. #define ISO_8859_1_A8 KEY_QUOTE + ALTGR_MASK + SHIFT_MASK // 168 ¨ DIAERESIS
  439. #define ISO_8859_1_A9 KEY_C + ALTGR_MASK // 169 © COPYRIGHT SIGN
  440. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  441. #define ISO_8859_1_AB KEY_LEFT_BRACE + ALTGR_MASK // 171 « LEFT DOUBLE ANGLE QUOTE
  442. #define ISO_8859_1_AC KEY_BACKSLASH + ALTGR_MASK // 172 ¬ NOT SIGN ??
  443. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  444. #define ISO_8859_1_AE KEY_R + ALTGR_MASK // 174 ® REGISTERED SIGN
  445. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  446. #define ISO_8859_1_B0 KEY_SEMICOLON + ALTGR_MASK + SHIFT_MASK // 176 ° DEGREE SIGN
  447. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  448. #define ISO_8859_1_B2 KEY_2 + ALTGR_MASK // 178 ² SUPERSCRIPT TWO
  449. #define ISO_8859_1_B3 KEY_3 + ALTGR_MASK // 179 ³ SUPERSCRIPT THREE
  450. #define ISO_8859_1_B4 KEY_QUOTE + ALTGR_MASK // 180 ´ ACUTE ACCENT
  451. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  452. #define ISO_8859_1_B6 KEY_SEMICOLON + ALTGR_MASK // 182 ¶ PILCROW SIGN
  453. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  454. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  455. #define ISO_8859_1_B9 KEY_1 + ALTGR_MASK + SHIFT_MASK // 185 ¹ SUPERSCRIPT ONE
  456. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  457. #define ISO_8859_1_BB KEY_RIGHT_BRACE + ALTGR_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  458. #define ISO_8859_1_BC KEY_6 + ALTGR_MASK // 188 ¼ FRACTION ONE QUARTER
  459. #define ISO_8859_1_BD KEY_7 + ALTGR_MASK // 189 ½ FRACTION ONE HALF
  460. #define ISO_8859_1_BE KEY_8 + ALTGR_MASK // 190 ¾ FRACTION THREE QUARTERS
  461. #define ISO_8859_1_BF KEY_SLASH + ALTGR_MASK // 191 ¿ INVERTED QUESTION MARK
  462. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  463. #define ISO_8859_1_C1 KEY_A + ALTGR_MASK + SHIFT_MASK // 193 Á A ACUTE
  464. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  465. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  466. #define ISO_8859_1_C4 KEY_Q + ALTGR_MASK + SHIFT_MASK // 196 Ä A DIAERESIS
  467. #define ISO_8859_1_C5 KEY_W + ALTGR_MASK + SHIFT_MASK // 197 Å A RING ABOVE
  468. #define ISO_8859_1_C6 KEY_Z + ALTGR_MASK + SHIFT_MASK // 198 Æ AE
  469. #define ISO_8859_1_C7 KEY_COMMA + ALTGR_MASK + SHIFT_MASK // 199 Ç C CEDILLA
  470. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  471. #define ISO_8859_1_C9 KEY_E + ALTGR_MASK + SHIFT_MASK // 201 É E ACUTE
  472. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  473. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  474. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  475. #define ISO_8859_1_CD KEY_I + ALTGR_MASK + SHIFT_MASK // 205 Í I ACUTE
  476. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  477. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  478. #define ISO_8859_1_D0 KEY_D + ALTGR_MASK + SHIFT_MASK // 208 Ð ETH
  479. #define ISO_8859_1_D1 KEY_N + ALTGR_MASK + SHIFT_MASK // 209 Ñ N TILDE
  480. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  481. #define ISO_8859_1_D3 KEY_O + ALTGR_MASK + SHIFT_MASK // 211 Ó O ACUTE
  482. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  483. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  484. #define ISO_8859_1_D6 KEY_P + ALTGR_MASK + SHIFT_MASK // 214 Ö O DIAERESIS
  485. #define ISO_8859_1_D7 KEY_EQUAL + ALTGR_MASK // 215 × MULTIPLICATION
  486. #define ISO_8859_1_D8 KEY_L + ALTGR_MASK + SHIFT_MASK // 216 Ø O STROKE
  487. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  488. #define ISO_8859_1_DA KEY_U + ALTGR_MASK + SHIFT_MASK // 218 Ú U ACUTE
  489. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  490. #define ISO_8859_1_DC KEY_Y + ALTGR_MASK + SHIFT_MASK // 220 Ü U DIAERESIS
  491. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  492. #define ISO_8859_1_DE KEY_T + ALTGR_MASK + SHIFT_MASK // 222 Þ THORN
  493. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  494. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  495. #define ISO_8859_1_E1 KEY_A + ALTGR_MASK // 225 á a ACUTE
  496. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  497. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  498. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  499. #define ISO_8859_1_E5 KEY_W + ALTGR_MASK // 229 å a RING ABOVE
  500. #define ISO_8859_1_E6 KEY_Z + ALTGR_MASK // 230 æ ae
  501. #define ISO_8859_1_E7 KEY_COMMA + ALTGR_MASK // 231 ç c CEDILLA
  502. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  503. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  504. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  505. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  506. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  507. #define ISO_8859_1_ED KEY_I + ALTGR_MASK // 237 í i ACUTE
  508. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  509. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  510. #define ISO_8859_1_F0 KEY_D + ALTGR_MASK // 240 ð ETH
  511. #define ISO_8859_1_F1 KEY_N + ALTGR_MASK // 241 ñ n TILDE
  512. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  513. #define ISO_8859_1_F3 KEY_O + ALTGR_MASK // 243 ó o ACUTE
  514. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  515. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  516. #define ISO_8859_1_F6 KEY_P + ALTGR_MASK // 246 ö o DIAERESIS
  517. #define ISO_8859_1_F7 KEY_EQUAL + ALTGR_MASK + SHIFT_MASK // 247 ÷ DIVISION
  518. #define ISO_8859_1_F8 KEY_L + ALTGR_MASK // 248 ø o STROKE
  519. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  520. #define ISO_8859_1_FA KEY_U + ALTGR_MASK // 250 ú u ACUTE
  521. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  522. #define ISO_8859_1_FC KEY_Y + ALTGR_MASK // 252 ü u DIAERESIS
  523. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  524. #define ISO_8859_1_FE KEY_T + ALTGR_MASK // 254 þ THORN
  525. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  526. #define UNICODE_20AC KEY_5 + ALTGR_MASK // € Euro Sign
  527. // not yet implemented
  528. #define UNICODE_EXTRA00 0x20AC
  529. #define KEYCODE_EXTRA00 KEY_5 + ALTGR_MASK // 20AC € Euro Sign
  530. #endif // LAYOUT_US_INTERNATIONAL
  531. #ifdef LAYOUT_GERMAN
  532. #define SHIFT_MASK 0x0040
  533. #define ALTGR_MASK 0x0080
  534. #define DEADKEYS_MASK 0x0700
  535. #define CIRCUMFLEX_BITS 0x0300
  536. #define ACUTE_ACCENT_BITS 0x0400
  537. #define GRAVE_ACCENT_BITS 0x0500
  538. #define KEYCODE_TYPE uint16_t
  539. #define KEYCODE_MASK 0x07FF
  540. #define DEADKEY_CIRCUMFLEX KEY_TILDE
  541. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL
  542. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  543. #define KEY_NON_US_100 63
  544. #define ASCII_20 KEY_SPACE // 32
  545. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  546. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  547. #define ASCII_23 KEY_BACKSLASH // 35 # ??
  548. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  549. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  550. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  551. #define ASCII_27 KEY_BACKSLASH + SHIFT_MASK // 39 '
  552. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  553. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  554. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  555. #define ASCII_2B KEY_RIGHT_BRACE // 43 +
  556. #define ASCII_2C KEY_COMMA // 44 ,
  557. #define ASCII_2D KEY_SLASH // 45 -
  558. #define ASCII_2E KEY_PERIOD // 46 .
  559. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  560. #define ASCII_30 KEY_0 // 48 0
  561. #define ASCII_31 KEY_1 // 49 1
  562. #define ASCII_32 KEY_2 // 50 2
  563. #define ASCII_33 KEY_3 // 51 3
  564. #define ASCII_34 KEY_4 // 52 4
  565. #define ASCII_35 KEY_5 // 53 5
  566. #define ASCII_36 KEY_6 // 54 6
  567. #define ASCII_37 KEY_7 // 55 7
  568. #define ASCII_38 KEY_8 // 55 8
  569. #define ASCII_39 KEY_9 // 57 9
  570. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  571. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  572. #define ASCII_3C KEY_NON_US_100 // 60 <
  573. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  574. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  575. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  576. #define ASCII_40 KEY_Q + ALTGR_MASK // 64 @
  577. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  578. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  579. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  580. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  581. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  582. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  583. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  584. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  585. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  586. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  587. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  588. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  589. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  590. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  591. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  592. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  593. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  594. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  595. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  596. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  597. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  598. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  599. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  600. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  601. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  602. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  603. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  604. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  605. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  606. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  607. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  608. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  609. #define ASCII_61 KEY_A // 97 a
  610. #define ASCII_62 KEY_B // 98 b
  611. #define ASCII_63 KEY_C // 99 c
  612. #define ASCII_64 KEY_D // 100 d
  613. #define ASCII_65 KEY_E // 101 e
  614. #define ASCII_66 KEY_F // 102 f
  615. #define ASCII_67 KEY_G // 103 g
  616. #define ASCII_68 KEY_H // 104 h
  617. #define ASCII_69 KEY_I // 105 i
  618. #define ASCII_6A KEY_J // 106 j
  619. #define ASCII_6B KEY_K // 107 k
  620. #define ASCII_6C KEY_L // 108 l
  621. #define ASCII_6D KEY_M // 109 m
  622. #define ASCII_6E KEY_N // 110 n
  623. #define ASCII_6F KEY_O // 111 o
  624. #define ASCII_70 KEY_P // 112 p
  625. #define ASCII_71 KEY_Q // 113 q
  626. #define ASCII_72 KEY_R // 114 r
  627. #define ASCII_73 KEY_S // 115 s
  628. #define ASCII_74 KEY_T // 116 t
  629. #define ASCII_75 KEY_U // 117 u
  630. #define ASCII_76 KEY_V // 118 v
  631. #define ASCII_77 KEY_W // 119 w
  632. #define ASCII_78 KEY_X // 120 x
  633. #define ASCII_79 KEY_Z // 121 y
  634. #define ASCII_7A KEY_Y // 122 z
  635. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  636. #define ASCII_7C KEY_NON_US_100 + ALTGR_MASK // 124 |
  637. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  638. #define ASCII_7E KEY_RIGHT_BRACE + ALTGR_MASK // 126 ~
  639. #define ASCII_7F KEY_BACKSPACE // 127
  640. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  641. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  642. #define ISO_8859_1_A2 0 // 162 ¢ Cent Sign
  643. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  644. #define ISO_8859_1_A4 KEY_E + ALTGR_MASK // 164 ¤ Currency Sign
  645. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  646. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  647. #define ISO_8859_1_A7 KEY_3 + SHIFT_MASK // 167 § SECTION SIGN
  648. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  649. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  650. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  651. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  652. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  653. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  654. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  655. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  656. #define ISO_8859_1_B0 KEY_TILDE + SHIFT_MASK // 176 ° DEGREE SIGN
  657. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  658. #define ISO_8859_1_B2 KEY_2 + ALTGR_MASK // 178 ² SUPERSCRIPT TWO
  659. #define ISO_8859_1_B3 KEY_3 + ALTGR_MASK // 179 ³ SUPERSCRIPT THREE
  660. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  661. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  662. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  663. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  664. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  665. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  666. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  667. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  668. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  669. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  670. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  671. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  672. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  673. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  674. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  675. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  676. #define ISO_8859_1_C4 KEY_QUOTE + SHIFT_MASK // 196 Ä A DIAERESIS
  677. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  678. #define ISO_8859_1_C6 0 // 198 Æ AE
  679. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  680. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  681. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  682. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  683. #define ISO_8859_1_CB 0 // 203 Ë E DIAERESIS
  684. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  685. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  686. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  687. #define ISO_8859_1_CF 0 // 207 Ï I DIAERESIS
  688. #define ISO_8859_1_D0 0 // 208 Ð ETH
  689. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  690. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  691. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  692. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  693. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  694. #define ISO_8859_1_D6 KEY_SEMICOLON + SHIFT_MASK // 214 Ö O DIAERESIS
  695. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  696. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  697. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  698. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  699. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  700. #define ISO_8859_1_DC KEY_LEFT_BRACE + SHIFT_MASK // 220 Ü U DIAERESIS
  701. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Z + SHIFT_MASK // 221 Ý Y ACUTE
  702. #define ISO_8859_1_DE 0 // 222 Þ THORN
  703. #define ISO_8859_1_DF KEY_MINUS // 223 ß SHARP S
  704. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  705. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  706. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  707. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  708. #define ISO_8859_1_E4 KEY_QUOTE // 228 ä a DIAERESIS
  709. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  710. #define ISO_8859_1_E6 0 // 230 æ ae
  711. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  712. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  713. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  714. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  715. #define ISO_8859_1_EB 0 // 235 ë e DIAERESIS
  716. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  717. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  718. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  719. #define ISO_8859_1_EF 0 // 239 ï i DIAERESIS
  720. #define ISO_8859_1_F0 0 // 240 ð ETH
  721. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  722. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  723. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  724. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  725. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  726. #define ISO_8859_1_F6 KEY_SEMICOLON // 246 ö o DIAERESIS
  727. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  728. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  729. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  730. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  731. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  732. #define ISO_8859_1_FC KEY_LEFT_BRACE // 252 ü u DIAERESIS
  733. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Z // 253 ý y ACUTE
  734. #define ISO_8859_1_FE 0 // 254 þ THORN
  735. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  736. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  737. // not yet implemented
  738. #define UNICODE_EXTRA00 0x20AC
  739. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  740. #endif // LAYOUT_GERMAN
  741. #ifdef LAYOUT_GERMAN_MAC
  742. #define SHIFT_MASK 0x0040
  743. #define ALTGR_MASK 0x0080
  744. #define DEADKEYS_MASK 0x0700
  745. #define ACUTE_ACCENT_BITS 0x0100
  746. #define GRAVE_ACCENT_BITS 0x0200
  747. #define CIRCUMFLEX_BITS 0x0300
  748. #define DIAERESIS_BITS 0x0400
  749. #define TILDE_BITS 0x0500
  750. #define KEYCODE_TYPE uint16_t
  751. #define KEYCODE_MASK 0x07FF
  752. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL
  753. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  754. #define DEADKEY_CIRCUMFLEX KEY_6 + SHIFT_MASK + ALTGR_MASK
  755. #define DEADKEY_DIAERESIS KEY_U + ALTGR_MASK
  756. #define DEADKEY_TILDE KEY_N + ALTGR_MASK
  757. #define KEY_NON_US_100 63
  758. #define ASCII_20 KEY_SPACE // 32
  759. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  760. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  761. #define ASCII_23 KEY_BACKSLASH // 35 # ??
  762. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  763. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  764. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  765. #define ASCII_27 KEY_BACKSLASH + SHIFT_MASK // 39 '
  766. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  767. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  768. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  769. #define ASCII_2B KEY_RIGHT_BRACE // 43 +
  770. #define ASCII_2C KEY_COMMA // 44 ,
  771. #define ASCII_2D KEY_SLASH // 45 -
  772. #define ASCII_2E KEY_PERIOD // 46 .
  773. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  774. #define ASCII_30 KEY_0 // 48 0
  775. #define ASCII_31 KEY_1 // 49 1
  776. #define ASCII_32 KEY_2 // 50 2
  777. #define ASCII_33 KEY_3 // 51 3
  778. #define ASCII_34 KEY_4 // 52 4
  779. #define ASCII_35 KEY_5 // 53 5
  780. #define ASCII_36 KEY_6 // 54 6
  781. #define ASCII_37 KEY_7 // 55 7
  782. #define ASCII_38 KEY_8 // 55 8
  783. #define ASCII_39 KEY_9 // 57 9
  784. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  785. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  786. #define ASCII_3C KEY_TILDE // 60 <
  787. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  788. #define ASCII_3E KEY_TILDE + SHIFT_MASK // 62 >
  789. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  790. #define ASCII_40 KEY_Q + ALTGR_MASK // 64 @
  791. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  792. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  793. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  794. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  795. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  796. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  797. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  798. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  799. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  800. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  801. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  802. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  803. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  804. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  805. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  806. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  807. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  808. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  809. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  810. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  811. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  812. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  813. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  814. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  815. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  816. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  817. #define ASCII_5B KEY_5 + ALTGR_MASK // 91 [
  818. #define ASCII_5C KEY_7 + ALTGR_MASK + SHIFT_MASK // 92
  819. #define ASCII_5D KEY_6 + ALTGR_MASK // 93 ]
  820. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  821. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  822. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  823. #define ASCII_61 KEY_A // 97 a
  824. #define ASCII_62 KEY_B // 98 b
  825. #define ASCII_63 KEY_C // 99 c
  826. #define ASCII_64 KEY_D // 100 d
  827. #define ASCII_65 KEY_E // 101 e
  828. #define ASCII_66 KEY_F // 102 f
  829. #define ASCII_67 KEY_G // 103 g
  830. #define ASCII_68 KEY_H // 104 h
  831. #define ASCII_69 KEY_I // 105 i
  832. #define ASCII_6A KEY_J // 106 j
  833. #define ASCII_6B KEY_K // 107 k
  834. #define ASCII_6C KEY_L // 108 l
  835. #define ASCII_6D KEY_M // 109 m
  836. #define ASCII_6E KEY_N // 110 n
  837. #define ASCII_6F KEY_O // 111 o
  838. #define ASCII_70 KEY_P // 112 p
  839. #define ASCII_71 KEY_Q // 113 q
  840. #define ASCII_72 KEY_R // 114 r
  841. #define ASCII_73 KEY_S // 115 s
  842. #define ASCII_74 KEY_T // 116 t
  843. #define ASCII_75 KEY_U // 117 u
  844. #define ASCII_76 KEY_V // 118 v
  845. #define ASCII_77 KEY_W // 119 w
  846. #define ASCII_78 KEY_X // 120 x
  847. #define ASCII_79 KEY_Z // 121 y
  848. #define ASCII_7A KEY_Y // 122 z
  849. #define ASCII_7B KEY_8 + ALTGR_MASK // 123 {
  850. #define ASCII_7C KEY_7 + ALTGR_MASK // 124 |
  851. #define ASCII_7D KEY_9 + ALTGR_MASK // 125 }
  852. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  853. #define ASCII_7F KEY_BACKSPACE // 127
  854. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  855. #define ISO_8859_1_A1 KEY_1 + ALTGR_MASK // 161 ¡ Inverted Exclamation
  856. #define ISO_8859_1_A2 KEY_4 + ALTGR_MASK // 162 ¢ Cent Sign
  857. #define ISO_8859_1_A3 KEY_4 + SHIFT_MASK + ALTGR_MASK // 163 £ Pound Sign
  858. #define ISO_8859_1_A4 KEY_E + ALTGR_MASK // 164 ¤ Currency Sign
  859. #define ISO_8859_1_A5 KEY_Z + ALTGR_MASK // 165 ¥ YEN SIGN
  860. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  861. #define ISO_8859_1_A7 KEY_3 + SHIFT_MASK // 167 § SECTION SIGN
  862. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  863. #define ISO_8859_1_A9 KEY_G + ALTGR_MASK // 169 © COPYRIGHT SIGN
  864. #define ISO_8859_1_AA KEY_H + ALTGR_MASK // 170 ª FEMININE ORDINAL
  865. #define ISO_8859_1_AB KEY_Q + ALTGR_MASK // 171 « LEFT DOUBLE ANGLE QUOTE
  866. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  867. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  868. #define ISO_8859_1_AE KEY_R + ALTGR_MASK // 174 ® REGISTERED SIGN
  869. #define ISO_8859_1_AF KEY_0 + SHIFT_MASK + ALTGR_MASK // 175 ¯ MACRON
  870. #define ISO_8859_1_B0 KEY_LEFT_BRACE + ALTGR_MASK + SHIFT_MASK// 176 ° DEGREE SIGN
  871. #define ISO_8859_1_B1 KEY_RIGHT_BRACE + ALTGR_MASK // 177 ± PLUS-MINUS SIGN
  872. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  873. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  874. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  875. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  876. #define ISO_8859_1_B6 KEY_3 + ALTGR_MASK // 182 ¶ PILCROW SIGN
  877. #define ISO_8859_1_B7 KEY_9 + SHIFT_MASK + ALTGR_MASK // 183 · MIDDLE DOT
  878. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  879. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  880. #define ISO_8859_1_BA KEY_J + ALTGR_MASK // 186 º MASCULINE ORDINAL
  881. #define ISO_8859_1_BB KEY_Q + SHIFT_MASK + ALTGR_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  882. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  883. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  884. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  885. #define ISO_8859_1_BF KEY_MINUS + ALTGR_MASK // 191 ¿ INVERTED QUESTION MARK
  886. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  887. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  888. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  889. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  890. #define ISO_8859_1_C4 KEY_QUOTE + SHIFT_MASK // 196 Ä A DIAERESIS
  891. #define ISO_8859_1_C5 KEY_A + ALTGR_MASK + SHIFT_MASK // 197 Å A RING ABOVE
  892. #define ISO_8859_1_C6 KEY_QUOTE + ALTGR_MASK + SHIFT_MASK // 198 Æ AE
  893. #define ISO_8859_1_C7 KEY_C + ALTGR_MASK + SHIFT_MASK // 199 Ç C CEDILLA
  894. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  895. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  896. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  897. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  898. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  899. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  900. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  901. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  902. #define ISO_8859_1_D0 0 // 208 Ð ETH
  903. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  904. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  905. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  906. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  907. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  908. #define ISO_8859_1_D6 KEY_SEMICOLON + SHIFT_MASK // 214 Ö O DIAERESIS
  909. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  910. #define ISO_8859_1_D8 KEY_O + ALTGR_MASK + SHIFT_MASK // 216 Ø O STROKE
  911. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  912. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  913. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  914. #define ISO_8859_1_DC KEY_LEFT_BRACE + SHIFT_MASK // 220 Ü U DIAERESIS
  915. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Z + SHIFT_MASK // 221 Ý Y ACUTE
  916. #define ISO_8859_1_DE 0 // 222 Þ THORN
  917. #define ISO_8859_1_DF KEY_MINUS // 223 ß SHARP S
  918. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  919. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  920. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  921. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  922. #define ISO_8859_1_E4 KEY_QUOTE // 228 ä a DIAERESIS
  923. #define ISO_8859_1_E5 KEY_A + ALTGR_MASK // 229 å a RING ABOVE
  924. #define ISO_8859_1_E6 KEY_QUOTE + ALTGR_MASK // 230 æ ae
  925. #define ISO_8859_1_E7 KEY_C + ALTGR_MASK // 231 ç c CEDILLA
  926. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  927. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  928. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  929. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  930. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  931. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  932. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  933. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  934. #define ISO_8859_1_F0 0 // 240 ð ETH
  935. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  936. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  937. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  938. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  939. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  940. #define ISO_8859_1_F6 KEY_SEMICOLON // 246 ö o DIAERESIS
  941. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  942. #define ISO_8859_1_F8 KEY_O + ALTGR_MASK // 248 ø o STROKE
  943. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  944. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  945. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  946. #define ISO_8859_1_FC KEY_LEFT_BRACE // 252 ü u DIAERESIS
  947. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Z // 253 ý y ACUTE
  948. #define ISO_8859_1_FE 0 // 254 þ THORN
  949. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Z // 255 ÿ y DIAERESIS
  950. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  951. // not yet implemented
  952. #define UNICODE_EXTRA00 0x20AC
  953. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  954. #endif // LAYOUT_GERMAN_MAC
  955. #ifdef LAYOUT_CANADIAN_FRENCH
  956. #define SHIFT_MASK 0x0040
  957. #define ALTGR_MASK 0x0080
  958. #define DEADKEYS_MASK 0x0700
  959. #define CIRCUMFLEX_BITS 0x0100
  960. #define ACUTE_ACCENT_BITS 0x0200
  961. #define GRAVE_ACCENT_BITS 0x0300
  962. #define DIAERESIS_BITS 0x0400
  963. #define CEDILLA_BITS 0x0500
  964. #define KEYCODE_TYPE uint16_t
  965. #define KEYCODE_MASK 0x07FF
  966. #define DEADKEY_CIRCUMFLEX KEY_LEFT_BRACE
  967. #define DEADKEY_ACUTE_ACCENT KEY_SLASH + ALTGR_MASK
  968. #define DEADKEY_GRAVE_ACCENT KEY_QUOTE
  969. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE + SHIFT_MASK
  970. #define DEADKEY_CEDILLA KEY_RIGHT_BRACE
  971. #define KEY_NON_US_100 63
  972. #define ASCII_20 KEY_SPACE // 32
  973. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  974. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  975. #define ASCII_23 KEY_TILDE + SHIFT_MASK // 35 #
  976. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  977. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  978. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  979. #define ASCII_27 KEY_COMMA + SHIFT_MASK // 39 '
  980. //#define ASCII_27 ACUTE_ACCENT_BITS + KEY_SPACE // 39 '
  981. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  982. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  983. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  984. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  985. #define ASCII_2C KEY_COMMA // 44 ,
  986. #define ASCII_2D KEY_MINUS // 45 -
  987. #define ASCII_2E KEY_PERIOD // 46 .
  988. #define ASCII_2F KEY_3 + SHIFT_MASK // 47 /
  989. #define ASCII_30 KEY_0 // 48 0
  990. #define ASCII_31 KEY_1 // 49 1
  991. #define ASCII_32 KEY_2 // 50 2
  992. #define ASCII_33 KEY_3 // 51 3
  993. #define ASCII_34 KEY_4 // 52 4
  994. #define ASCII_35 KEY_5 // 53 5
  995. #define ASCII_36 KEY_6 // 54 6
  996. #define ASCII_37 KEY_7 // 55 7
  997. #define ASCII_38 KEY_8 // 55 8
  998. #define ASCII_39 KEY_9 // 57 9
  999. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  1000. #define ASCII_3B KEY_SEMICOLON // 59 ;
  1001. #define ASCII_3C KEY_BACKSLASH // 60 <
  1002. #define ASCII_3D KEY_EQUAL // 61 =
  1003. #define ASCII_3E KEY_BACKSLASH + SHIFT_MASK // 62 >
  1004. #define ASCII_3F KEY_6 + SHIFT_MASK // 63 ?
  1005. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  1006. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  1007. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  1008. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  1009. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  1010. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  1011. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  1012. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  1013. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  1014. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  1015. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  1016. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  1017. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  1018. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  1019. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  1020. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  1021. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  1022. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  1023. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  1024. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  1025. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  1026. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  1027. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  1028. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  1029. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  1030. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  1031. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  1032. #define ASCII_5B KEY_LEFT_BRACE + ALTGR_MASK // 91 [
  1033. #define ASCII_5C KEY_TILDE + ALTGR_MASK // 92
  1034. #define ASCII_5D KEY_RIGHT_BRACE + ALTGR_MASK // 93 ]
  1035. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  1036. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  1037. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  1038. #define ASCII_61 KEY_A // 97 a
  1039. #define ASCII_62 KEY_B // 98 b
  1040. #define ASCII_63 KEY_C // 99 c
  1041. #define ASCII_64 KEY_D // 100 d
  1042. #define ASCII_65 KEY_E // 101 e
  1043. #define ASCII_66 KEY_F // 102 f
  1044. #define ASCII_67 KEY_G // 103 g
  1045. #define ASCII_68 KEY_H // 104 h
  1046. #define ASCII_69 KEY_I // 105 i
  1047. #define ASCII_6A KEY_J // 106 j
  1048. #define ASCII_6B KEY_K // 107 k
  1049. #define ASCII_6C KEY_L // 108 l
  1050. #define ASCII_6D KEY_M // 109 m
  1051. #define ASCII_6E KEY_N // 110 n
  1052. #define ASCII_6F KEY_O // 111 o
  1053. #define ASCII_70 KEY_P // 112 p
  1054. #define ASCII_71 KEY_Q // 113 q
  1055. #define ASCII_72 KEY_R // 114 r
  1056. #define ASCII_73 KEY_S // 115 s
  1057. #define ASCII_74 KEY_T // 116 t
  1058. #define ASCII_75 KEY_U // 117 u
  1059. #define ASCII_76 KEY_V // 118 v
  1060. #define ASCII_77 KEY_W // 119 w
  1061. #define ASCII_78 KEY_X // 120 x
  1062. #define ASCII_79 KEY_Y // 121 y
  1063. #define ASCII_7A KEY_Z // 122 z
  1064. #define ASCII_7B KEY_QUOTE + ALTGR_MASK // 123 {
  1065. #define ASCII_7C KEY_TILDE + SHIFT_MASK // 124 |
  1066. #define ASCII_7D KEY_BACKSLASH + ALTGR_MASK // 125 }
  1067. #define ASCII_7E KEY_SEMICOLON + ALTGR_MASK // 126 ~
  1068. #define ASCII_7F KEY_BACKSPACE // 127
  1069. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  1070. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  1071. #define ISO_8859_1_A2 KEY_4 + ALTGR_MASK // 162 ¢ Cent SIGN
  1072. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  1073. #define ISO_8859_1_A4 KEY_5 + ALTGR_MASK // 164 ¤ Currency or Euro Sign
  1074. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  1075. #define ISO_8859_1_A6 KEY_7 + ALTGR_MASK // 166 ¦ BROKEN BAR
  1076. #define ISO_8859_1_A7 KEY_O + ALTGR_MASK // 167 § SECTION SIGN
  1077. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  1078. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  1079. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  1080. #define ISO_8859_1_AB KEY_NON_US_100 // 171 « LEFT DOUBLE ANGLE QUOTE
  1081. #define ISO_8859_1_AC KEY_6 + ALTGR_MASK // 172 ¬ NOT SIGN
  1082. #define ISO_8859_1_AD KEY_PERIOD + ALTGR_MASK // 173 SOFT HYPHEN
  1083. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  1084. #define ISO_8859_1_AF KEY_COMMA + ALTGR_MASK // 175 ¯ MACRON
  1085. #define ISO_8859_1_B0 KEY_NON_US_100 + ALTGR_MASK // 176 ° DEGREE SIGN
  1086. #define ISO_8859_1_B1 KEY_1 + ALTGR_MASK // 177 ± PLUS-MINUS SIGN
  1087. #define ISO_8859_1_B2 KEY_8 + ALTGR_MASK // 178 ² SUPERSCRIPT TWO
  1088. #define ISO_8859_1_B3 KEY_9 + ALTGR_MASK // 179 ³ SUPERSCRIPT THREE
  1089. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  1090. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  1091. #define ISO_8859_1_B6 KEY_P + ALTGR_MASK // 182 ¶ PILCROW SIGN
  1092. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  1093. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  1094. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  1095. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  1096. #define ISO_8859_1_BB KEY_NON_US_100 + SHIFT_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  1097. #define ISO_8859_1_BC KEY_0 + ALTGR_MASK // 188 ¼ FRACTION ONE QUARTER
  1098. #define ISO_8859_1_BD KEY_MINUS + ALTGR_MASK // 189 ½ FRACTION ONE HALF
  1099. #define ISO_8859_1_BE KEY_EQUAL + ALTGR_MASK // 190 ¾ FRACTION THREE QUARTERS
  1100. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  1101. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  1102. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  1103. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  1104. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  1105. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  1106. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  1107. #define ISO_8859_1_C6 0 // 198 Æ AE
  1108. #define ISO_8859_1_C7 CEDILLA_BITS + KEY_C + SHIFT_MASK // 199 Ç C CEDILLA
  1109. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  1110. #define ISO_8859_1_C9 KEY_SLASH + SHIFT_MASK // 201 É E ACUTE
  1111. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  1112. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  1113. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  1114. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  1115. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  1116. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  1117. #define ISO_8859_1_D0 0 // 208 Ð ETH
  1118. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  1119. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  1120. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  1121. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  1122. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  1123. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  1124. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  1125. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  1126. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  1127. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  1128. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  1129. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U // 220 Ü U DIAERESIS
  1130. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  1131. #define ISO_8859_1_DE 0 // 222 Þ THORN
  1132. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  1133. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  1134. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  1135. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  1136. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  1137. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  1138. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  1139. #define ISO_8859_1_E6 0 // 230 æ ae
  1140. #define ISO_8859_1_E7 CEDILLA_BITS + KEY_C // 231 ç c CEDILLA
  1141. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  1142. #define ISO_8859_1_E9 KEY_SLASH // 233 é e ACUTE
  1143. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  1144. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  1145. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  1146. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  1147. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  1148. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  1149. #define ISO_8859_1_F0 0 // 240 ð ETH
  1150. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  1151. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  1152. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  1153. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  1154. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  1155. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  1156. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  1157. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  1158. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  1159. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  1160. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  1161. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  1162. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  1163. #define ISO_8859_1_FE 0 // 254 þ THORN
  1164. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  1165. #endif // LAYOUT_CANADIAN_FRENCH
  1166. #ifdef LAYOUT_CANADIAN_MULTILINGUAL
  1167. #define SHIFT_MASK 0x0040
  1168. #define ALTGR_MASK 0x0080
  1169. #define RCTRL_MASK 0x0800
  1170. #define DEADKEYS_MASK 0x0700
  1171. #define CIRCUMFLEX_BITS 0x0100
  1172. #define DIAERESIS_BITS 0x0200
  1173. #define ACUTE_ACCENT_BITS 0x0300
  1174. #define CEDILLA_BITS 0x0400
  1175. #define GRAVE_ACCENT_BITS 0x0500
  1176. #define TILDE_BITS 0x0600
  1177. #define RING_ABOVE_BITS 0x0700
  1178. #define KEYCODE_TYPE uint16_t
  1179. #define KEYCODE_MASK 0x0FFF
  1180. #define DEADKEY_CIRCUMFLEX KEY_LEFT_BRACE
  1181. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + SHIFT_MASK
  1182. #define DEADKEY_ACUTE_ACCENT KEY_SEMICOLON + RCTRL_MASK
  1183. #define DEADKEY_CEDILLA KEY_EQUAL + RCTRL_MASK
  1184. #define DEADKEY_GRAVE_ACCENT KEY_LEFT_BRACE + ALTGR_MASK
  1185. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  1186. #define DEADKEY_RING_ABOVE KEY_LEFT_BRACE + SHIFT_MASK + RCTRL_MASK
  1187. #define KEY_NON_US_100 63
  1188. #define ASCII_20 KEY_SPACE // 32
  1189. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  1190. #define ASCII_22 KEY_PERIOD + SHIFT_MASK // 34 "
  1191. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  1192. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  1193. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  1194. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  1195. #define ASCII_27 KEY_COMMA + SHIFT_MASK // 39 '
  1196. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  1197. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  1198. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  1199. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  1200. #define ASCII_2C KEY_COMMA // 44 ,
  1201. #define ASCII_2D KEY_MINUS // 45 -
  1202. #define ASCII_2E KEY_PERIOD // 46 .
  1203. #define ASCII_2F KEY_TILDE // 47 /
  1204. #define ASCII_30 KEY_0 // 48 0
  1205. #define ASCII_31 KEY_1 // 49 1
  1206. #define ASCII_32 KEY_2 // 50 2
  1207. #define ASCII_33 KEY_3 // 51 3
  1208. #define ASCII_34 KEY_4 // 52 4
  1209. #define ASCII_35 KEY_5 // 53 5
  1210. #define ASCII_36 KEY_6 // 54 6
  1211. #define ASCII_37 KEY_7 // 55 7
  1212. #define ASCII_38 KEY_8 // 55 8
  1213. #define ASCII_39 KEY_9 // 57 9
  1214. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  1215. #define ASCII_3B KEY_SEMICOLON // 59 ;
  1216. #define ASCII_3C KEY_COMMA + ALTGR_MASK // 60 <
  1217. #define ASCII_3D KEY_EQUAL // 61 =
  1218. #define ASCII_3E KEY_PERIOD + ALTGR_MASK // 62 >
  1219. #define ASCII_3F KEY_6 + SHIFT_MASK // 63 ?
  1220. #define ASCII_40 KEY_2 + SHIFT_MASK // 64 @
  1221. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  1222. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  1223. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  1224. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  1225. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  1226. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  1227. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  1228. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  1229. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  1230. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  1231. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  1232. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  1233. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  1234. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  1235. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  1236. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  1237. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  1238. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  1239. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  1240. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  1241. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  1242. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  1243. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  1244. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  1245. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  1246. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  1247. #define ASCII_5B KEY_9 + ALTGR_MASK // 91 [
  1248. #define ASCII_5C KEY_TILDE + SHIFT_MASK // 92
  1249. #define ASCII_5D KEY_0 + ALTGR_MASK // 93 ]
  1250. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  1251. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  1252. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  1253. #define ASCII_61 KEY_A // 97 a
  1254. #define ASCII_62 KEY_B // 98 b
  1255. #define ASCII_63 KEY_C // 99 c
  1256. #define ASCII_64 KEY_D // 100 d
  1257. #define ASCII_65 KEY_E // 101 e
  1258. #define ASCII_66 KEY_F // 102 f
  1259. #define ASCII_67 KEY_G // 103 g
  1260. #define ASCII_68 KEY_H // 104 h
  1261. #define ASCII_69 KEY_I // 105 i
  1262. #define ASCII_6A KEY_J // 106 j
  1263. #define ASCII_6B KEY_K // 107 k
  1264. #define ASCII_6C KEY_L // 108 l
  1265. #define ASCII_6D KEY_M // 109 m
  1266. #define ASCII_6E KEY_N // 110 n
  1267. #define ASCII_6F KEY_O // 111 o
  1268. #define ASCII_70 KEY_P // 112 p
  1269. #define ASCII_71 KEY_Q // 113 q
  1270. #define ASCII_72 KEY_R // 114 r
  1271. #define ASCII_73 KEY_S // 115 s
  1272. #define ASCII_74 KEY_T // 116 t
  1273. #define ASCII_75 KEY_U // 117 u
  1274. #define ASCII_76 KEY_V // 118 v
  1275. #define ASCII_77 KEY_W // 119 w
  1276. #define ASCII_78 KEY_X // 120 x
  1277. #define ASCII_79 KEY_Y // 121 y
  1278. #define ASCII_7A KEY_Z // 122 z
  1279. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  1280. #define ASCII_7C KEY_TILDE + ALTGR_MASK // 124 |
  1281. #define ASCII_7D KEY_8 + ALTGR_MASK // 125 }
  1282. #define ASCII_7E KEY_RIGHT_BRACE + RCTRL_MASK // 126 ~
  1283. #define ASCII_7F KEY_BACKSPACE // 127
  1284. #define ISO_8859_1_A0 KEY_SPACE + ALTGR_MASK // 160 Nonbreakng Space
  1285. #define ISO_8859_1_A1 KEY_1 + SHIFT_MASK + RCTRL_MASK // 161 ¡ Inverted Exclamation
  1286. #define ISO_8859_1_A2 KEY_C + RCTRL_MASK // 162 ¢ Cent SIGN
  1287. #define ISO_8859_1_A3 KEY_3 + SHIFT_MASK + RCTRL_MASK // 163 £ Pound Sign
  1288. #define ISO_8859_1_A4 KEY_4 + SHIFT_MASK + RCTRL_MASK // 164 ¤ Currency or Euro Sign
  1289. #define ISO_8859_1_A5 KEY_Y + SHIFT_MASK + RCTRL_MASK // 165 ¥ YEN SIGN
  1290. #define ISO_8859_1_A6 KEY_NON_US_100 + SHIFT_MASK + RCTRL_MASK// 166 ¦ BROKEN BAR
  1291. #define ISO_8859_1_A7 KEY_S + SHIFT_MASK + RCTRL_MASK // 167 § SECTION SIGN
  1292. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  1293. #define ISO_8859_1_A9 KEY_C + SHIFT_MASK + RCTRL_MASK // 169 © COPYRIGHT SIGN
  1294. #define ISO_8859_1_AA KEY_F + SHIFT_MASK + RCTRL_MASK // 170 ª FEMININE ORDINAL
  1295. #define ISO_8859_1_AB KEY_Z + ALTGR_MASK // 171 « LEFT DOUBLE ANGLE QUOTE
  1296. #define ISO_8859_1_AC KEY_EQUAL + ALTGR_MASK // 172 ¬ NOT SIGN
  1297. #define ISO_8859_1_AD KEY_TILDE + SHIFT_MASK + RCTRL_MASK // 173 SOFT HYPHEN
  1298. #define ISO_8859_1_AE KEY_R + SHIFT_MASK + RCTRL_MASK // 174 ® REGISTERED SIGN
  1299. #define ISO_8859_1_AF 0 // special dead key - no implemented // 175 ¯ MACRON
  1300. #define ISO_8859_1_B0 KEY_SEMICOLON + ALTGR_MASK // 176 ° DEGREE SIGN
  1301. #define ISO_8859_1_B1 KEY_9 + SHIFT_MASK + RCTRL_MASK // 177 ± PLUS-MINUS SIGN
  1302. #define ISO_8859_1_B2 KEY_2 + RCTRL_MASK // 178 ² SUPERSCRIPT TWO
  1303. #define ISO_8859_1_B3 KEY_3 + RCTRL_MASK // 179 ³ SUPERSCRIPT THREE
  1304. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  1305. #define ISO_8859_1_B5 KEY_M + RCTRL_MASK // 181 µ MICRO SIGN
  1306. #define ISO_8859_1_B6 KEY_R + RCTRL_MASK // 182 ¶ PILCROW SIGN
  1307. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  1308. #define ISO_8859_1_B8 CEDILLA_BITS + KEY_SPACE // 184 ¸ CEDILLA
  1309. #define ISO_8859_1_B9 KEY_1 + RCTRL_MASK // 185 ¹ SUPERSCRIPT ONE
  1310. #define ISO_8859_1_BA KEY_M + SHIFT_MASK + RCTRL_MASK // 186 º MASCULINE ORDINAL
  1311. #define ISO_8859_1_BB KEY_X + ALTGR_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  1312. #define ISO_8859_1_BC KEY_4 + RCTRL_MASK // 188 ¼ FRACTION ONE QUARTER
  1313. #define ISO_8859_1_BD KEY_5 + RCTRL_MASK // 189 ½ FRACTION ONE HALF
  1314. #define ISO_8859_1_BE KEY_6 + RCTRL_MASK // 190 ¾ FRACTION THREE QUARTERS
  1315. #define ISO_8859_1_BF KEY_MINUS + SHIFT_MASK + RCTRL_MASK // 191 ¿ INVERTED QUESTION MARK
  1316. #define ISO_8859_1_C0 KEY_BACKSLASH + SHIFT_MASK // 192 À A GRAVE
  1317. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  1318. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  1319. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  1320. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  1321. #define ISO_8859_1_C5 RING_ABOVE_BITS + KEY_A + SHIFT_MASK // 197 Å A RING ABOVE
  1322. #define ISO_8859_1_C6 KEY_A + SHIFT_MASK + RCTRL_MASK // 198 Æ AE
  1323. #define ISO_8859_1_C7 KEY_RIGHT_BRACE + SHIFT_MASK // 199 Ç C CEDILLA
  1324. #define ISO_8859_1_C8 KEY_QUOTE + SHIFT_MASK // 200 È E GRAVE
  1325. #define ISO_8859_1_C9 KEY_SLASH + SHIFT_MASK // 201 É E ACUTE
  1326. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  1327. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  1328. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  1329. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  1330. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  1331. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  1332. #define ISO_8859_1_D0 KEY_D + SHIFT_MASK + RCTRL_MASK // 208 Ð ETH
  1333. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  1334. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  1335. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  1336. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  1337. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  1338. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  1339. #define ISO_8859_1_D7 KEY_COMMA + SHIFT_MASK + RCTRL_MASK // 215 × MULTIPLICATION
  1340. #define ISO_8859_1_D8 KEY_O + SHIFT_MASK + RCTRL_MASK // 216 Ø O STROKE
  1341. #define ISO_8859_1_D9 KEY_NON_US_100 + SHIFT_MASK // 217 Ù U GRAVE
  1342. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  1343. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  1344. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U // 220 Ü U DIAERESIS
  1345. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  1346. #define ISO_8859_1_DE KEY_P + RCTRL_MASK + SHIFT_MASK // 222 Þ THORN
  1347. #define ISO_8859_1_DF KEY_S + RCTRL_MASK // 223 ß SHARP S
  1348. #define ISO_8859_1_E0 KEY_BACKSLASH // 224 à a GRAVE
  1349. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  1350. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  1351. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  1352. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  1353. #define ISO_8859_1_E5 RING_ABOVE_BITS + KEY_A // 229 å a RING ABOVE
  1354. #define ISO_8859_1_E6 KEY_A + RCTRL_MASK // 230 æ ae
  1355. #define ISO_8859_1_E7 KEY_RIGHT_BRACE // 231 ç c CEDILLA
  1356. #define ISO_8859_1_E8 KEY_QUOTE // 232 è e GRAVE
  1357. #define ISO_8859_1_E9 KEY_SLASH // 233 é e ACUTE
  1358. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  1359. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  1360. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  1361. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  1362. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  1363. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  1364. #define ISO_8859_1_F0 KEY_D + RCTRL_MASK // 240 ð ETH
  1365. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  1366. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  1367. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  1368. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  1369. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  1370. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  1371. #define ISO_8859_1_F7 KEY_PERIOD + SHIFT_MASK + RCTRL_MASK // 247 ÷ DIVISION
  1372. #define ISO_8859_1_F8 KEY_O + RCTRL_MASK // 248 ø o STROKE
  1373. #define ISO_8859_1_F9 KEY_NON_US_100 // 249 ù u GRAVE
  1374. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  1375. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  1376. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  1377. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  1378. #define ISO_8859_1_FE KEY_P + RCTRL_MASK // 254 þ THORN
  1379. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  1380. #endif // LAYOUT_CANADIAN_MULTILINGUAL
  1381. #ifdef LAYOUT_UNITED_KINGDOM
  1382. #define SHIFT_MASK 0x0040
  1383. #define ALTGR_MASK 0x0080
  1384. #define KEYCODE_TYPE uint8_t
  1385. #define KEYCODE_MASK 0x00FF
  1386. #define KEY_NON_US_100 63
  1387. #define ASCII_20 KEY_SPACE // 32
  1388. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  1389. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  1390. #define ASCII_23 KEY_BACKSPACE // 35 #
  1391. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  1392. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  1393. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  1394. #define ASCII_27 KEY_QUOTE // 39 '
  1395. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  1396. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  1397. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  1398. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  1399. #define ASCII_2C KEY_COMMA // 44 ,
  1400. #define ASCII_2D KEY_MINUS // 45 -
  1401. #define ASCII_2E KEY_PERIOD // 46 .
  1402. #define ASCII_2F KEY_SLASH // 47 /
  1403. #define ASCII_30 KEY_0 // 48 0
  1404. #define ASCII_31 KEY_1 // 49 1
  1405. #define ASCII_32 KEY_2 // 50 2
  1406. #define ASCII_33 KEY_3 // 51 3
  1407. #define ASCII_34 KEY_4 // 52 4
  1408. #define ASCII_35 KEY_5 // 53 5
  1409. #define ASCII_36 KEY_6 // 54 6
  1410. #define ASCII_37 KEY_7 // 55 7
  1411. #define ASCII_38 KEY_8 // 55 8
  1412. #define ASCII_39 KEY_9 // 57 9
  1413. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  1414. #define ASCII_3B KEY_SEMICOLON // 59 ;
  1415. #define ASCII_3C KEY_COMMA + SHIFT_MASK // 60 <
  1416. #define ASCII_3D KEY_EQUAL // 61 =
  1417. #define ASCII_3E KEY_PERIOD + SHIFT_MASK // 62 >
  1418. #define ASCII_3F KEY_SLASH + SHIFT_MASK // 63 ?
  1419. #define ASCII_40 KEY_QUOTE + SHIFT_MASK // 64 @
  1420. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  1421. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  1422. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  1423. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  1424. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  1425. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  1426. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  1427. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  1428. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  1429. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  1430. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  1431. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  1432. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  1433. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  1434. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  1435. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  1436. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  1437. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  1438. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  1439. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  1440. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  1441. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  1442. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  1443. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  1444. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  1445. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  1446. #define ASCII_5B KEY_LEFT_BRACE // 91 [
  1447. #define ASCII_5C KEY_NON_US_100 // 92
  1448. #define ASCII_5D KEY_RIGHT_BRACE // 93 ]
  1449. #define ASCII_5E KEY_6 + SHIFT_MASK // 94 ^
  1450. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  1451. #define ASCII_60 KEY_TILDE // 96 `
  1452. #define ASCII_61 KEY_A // 97 a
  1453. #define ASCII_62 KEY_B // 98 b
  1454. #define ASCII_63 KEY_C // 99 c
  1455. #define ASCII_64 KEY_D // 100 d
  1456. #define ASCII_65 KEY_E // 101 e
  1457. #define ASCII_66 KEY_F // 102 f
  1458. #define ASCII_67 KEY_G // 103 g
  1459. #define ASCII_68 KEY_H // 104 h
  1460. #define ASCII_69 KEY_I // 105 i
  1461. #define ASCII_6A KEY_J // 106 j
  1462. #define ASCII_6B KEY_K // 107 k
  1463. #define ASCII_6C KEY_L // 108 l
  1464. #define ASCII_6D KEY_M // 109 m
  1465. #define ASCII_6E KEY_N // 110 n
  1466. #define ASCII_6F KEY_O // 111 o
  1467. #define ASCII_70 KEY_P // 112 p
  1468. #define ASCII_71 KEY_Q // 113 q
  1469. #define ASCII_72 KEY_R // 114 r
  1470. #define ASCII_73 KEY_S // 115 s
  1471. #define ASCII_74 KEY_T // 116 t
  1472. #define ASCII_75 KEY_U // 117 u
  1473. #define ASCII_76 KEY_V // 118 v
  1474. #define ASCII_77 KEY_W // 119 w
  1475. #define ASCII_78 KEY_X // 120 x
  1476. #define ASCII_79 KEY_Y // 121 y
  1477. #define ASCII_7A KEY_Z // 122 z
  1478. #define ASCII_7B KEY_LEFT_BRACE + SHIFT_MASK // 123 {
  1479. #define ASCII_7C KEY_NON_US_100 + SHIFT_MASK // 124 |
  1480. #define ASCII_7D KEY_RIGHT_BRACE + SHIFT_MASK // 125 }
  1481. #define ASCII_7E KEY_BACKSLASH + SHIFT_MASK // 126 ~
  1482. #define ASCII_7F KEY_BACKSPACE // 127
  1483. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  1484. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  1485. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  1486. #define ISO_8859_1_A3 KEY_3 + SHIFT_MASK // 163 £ Pound Sign
  1487. #define ISO_8859_1_A4 0 // 164 ¤ Currency or Euro Sign
  1488. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  1489. #define ISO_8859_1_A6 KEY_TILDE + ALTGR_MASK // 166 ¦ BROKEN BAR
  1490. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  1491. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  1492. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  1493. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  1494. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  1495. #define ISO_8859_1_AC KEY_TILDE + SHIFT_MASK // 172 ¬ NOT SIGN
  1496. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  1497. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  1498. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  1499. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  1500. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  1501. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  1502. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  1503. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  1504. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  1505. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  1506. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  1507. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  1508. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  1509. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  1510. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  1511. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  1512. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  1513. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  1514. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  1515. #define ISO_8859_1_C0 0 // 192 À A GRAVE
  1516. #define ISO_8859_1_C1 KEY_A + ALTGR_MASK + SHIFT_MASK // 193 Á A ACUTE
  1517. #define ISO_8859_1_C2 0 // 194 Â A CIRCUMFLEX
  1518. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  1519. #define ISO_8859_1_C4 0 // 196 Ä A DIAERESIS
  1520. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  1521. #define ISO_8859_1_C6 0 // 198 Æ AE
  1522. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  1523. #define ISO_8859_1_C8 0 // 200 È E GRAVE
  1524. #define ISO_8859_1_C9 KEY_E + ALTGR_MASK + SHIFT_MASK // 201 É E ACUTE
  1525. #define ISO_8859_1_CA 0 // 202 Ê E CIRCUMFLEX
  1526. #define ISO_8859_1_CB 0 // 203 Ë E DIAERESIS
  1527. #define ISO_8859_1_CC 0 // 204 Ì I GRAVE
  1528. #define ISO_8859_1_CD KEY_I + ALTGR_MASK + SHIFT_MASK // 205 Í I ACUTE
  1529. #define ISO_8859_1_CE 0 // 206 Î I CIRCUMFLEX
  1530. #define ISO_8859_1_CF 0 // 207 Ï I DIAERESIS
  1531. #define ISO_8859_1_D0 0 // 208 Ð ETH
  1532. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  1533. #define ISO_8859_1_D2 0 // 210 Ò O GRAVE
  1534. #define ISO_8859_1_D3 KEY_O + ALTGR_MASK + SHIFT_MASK // 211 Ó O ACUTE
  1535. #define ISO_8859_1_D4 0 // 212 Ô O CIRCUMFLEX
  1536. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  1537. #define ISO_8859_1_D6 0 // 214 Ö O DIAERESIS
  1538. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  1539. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  1540. #define ISO_8859_1_D9 0 // 217 Ù U GRAVE
  1541. #define ISO_8859_1_DA KEY_U + ALTGR_MASK + SHIFT_MASK // 218 Ú U ACUTE
  1542. #define ISO_8859_1_DB 0 // 219 Û U CIRCUMFLEX
  1543. #define ISO_8859_1_DC 0 // 220 Ü U DIAERESIS
  1544. #define ISO_8859_1_DD 0 // 221 Ý Y ACUTE
  1545. #define ISO_8859_1_DE 0 // 222 Þ THORN
  1546. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  1547. #define ISO_8859_1_E0 0 // 224 à a GRAVE
  1548. #define ISO_8859_1_E1 KEY_A + ALTGR_MASK // 225 á a ACUTE
  1549. #define ISO_8859_1_E2 0 // 226 â a CIRCUMFLEX
  1550. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  1551. #define ISO_8859_1_E4 0 // 228 ä a DIAERESIS
  1552. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  1553. #define ISO_8859_1_E6 0 // 230 æ ae
  1554. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  1555. #define ISO_8859_1_E8 0 // 232 è e GRAVE
  1556. #define ISO_8859_1_E9 KEY_E + ALTGR_MASK // 233 é e ACUTE
  1557. #define ISO_8859_1_EA 0 // 234 ê e CIRCUMFLEX
  1558. #define ISO_8859_1_EB 0 // 235 ë e DIAERESIS
  1559. #define ISO_8859_1_EC 0 // 236 ì i GRAVE
  1560. #define ISO_8859_1_ED KEY_I + ALTGR_MASK // 237 í i ACUTE
  1561. #define ISO_8859_1_EE 0 // 238 î i CIRCUMFLEX
  1562. #define ISO_8859_1_EF 0 // 239 ï i DIAERESIS
  1563. #define ISO_8859_1_F0 0 // 240 ð ETH
  1564. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  1565. #define ISO_8859_1_F2 0 // 242 ò o GRAVE
  1566. #define ISO_8859_1_F3 KEY_O + ALTGR_MASK // 243 ó o ACUTE
  1567. #define ISO_8859_1_F4 0 // 244 ô o CIRCUMFLEX
  1568. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  1569. #define ISO_8859_1_F6 0 // 246 ö o DIAERESIS
  1570. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  1571. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  1572. #define ISO_8859_1_F9 0 // 249 ù u GRAVE
  1573. #define ISO_8859_1_FA KEY_U + ALTGR_MASK // 250 ú u ACUTE
  1574. #define ISO_8859_1_FB 0 // 251 û u CIRCUMFLEX
  1575. #define ISO_8859_1_FC 0 // 252 ü u DIAERESIS
  1576. #define ISO_8859_1_FD 0 // 253 ý y ACUTE
  1577. #define ISO_8859_1_FE 0 // 254 þ THORN
  1578. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  1579. #define UNICODE_20AC KEY_4 + ALTGR_MASK // € Euro Sign
  1580. // not yet implemented
  1581. #define UNICODE_EXTRA00 0x20AC
  1582. #define KEYCODE_EXTRA00 KEY_4 + ALTGR_MASK // 20AC € Euro Sign
  1583. #endif // LAYOUT_UNITED_KINGDOM
  1584. #ifdef LAYOUT_FINNISH
  1585. #define SHIFT_MASK 0x0040
  1586. #define ALTGR_MASK 0x0080
  1587. #define DEADKEYS_MASK 0x0700
  1588. #define CIRCUMFLEX_BITS 0x0100
  1589. #define ACUTE_ACCENT_BITS 0x0200
  1590. #define GRAVE_ACCENT_BITS 0x0300
  1591. #define TILDE_BITS 0x0400
  1592. #define DIAERESIS_BITS 0x0500
  1593. #define KEYCODE_TYPE uint16_t
  1594. #define KEYCODE_MASK 0x07FF
  1595. #define DEADKEY_CIRCUMFLEX KEY_RIGHT_BRACE + SHIFT_MASK
  1596. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL
  1597. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  1598. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  1599. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  1600. #define KEY_NON_US_100 63
  1601. #define ASCII_20 KEY_SPACE // 32
  1602. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  1603. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  1604. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  1605. #define ASCII_24 KEY_4 + ALTGR_MASK // 36 $
  1606. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  1607. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  1608. #define ASCII_27 KEY_BACKSLASH // 39 '
  1609. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  1610. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  1611. #define ASCII_2A KEY_BACKSLASH + SHIFT_MASK // 42 *
  1612. #define ASCII_2B KEY_MINUS // 43 +
  1613. #define ASCII_2C KEY_COMMA // 44 ,
  1614. #define ASCII_2D KEY_SLASH // 45 -
  1615. #define ASCII_2E KEY_PERIOD // 46 .
  1616. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  1617. #define ASCII_30 KEY_0 // 48 0
  1618. #define ASCII_31 KEY_1 // 49 1
  1619. #define ASCII_32 KEY_2 // 50 2
  1620. #define ASCII_33 KEY_3 // 51 3
  1621. #define ASCII_34 KEY_4 // 52 4
  1622. #define ASCII_35 KEY_5 // 53 5
  1623. #define ASCII_36 KEY_6 // 54 6
  1624. #define ASCII_37 KEY_7 // 55 7
  1625. #define ASCII_38 KEY_8 // 55 8
  1626. #define ASCII_39 KEY_9 // 57 9
  1627. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  1628. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  1629. #define ASCII_3C KEY_NON_US_100 // 60 <
  1630. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  1631. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  1632. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  1633. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  1634. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  1635. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  1636. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  1637. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  1638. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  1639. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  1640. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  1641. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  1642. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  1643. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  1644. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  1645. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  1646. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  1647. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  1648. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  1649. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  1650. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  1651. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  1652. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  1653. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  1654. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  1655. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  1656. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  1657. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  1658. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  1659. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  1660. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  1661. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  1662. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  1663. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  1664. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  1665. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  1666. #define ASCII_61 KEY_A // 97 a
  1667. #define ASCII_62 KEY_B // 98 b
  1668. #define ASCII_63 KEY_C // 99 c
  1669. #define ASCII_64 KEY_D // 100 d
  1670. #define ASCII_65 KEY_E // 101 e
  1671. #define ASCII_66 KEY_F // 102 f
  1672. #define ASCII_67 KEY_G // 103 g
  1673. #define ASCII_68 KEY_H // 104 h
  1674. #define ASCII_69 KEY_I // 105 i
  1675. #define ASCII_6A KEY_J // 106 j
  1676. #define ASCII_6B KEY_K // 107 k
  1677. #define ASCII_6C KEY_L // 108 l
  1678. #define ASCII_6D KEY_M // 109 m
  1679. #define ASCII_6E KEY_N // 110 n
  1680. #define ASCII_6F KEY_O // 111 o
  1681. #define ASCII_70 KEY_P // 112 p
  1682. #define ASCII_71 KEY_Q // 113 q
  1683. #define ASCII_72 KEY_R // 114 r
  1684. #define ASCII_73 KEY_S // 115 s
  1685. #define ASCII_74 KEY_T // 116 t
  1686. #define ASCII_75 KEY_U // 117 u
  1687. #define ASCII_76 KEY_V // 118 v
  1688. #define ASCII_77 KEY_W // 119 w
  1689. #define ASCII_78 KEY_X // 120 x
  1690. #define ASCII_79 KEY_Y // 121 y
  1691. #define ASCII_7A KEY_Z // 122 z
  1692. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  1693. #define ASCII_7C KEY_NON_US_100 + ALTGR_MASK // 124 |
  1694. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  1695. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  1696. #define ASCII_7F KEY_BACKSPACE // 127
  1697. #define ISO_8859_1_A0 KEY_SPACE + ALTGR_MASK // 160 Nonbreakng Space
  1698. #define ISO_8859_1_A1 KEY_1 + SHIFT_MASK + ALTGR_MASK // 161 ¡ Inverted Exclamation
  1699. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  1700. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  1701. #define ISO_8859_1_A4 KEY_4 + SHIFT_MASK // 164 ¤ Currency or Euro Sign
  1702. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  1703. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  1704. #define ISO_8859_1_A7 KEY_TILDE // 167 § SECTION SIGN
  1705. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  1706. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  1707. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  1708. #define ISO_8859_1_AB KEY_4 + ALTGR_MASK + SHIFT_MASK // 171 « LEFT DOUBLE ANGLE QUOTE
  1709. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  1710. #define ISO_8859_1_AD KEY_SLASH + ALTGR_MASK // 173 SOFT HYPHEN
  1711. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  1712. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  1713. #define ISO_8859_1_B0 KEY_0 + ALTGR_MASK + SHIFT_MASK // 176 ° DEGREE SIGN
  1714. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  1715. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  1716. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  1717. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  1718. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  1719. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  1720. #define ISO_8859_1_B7 KEY_X + ALTGR_MASK + SHIFT_MASK // 183 · MIDDLE DOT
  1721. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  1722. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  1723. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  1724. #define ISO_8859_1_BB KEY_3 + ALTGR_MASK + SHIFT_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  1725. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  1726. #define ISO_8859_1_BD KEY_TILDE + SHIFT_MASK // 189 ½ FRACTION ONE HALF
  1727. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  1728. #define ISO_8859_1_BF KEY_MINUS + ALTGR_MASK + SHIFT_MASK // 191 ¿ INVERTED QUESTION MARK
  1729. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  1730. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  1731. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  1732. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  1733. #define ISO_8859_1_C4 KEY_QUOTE + SHIFT_MASK // 196 Ä A DIAERESIS
  1734. #define ISO_8859_1_C5 KEY_LEFT_BRACE + SHIFT_MASK // 197 Å A RING ABOVE
  1735. #define ISO_8859_1_C6 KEY_QUOTE + ALTGR_MASK + SHIFT_MASK // 198 Æ AE
  1736. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  1737. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  1738. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  1739. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  1740. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  1741. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  1742. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  1743. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  1744. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  1745. #define ISO_8859_1_D0 KEY_D + ALTGR_MASK + SHIFT_MASK // 208 Ð ETH
  1746. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  1747. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  1748. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  1749. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  1750. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  1751. #define ISO_8859_1_D6 KEY_SEMICOLON + SHIFT_MASK // 214 Ö O DIAERESIS
  1752. #define ISO_8859_1_D7 KEY_X + ALTGR_MASK // 215 × MULTIPLICATION
  1753. #define ISO_8859_1_D8 KEY_SEMICOLON + ALTGR_MASK + SHIFT_MASK // 216 Ø O STROKE
  1754. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  1755. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  1756. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  1757. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  1758. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  1759. #define ISO_8859_1_DE KEY_T + ALTGR_MASK + SHIFT_MASK // 222 Þ THORN
  1760. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  1761. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  1762. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  1763. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  1764. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  1765. #define ISO_8859_1_E4 KEY_QUOTE // 228 ä a DIAERESIS
  1766. #define ISO_8859_1_E5 KEY_LEFT_BRACE // 229 å a RING ABOVE
  1767. #define ISO_8859_1_E6 KEY_QUOTE + ALTGR_MASK // 230 æ ae
  1768. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  1769. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  1770. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  1771. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  1772. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  1773. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  1774. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  1775. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  1776. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  1777. #define ISO_8859_1_F0 KEY_D + ALTGR_MASK // 240 ð ETH
  1778. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  1779. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  1780. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  1781. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  1782. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  1783. #define ISO_8859_1_F6 KEY_SEMICOLON // 246 ö o DIAERESIS
  1784. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  1785. #define ISO_8859_1_F8 KEY_SEMICOLON + ALTGR_MASK // 248 ø o STROKE
  1786. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  1787. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  1788. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  1789. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  1790. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  1791. #define ISO_8859_1_FE KEY_T + ALTGR_MASK // 254 þ THORN
  1792. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  1793. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  1794. // not yet implemented
  1795. #define UNICODE_EXTRA00 0x20AC
  1796. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  1797. // TODO: Finnish Multilingual layout can type many more glyphs
  1798. // but we currently don't have tables tables to store them...
  1799. #endif // LAYOUT_FINNISH
  1800. #ifdef LAYOUT_FRENCH
  1801. #define SHIFT_MASK 0x0040
  1802. #define ALTGR_MASK 0x0080
  1803. #define DEADKEYS_MASK 0x0700
  1804. #define CIRCUMFLEX_BITS 0x0100
  1805. #define GRAVE_ACCENT_BITS 0x0200
  1806. #define DIAERESIS_BITS 0x0300
  1807. #define TILDE_BITS 0x0400
  1808. #define KEYCODE_TYPE uint16_t
  1809. #define KEYCODE_MASK 0x07FF
  1810. #define DEADKEY_CIRCUMFLEX KEY_LEFT_BRACE
  1811. #define DEADKEY_GRAVE_ACCENT KEY_7 + ALTGR_MASK
  1812. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + SHIFT_MASK
  1813. #define DEADKEY_TILDE KEY_2 + ALTGR_MASK
  1814. #define KEY_NON_US_100 63
  1815. #define ASCII_20 KEY_SPACE // 32
  1816. #define ASCII_21 KEY_SLASH // 33 !
  1817. #define ASCII_22 KEY_3 // 34 "
  1818. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  1819. #define ASCII_24 KEY_RIGHT_BRACE // 36 $
  1820. #define ASCII_25 KEY_QUOTE + SHIFT_MASK // 37 %
  1821. #define ASCII_26 KEY_1 // 38 &
  1822. #define ASCII_27 KEY_4 // 39 '
  1823. #define ASCII_28 KEY_5 // 40 (
  1824. #define ASCII_29 KEY_MINUS // 41 )
  1825. #define ASCII_2A KEY_BACKSLASH // 42 *
  1826. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  1827. #define ASCII_2C KEY_M // 44 ,
  1828. #define ASCII_2D KEY_6 // 45 -
  1829. #define ASCII_2E KEY_COMMA + SHIFT_MASK // 46 .
  1830. #define ASCII_2F KEY_PERIOD + SHIFT_MASK // 47 /
  1831. #define ASCII_30 KEY_0 + SHIFT_MASK // 48 0
  1832. #define ASCII_31 KEY_1 + SHIFT_MASK // 49 1
  1833. #define ASCII_32 KEY_2 + SHIFT_MASK // 50 2
  1834. #define ASCII_33 KEY_3 + SHIFT_MASK // 51 3
  1835. #define ASCII_34 KEY_4 + SHIFT_MASK // 52 4
  1836. #define ASCII_35 KEY_5 + SHIFT_MASK // 53 5
  1837. #define ASCII_36 KEY_6 + SHIFT_MASK // 54 6
  1838. #define ASCII_37 KEY_7 + SHIFT_MASK // 55 7
  1839. #define ASCII_38 KEY_8 + SHIFT_MASK // 55 8
  1840. #define ASCII_39 KEY_9 + SHIFT_MASK // 57 9
  1841. #define ASCII_3A KEY_PERIOD // 58 :
  1842. #define ASCII_3B KEY_COMMA // 59 ;
  1843. #define ASCII_3C KEY_NON_US_100 // 60 <
  1844. #define ASCII_3D KEY_EQUAL // 61 =
  1845. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  1846. #define ASCII_3F KEY_M + SHIFT_MASK // 63 ?
  1847. #define ASCII_40 KEY_0 + ALTGR_MASK // 64 @
  1848. #define ASCII_41 KEY_Q + SHIFT_MASK // 65 A
  1849. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  1850. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  1851. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  1852. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  1853. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  1854. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  1855. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  1856. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  1857. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  1858. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  1859. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  1860. #define ASCII_4D KEY_SEMICOLON + SHIFT_MASK // 77 M
  1861. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  1862. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  1863. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  1864. #define ASCII_51 KEY_A + SHIFT_MASK // 81 Q
  1865. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  1866. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  1867. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  1868. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  1869. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  1870. #define ASCII_57 KEY_Z + SHIFT_MASK // 87 W
  1871. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  1872. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  1873. #define ASCII_5A KEY_W + SHIFT_MASK // 90 Z
  1874. #define ASCII_5B KEY_5 + ALTGR_MASK // 91 [
  1875. #define ASCII_5C KEY_8 + ALTGR_MASK // 92
  1876. #define ASCII_5D KEY_MINUS + ALTGR_MASK // 93 ]
  1877. #define ASCII_5E KEY_9 + ALTGR_MASK // 94 ^
  1878. #define ASCII_5F KEY_8 // 95 _
  1879. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  1880. #define ASCII_61 KEY_Q // 97 a
  1881. #define ASCII_62 KEY_B // 98 b
  1882. #define ASCII_63 KEY_C // 99 c
  1883. #define ASCII_64 KEY_D // 100 d
  1884. #define ASCII_65 KEY_E // 101 e
  1885. #define ASCII_66 KEY_F // 102 f
  1886. #define ASCII_67 KEY_G // 103 g
  1887. #define ASCII_68 KEY_H // 104 h
  1888. #define ASCII_69 KEY_I // 105 i
  1889. #define ASCII_6A KEY_J // 106 j
  1890. #define ASCII_6B KEY_K // 107 k
  1891. #define ASCII_6C KEY_L // 108 l
  1892. #define ASCII_6D KEY_SEMICOLON // 109 m
  1893. #define ASCII_6E KEY_N // 110 n
  1894. #define ASCII_6F KEY_O // 111 o
  1895. #define ASCII_70 KEY_P // 112 p
  1896. #define ASCII_71 KEY_A // 113 q
  1897. #define ASCII_72 KEY_R // 114 r
  1898. #define ASCII_73 KEY_S // 115 s
  1899. #define ASCII_74 KEY_T // 116 t
  1900. #define ASCII_75 KEY_U // 117 u
  1901. #define ASCII_76 KEY_V // 118 v
  1902. #define ASCII_77 KEY_Z // 119 w
  1903. #define ASCII_78 KEY_X // 120 x
  1904. #define ASCII_79 KEY_Y // 121 y
  1905. #define ASCII_7A KEY_W // 122 z
  1906. #define ASCII_7B KEY_4 + ALTGR_MASK // 123 {
  1907. #define ASCII_7C KEY_6 + ALTGR_MASK // 124 |
  1908. #define ASCII_7D KEY_EQUAL + ALTGR_MASK // 125 }
  1909. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  1910. #define ASCII_7F KEY_BACKSPACE // 127
  1911. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  1912. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  1913. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  1914. #define ISO_8859_1_A3 KEY_RIGHT_BRACE + SHIFT_MASK // 163 £ Pound Sign
  1915. #define ISO_8859_1_A4 KEY_RIGHT_BRACE + ALTGR_MASK // 164 ¤ Currency or Euro Sign
  1916. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  1917. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  1918. #define ISO_8859_1_A7 KEY_SLASH + SHIFT_MASK // 167 § SECTION SIGN
  1919. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  1920. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  1921. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  1922. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  1923. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  1924. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  1925. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  1926. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  1927. #define ISO_8859_1_B0 KEY_MINUS + SHIFT_MASK // 176 ° DEGREE SIGN
  1928. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  1929. #define ISO_8859_1_B2 KEY_TILDE // 178 ² SUPERSCRIPT TWO
  1930. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  1931. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  1932. #define ISO_8859_1_B5 KEY_BACKSLASH + SHIFT_MASK // 181 µ MICRO SIGN
  1933. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  1934. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  1935. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  1936. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  1937. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  1938. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  1939. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  1940. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  1941. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  1942. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  1943. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_Q + SHIFT_MASK // 192 À A GRAVE
  1944. #define ISO_8859_1_C1 0 // 193 Á A ACUTE
  1945. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_Q + SHIFT_MASK // 194 Â A CIRCUMFLEX
  1946. #define ISO_8859_1_C3 TILDE_BITS + KEY_Q + SHIFT_MASK // 195 Ã A TILDE
  1947. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_Q + SHIFT_MASK // 196 Ä A DIAERESIS
  1948. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  1949. #define ISO_8859_1_C6 0 // 198 Æ AE
  1950. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  1951. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  1952. #define ISO_8859_1_C9 0 // 201 É E ACUTE
  1953. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  1954. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  1955. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  1956. #define ISO_8859_1_CD 0 // 205 Í I ACUTE
  1957. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  1958. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  1959. #define ISO_8859_1_D0 0 // 208 Ð ETH
  1960. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  1961. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  1962. #define ISO_8859_1_D3 0 // 211 Ó O ACUTE
  1963. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  1964. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  1965. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  1966. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  1967. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  1968. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  1969. #define ISO_8859_1_DA 0 // 218 Ú U ACUTE
  1970. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  1971. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U // 220 Ü U DIAERESIS
  1972. #define ISO_8859_1_DD 0 // 221 Ý Y ACUTE
  1973. #define ISO_8859_1_DE 0 // 222 Þ THORN
  1974. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  1975. #define ISO_8859_1_E0 KEY_0 // 224 à a GRAVE
  1976. #define ISO_8859_1_E1 0 // 225 á a ACUTE
  1977. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_Q // 226 â a CIRCUMFLEX
  1978. #define ISO_8859_1_E3 TILDE_BITS + KEY_Q // 227 ã a TILDE
  1979. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_Q // 228 ä a DIAERESIS
  1980. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  1981. #define ISO_8859_1_E6 0 // 230 æ ae
  1982. #define ISO_8859_1_E7 KEY_9 // 231 ç c CEDILLA
  1983. #define ISO_8859_1_E8 KEY_7 // 232 è e GRAVE
  1984. #define ISO_8859_1_E9 KEY_2 // 233 é e ACUTE
  1985. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  1986. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  1987. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  1988. #define ISO_8859_1_ED 0 // 237 í i ACUTE
  1989. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  1990. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  1991. #define ISO_8859_1_F0 0 // 240 ð ETH
  1992. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  1993. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  1994. #define ISO_8859_1_F3 0 // 243 ó o ACUTE
  1995. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  1996. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  1997. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  1998. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  1999. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  2000. #define ISO_8859_1_F9 KEY_SEMICOLON // 249 ù u GRAVE
  2001. #define ISO_8859_1_FA 0 // 250 ú u ACUTE
  2002. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  2003. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  2004. #define ISO_8859_1_FD 0 // 253 ý y ACUTE
  2005. #define ISO_8859_1_FE 0 // 254 þ THORN
  2006. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  2007. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  2008. // not yet implemented
  2009. #define UNICODE_EXTRA00 0x20AC
  2010. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  2011. #endif // LAYOUT_FRENCH
  2012. #ifdef LAYOUT_DANISH
  2013. #define SHIFT_MASK 0x0040
  2014. #define ALTGR_MASK 0x0080
  2015. #define DEADKEYS_MASK 0x0700
  2016. #define CIRCUMFLEX_BITS 0x0100
  2017. #define ACUTE_ACCENT_BITS 0x0200
  2018. #define GRAVE_ACCENT_BITS 0x0300
  2019. #define TILDE_BITS 0x0400
  2020. #define DIAERESIS_BITS 0x0500
  2021. #define KEYCODE_TYPE uint16_t
  2022. #define KEYCODE_MASK 0x07FF
  2023. #define DEADKEY_CIRCUMFLEX KEY_RIGHT_BRACE + SHIFT_MASK
  2024. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL
  2025. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  2026. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  2027. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  2028. #define KEY_NON_US_100 63
  2029. #define ASCII_20 KEY_SPACE // 32
  2030. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  2031. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  2032. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  2033. #define ASCII_24 KEY_4 + ALTGR_MASK // 36 $
  2034. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  2035. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  2036. #define ASCII_27 KEY_BACKSLASH // 39 '
  2037. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  2038. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  2039. #define ASCII_2A KEY_BACKSLASH + SHIFT_MASK // 42 *
  2040. #define ASCII_2B KEY_MINUS // 43 +
  2041. #define ASCII_2C KEY_COMMA // 44 ,
  2042. #define ASCII_2D KEY_SLASH // 45 -
  2043. #define ASCII_2E KEY_PERIOD // 46 .
  2044. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  2045. #define ASCII_30 KEY_0 // 48 0
  2046. #define ASCII_31 KEY_1 // 49 1
  2047. #define ASCII_32 KEY_2 // 50 2
  2048. #define ASCII_33 KEY_3 // 51 3
  2049. #define ASCII_34 KEY_4 // 52 4
  2050. #define ASCII_35 KEY_5 // 53 5
  2051. #define ASCII_36 KEY_6 // 54 6
  2052. #define ASCII_37 KEY_7 // 55 7
  2053. #define ASCII_38 KEY_8 // 55 8
  2054. #define ASCII_39 KEY_9 // 57 9
  2055. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  2056. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  2057. #define ASCII_3C KEY_NON_US_100 // 60 <
  2058. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  2059. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  2060. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  2061. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  2062. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  2063. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  2064. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  2065. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  2066. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  2067. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  2068. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  2069. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  2070. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  2071. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  2072. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  2073. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  2074. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  2075. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  2076. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  2077. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  2078. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  2079. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  2080. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  2081. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  2082. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  2083. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  2084. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  2085. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  2086. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  2087. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  2088. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  2089. #define ASCII_5C KEY_NON_US_100 + ALTGR_MASK // 92
  2090. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  2091. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  2092. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  2093. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  2094. #define ASCII_61 KEY_A // 97 a
  2095. #define ASCII_62 KEY_B // 98 b
  2096. #define ASCII_63 KEY_C // 99 c
  2097. #define ASCII_64 KEY_D // 100 d
  2098. #define ASCII_65 KEY_E // 101 e
  2099. #define ASCII_66 KEY_F // 102 f
  2100. #define ASCII_67 KEY_G // 103 g
  2101. #define ASCII_68 KEY_H // 104 h
  2102. #define ASCII_69 KEY_I // 105 i
  2103. #define ASCII_6A KEY_J // 106 j
  2104. #define ASCII_6B KEY_K // 107 k
  2105. #define ASCII_6C KEY_L // 108 l
  2106. #define ASCII_6D KEY_M // 109 m
  2107. #define ASCII_6E KEY_N // 110 n
  2108. #define ASCII_6F KEY_O // 111 o
  2109. #define ASCII_70 KEY_P // 112 p
  2110. #define ASCII_71 KEY_Q // 113 q
  2111. #define ASCII_72 KEY_R // 114 r
  2112. #define ASCII_73 KEY_S // 115 s
  2113. #define ASCII_74 KEY_T // 116 t
  2114. #define ASCII_75 KEY_U // 117 u
  2115. #define ASCII_76 KEY_V // 118 v
  2116. #define ASCII_77 KEY_W // 119 w
  2117. #define ASCII_78 KEY_X // 120 x
  2118. #define ASCII_79 KEY_Y // 121 y
  2119. #define ASCII_7A KEY_Z // 122 z
  2120. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  2121. #define ASCII_7C KEY_EQUAL + ALTGR_MASK // 124 |
  2122. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  2123. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  2124. #define ASCII_7F KEY_BACKSPACE // 127
  2125. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  2126. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  2127. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  2128. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  2129. #define ISO_8859_1_A4 KEY_4 + SHIFT_MASK // 164 ¤ Currency Sign
  2130. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  2131. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  2132. #define ISO_8859_1_A7 KEY_TILDE + SHIFT_MASK // 167 § SECTION SIGN
  2133. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  2134. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  2135. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  2136. #define ISO_8859_1_AB KEY_4 // 171 « LEFT DOUBLE ANGLE QUOTE
  2137. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  2138. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  2139. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  2140. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  2141. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  2142. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  2143. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  2144. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  2145. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  2146. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  2147. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  2148. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  2149. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  2150. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  2151. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  2152. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  2153. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  2154. #define ISO_8859_1_BD KEY_TILDE // 189 ½ FRACTION ONE HALF
  2155. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  2156. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  2157. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  2158. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  2159. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  2160. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  2161. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  2162. #define ISO_8859_1_C5 KEY_LEFT_BRACE + SHIFT_MASK // 197 Å A RING ABOVE
  2163. #define ISO_8859_1_C6 KEY_SEMICOLON + SHIFT_MASK // 198 Æ AE
  2164. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  2165. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  2166. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  2167. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  2168. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  2169. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  2170. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  2171. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  2172. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  2173. #define ISO_8859_1_D0 KEY_D + ALTGR_MASK + SHIFT_MASK // 208 Ð ETH
  2174. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  2175. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  2176. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  2177. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  2178. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  2179. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  2180. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  2181. #define ISO_8859_1_D8 KEY_QUOTE + SHIFT_MASK // 216 Ø O STROKE
  2182. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  2183. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  2184. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  2185. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  2186. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  2187. #define ISO_8859_1_DE KEY_T + ALTGR_MASK + SHIFT_MASK // 222 Þ THORN
  2188. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  2189. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  2190. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  2191. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  2192. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  2193. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  2194. #define ISO_8859_1_E5 KEY_LEFT_BRACE // 229 å a RING ABOVE
  2195. #define ISO_8859_1_E6 KEY_SEMICOLON // 230 æ ae
  2196. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  2197. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  2198. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  2199. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  2200. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  2201. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  2202. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  2203. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  2204. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  2205. #define ISO_8859_1_F0 KEY_D + ALTGR_MASK // 240 ð ETH
  2206. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  2207. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  2208. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  2209. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  2210. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  2211. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  2212. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  2213. #define ISO_8859_1_F8 KEY_QUOTE // 248 ø o STROKE
  2214. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  2215. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  2216. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  2217. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  2218. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  2219. #define ISO_8859_1_FE KEY_T + ALTGR_MASK // 254 þ THORN
  2220. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  2221. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  2222. // not yet implemented
  2223. #define UNICODE_EXTRA00 0x20AC
  2224. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  2225. #endif // LAYOUT_DANISH
  2226. #ifdef LAYOUT_NORWEGIAN
  2227. #define SHIFT_MASK 0x0040
  2228. #define ALTGR_MASK 0x0080
  2229. #define DEADKEYS_MASK 0x0700
  2230. #define CIRCUMFLEX_BITS 0x0100
  2231. #define ACUTE_ACCENT_BITS 0x0200
  2232. #define GRAVE_ACCENT_BITS 0x0300
  2233. #define TILDE_BITS 0x0400
  2234. #define DIAERESIS_BITS 0x0500
  2235. #define KEYCODE_TYPE uint16_t
  2236. #define KEYCODE_MASK 0x07FF
  2237. #define DEADKEY_CIRCUMFLEX KEY_RIGHT_BRACE + SHIFT_MASK
  2238. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL + ALTGR_MASK
  2239. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  2240. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  2241. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  2242. #define KEY_NON_US_100 63
  2243. #define ASCII_20 KEY_SPACE // 32
  2244. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  2245. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  2246. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  2247. #define ASCII_24 KEY_4 + ALTGR_MASK // 36 $
  2248. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  2249. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  2250. #define ASCII_27 KEY_BACKSLASH // 39 '
  2251. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  2252. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  2253. #define ASCII_2A KEY_BACKSLASH + SHIFT_MASK // 42 *
  2254. #define ASCII_2B KEY_MINUS // 43 +
  2255. #define ASCII_2C KEY_COMMA // 44 ,
  2256. #define ASCII_2D KEY_SLASH // 45 -
  2257. #define ASCII_2E KEY_PERIOD // 46 .
  2258. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  2259. #define ASCII_30 KEY_0 // 48 0
  2260. #define ASCII_31 KEY_1 // 49 1
  2261. #define ASCII_32 KEY_2 // 50 2
  2262. #define ASCII_33 KEY_3 // 51 3
  2263. #define ASCII_34 KEY_4 // 52 4
  2264. #define ASCII_35 KEY_5 // 53 5
  2265. #define ASCII_36 KEY_6 // 54 6
  2266. #define ASCII_37 KEY_7 // 55 7
  2267. #define ASCII_38 KEY_8 // 55 8
  2268. #define ASCII_39 KEY_9 // 57 9
  2269. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  2270. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  2271. #define ASCII_3C KEY_NON_US_100 // 60 <
  2272. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  2273. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  2274. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  2275. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  2276. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  2277. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  2278. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  2279. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  2280. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  2281. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  2282. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  2283. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  2284. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  2285. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  2286. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  2287. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  2288. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  2289. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  2290. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  2291. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  2292. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  2293. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  2294. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  2295. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  2296. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  2297. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  2298. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  2299. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  2300. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  2301. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  2302. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  2303. #define ASCII_5C KEY_EQUAL // 92
  2304. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  2305. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  2306. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  2307. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  2308. #define ASCII_61 KEY_A // 97 a
  2309. #define ASCII_62 KEY_B // 98 b
  2310. #define ASCII_63 KEY_C // 99 c
  2311. #define ASCII_64 KEY_D // 100 d
  2312. #define ASCII_65 KEY_E // 101 e
  2313. #define ASCII_66 KEY_F // 102 f
  2314. #define ASCII_67 KEY_G // 103 g
  2315. #define ASCII_68 KEY_H // 104 h
  2316. #define ASCII_69 KEY_I // 105 i
  2317. #define ASCII_6A KEY_J // 106 j
  2318. #define ASCII_6B KEY_K // 107 k
  2319. #define ASCII_6C KEY_L // 108 l
  2320. #define ASCII_6D KEY_M // 109 m
  2321. #define ASCII_6E KEY_N // 110 n
  2322. #define ASCII_6F KEY_O // 111 o
  2323. #define ASCII_70 KEY_P // 112 p
  2324. #define ASCII_71 KEY_Q // 113 q
  2325. #define ASCII_72 KEY_R // 114 r
  2326. #define ASCII_73 KEY_S // 115 s
  2327. #define ASCII_74 KEY_T // 116 t
  2328. #define ASCII_75 KEY_U // 117 u
  2329. #define ASCII_76 KEY_V // 118 v
  2330. #define ASCII_77 KEY_W // 119 w
  2331. #define ASCII_78 KEY_X // 120 x
  2332. #define ASCII_79 KEY_Y // 121 y
  2333. #define ASCII_7A KEY_Z // 122 z
  2334. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  2335. #define ASCII_7C KEY_TILDE // 124 |
  2336. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  2337. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  2338. #define ASCII_7F KEY_BACKSPACE // 127
  2339. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  2340. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  2341. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  2342. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  2343. #define ISO_8859_1_A4 KEY_4 + SHIFT_MASK // 164 ¤ Currency Sign
  2344. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  2345. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  2346. #define ISO_8859_1_A7 KEY_TILDE + SHIFT_MASK // 167 § SECTION SIGN
  2347. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  2348. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  2349. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  2350. #define ISO_8859_1_AB KEY_4 // 171 « LEFT DOUBLE ANGLE QUOTE
  2351. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  2352. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  2353. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  2354. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  2355. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  2356. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  2357. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  2358. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  2359. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  2360. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  2361. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  2362. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  2363. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  2364. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  2365. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  2366. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  2367. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  2368. #define ISO_8859_1_BD KEY_TILDE // 189 ½ FRACTION ONE HALF
  2369. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  2370. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  2371. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  2372. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  2373. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  2374. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  2375. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  2376. #define ISO_8859_1_C5 KEY_LEFT_BRACE + SHIFT_MASK // 197 Å A RING ABOVE
  2377. #define ISO_8859_1_C6 KEY_QUOTE + SHIFT_MASK // 198 Æ AE
  2378. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  2379. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  2380. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  2381. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  2382. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  2383. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  2384. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  2385. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  2386. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  2387. #define ISO_8859_1_D0 KEY_D + ALTGR_MASK + SHIFT_MASK // 208 Ð ETH
  2388. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  2389. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  2390. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  2391. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  2392. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  2393. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  2394. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  2395. #define ISO_8859_1_D8 KEY_SEMICOLON + SHIFT_MASK // 216 Ø O STROKE
  2396. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  2397. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  2398. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  2399. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  2400. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  2401. #define ISO_8859_1_DE KEY_T + ALTGR_MASK + SHIFT_MASK // 222 Þ THORN
  2402. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  2403. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  2404. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  2405. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  2406. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  2407. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  2408. #define ISO_8859_1_E5 KEY_LEFT_BRACE // 229 å a RING ABOVE
  2409. #define ISO_8859_1_E6 KEY_QUOTE // 230 æ ae
  2410. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  2411. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  2412. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  2413. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  2414. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  2415. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  2416. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  2417. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  2418. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  2419. #define ISO_8859_1_F0 KEY_D + ALTGR_MASK // 240 ð ETH
  2420. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  2421. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  2422. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  2423. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  2424. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  2425. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  2426. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  2427. #define ISO_8859_1_F8 KEY_SEMICOLON // 248 ø o STROKE
  2428. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  2429. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  2430. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  2431. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  2432. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  2433. #define ISO_8859_1_FE KEY_T + ALTGR_MASK // 254 þ THORN
  2434. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  2435. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  2436. // not yet implemented
  2437. #define UNICODE_EXTRA00 0x20AC
  2438. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  2439. #endif // LAYOUT_NORWEGIAN
  2440. #ifdef LAYOUT_SWEDISH
  2441. #define SHIFT_MASK 0x0040
  2442. #define ALTGR_MASK 0x0080
  2443. #define DEADKEYS_MASK 0x0700
  2444. #define CIRCUMFLEX_BITS 0x0100
  2445. #define ACUTE_ACCENT_BITS 0x0200
  2446. #define GRAVE_ACCENT_BITS 0x0300
  2447. #define TILDE_BITS 0x0400
  2448. #define DIAERESIS_BITS 0x0500
  2449. #define KEYCODE_TYPE uint16_t
  2450. #define KEYCODE_MASK 0x07FF
  2451. #define DEADKEY_CIRCUMFLEX KEY_RIGHT_BRACE + SHIFT_MASK
  2452. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL
  2453. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  2454. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  2455. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  2456. #define KEY_NON_US_100 63
  2457. #define ASCII_20 KEY_SPACE // 32
  2458. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  2459. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  2460. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  2461. #define ASCII_24 KEY_4 + ALTGR_MASK // 36 $
  2462. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  2463. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  2464. #define ASCII_27 KEY_BACKSLASH // 39 '
  2465. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  2466. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  2467. #define ASCII_2A KEY_BACKSLASH + SHIFT_MASK // 42 *
  2468. #define ASCII_2B KEY_MINUS // 43 +
  2469. #define ASCII_2C KEY_COMMA // 44 ,
  2470. #define ASCII_2D KEY_SLASH // 45 -
  2471. #define ASCII_2E KEY_PERIOD // 46 .
  2472. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  2473. #define ASCII_30 KEY_0 // 48 0
  2474. #define ASCII_31 KEY_1 // 49 1
  2475. #define ASCII_32 KEY_2 // 50 2
  2476. #define ASCII_33 KEY_3 // 51 3
  2477. #define ASCII_34 KEY_4 // 52 4
  2478. #define ASCII_35 KEY_5 // 53 5
  2479. #define ASCII_36 KEY_6 // 54 6
  2480. #define ASCII_37 KEY_7 // 55 7
  2481. #define ASCII_38 KEY_8 // 55 8
  2482. #define ASCII_39 KEY_9 // 57 9
  2483. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  2484. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  2485. #define ASCII_3C KEY_NON_US_100 // 60 <
  2486. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  2487. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  2488. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  2489. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  2490. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  2491. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  2492. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  2493. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  2494. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  2495. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  2496. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  2497. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  2498. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  2499. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  2500. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  2501. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  2502. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  2503. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  2504. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  2505. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  2506. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  2507. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  2508. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  2509. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  2510. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  2511. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  2512. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  2513. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  2514. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  2515. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  2516. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  2517. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  2518. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  2519. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  2520. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  2521. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  2522. #define ASCII_61 KEY_A // 97 a
  2523. #define ASCII_62 KEY_B // 98 b
  2524. #define ASCII_63 KEY_C // 99 c
  2525. #define ASCII_64 KEY_D // 100 d
  2526. #define ASCII_65 KEY_E // 101 e
  2527. #define ASCII_66 KEY_F // 102 f
  2528. #define ASCII_67 KEY_G // 103 g
  2529. #define ASCII_68 KEY_H // 104 h
  2530. #define ASCII_69 KEY_I // 105 i
  2531. #define ASCII_6A KEY_J // 106 j
  2532. #define ASCII_6B KEY_K // 107 k
  2533. #define ASCII_6C KEY_L // 108 l
  2534. #define ASCII_6D KEY_M // 109 m
  2535. #define ASCII_6E KEY_N // 110 n
  2536. #define ASCII_6F KEY_O // 111 o
  2537. #define ASCII_70 KEY_P // 112 p
  2538. #define ASCII_71 KEY_Q // 113 q
  2539. #define ASCII_72 KEY_R // 114 r
  2540. #define ASCII_73 KEY_S // 115 s
  2541. #define ASCII_74 KEY_T // 116 t
  2542. #define ASCII_75 KEY_U // 117 u
  2543. #define ASCII_76 KEY_V // 118 v
  2544. #define ASCII_77 KEY_W // 119 w
  2545. #define ASCII_78 KEY_X // 120 x
  2546. #define ASCII_79 KEY_Y // 121 y
  2547. #define ASCII_7A KEY_Z // 122 z
  2548. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  2549. #define ASCII_7C KEY_NON_US_100 + ALTGR_MASK // 124 |
  2550. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  2551. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  2552. #define ASCII_7F KEY_BACKSPACE // 127
  2553. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  2554. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  2555. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  2556. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  2557. #define ISO_8859_1_A4 KEY_4 + SHIFT_MASK // 164 ¤ Currency Sign
  2558. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  2559. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  2560. #define ISO_8859_1_A7 KEY_TILDE // 167 § SECTION SIGN
  2561. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  2562. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  2563. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  2564. #define ISO_8859_1_AB KEY_4 // 171 « LEFT DOUBLE ANGLE QUOTE
  2565. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  2566. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  2567. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  2568. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  2569. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  2570. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  2571. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  2572. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  2573. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  2574. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  2575. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  2576. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  2577. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  2578. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  2579. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  2580. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  2581. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  2582. #define ISO_8859_1_BD KEY_TILDE + SHIFT_MASK // 189 ½ FRACTION ONE HALF
  2583. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  2584. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  2585. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  2586. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  2587. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  2588. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  2589. #define ISO_8859_1_C4 KEY_QUOTE + SHIFT_MASK // 196 Ä A DIAERESIS
  2590. #define ISO_8859_1_C5 KEY_LEFT_BRACE + SHIFT_MASK // 197 Å A RING ABOVE
  2591. #define ISO_8859_1_C6 0 // 198 Æ AE
  2592. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  2593. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  2594. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  2595. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  2596. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  2597. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  2598. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  2599. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  2600. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  2601. #define ISO_8859_1_D0 KEY_D + ALTGR_MASK + SHIFT_MASK // 208 Ð ETH
  2602. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  2603. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  2604. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  2605. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  2606. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  2607. #define ISO_8859_1_D6 KEY_SEMICOLON + SHIFT_MASK // 214 Ö O DIAERESIS
  2608. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  2609. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  2610. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  2611. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  2612. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  2613. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  2614. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  2615. #define ISO_8859_1_DE KEY_T + ALTGR_MASK + SHIFT_MASK // 222 Þ THORN
  2616. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  2617. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  2618. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  2619. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  2620. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  2621. #define ISO_8859_1_E4 KEY_QUOTE // 228 ä a DIAERESIS
  2622. #define ISO_8859_1_E5 KEY_LEFT_BRACE // 229 å a RING ABOVE
  2623. #define ISO_8859_1_E6 0 // 230 æ ae
  2624. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  2625. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  2626. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  2627. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  2628. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  2629. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  2630. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  2631. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  2632. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  2633. #define ISO_8859_1_F0 KEY_D + ALTGR_MASK // 240 ð ETH
  2634. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  2635. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  2636. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  2637. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  2638. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  2639. #define ISO_8859_1_F6 KEY_SEMICOLON // 246 ö o DIAERESIS
  2640. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  2641. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  2642. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  2643. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  2644. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  2645. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  2646. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  2647. #define ISO_8859_1_FE KEY_T + ALTGR_MASK // 254 þ THORN
  2648. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  2649. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  2650. // not yet implemented
  2651. #define UNICODE_EXTRA00 0x20AC
  2652. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  2653. #endif // LAYOUT_SWEDISH
  2654. #ifdef LAYOUT_SPANISH
  2655. #define SHIFT_MASK 0x0040
  2656. #define ALTGR_MASK 0x0080
  2657. #define DEADKEYS_MASK 0x0700
  2658. #define CIRCUMFLEX_BITS 0x0100
  2659. #define ACUTE_ACCENT_BITS 0x0200
  2660. #define GRAVE_ACCENT_BITS 0x0300
  2661. #define TILDE_BITS 0x0400
  2662. #define DIAERESIS_BITS 0x0500
  2663. #define KEYCODE_TYPE uint16_t
  2664. #define KEYCODE_MASK 0x07FF
  2665. #define DEADKEY_CIRCUMFLEX KEY_LEFT_BRACE + SHIFT_MASK
  2666. #define DEADKEY_ACUTE_ACCENT KEY_QUOTE
  2667. #define DEADKEY_GRAVE_ACCENT KEY_LEFT_BRACE
  2668. #define DEADKEY_TILDE KEY_4 + ALTGR_MASK
  2669. #define DEADKEY_DIAERESIS KEY_QUOTE + SHIFT_MASK
  2670. #define KEY_NON_US_100 63
  2671. #define ASCII_20 KEY_SPACE // 32
  2672. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  2673. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  2674. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  2675. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  2676. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  2677. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  2678. #define ASCII_27 KEY_MINUS // 39 '
  2679. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  2680. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  2681. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  2682. #define ASCII_2B KEY_RIGHT_BRACE // 43 +
  2683. #define ASCII_2C KEY_COMMA // 44 ,
  2684. #define ASCII_2D KEY_SLASH // 45 -
  2685. #define ASCII_2E KEY_PERIOD // 46 .
  2686. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  2687. #define ASCII_30 KEY_0 // 48 0
  2688. #define ASCII_31 KEY_1 // 49 1
  2689. #define ASCII_32 KEY_2 // 50 2
  2690. #define ASCII_33 KEY_3 // 51 3
  2691. #define ASCII_34 KEY_4 // 52 4
  2692. #define ASCII_35 KEY_5 // 53 5
  2693. #define ASCII_36 KEY_6 // 54 6
  2694. #define ASCII_37 KEY_7 // 55 7
  2695. #define ASCII_38 KEY_8 // 55 8
  2696. #define ASCII_39 KEY_9 // 57 9
  2697. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  2698. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  2699. #define ASCII_3C KEY_NON_US_100 // 60 <
  2700. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  2701. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  2702. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  2703. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  2704. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  2705. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  2706. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  2707. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  2708. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  2709. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  2710. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  2711. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  2712. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  2713. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  2714. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  2715. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  2716. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  2717. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  2718. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  2719. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  2720. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  2721. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  2722. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  2723. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  2724. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  2725. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  2726. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  2727. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  2728. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  2729. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  2730. #define ASCII_5B KEY_LEFT_BRACE + ALTGR_MASK // 91 [
  2731. #define ASCII_5C KEY_TILDE + ALTGR_MASK // 92
  2732. #define ASCII_5D KEY_RIGHT_BRACE + ALTGR_MASK // 93 ]
  2733. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  2734. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  2735. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  2736. #define ASCII_61 KEY_A // 97 a
  2737. #define ASCII_62 KEY_B // 98 b
  2738. #define ASCII_63 KEY_C // 99 c
  2739. #define ASCII_64 KEY_D // 100 d
  2740. #define ASCII_65 KEY_E // 101 e
  2741. #define ASCII_66 KEY_F // 102 f
  2742. #define ASCII_67 KEY_G // 103 g
  2743. #define ASCII_68 KEY_H // 104 h
  2744. #define ASCII_69 KEY_I // 105 i
  2745. #define ASCII_6A KEY_J // 106 j
  2746. #define ASCII_6B KEY_K // 107 k
  2747. #define ASCII_6C KEY_L // 108 l
  2748. #define ASCII_6D KEY_M // 109 m
  2749. #define ASCII_6E KEY_N // 110 n
  2750. #define ASCII_6F KEY_O // 111 o
  2751. #define ASCII_70 KEY_P // 112 p
  2752. #define ASCII_71 KEY_Q // 113 q
  2753. #define ASCII_72 KEY_R // 114 r
  2754. #define ASCII_73 KEY_S // 115 s
  2755. #define ASCII_74 KEY_T // 116 t
  2756. #define ASCII_75 KEY_U // 117 u
  2757. #define ASCII_76 KEY_V // 118 v
  2758. #define ASCII_77 KEY_W // 119 w
  2759. #define ASCII_78 KEY_X // 120 x
  2760. #define ASCII_79 KEY_Y // 121 y
  2761. #define ASCII_7A KEY_Z // 122 z
  2762. #define ASCII_7B KEY_QUOTE + ALTGR_MASK // 123 {
  2763. #define ASCII_7C KEY_1 + ALTGR_MASK // 124 |
  2764. #define ASCII_7D KEY_BACKSLASH + ALTGR_MASK // 125 }
  2765. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  2766. #define ASCII_7F KEY_BACKSPACE // 127
  2767. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  2768. #define ISO_8859_1_A1 KEY_EQUAL // 161 ¡ Inverted Exclamation
  2769. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  2770. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  2771. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  2772. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  2773. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  2774. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  2775. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  2776. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  2777. #define ISO_8859_1_AA KEY_TILDE + SHIFT_MASK // 170 ª FEMININE ORDINAL
  2778. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  2779. #define ISO_8859_1_AC KEY_6 + ALTGR_MASK // 172 ¬ NOT SIGN
  2780. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  2781. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  2782. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  2783. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  2784. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  2785. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  2786. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  2787. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  2788. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  2789. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  2790. #define ISO_8859_1_B7 KEY_3 + SHIFT_MASK // 183 · MIDDLE DOT
  2791. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  2792. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  2793. #define ISO_8859_1_BA KEY_TILDE // 186 º MASCULINE ORDINAL
  2794. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  2795. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  2796. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  2797. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  2798. #define ISO_8859_1_BF KEY_EQUAL // 191 ¿ INVERTED QUESTION MARK
  2799. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  2800. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  2801. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  2802. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  2803. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  2804. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  2805. #define ISO_8859_1_C6 0 // 198 Æ AE
  2806. #define ISO_8859_1_C7 KEY_BACKSLASH + SHIFT_MASK // 199 Ç C CEDILLA
  2807. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  2808. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  2809. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  2810. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  2811. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  2812. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  2813. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  2814. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  2815. #define ISO_8859_1_D0 0 // 208 Ð ETH
  2816. #define ISO_8859_1_D1 KEY_SEMICOLON + SHIFT_MASK // 209 Ñ N TILDE
  2817. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  2818. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  2819. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  2820. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  2821. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  2822. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  2823. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  2824. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  2825. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  2826. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  2827. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  2828. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  2829. #define ISO_8859_1_DE 0 // 222 Þ THORN
  2830. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  2831. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  2832. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  2833. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  2834. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  2835. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  2836. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  2837. #define ISO_8859_1_E6 0 // 230 æ ae
  2838. #define ISO_8859_1_E7 KEY_BACKSLASH // 231 ç c CEDILLA
  2839. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  2840. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  2841. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  2842. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  2843. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  2844. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  2845. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  2846. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  2847. #define ISO_8859_1_F0 0 // 240 ð ETH
  2848. #define ISO_8859_1_F1 KEY_SEMICOLON // 241 ñ n TILDE
  2849. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  2850. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  2851. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  2852. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  2853. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  2854. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  2855. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  2856. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  2857. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  2858. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  2859. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  2860. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  2861. #define ISO_8859_1_FE 0 // 254 þ THORN
  2862. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  2863. #define UNICODE_20AC KEY_5 + ALTGR_MASK // € Euro Sign
  2864. // not yet implemented
  2865. #define UNICODE_EXTRA00 0x20AC
  2866. #define KEYCODE_EXTRA00 KEY_5 + ALTGR_MASK // 20AC € Euro Sign
  2867. #endif // LAYOUT_SPANISH
  2868. #ifdef LAYOUT_PORTUGUESE
  2869. #define SHIFT_MASK 0x0040
  2870. #define ALTGR_MASK 0x0080
  2871. #define DEADKEYS_MASK 0x0700
  2872. #define CIRCUMFLEX_BITS 0x0100
  2873. #define ACUTE_ACCENT_BITS 0x0200
  2874. #define GRAVE_ACCENT_BITS 0x0300
  2875. #define TILDE_BITS 0x0400
  2876. #define DIAERESIS_BITS 0x0500
  2877. #define KEYCODE_TYPE uint16_t
  2878. #define KEYCODE_MASK 0x07FF
  2879. #define DEADKEY_CIRCUMFLEX KEY_BACKSLASH
  2880. #define DEADKEY_ACUTE_ACCENT KEY_RIGHT_BRACE + SHIFT_MASK
  2881. #define DEADKEY_GRAVE_ACCENT KEY_RIGHT_BRACE + SHIFT_MASK
  2882. #define DEADKEY_TILDE KEY_BACKSLASH
  2883. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + SHIFT_MASK
  2884. #define KEY_NON_US_100 63
  2885. #define ASCII_20 KEY_SPACE // 32
  2886. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  2887. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  2888. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  2889. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  2890. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  2891. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  2892. #define ASCII_27 KEY_MINUS // 39 '
  2893. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  2894. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  2895. #define ASCII_2A KEY_LEFT_BRACE + SHIFT_MASK // 42 *
  2896. #define ASCII_2B KEY_LEFT_BRACE // 43 +
  2897. #define ASCII_2C KEY_COMMA // 44 ,
  2898. #define ASCII_2D KEY_SLASH // 45 -
  2899. #define ASCII_2E KEY_PERIOD // 46 .
  2900. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  2901. #define ASCII_30 KEY_0 // 48 0
  2902. #define ASCII_31 KEY_1 // 49 1
  2903. #define ASCII_32 KEY_2 // 50 2
  2904. #define ASCII_33 KEY_3 // 51 3
  2905. #define ASCII_34 KEY_4 // 52 4
  2906. #define ASCII_35 KEY_5 // 53 5
  2907. #define ASCII_36 KEY_6 // 54 6
  2908. #define ASCII_37 KEY_7 // 55 7
  2909. #define ASCII_38 KEY_8 // 55 8
  2910. #define ASCII_39 KEY_9 // 57 9
  2911. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  2912. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  2913. #define ASCII_3C KEY_NON_US_100 // 60 <
  2914. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  2915. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  2916. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  2917. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  2918. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  2919. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  2920. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  2921. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  2922. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  2923. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  2924. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  2925. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  2926. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  2927. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  2928. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  2929. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  2930. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  2931. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  2932. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  2933. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  2934. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  2935. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  2936. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  2937. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  2938. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  2939. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  2940. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  2941. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  2942. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  2943. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  2944. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  2945. #define ASCII_5C KEY_TILDE + ALTGR_MASK // 92
  2946. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  2947. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  2948. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  2949. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  2950. #define ASCII_61 KEY_A // 97 a
  2951. #define ASCII_62 KEY_B // 98 b
  2952. #define ASCII_63 KEY_C // 99 c
  2953. #define ASCII_64 KEY_D // 100 d
  2954. #define ASCII_65 KEY_E // 101 e
  2955. #define ASCII_66 KEY_F // 102 f
  2956. #define ASCII_67 KEY_G // 103 g
  2957. #define ASCII_68 KEY_H // 104 h
  2958. #define ASCII_69 KEY_I // 105 i
  2959. #define ASCII_6A KEY_J // 106 j
  2960. #define ASCII_6B KEY_K // 107 k
  2961. #define ASCII_6C KEY_L // 108 l
  2962. #define ASCII_6D KEY_M // 109 m
  2963. #define ASCII_6E KEY_N // 110 n
  2964. #define ASCII_6F KEY_O // 111 o
  2965. #define ASCII_70 KEY_P // 112 p
  2966. #define ASCII_71 KEY_Q // 113 q
  2967. #define ASCII_72 KEY_R // 114 r
  2968. #define ASCII_73 KEY_S // 115 s
  2969. #define ASCII_74 KEY_T // 116 t
  2970. #define ASCII_75 KEY_U // 117 u
  2971. #define ASCII_76 KEY_V // 118 v
  2972. #define ASCII_77 KEY_W // 119 w
  2973. #define ASCII_78 KEY_X // 120 x
  2974. #define ASCII_79 KEY_Y // 121 y
  2975. #define ASCII_7A KEY_Z // 122 z
  2976. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  2977. #define ASCII_7C KEY_TILDE + SHIFT_MASK // 124 |
  2978. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  2979. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  2980. #define ASCII_7F KEY_BACKSPACE // 127
  2981. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  2982. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  2983. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  2984. #define ISO_8859_1_A3 KEY_3 + ALTGR_MASK // 163 £ Pound Sign
  2985. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  2986. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  2987. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  2988. #define ISO_8859_1_A7 KEY_4 + ALTGR_MASK // 167 § SECTION SIGN
  2989. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  2990. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  2991. #define ISO_8859_1_AA KEY_QUOTE + SHIFT_MASK // 170 ª FEMININE ORDINAL
  2992. #define ISO_8859_1_AB KEY_EQUAL // 171 « LEFT DOUBLE ANGLE QUOTE
  2993. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  2994. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  2995. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  2996. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  2997. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  2998. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  2999. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  3000. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  3001. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  3002. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  3003. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  3004. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  3005. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  3006. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  3007. #define ISO_8859_1_BA KEY_QUOTE // 186 º MASCULINE ORDINAL
  3008. #define ISO_8859_1_BB KEY_EQUAL + SHIFT_MASK // 187 » RIGHT DOUBLE ANGLE QUOTE
  3009. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  3010. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  3011. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  3012. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  3013. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  3014. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  3015. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  3016. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  3017. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  3018. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  3019. #define ISO_8859_1_C6 0 // 198 Æ AE
  3020. #define ISO_8859_1_C7 KEY_SEMICOLON + SHIFT_MASK // 199 Ç C CEDILLA
  3021. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  3022. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  3023. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  3024. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  3025. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  3026. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  3027. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  3028. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  3029. #define ISO_8859_1_D0 0 // 208 Ð ETH
  3030. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  3031. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  3032. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  3033. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  3034. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  3035. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  3036. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  3037. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  3038. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  3039. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  3040. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  3041. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  3042. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  3043. #define ISO_8859_1_DE 0 // 222 Þ THORN
  3044. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  3045. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  3046. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  3047. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  3048. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  3049. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  3050. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  3051. #define ISO_8859_1_E6 0 // 230 æ ae
  3052. #define ISO_8859_1_E7 KEY_SEMICOLON // 231 ç c CEDILLA
  3053. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  3054. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  3055. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  3056. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  3057. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  3058. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  3059. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  3060. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  3061. #define ISO_8859_1_F0 0 // 240 ð ETH
  3062. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  3063. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  3064. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  3065. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  3066. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  3067. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  3068. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  3069. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  3070. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  3071. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  3072. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  3073. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  3074. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  3075. #define ISO_8859_1_FE 0 // 254 þ THORN
  3076. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  3077. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  3078. // not yet implemented
  3079. #define UNICODE_EXTRA00 0x20AC
  3080. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  3081. #endif // LAYOUT_PORTUGUESE
  3082. #ifdef LAYOUT_ITALIAN
  3083. #define SHIFT_MASK 0x40
  3084. #define ALTGR_MASK 0x80
  3085. #define KEYCODE_TYPE uint8_t
  3086. #define KEYCODE_MASK 0x00FF
  3087. #define KEY_NON_US_100 63
  3088. #define ASCII_20 KEY_SPACE // 32
  3089. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  3090. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  3091. #define ASCII_23 KEY_QUOTE + ALTGR_MASK // 35 #
  3092. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  3093. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  3094. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  3095. #define ASCII_27 KEY_MINUS // 39 '
  3096. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  3097. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  3098. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  3099. #define ASCII_2B KEY_RIGHT_BRACE // 43 +
  3100. #define ASCII_2C KEY_COMMA // 44 ,
  3101. #define ASCII_2D KEY_SLASH // 45 -
  3102. #define ASCII_2E KEY_PERIOD // 46 .
  3103. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  3104. #define ASCII_30 KEY_0 // 48 0
  3105. #define ASCII_31 KEY_1 // 49 1
  3106. #define ASCII_32 KEY_2 // 50 2
  3107. #define ASCII_33 KEY_3 // 51 3
  3108. #define ASCII_34 KEY_4 // 52 4
  3109. #define ASCII_35 KEY_5 // 53 5
  3110. #define ASCII_36 KEY_6 // 54 6
  3111. #define ASCII_37 KEY_7 // 55 7
  3112. #define ASCII_38 KEY_8 // 55 8
  3113. #define ASCII_39 KEY_9 // 57 9
  3114. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  3115. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  3116. #define ASCII_3C KEY_NON_US_100 // 60 <
  3117. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  3118. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  3119. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  3120. #define ASCII_40 KEY_SEMICOLON + ALTGR_MASK // 64 @
  3121. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  3122. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  3123. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  3124. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  3125. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  3126. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  3127. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  3128. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  3129. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  3130. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  3131. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  3132. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  3133. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  3134. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  3135. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  3136. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  3137. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  3138. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  3139. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  3140. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  3141. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  3142. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  3143. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  3144. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  3145. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  3146. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  3147. #define ASCII_5B KEY_LEFT_BRACE + ALTGR_MASK // 91 [
  3148. #define ASCII_5C KEY_TILDE // 92
  3149. #define ASCII_5D KEY_RIGHT_BRACE + ALTGR_MASK // 93 ]
  3150. #define ASCII_5E KEY_EQUAL + SHIFT_MASK // 94 ^
  3151. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  3152. #define ASCII_60 0 // 96 ` (how to type this on Italian?)
  3153. #define ASCII_61 KEY_A // 97 a
  3154. #define ASCII_62 KEY_B // 98 b
  3155. #define ASCII_63 KEY_C // 99 c
  3156. #define ASCII_64 KEY_D // 100 d
  3157. #define ASCII_65 KEY_E // 101 e
  3158. #define ASCII_66 KEY_F // 102 f
  3159. #define ASCII_67 KEY_G // 103 g
  3160. #define ASCII_68 KEY_H // 104 h
  3161. #define ASCII_69 KEY_I // 105 i
  3162. #define ASCII_6A KEY_J // 106 j
  3163. #define ASCII_6B KEY_K // 107 k
  3164. #define ASCII_6C KEY_L // 108 l
  3165. #define ASCII_6D KEY_M // 109 m
  3166. #define ASCII_6E KEY_N // 110 n
  3167. #define ASCII_6F KEY_O // 111 o
  3168. #define ASCII_70 KEY_P // 112 p
  3169. #define ASCII_71 KEY_Q // 113 q
  3170. #define ASCII_72 KEY_R // 114 r
  3171. #define ASCII_73 KEY_S // 115 s
  3172. #define ASCII_74 KEY_T // 116 t
  3173. #define ASCII_75 KEY_U // 117 u
  3174. #define ASCII_76 KEY_V // 118 v
  3175. #define ASCII_77 KEY_W // 119 w
  3176. #define ASCII_78 KEY_X // 120 x
  3177. #define ASCII_79 KEY_Y // 121 y
  3178. #define ASCII_7A KEY_Z // 122 z
  3179. #define ASCII_7B KEY_LEFT_BRACE + SHIFT_MASK + ALTGR_MASK // 123 {
  3180. #define ASCII_7C KEY_TILDE + SHIFT_MASK // 124 |
  3181. #define ASCII_7D KEY_RIGHT_BRACE + SHIFT_MASK + ALTGR_MASK // 125 }
  3182. #define ASCII_7E 0 // 126 ~ (how to type this on Italian?)
  3183. #define ASCII_7F KEY_BACKSPACE // 127
  3184. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  3185. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  3186. #define ISO_8859_1_A2 0 // 162 ¢ Cent Sign
  3187. #define ISO_8859_1_A3 KEY_3 + SHIFT_MASK // 163 £ Pound Sign
  3188. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  3189. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  3190. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  3191. #define ISO_8859_1_A7 KEY_BACKSLASH + SHIFT_MASK // 167 § SECTION SIGN
  3192. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  3193. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  3194. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  3195. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  3196. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  3197. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  3198. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  3199. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  3200. #define ISO_8859_1_B0 KEY_QUOTE + SHIFT_MASK // 176 ° DEGREE SIGN
  3201. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  3202. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  3203. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  3204. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  3205. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  3206. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  3207. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  3208. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  3209. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  3210. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  3211. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  3212. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  3213. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  3214. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  3215. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  3216. #define ISO_8859_1_C0 0 // 192 À A GRAVE
  3217. #define ISO_8859_1_C1 0 // 193 Á A ACUTE
  3218. #define ISO_8859_1_C2 0 // 194 Â A CIRCUMFLEX
  3219. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  3220. #define ISO_8859_1_C4 0 // 196 Ä A DIAERESIS
  3221. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  3222. #define ISO_8859_1_C6 0 // 198 Æ AE
  3223. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  3224. #define ISO_8859_1_C8 0 // 200 È E GRAVE
  3225. #define ISO_8859_1_C9 0 // 201 É E ACUTE
  3226. #define ISO_8859_1_CA 0 // 202 Ê E CIRCUMFLEX
  3227. #define ISO_8859_1_CB 0 // 203 Ë E DIAERESIS
  3228. #define ISO_8859_1_CC 0 // 204 Ì I GRAVE
  3229. #define ISO_8859_1_CD 0 // 205 Í I ACUTE
  3230. #define ISO_8859_1_CE 0 // 206 Î I CIRCUMFLEX
  3231. #define ISO_8859_1_CF 0 // 207 Ï I DIAERESIS
  3232. #define ISO_8859_1_D0 0 // 208 Ð ETH
  3233. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  3234. #define ISO_8859_1_D2 0 // 210 Ò O GRAVE
  3235. #define ISO_8859_1_D3 0 // 211 Ó O ACUTE
  3236. #define ISO_8859_1_D4 0 // 212 Ô O CIRCUMFLEX
  3237. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  3238. #define ISO_8859_1_D6 0 // 214 Ö O DIAERESIS
  3239. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  3240. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  3241. #define ISO_8859_1_D9 0 // 217 Ù U GRAVE
  3242. #define ISO_8859_1_DA 0 // 218 Ú U ACUTE
  3243. #define ISO_8859_1_DB 0 // 219 Û U CIRCUMFLEX
  3244. #define ISO_8859_1_DC 0 // 220 Ü U DIAERESIS
  3245. #define ISO_8859_1_DD 0 // 221 Ý Y ACUTE
  3246. #define ISO_8859_1_DE 0 // 222 Þ THORN
  3247. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  3248. #define ISO_8859_1_E0 KEY_QUOTE // 224 à a GRAVE
  3249. #define ISO_8859_1_E1 0 // 225 á a ACUTE
  3250. #define ISO_8859_1_E2 0 // 226 â a CIRCUMFLEX
  3251. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  3252. #define ISO_8859_1_E4 0 // 228 ä a DIAERESIS
  3253. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  3254. #define ISO_8859_1_E6 0 // 230 æ ae
  3255. #define ISO_8859_1_E7 KEY_SEMICOLON + SHIFT_MASK // 231 ç c CEDILLA
  3256. #define ISO_8859_1_E8 KEY_LEFT_BRACE // 232 è e GRAVE
  3257. #define ISO_8859_1_E9 KEY_LEFT_BRACE + SHIFT_MASK // 233 é e ACUTE
  3258. #define ISO_8859_1_EA 0 // 234 ê e CIRCUMFLEX
  3259. #define ISO_8859_1_EB 0 // 235 ë e DIAERESIS
  3260. #define ISO_8859_1_EC KEY_EQUAL // 236 ì i GRAVE
  3261. #define ISO_8859_1_ED 0 // 237 í i ACUTE
  3262. #define ISO_8859_1_EE 0 // 238 î i CIRCUMFLEX
  3263. #define ISO_8859_1_EF 0 // 239 ï i DIAERESIS
  3264. #define ISO_8859_1_F0 0 // 240 ð ETH
  3265. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  3266. #define ISO_8859_1_F2 KEY_SEMICOLON // 242 ò o GRAVE
  3267. #define ISO_8859_1_F3 0 // 243 ó o ACUTE
  3268. #define ISO_8859_1_F4 0 // 244 ô o CIRCUMFLEX
  3269. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  3270. #define ISO_8859_1_F6 0 // 246 ö o DIAERESIS
  3271. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  3272. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  3273. #define ISO_8859_1_F9 KEY_BACKSLASH // 249 ù u GRAVE
  3274. #define ISO_8859_1_FA 0 // 250 ú u ACUTE
  3275. #define ISO_8859_1_FB 0 // 251 û u CIRCUMFLEX
  3276. #define ISO_8859_1_FC 0 // 252 ü u DIAERESIS
  3277. #define ISO_8859_1_FD 0 // 253 ý y ACUTE
  3278. #define ISO_8859_1_FE 0 // 254 þ THORN
  3279. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  3280. #endif // LAYOUT_ITALIAN
  3281. #ifdef LAYOUT_PORTUGUESE_BRAZILIAN
  3282. #define SHIFT_MASK 0x0040
  3283. #define ALTGR_MASK 0x0080
  3284. #define DEADKEYS_MASK 0x0700
  3285. #define CIRCUMFLEX_BITS 0x0100
  3286. #define ACUTE_ACCENT_BITS 0x0200
  3287. #define GRAVE_ACCENT_BITS 0x0300
  3288. #define TILDE_BITS 0x0400
  3289. #define DIAERESIS_BITS 0x0500
  3290. #define KEYCODE_TYPE uint16_t
  3291. #define KEYCODE_MASK 0x07FF
  3292. #define DEADKEY_CIRCUMFLEX KEY_QUOTE + SHIFT_MASK
  3293. #define DEADKEY_ACUTE_ACCENT KEY_LEFT_BRACE
  3294. #define DEADKEY_GRAVE_ACCENT KEY_LEFT_BRACE + SHIFT_MASK
  3295. #define DEADKEY_TILDE KEY_QUOTE
  3296. #define DEADKEY_DIAERESIS KEY_6 + SHIFT_MASK
  3297. #define KEY_NON_US_100 63
  3298. #define ASCII_20 KEY_SPACE // 32
  3299. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  3300. #define ASCII_22 KEY_TILDE + SHIFT_MASK // 34 "
  3301. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  3302. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  3303. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  3304. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  3305. #define ASCII_27 KEY_TILDE // 39 '
  3306. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  3307. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  3308. #define ASCII_2A KEY_7 + SHIFT_MASK // 42 *
  3309. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  3310. #define ASCII_2C KEY_COMMA // 44 ,
  3311. #define ASCII_2D KEY_MINUS // 45 -
  3312. #define ASCII_2E KEY_PERIOD // 46 .
  3313. #define ASCII_2F KEY_Q + ALTGR_MASK // 47 /
  3314. #define ASCII_30 KEY_0 // 48 0
  3315. #define ASCII_31 KEY_1 // 49 1
  3316. #define ASCII_32 KEY_2 // 50 2
  3317. #define ASCII_33 KEY_3 // 51 3
  3318. #define ASCII_34 KEY_4 // 52 4
  3319. #define ASCII_35 KEY_5 // 53 5
  3320. #define ASCII_36 KEY_6 // 54 6
  3321. #define ASCII_37 KEY_7 // 55 7
  3322. #define ASCII_38 KEY_8 // 55 8
  3323. #define ASCII_39 KEY_9 // 57 9
  3324. #define ASCII_3A KEY_SLASH + SHIFT_MASK // 58 :
  3325. #define ASCII_3B KEY_SLASH // 59 ;
  3326. #define ASCII_3C KEY_COMMA + SHIFT_MASK // 60 <
  3327. #define ASCII_3D KEY_EQUAL // 61 =
  3328. #define ASCII_3E KEY_PERIOD + SHIFT_MASK // 62 >
  3329. #define ASCII_3F KEY_W + ALTGR_MASK // 63 ?
  3330. #define ASCII_40 KEY_2 + SHIFT_MASK // 64 @
  3331. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  3332. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  3333. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  3334. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  3335. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  3336. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  3337. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  3338. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  3339. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  3340. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  3341. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  3342. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  3343. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  3344. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  3345. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  3346. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  3347. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  3348. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  3349. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  3350. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  3351. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  3352. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  3353. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  3354. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  3355. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  3356. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  3357. #define ASCII_5B KEY_RIGHT_BRACE // 91 [
  3358. #define ASCII_5C KEY_NON_US_100 // 92
  3359. #define ASCII_5D KEY_BACKSLASH // 93 ]
  3360. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  3361. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  3362. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  3363. #define ASCII_61 KEY_A // 97 a
  3364. #define ASCII_62 KEY_B // 98 b
  3365. #define ASCII_63 KEY_C // 99 c
  3366. #define ASCII_64 KEY_D // 100 d
  3367. #define ASCII_65 KEY_E // 101 e
  3368. #define ASCII_66 KEY_F // 102 f
  3369. #define ASCII_67 KEY_G // 103 g
  3370. #define ASCII_68 KEY_H // 104 h
  3371. #define ASCII_69 KEY_I // 105 i
  3372. #define ASCII_6A KEY_J // 106 j
  3373. #define ASCII_6B KEY_K // 107 k
  3374. #define ASCII_6C KEY_L // 108 l
  3375. #define ASCII_6D KEY_M // 109 m
  3376. #define ASCII_6E KEY_N // 110 n
  3377. #define ASCII_6F KEY_O // 111 o
  3378. #define ASCII_70 KEY_P // 112 p
  3379. #define ASCII_71 KEY_Q // 113 q
  3380. #define ASCII_72 KEY_R // 114 r
  3381. #define ASCII_73 KEY_S // 115 s
  3382. #define ASCII_74 KEY_T // 116 t
  3383. #define ASCII_75 KEY_U // 117 u
  3384. #define ASCII_76 KEY_V // 118 v
  3385. #define ASCII_77 KEY_W // 119 w
  3386. #define ASCII_78 KEY_X // 120 x
  3387. #define ASCII_79 KEY_Y // 121 y
  3388. #define ASCII_7A KEY_Z // 122 z
  3389. #define ASCII_7B KEY_RIGHT_BRACE + SHIFT_MASK // 123 {
  3390. #define ASCII_7C KEY_NON_US_100 + SHIFT_MASK // 124 |
  3391. #define ASCII_7D KEY_BACKSLASH + SHIFT_MASK // 125 }
  3392. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  3393. #define ASCII_7F KEY_BACKSPACE // 127
  3394. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  3395. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  3396. #define ISO_8859_1_A2 KEY_5 + ALTGR_MASK // 162 ¢ Cent SIGN
  3397. #define ISO_8859_1_A3 KEY_4 + ALTGR_MASK // 163 £ Pound Sign
  3398. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  3399. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  3400. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  3401. #define ISO_8859_1_A7 KEY_EQUAL + ALTGR_MASK // 167 § SECTION SIGN
  3402. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  3403. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  3404. #define ISO_8859_1_AA KEY_RIGHT_BRACE + ALTGR_MASK // 170 ª FEMININE ORDINAL
  3405. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  3406. #define ISO_8859_1_AC KEY_6 + ALTGR_MASK // 172 ¬ NOT SIGN
  3407. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  3408. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  3409. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  3410. #define ISO_8859_1_B0 KEY_E + ALTGR_MASK // 176 ° DEGREE SIGN
  3411. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  3412. #define ISO_8859_1_B2 KEY_2 + ALTGR_MASK // 178 ² SUPERSCRIPT TWO
  3413. #define ISO_8859_1_B3 KEY_2 + ALTGR_MASK // 179 ³ SUPERSCRIPT THREE
  3414. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  3415. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  3416. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  3417. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  3418. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  3419. #define ISO_8859_1_B9 KEY_1 + ALTGR_MASK // 185 ¹ SUPERSCRIPT ONE
  3420. #define ISO_8859_1_BA KEY_BACKSLASH + ALTGR_MASK // 186 º MASCULINE ORDINAL
  3421. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  3422. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  3423. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  3424. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  3425. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  3426. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  3427. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  3428. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  3429. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  3430. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  3431. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  3432. #define ISO_8859_1_C6 0 // 198 Æ AE
  3433. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  3434. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  3435. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  3436. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  3437. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  3438. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  3439. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  3440. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  3441. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  3442. #define ISO_8859_1_D0 0 // 208 Ð ETH
  3443. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  3444. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  3445. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  3446. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  3447. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  3448. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  3449. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  3450. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  3451. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  3452. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  3453. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  3454. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  3455. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  3456. #define ISO_8859_1_DE 0 // 222 Þ THORN
  3457. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  3458. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  3459. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  3460. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  3461. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  3462. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  3463. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  3464. #define ISO_8859_1_E6 0 // 230 æ ae
  3465. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  3466. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  3467. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  3468. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  3469. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  3470. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  3471. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  3472. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  3473. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  3474. #define ISO_8859_1_F0 0 // 240 ð ETH
  3475. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  3476. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  3477. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  3478. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  3479. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  3480. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  3481. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  3482. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  3483. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  3484. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  3485. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  3486. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  3487. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  3488. #define ISO_8859_1_FE 0 // 254 þ THORN
  3489. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  3490. #endif // LAYOUT_PORTUGUESE_BRAZILIAN
  3491. #ifdef LAYOUT_FRENCH_BELGIAN
  3492. #define SHIFT_MASK 0x0040
  3493. #define ALTGR_MASK 0x0080
  3494. #define DEADKEYS_MASK 0x0700
  3495. #define CIRCUMFLEX_BITS 0x0100
  3496. #define GRAVE_ACCENT_BITS 0x0200
  3497. #define DIAERESIS_BITS 0x0300
  3498. #define TILDE_BITS 0x0400
  3499. #define ACUTE_ACCENT_BITS 0x0500
  3500. #define KEYCODE_TYPE uint16_t
  3501. #define KEYCODE_MASK 0x07FF
  3502. #define DEADKEY_CIRCUMFLEX KEY_LEFT_BRACE
  3503. #define DEADKEY_ACUTE_ACCENT KEY_QUOTE + ALTGR_MASK
  3504. #define DEADKEY_GRAVE_ACCENT KEY_BACKSLASH + ALTGR_MASK
  3505. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + SHIFT_MASK
  3506. #define DEADKEY_TILDE KEY_SLASH + ALTGR_MASK
  3507. #define KEY_NON_US_100 63
  3508. #define ASCII_20 KEY_SPACE // 32
  3509. #define ASCII_21 KEY_8 // 33 !
  3510. #define ASCII_22 KEY_3 // 34 "
  3511. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  3512. #define ASCII_24 KEY_RIGHT_BRACE // 36 $
  3513. #define ASCII_25 KEY_QUOTE + SHIFT_MASK // 37 %
  3514. #define ASCII_26 KEY_1 // 38 &
  3515. #define ASCII_27 KEY_4 // 39 '
  3516. #define ASCII_28 KEY_5 // 40 (
  3517. #define ASCII_29 KEY_MINUS // 41 )
  3518. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  3519. #define ASCII_2B KEY_SLASH + SHIFT_MASK // 43 +
  3520. #define ASCII_2C KEY_M // 44 ,
  3521. #define ASCII_2D KEY_EQUAL // 45 -
  3522. #define ASCII_2E KEY_COMMA + SHIFT_MASK // 46 .
  3523. #define ASCII_2F KEY_PERIOD + SHIFT_MASK // 47 /
  3524. #define ASCII_30 KEY_0 + SHIFT_MASK // 48 0
  3525. #define ASCII_31 KEY_1 + SHIFT_MASK // 49 1
  3526. #define ASCII_32 KEY_2 + SHIFT_MASK // 50 2
  3527. #define ASCII_33 KEY_3 + SHIFT_MASK // 51 3
  3528. #define ASCII_34 KEY_4 + SHIFT_MASK // 52 4
  3529. #define ASCII_35 KEY_5 + SHIFT_MASK // 53 5
  3530. #define ASCII_36 KEY_6 + SHIFT_MASK // 54 6
  3531. #define ASCII_37 KEY_7 + SHIFT_MASK // 55 7
  3532. #define ASCII_38 KEY_8 + SHIFT_MASK // 55 8
  3533. #define ASCII_39 KEY_9 + SHIFT_MASK // 57 9
  3534. #define ASCII_3A KEY_PERIOD // 58 :
  3535. #define ASCII_3B KEY_COMMA // 59 ;
  3536. #define ASCII_3C KEY_NON_US_100 // 60 <
  3537. #define ASCII_3D KEY_SLASH // 61 =
  3538. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  3539. #define ASCII_3F KEY_M + SHIFT_MASK // 63 ?
  3540. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  3541. #define ASCII_41 KEY_Q + SHIFT_MASK // 65 A
  3542. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  3543. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  3544. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  3545. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  3546. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  3547. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  3548. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  3549. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  3550. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  3551. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  3552. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  3553. #define ASCII_4D KEY_SEMICOLON + SHIFT_MASK // 77 M
  3554. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  3555. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  3556. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  3557. #define ASCII_51 KEY_A + SHIFT_MASK // 81 Q
  3558. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  3559. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  3560. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  3561. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  3562. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  3563. #define ASCII_57 KEY_Z + SHIFT_MASK // 87 W
  3564. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  3565. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  3566. #define ASCII_5A KEY_W + SHIFT_MASK // 90 Z
  3567. #define ASCII_5B KEY_RIGHT_BRACE + ALTGR_MASK // 91 [
  3568. #define ASCII_5C KEY_NON_US_100 + ALTGR_MASK // 92
  3569. #define ASCII_5D KEY_LEFT_BRACE + ALTGR_MASK // 93 ]
  3570. #define ASCII_5E KEY_6 + ALTGR_MASK // 94 ^
  3571. #define ASCII_5F KEY_EQUAL + SHIFT_MASK // 95 _
  3572. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  3573. #define ASCII_61 KEY_Q // 97 a
  3574. #define ASCII_62 KEY_B // 98 b
  3575. #define ASCII_63 KEY_C // 99 c
  3576. #define ASCII_64 KEY_D // 100 d
  3577. #define ASCII_65 KEY_E // 101 e
  3578. #define ASCII_66 KEY_F // 102 f
  3579. #define ASCII_67 KEY_G // 103 g
  3580. #define ASCII_68 KEY_H // 104 h
  3581. #define ASCII_69 KEY_I // 105 i
  3582. #define ASCII_6A KEY_J // 106 j
  3583. #define ASCII_6B KEY_K // 107 k
  3584. #define ASCII_6C KEY_L // 108 l
  3585. #define ASCII_6D KEY_SEMICOLON // 109 m
  3586. #define ASCII_6E KEY_N // 110 n
  3587. #define ASCII_6F KEY_O // 111 o
  3588. #define ASCII_70 KEY_P // 112 p
  3589. #define ASCII_71 KEY_A // 113 q
  3590. #define ASCII_72 KEY_R // 114 r
  3591. #define ASCII_73 KEY_S // 115 s
  3592. #define ASCII_74 KEY_T // 116 t
  3593. #define ASCII_75 KEY_U // 117 u
  3594. #define ASCII_76 KEY_V // 118 v
  3595. #define ASCII_77 KEY_Z // 119 w
  3596. #define ASCII_78 KEY_X // 120 x
  3597. #define ASCII_79 KEY_Y // 121 y
  3598. #define ASCII_7A KEY_W // 122 z
  3599. #define ASCII_7B KEY_9 + ALTGR_MASK // 123 {
  3600. #define ASCII_7C KEY_1 + ALTGR_MASK // 124 |
  3601. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  3602. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  3603. #define ASCII_7F KEY_BACKSPACE // 127
  3604. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  3605. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  3606. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  3607. #define ISO_8859_1_A3 KEY_BACKSLASH + SHIFT_MASK // 163 £ Pound Sign
  3608. #define ISO_8859_1_A4 0 // 164 ¤ Currency or Euro Sign
  3609. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  3610. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  3611. #define ISO_8859_1_A7 KEY_6 // 167 § SECTION SIGN
  3612. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  3613. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  3614. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  3615. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  3616. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  3617. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  3618. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  3619. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  3620. #define ISO_8859_1_B0 KEY_MINUS + SHIFT_MASK // 176 ° DEGREE SIGN
  3621. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  3622. #define ISO_8859_1_B2 KEY_TILDE // 178 ² SUPERSCRIPT TWO
  3623. #define ISO_8859_1_B3 KEY_TILDE + SHIFT_MASK // 179 ³ SUPERSCRIPT THREE
  3624. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  3625. #define ISO_8859_1_B5 KEY_BACKSLASH // 181 µ MICRO SIGN
  3626. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  3627. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  3628. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  3629. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  3630. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  3631. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  3632. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  3633. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  3634. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  3635. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  3636. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_Q + SHIFT_MASK // 192 À A GRAVE
  3637. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_Q + SHIFT_MASK // 193 Á A ACUTE
  3638. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_Q + SHIFT_MASK // 194 Â A CIRCUMFLEX
  3639. #define ISO_8859_1_C3 TILDE_BITS + KEY_Q + SHIFT_MASK // 195 Ã A TILDE
  3640. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_Q + SHIFT_MASK // 196 Ä A DIAERESIS
  3641. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  3642. #define ISO_8859_1_C6 0 // 198 Æ AE
  3643. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  3644. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  3645. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  3646. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  3647. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  3648. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  3649. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  3650. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  3651. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  3652. #define ISO_8859_1_D0 0 // 208 Ð ETH
  3653. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  3654. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  3655. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  3656. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  3657. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  3658. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  3659. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  3660. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  3661. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  3662. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  3663. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  3664. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U // 220 Ü U DIAERESIS
  3665. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  3666. #define ISO_8859_1_DE 0 // 222 Þ THORN
  3667. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  3668. #define ISO_8859_1_E0 KEY_0 // 224 à a GRAVE
  3669. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_Q // 225 á a ACUTE
  3670. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_Q // 226 â a CIRCUMFLEX
  3671. #define ISO_8859_1_E3 TILDE_BITS + KEY_Q // 227 ã a TILDE
  3672. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_Q // 228 ä a DIAERESIS
  3673. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  3674. #define ISO_8859_1_E6 0 // 230 æ ae
  3675. #define ISO_8859_1_E7 KEY_9 // 231 ç c CEDILLA
  3676. #define ISO_8859_1_E8 KEY_7 // 232 è e GRAVE
  3677. #define ISO_8859_1_E9 KEY_2 // 233 é e ACUTE
  3678. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  3679. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  3680. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  3681. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  3682. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  3683. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  3684. #define ISO_8859_1_F0 0 // 240 ð ETH
  3685. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  3686. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  3687. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  3688. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  3689. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  3690. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  3691. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  3692. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  3693. #define ISO_8859_1_F9 KEY_QUOTE // 249 ù u GRAVE - TODO; check FRENCH
  3694. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  3695. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  3696. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  3697. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  3698. #define ISO_8859_1_FE 0 // 254 þ THORN
  3699. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  3700. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  3701. // not yet implemented
  3702. #define UNICODE_EXTRA00 0x20AC
  3703. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  3704. #endif // LAYOUT_FRENCH_BELGIAN
  3705. #ifdef LAYOUT_GERMAN_SWISS
  3706. #define SHIFT_MASK 0x0040
  3707. #define ALTGR_MASK 0x0080
  3708. #define DEADKEYS_MASK 0x0700
  3709. #define CIRCUMFLEX_BITS 0x0100
  3710. #define GRAVE_ACCENT_BITS 0x0200
  3711. #define DIAERESIS_BITS 0x0300
  3712. #define TILDE_BITS 0x0400
  3713. #define ACUTE_ACCENT_BITS 0x0500
  3714. #define KEYCODE_TYPE uint16_t
  3715. #define KEYCODE_MASK 0x07FF
  3716. #define DEADKEY_CIRCUMFLEX KEY_EQUAL
  3717. #define DEADKEY_ACUTE_ACCENT KEY_MINUS + ALTGR_MASK
  3718. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  3719. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  3720. #define DEADKEY_TILDE KEY_EQUAL + ALTGR_MASK
  3721. #define KEY_NON_US_100 63
  3722. #define ASCII_20 KEY_SPACE // 32
  3723. #define ASCII_21 KEY_RIGHT_BRACE + SHIFT_MASK // 33 !
  3724. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  3725. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  3726. #define ASCII_24 KEY_BACKSLASH // 36 $
  3727. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  3728. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  3729. #define ASCII_27 KEY_MINUS // 39 '
  3730. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  3731. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  3732. #define ASCII_2A KEY_3 + SHIFT_MASK // 42 *
  3733. #define ASCII_2B KEY_1 + SHIFT_MASK // 43 +
  3734. #define ASCII_2C KEY_COMMA // 44 ,
  3735. #define ASCII_2D KEY_SLASH // 45 -
  3736. #define ASCII_2E KEY_PERIOD // 46 .
  3737. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  3738. #define ASCII_30 KEY_0 // 48 0
  3739. #define ASCII_31 KEY_1 // 49 1
  3740. #define ASCII_32 KEY_2 // 50 2
  3741. #define ASCII_33 KEY_3 // 51 3
  3742. #define ASCII_34 KEY_4 // 52 4
  3743. #define ASCII_35 KEY_5 // 53 5
  3744. #define ASCII_36 KEY_6 // 54 6
  3745. #define ASCII_37 KEY_7 // 55 7
  3746. #define ASCII_38 KEY_8 // 55 8
  3747. #define ASCII_39 KEY_9 // 57 9
  3748. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  3749. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  3750. #define ASCII_3C KEY_NON_US_100 // 60 <
  3751. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  3752. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  3753. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  3754. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  3755. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  3756. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  3757. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  3758. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  3759. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  3760. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  3761. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  3762. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  3763. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  3764. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  3765. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  3766. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  3767. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  3768. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  3769. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  3770. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  3771. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  3772. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  3773. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  3774. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  3775. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  3776. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  3777. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  3778. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  3779. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  3780. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  3781. #define ASCII_5B KEY_LEFT_BRACE + ALTGR_MASK // 91 [
  3782. #define ASCII_5C KEY_NON_US_100 + ALTGR_MASK // 92
  3783. #define ASCII_5D KEY_RIGHT_BRACE + ALTGR_MASK // 93 ]
  3784. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  3785. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  3786. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  3787. #define ASCII_61 KEY_A // 97 a
  3788. #define ASCII_62 KEY_B // 98 b
  3789. #define ASCII_63 KEY_C // 99 c
  3790. #define ASCII_64 KEY_D // 100 d
  3791. #define ASCII_65 KEY_E // 101 e
  3792. #define ASCII_66 KEY_F // 102 f
  3793. #define ASCII_67 KEY_G // 103 g
  3794. #define ASCII_68 KEY_H // 104 h
  3795. #define ASCII_69 KEY_I // 105 i
  3796. #define ASCII_6A KEY_J // 106 j
  3797. #define ASCII_6B KEY_K // 107 k
  3798. #define ASCII_6C KEY_L // 108 l
  3799. #define ASCII_6D KEY_M // 109 m
  3800. #define ASCII_6E KEY_N // 110 n
  3801. #define ASCII_6F KEY_O // 111 o
  3802. #define ASCII_70 KEY_P // 112 p
  3803. #define ASCII_71 KEY_Q // 113 q
  3804. #define ASCII_72 KEY_R // 114 r
  3805. #define ASCII_73 KEY_S // 115 s
  3806. #define ASCII_74 KEY_T // 116 t
  3807. #define ASCII_75 KEY_U // 117 u
  3808. #define ASCII_76 KEY_V // 118 v
  3809. #define ASCII_77 KEY_W // 119 w
  3810. #define ASCII_78 KEY_X // 120 x
  3811. #define ASCII_79 KEY_Z // 121 y
  3812. #define ASCII_7A KEY_Y // 122 z
  3813. #define ASCII_7B KEY_QUOTE + ALTGR_MASK // 123 {
  3814. #define ASCII_7C KEY_7 + ALTGR_MASK // 124 |
  3815. #define ASCII_7D KEY_BACKSLASH + ALTGR_MASK // 125 }
  3816. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  3817. #define ASCII_7F KEY_BACKSPACE // 127
  3818. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  3819. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  3820. #define ISO_8859_1_A2 KEY_8 + ALTGR_MASK // 162 ¢ Cent Sign
  3821. #define ISO_8859_1_A3 KEY_BACKSLASH + SHIFT_MASK // 163 £ Pound Sign
  3822. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  3823. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  3824. #define ISO_8859_1_A6 KEY_1 + ALTGR_MASK // 166 ¦ BROKEN BAR
  3825. #define ISO_8859_1_A7 KEY_5 + ALTGR_MASK // 167 § SECTION SIGN
  3826. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  3827. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  3828. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  3829. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  3830. #define ISO_8859_1_AC KEY_6 + ALTGR_MASK // 172 ¬ NOT SIGN
  3831. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  3832. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  3833. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  3834. #define ISO_8859_1_B0 KEY_4 + ALTGR_MASK // 176 ° DEGREE SIGN
  3835. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  3836. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  3837. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  3838. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  3839. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  3840. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  3841. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  3842. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  3843. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  3844. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  3845. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  3846. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  3847. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  3848. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  3849. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  3850. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  3851. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  3852. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  3853. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  3854. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  3855. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  3856. #define ISO_8859_1_C6 0 // 198 Æ AE
  3857. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  3858. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  3859. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  3860. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  3861. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  3862. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  3863. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  3864. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  3865. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  3866. #define ISO_8859_1_D0 0 // 208 Ð ETH
  3867. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  3868. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  3869. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  3870. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  3871. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  3872. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  3873. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  3874. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  3875. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  3876. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  3877. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  3878. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  3879. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  3880. #define ISO_8859_1_DE 0 // 222 Þ THORN
  3881. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  3882. #define ISO_8859_1_E0 KEY_QUOTE + SHIFT_MASK // 224 à a GRAVE
  3883. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  3884. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  3885. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  3886. #define ISO_8859_1_E4 KEY_QUOTE // 228 ä a DIAERESIS
  3887. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  3888. #define ISO_8859_1_E6 0 // 230 æ ae
  3889. #define ISO_8859_1_E7 KEY_4 + SHIFT_MASK // 231 ç c CEDILLA
  3890. #define ISO_8859_1_E8 KEY_LEFT_BRACE + SHIFT_MASK // 232 è e GRAVE
  3891. #define ISO_8859_1_E9 KEY_SEMICOLON + SHIFT_MASK // 233 é e ACUTE
  3892. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  3893. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS TODO: check this
  3894. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  3895. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  3896. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  3897. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  3898. #define ISO_8859_1_F0 0 // 240 ð ETH
  3899. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  3900. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  3901. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  3902. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  3903. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  3904. #define ISO_8859_1_F6 KEY_SEMICOLON // 246 ö o DIAERESIS
  3905. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  3906. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  3907. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  3908. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  3909. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  3910. #define ISO_8859_1_FC KEY_LEFT_BRACE // 252 ü u DIAERESIS
  3911. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  3912. #define ISO_8859_1_FE 0 // 254 þ THORN
  3913. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  3914. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  3915. // not yet implemented
  3916. #define UNICODE_EXTRA00 0x20AC
  3917. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  3918. #endif // LAYOUT_GERMAN_SWISS
  3919. #ifdef LAYOUT_FRENCH_SWISS
  3920. #define SHIFT_MASK 0x0040
  3921. #define ALTGR_MASK 0x0080
  3922. #define DEADKEYS_MASK 0x0700
  3923. #define CIRCUMFLEX_BITS 0x0100
  3924. #define GRAVE_ACCENT_BITS 0x0200
  3925. #define DIAERESIS_BITS 0x0300
  3926. #define TILDE_BITS 0x0400
  3927. #define ACUTE_ACCENT_BITS 0x0500
  3928. #define KEYCODE_TYPE uint16_t
  3929. #define KEYCODE_MASK 0x07FF
  3930. #define DEADKEY_CIRCUMFLEX KEY_EQUAL
  3931. #define DEADKEY_ACUTE_ACCENT KEY_MINUS + ALTGR_MASK
  3932. #define DEADKEY_GRAVE_ACCENT KEY_EQUAL + SHIFT_MASK
  3933. #define DEADKEY_DIAERESIS KEY_RIGHT_BRACE
  3934. #define DEADKEY_TILDE KEY_EQUAL + ALTGR_MASK
  3935. #define KEY_NON_US_100 63
  3936. #define ASCII_20 KEY_SPACE // 32
  3937. #define ASCII_21 KEY_RIGHT_BRACE + SHIFT_MASK // 33 !
  3938. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  3939. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  3940. #define ASCII_24 KEY_BACKSLASH // 36 $
  3941. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  3942. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  3943. #define ASCII_27 KEY_MINUS // 39 '
  3944. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  3945. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  3946. #define ASCII_2A KEY_3 + SHIFT_MASK // 42 *
  3947. #define ASCII_2B KEY_1 + SHIFT_MASK // 43 +
  3948. #define ASCII_2C KEY_COMMA // 44 ,
  3949. #define ASCII_2D KEY_SLASH // 45 -
  3950. #define ASCII_2E KEY_PERIOD // 46 .
  3951. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  3952. #define ASCII_30 KEY_0 // 48 0
  3953. #define ASCII_31 KEY_1 // 49 1
  3954. #define ASCII_32 KEY_2 // 50 2
  3955. #define ASCII_33 KEY_3 // 51 3
  3956. #define ASCII_34 KEY_4 // 52 4
  3957. #define ASCII_35 KEY_5 // 53 5
  3958. #define ASCII_36 KEY_6 // 54 6
  3959. #define ASCII_37 KEY_7 // 55 7
  3960. #define ASCII_38 KEY_8 // 55 8
  3961. #define ASCII_39 KEY_9 // 57 9
  3962. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  3963. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  3964. #define ASCII_3C KEY_NON_US_100 // 60 <
  3965. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  3966. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  3967. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  3968. #define ASCII_40 KEY_2 + ALTGR_MASK // 64 @
  3969. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  3970. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  3971. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  3972. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  3973. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  3974. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  3975. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  3976. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  3977. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  3978. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  3979. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  3980. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  3981. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  3982. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  3983. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  3984. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  3985. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  3986. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  3987. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  3988. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  3989. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  3990. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  3991. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  3992. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  3993. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  3994. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  3995. #define ASCII_5B KEY_LEFT_BRACE + ALTGR_MASK // 91 [
  3996. #define ASCII_5C KEY_NON_US_100 + ALTGR_MASK // 92
  3997. #define ASCII_5D KEY_RIGHT_BRACE + ALTGR_MASK // 93 ]
  3998. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  3999. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  4000. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  4001. #define ASCII_61 KEY_A // 97 a
  4002. #define ASCII_62 KEY_B // 98 b
  4003. #define ASCII_63 KEY_C // 99 c
  4004. #define ASCII_64 KEY_D // 100 d
  4005. #define ASCII_65 KEY_E // 101 e
  4006. #define ASCII_66 KEY_F // 102 f
  4007. #define ASCII_67 KEY_G // 103 g
  4008. #define ASCII_68 KEY_H // 104 h
  4009. #define ASCII_69 KEY_I // 105 i
  4010. #define ASCII_6A KEY_J // 106 j
  4011. #define ASCII_6B KEY_K // 107 k
  4012. #define ASCII_6C KEY_L // 108 l
  4013. #define ASCII_6D KEY_M // 109 m
  4014. #define ASCII_6E KEY_N // 110 n
  4015. #define ASCII_6F KEY_O // 111 o
  4016. #define ASCII_70 KEY_P // 112 p
  4017. #define ASCII_71 KEY_Q // 113 q
  4018. #define ASCII_72 KEY_R // 114 r
  4019. #define ASCII_73 KEY_S // 115 s
  4020. #define ASCII_74 KEY_T // 116 t
  4021. #define ASCII_75 KEY_U // 117 u
  4022. #define ASCII_76 KEY_V // 118 v
  4023. #define ASCII_77 KEY_W // 119 w
  4024. #define ASCII_78 KEY_X // 120 x
  4025. #define ASCII_79 KEY_Z // 121 y
  4026. #define ASCII_7A KEY_Y // 122 z
  4027. #define ASCII_7B KEY_QUOTE + ALTGR_MASK // 123 {
  4028. #define ASCII_7C KEY_7 + ALTGR_MASK // 124 |
  4029. #define ASCII_7D KEY_BACKSLASH + ALTGR_MASK // 125 }
  4030. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  4031. #define ASCII_7F KEY_BACKSPACE // 127
  4032. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  4033. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  4034. #define ISO_8859_1_A2 KEY_8 + ALTGR_MASK // 162 ¢ Cent Sign
  4035. #define ISO_8859_1_A3 KEY_BACKSLASH + SHIFT_MASK // 163 £ Pound Sign
  4036. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  4037. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  4038. #define ISO_8859_1_A6 KEY_1 + ALTGR_MASK // 166 ¦ BROKEN BAR
  4039. #define ISO_8859_1_A7 KEY_5 + ALTGR_MASK // 167 § SECTION SIGN
  4040. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  4041. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  4042. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  4043. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  4044. #define ISO_8859_1_AC KEY_6 + ALTGR_MASK // 172 ¬ NOT SIGN
  4045. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  4046. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  4047. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  4048. #define ISO_8859_1_B0 KEY_4 + ALTGR_MASK // 176 ° DEGREE SIGN
  4049. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  4050. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  4051. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  4052. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  4053. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  4054. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  4055. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  4056. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  4057. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  4058. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  4059. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  4060. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  4061. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  4062. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  4063. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  4064. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  4065. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  4066. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  4067. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  4068. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  4069. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  4070. #define ISO_8859_1_C6 0 // 198 Æ AE
  4071. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  4072. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  4073. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  4074. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  4075. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  4076. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  4077. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  4078. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  4079. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  4080. #define ISO_8859_1_D0 0 // 208 Ð ETH
  4081. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  4082. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  4083. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  4084. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  4085. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  4086. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  4087. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  4088. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  4089. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  4090. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  4091. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  4092. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  4093. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  4094. #define ISO_8859_1_DE 0 // 222 Þ THORN
  4095. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  4096. #define ISO_8859_1_E0 KEY_QUOTE // 224 à a GRAVE
  4097. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  4098. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  4099. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  4100. #define ISO_8859_1_E4 KEY_QUOTE + SHIFT_MASK // 228 ä a DIAERESIS
  4101. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  4102. #define ISO_8859_1_E6 0 // 230 æ ae
  4103. #define ISO_8859_1_E7 KEY_4 + SHIFT_MASK // 231 ç c CEDILLA
  4104. #define ISO_8859_1_E8 KEY_LEFT_BRACE // 232 è e GRAVE
  4105. #define ISO_8859_1_E9 KEY_SEMICOLON // 233 é e ACUTE
  4106. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  4107. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  4108. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  4109. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  4110. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  4111. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  4112. #define ISO_8859_1_F0 0 // 240 ð ETH
  4113. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  4114. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  4115. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  4116. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  4117. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  4118. #define ISO_8859_1_F6 KEY_SEMICOLON + SHIFT_MASK // 246 ö o DIAERESIS
  4119. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  4120. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  4121. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  4122. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  4123. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  4124. #define ISO_8859_1_FC KEY_LEFT_BRACE + SHIFT_MASK // 252 ü u DIAERESIS
  4125. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  4126. #define ISO_8859_1_FE 0 // 254 þ THORN
  4127. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  4128. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  4129. // not yet implemented
  4130. #define UNICODE_EXTRA00 0x20AC
  4131. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  4132. #endif // LAYOUT_FRENCH_SWISS
  4133. #ifdef LAYOUT_SPANISH_LATIN_AMERICA
  4134. #define SHIFT_MASK 0x0040
  4135. #define ALTGR_MASK 0x0080
  4136. #define DEADKEYS_MASK 0x0700
  4137. #define CIRCUMFLEX_BITS 0x0100
  4138. #define ACUTE_ACCENT_BITS 0x0200
  4139. #define GRAVE_ACCENT_BITS 0x0300
  4140. #define DIAERESIS_BITS 0x0400
  4141. #define KEYCODE_TYPE uint16_t
  4142. #define KEYCODE_MASK 0x07FF
  4143. #define DEADKEY_CIRCUMFLEX KEY_QUOTE + ALTGR_MASK
  4144. #define DEADKEY_ACUTE_ACCENT KEY_LEFT_BRACE
  4145. #define DEADKEY_GRAVE_ACCENT KEY_BACKSLASH + ALTGR_MASK
  4146. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + SHIFT_MASK
  4147. #define KEY_NON_US_100 63
  4148. #define ASCII_20 KEY_SPACE // 32
  4149. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  4150. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  4151. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  4152. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  4153. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  4154. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  4155. #define ASCII_27 KEY_MINUS // 39 '
  4156. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  4157. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  4158. #define ASCII_2A KEY_RIGHT_BRACE + SHIFT_MASK // 42 *
  4159. #define ASCII_2B KEY_RIGHT_BRACE // 43 +
  4160. #define ASCII_2C KEY_COMMA // 44 ,
  4161. #define ASCII_2D KEY_SLASH // 45 -
  4162. #define ASCII_2E KEY_PERIOD // 46 .
  4163. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  4164. #define ASCII_30 KEY_0 // 48 0
  4165. #define ASCII_31 KEY_1 // 49 1
  4166. #define ASCII_32 KEY_2 // 50 2
  4167. #define ASCII_33 KEY_3 // 51 3
  4168. #define ASCII_34 KEY_4 // 52 4
  4169. #define ASCII_35 KEY_5 // 53 5
  4170. #define ASCII_36 KEY_6 // 54 6
  4171. #define ASCII_37 KEY_7 // 55 7
  4172. #define ASCII_38 KEY_8 // 55 8
  4173. #define ASCII_39 KEY_9 // 57 9
  4174. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  4175. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  4176. #define ASCII_3C KEY_NON_US_100 // 60 <
  4177. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  4178. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  4179. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  4180. #define ASCII_40 KEY_Q + ALTGR_MASK // 64 @
  4181. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  4182. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  4183. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  4184. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  4185. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  4186. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  4187. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  4188. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  4189. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  4190. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  4191. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  4192. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  4193. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  4194. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  4195. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  4196. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  4197. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  4198. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  4199. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  4200. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  4201. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  4202. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  4203. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  4204. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  4205. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  4206. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  4207. #define ASCII_5B KEY_QUOTE + SHIFT_MASK // 91 [
  4208. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  4209. #define ASCII_5D KEY_BACKSLASH + SHIFT_MASK // 93 ]
  4210. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  4211. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  4212. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  4213. #define ASCII_61 KEY_A // 97 a
  4214. #define ASCII_62 KEY_B // 98 b
  4215. #define ASCII_63 KEY_C // 99 c
  4216. #define ASCII_64 KEY_D // 100 d
  4217. #define ASCII_65 KEY_E // 101 e
  4218. #define ASCII_66 KEY_F // 102 f
  4219. #define ASCII_67 KEY_G // 103 g
  4220. #define ASCII_68 KEY_H // 104 h
  4221. #define ASCII_69 KEY_I // 105 i
  4222. #define ASCII_6A KEY_J // 106 j
  4223. #define ASCII_6B KEY_K // 107 k
  4224. #define ASCII_6C KEY_L // 108 l
  4225. #define ASCII_6D KEY_M // 109 m
  4226. #define ASCII_6E KEY_N // 110 n
  4227. #define ASCII_6F KEY_O // 111 o
  4228. #define ASCII_70 KEY_P // 112 p
  4229. #define ASCII_71 KEY_Q // 113 q
  4230. #define ASCII_72 KEY_R // 114 r
  4231. #define ASCII_73 KEY_S // 115 s
  4232. #define ASCII_74 KEY_T // 116 t
  4233. #define ASCII_75 KEY_U // 117 u
  4234. #define ASCII_76 KEY_V // 118 v
  4235. #define ASCII_77 KEY_W // 119 w
  4236. #define ASCII_78 KEY_X // 120 x
  4237. #define ASCII_79 KEY_Y // 121 y
  4238. #define ASCII_7A KEY_Z // 122 z
  4239. #define ASCII_7B KEY_QUOTE // 123 {
  4240. #define ASCII_7C KEY_TILDE // 124 |
  4241. #define ASCII_7D KEY_BACKSLASH // 125 }
  4242. #define ASCII_7E KEY_RIGHT_BRACE + ALTGR_MASK // 126 ~
  4243. #define ASCII_7F KEY_BACKSPACE // 127
  4244. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  4245. #define ISO_8859_1_A1 KEY_EQUAL + SHIFT_MASK // 161 ¡ Inverted Exclamation
  4246. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  4247. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  4248. #define ISO_8859_1_A4 0 // 164 ¤ Currency Sign
  4249. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  4250. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  4251. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  4252. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  4253. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  4254. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  4255. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  4256. #define ISO_8859_1_AC KEY_TILDE + ALTGR_MASK // 172 ¬ NOT SIGN
  4257. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  4258. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  4259. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  4260. #define ISO_8859_1_B0 KEY_TILDE + SHIFT_MASK // 176 ° DEGREE SIGN
  4261. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  4262. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  4263. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  4264. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  4265. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  4266. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  4267. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  4268. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  4269. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  4270. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  4271. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  4272. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  4273. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  4274. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  4275. #define ISO_8859_1_BF KEY_EQUAL // 191 ¿ INVERTED QUESTION MARK
  4276. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  4277. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  4278. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  4279. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  4280. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  4281. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  4282. #define ISO_8859_1_C6 0 // 198 Æ AE
  4283. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  4284. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  4285. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  4286. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  4287. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  4288. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  4289. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  4290. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  4291. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  4292. #define ISO_8859_1_D0 0 // 208 Ð ETH
  4293. #define ISO_8859_1_D1 KEY_SEMICOLON + SHIFT_MASK // 209 Ñ N TILDE
  4294. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  4295. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  4296. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  4297. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  4298. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  4299. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  4300. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  4301. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  4302. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  4303. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  4304. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  4305. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  4306. #define ISO_8859_1_DE 0 // 222 Þ THORN
  4307. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  4308. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  4309. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  4310. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  4311. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  4312. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  4313. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  4314. #define ISO_8859_1_E6 0 // 230 æ ae
  4315. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  4316. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  4317. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  4318. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  4319. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  4320. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  4321. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  4322. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  4323. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  4324. #define ISO_8859_1_F0 0 // 240 ð ETH
  4325. #define ISO_8859_1_F1 KEY_SEMICOLON // 241 ñ n TILDE
  4326. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  4327. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  4328. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  4329. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  4330. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  4331. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  4332. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  4333. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  4334. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  4335. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  4336. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  4337. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  4338. #define ISO_8859_1_FE 0 // 254 þ THORN
  4339. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  4340. #endif // LAYOUT_SPANISH_LATIN_AMERICA
  4341. #ifdef LAYOUT_IRISH
  4342. #define SHIFT_MASK 0x0040
  4343. #define ALTGR_MASK 0x0080
  4344. #define DEADKEYS_MASK 0x0300
  4345. #define GRAVE_ACCENT_BITS 0x0100
  4346. #define ACUTE_ACCENT_BITS 0x0200
  4347. #define KEYCODE_TYPE uint16_t
  4348. #define KEYCODE_MASK 0x03FF
  4349. #define DEADKEY_ACUTE_ACCENT KEY_QUOTE + ALTGR_MASK
  4350. #define DEADKEY_GRAVE_ACCENT KEY_TILDE
  4351. #define KEY_NON_US_100 63
  4352. #define ASCII_20 KEY_SPACE // 32
  4353. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  4354. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  4355. #define ASCII_23 KEY_BACKSPACE // 35 #
  4356. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  4357. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  4358. #define ASCII_26 KEY_7 + SHIFT_MASK // 38 &
  4359. #define ASCII_27 KEY_QUOTE // 39 '
  4360. #define ASCII_28 KEY_9 + SHIFT_MASK // 40 (
  4361. #define ASCII_29 KEY_0 + SHIFT_MASK // 41 )
  4362. #define ASCII_2A KEY_8 + SHIFT_MASK // 42 *
  4363. #define ASCII_2B KEY_EQUAL + SHIFT_MASK // 43 +
  4364. #define ASCII_2C KEY_COMMA // 44 ,
  4365. #define ASCII_2D KEY_MINUS // 45 -
  4366. #define ASCII_2E KEY_PERIOD // 46 .
  4367. #define ASCII_2F KEY_SLASH // 47 /
  4368. #define ASCII_30 KEY_0 // 48 0
  4369. #define ASCII_31 KEY_1 // 49 1
  4370. #define ASCII_32 KEY_2 // 50 2
  4371. #define ASCII_33 KEY_3 // 51 3
  4372. #define ASCII_34 KEY_4 // 52 4
  4373. #define ASCII_35 KEY_5 // 53 5
  4374. #define ASCII_36 KEY_6 // 54 6
  4375. #define ASCII_37 KEY_7 // 55 7
  4376. #define ASCII_38 KEY_8 // 55 8
  4377. #define ASCII_39 KEY_9 // 57 9
  4378. #define ASCII_3A KEY_SEMICOLON + SHIFT_MASK // 58 :
  4379. #define ASCII_3B KEY_SEMICOLON // 59 ;
  4380. #define ASCII_3C KEY_COMMA + SHIFT_MASK // 60 <
  4381. #define ASCII_3D KEY_EQUAL // 61 =
  4382. #define ASCII_3E KEY_PERIOD + SHIFT_MASK // 62 >
  4383. #define ASCII_3F KEY_SLASH + SHIFT_MASK // 63 ?
  4384. #define ASCII_40 KEY_QUOTE + SHIFT_MASK // 64 @
  4385. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  4386. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  4387. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  4388. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  4389. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  4390. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  4391. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  4392. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  4393. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  4394. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  4395. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  4396. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  4397. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  4398. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  4399. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  4400. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  4401. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  4402. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  4403. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  4404. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  4405. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  4406. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  4407. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  4408. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  4409. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  4410. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  4411. #define ASCII_5B KEY_LEFT_BRACE // 91 [
  4412. #define ASCII_5C KEY_NON_US_100 // 92
  4413. #define ASCII_5D KEY_RIGHT_BRACE // 93 ]
  4414. #define ASCII_5E KEY_6 + SHIFT_MASK // 94 ^
  4415. #define ASCII_5F KEY_MINUS + SHIFT_MASK // 95 _
  4416. #define ASCII_60 KEY_QUOTE + SHIFT_MASK + ALTGR_MASK // 96 `
  4417. #define ASCII_61 KEY_A // 97 a
  4418. #define ASCII_62 KEY_B // 98 b
  4419. #define ASCII_63 KEY_C // 99 c
  4420. #define ASCII_64 KEY_D // 100 d
  4421. #define ASCII_65 KEY_E // 101 e
  4422. #define ASCII_66 KEY_F // 102 f
  4423. #define ASCII_67 KEY_G // 103 g
  4424. #define ASCII_68 KEY_H // 104 h
  4425. #define ASCII_69 KEY_I // 105 i
  4426. #define ASCII_6A KEY_J // 106 j
  4427. #define ASCII_6B KEY_K // 107 k
  4428. #define ASCII_6C KEY_L // 108 l
  4429. #define ASCII_6D KEY_M // 109 m
  4430. #define ASCII_6E KEY_N // 110 n
  4431. #define ASCII_6F KEY_O // 111 o
  4432. #define ASCII_70 KEY_P // 112 p
  4433. #define ASCII_71 KEY_Q // 113 q
  4434. #define ASCII_72 KEY_R // 114 r
  4435. #define ASCII_73 KEY_S // 115 s
  4436. #define ASCII_74 KEY_T // 116 t
  4437. #define ASCII_75 KEY_U // 117 u
  4438. #define ASCII_76 KEY_V // 118 v
  4439. #define ASCII_77 KEY_W // 119 w
  4440. #define ASCII_78 KEY_X // 120 x
  4441. #define ASCII_79 KEY_Y // 121 y
  4442. #define ASCII_7A KEY_Z // 122 z
  4443. #define ASCII_7B KEY_LEFT_BRACE + SHIFT_MASK // 123 {
  4444. #define ASCII_7C KEY_NON_US_100 + SHIFT_MASK // 124 |
  4445. #define ASCII_7D KEY_RIGHT_BRACE + SHIFT_MASK // 125 }
  4446. #define ASCII_7E KEY_BACKSLASH + SHIFT_MASK // 126 ~
  4447. #define ASCII_7F KEY_BACKSPACE // 127
  4448. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  4449. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  4450. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  4451. #define ISO_8859_1_A3 KEY_3 + SHIFT_MASK // 163 £ Pound Sign
  4452. #define ISO_8859_1_A4 0 // 164 ¤ Currency or Euro Sign
  4453. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  4454. #define ISO_8859_1_A6 KEY_TILDE + ALTGR_MASK // 166 ¦ BROKEN BAR
  4455. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  4456. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  4457. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  4458. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  4459. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  4460. #define ISO_8859_1_AC KEY_TILDE + SHIFT_MASK // 172 ¬ NOT SIGN
  4461. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  4462. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  4463. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  4464. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  4465. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  4466. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  4467. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  4468. #define ISO_8859_1_B4 0 // 180 ´ ACUTE ACCENT
  4469. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  4470. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  4471. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  4472. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  4473. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  4474. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  4475. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  4476. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  4477. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  4478. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  4479. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  4480. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A // 192 À A GRAVE
  4481. #define ISO_8859_1_C1 KEY_A + ALTGR_MASK + SHIFT_MASK // 193 Á A ACUTE
  4482. #define ISO_8859_1_C2 0 // 194 Â A CIRCUMFLEX
  4483. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  4484. #define ISO_8859_1_C4 0 // 196 Ä A DIAERESIS
  4485. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  4486. #define ISO_8859_1_C6 0 // 198 Æ AE
  4487. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  4488. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E // 200 È E GRAVE
  4489. #define ISO_8859_1_C9 KEY_E + ALTGR_MASK + SHIFT_MASK // 201 É E ACUTE
  4490. #define ISO_8859_1_CA 0 // 202 Ê E CIRCUMFLEX
  4491. #define ISO_8859_1_CB 0 // 203 Ë E DIAERESIS
  4492. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I // 204 Ì I GRAVE
  4493. #define ISO_8859_1_CD KEY_I + ALTGR_MASK + SHIFT_MASK // 205 Í I ACUTE
  4494. #define ISO_8859_1_CE 0 // 206 Î I CIRCUMFLEX
  4495. #define ISO_8859_1_CF 0 // 207 Ï I DIAERESIS
  4496. #define ISO_8859_1_D0 0 // 208 Ð ETH
  4497. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  4498. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O // 210 Ò O GRAVE
  4499. #define ISO_8859_1_D3 KEY_O + ALTGR_MASK + SHIFT_MASK // 211 Ó O ACUTE
  4500. #define ISO_8859_1_D4 0 // 212 Ô O CIRCUMFLEX
  4501. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  4502. #define ISO_8859_1_D6 0 // 214 Ö O DIAERESIS
  4503. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  4504. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  4505. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U // 217 Ù U GRAVE
  4506. #define ISO_8859_1_DA KEY_U + ALTGR_MASK + SHIFT_MASK // 218 Ú U ACUTE
  4507. #define ISO_8859_1_DB 0 // 219 Û U CIRCUMFLEX
  4508. #define ISO_8859_1_DC 0 // 220 Ü U DIAERESIS
  4509. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  4510. #define ISO_8859_1_DE 0 // 222 Þ THORN
  4511. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  4512. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  4513. #define ISO_8859_1_E1 KEY_A + ALTGR_MASK // 225 á a ACUTE
  4514. #define ISO_8859_1_E2 0 // 226 â a CIRCUMFLEX
  4515. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  4516. #define ISO_8859_1_E4 0 // 228 ä a DIAERESIS
  4517. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  4518. #define ISO_8859_1_E6 0 // 230 æ ae
  4519. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  4520. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  4521. #define ISO_8859_1_E9 KEY_E + ALTGR_MASK // 233 é e ACUTE
  4522. #define ISO_8859_1_EA 0 // 234 ê e CIRCUMFLEX
  4523. #define ISO_8859_1_EB 0 // 235 ë e DIAERESIS
  4524. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  4525. #define ISO_8859_1_ED KEY_I + ALTGR_MASK // 237 í i ACUTE
  4526. #define ISO_8859_1_EE 0 // 238 î i CIRCUMFLEX
  4527. #define ISO_8859_1_EF 0 // 239 ï i DIAERESIS
  4528. #define ISO_8859_1_F0 0 // 240 ð ETH
  4529. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  4530. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  4531. #define ISO_8859_1_F3 KEY_O + ALTGR_MASK // 243 ó o ACUTE
  4532. #define ISO_8859_1_F4 0 // 244 ô o CIRCUMFLEX
  4533. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  4534. #define ISO_8859_1_F6 0 // 246 ö o DIAERESIS
  4535. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  4536. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  4537. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  4538. #define ISO_8859_1_FA KEY_U + ALTGR_MASK // 250 ú u ACUTE
  4539. #define ISO_8859_1_FB 0 // 251 û u CIRCUMFLEX
  4540. #define ISO_8859_1_FC 0 // 252 ü u DIAERESIS
  4541. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  4542. #define ISO_8859_1_FE 0 // 254 þ THORN
  4543. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  4544. #define UNICODE_20AC KEY_4 + ALTGR_MASK // € Euro Sign
  4545. // not yet implemented
  4546. #define UNICODE_EXTRA00 0x20AC
  4547. #define KEYCODE_EXTRA00 KEY_4 + ALTGR_MASK // 20AC € Euro Sign
  4548. #endif // LAYOUT_IRISH
  4549. #ifdef LAYOUT_ICELANDIC
  4550. #define SHIFT_MASK 0x0040
  4551. #define ALTGR_MASK 0x0080
  4552. #define DEADKEYS_MASK 0x0700
  4553. #define CIRCUMFLEX_BITS 0x0100
  4554. #define ACUTE_ACCENT_BITS 0x0200
  4555. #define GRAVE_ACCENT_BITS 0x0300
  4556. #define DIAERESIS_BITS 0x0400
  4557. #define RING_ABOVE_BITS 0x0500
  4558. #define KEYCODE_TYPE uint16_t
  4559. #define KEYCODE_MASK 0x07FF
  4560. #define DEADKEY_CIRCUMFLEX KEY_QUOTE + ALTGR_MASK
  4561. #define DEADKEY_ACUTE_ACCENT KEY_QUOTE
  4562. #define DEADKEY_GRAVE_ACCENT KEY_BACKSLASH + ALTGR_MASK
  4563. #define DEADKEY_DIAERESIS KEY_TILDE + SHIFT_MASK
  4564. #define DEADKEY_RING_ABOVE KEY_TILDE
  4565. #define KEY_NON_US_100 63
  4566. #define ASCII_20 KEY_SPACE // 32
  4567. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  4568. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  4569. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  4570. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  4571. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  4572. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  4573. #define ASCII_27 KEY_QUOTE + SHIFT_MASK // 39 '
  4574. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  4575. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  4576. #define ASCII_2A KEY_BACKSLASH + SHIFT_MASK // 42 *
  4577. #define ASCII_2B KEY_BACKSLASH // 43 +
  4578. #define ASCII_2C KEY_COMMA // 44 ,
  4579. #define ASCII_2D KEY_EQUAL // 45 -
  4580. #define ASCII_2E KEY_PERIOD // 46 .
  4581. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  4582. #define ASCII_30 KEY_0 // 48 0
  4583. #define ASCII_31 KEY_1 // 49 1
  4584. #define ASCII_32 KEY_2 // 50 2
  4585. #define ASCII_33 KEY_3 // 51 3
  4586. #define ASCII_34 KEY_4 // 52 4
  4587. #define ASCII_35 KEY_5 // 53 5
  4588. #define ASCII_36 KEY_6 // 54 6
  4589. #define ASCII_37 KEY_7 // 55 7
  4590. #define ASCII_38 KEY_8 // 55 8
  4591. #define ASCII_39 KEY_9 // 57 9
  4592. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  4593. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  4594. #define ASCII_3C KEY_NON_US_100 // 60 <
  4595. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  4596. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  4597. #define ASCII_3F KEY_RIGHT_BRACE + SHIFT_MASK // 63 ?
  4598. #define ASCII_40 KEY_Q + ALTGR_MASK // 64 @
  4599. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  4600. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  4601. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  4602. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  4603. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  4604. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  4605. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  4606. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  4607. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  4608. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  4609. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  4610. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  4611. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  4612. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  4613. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  4614. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  4615. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  4616. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  4617. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  4618. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  4619. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  4620. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  4621. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  4622. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  4623. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  4624. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  4625. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  4626. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  4627. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  4628. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  4629. #define ASCII_5F KEY_EQUAL + SHIFT_MASK // 95 _
  4630. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  4631. #define ASCII_61 KEY_A // 97 a
  4632. #define ASCII_62 KEY_B // 98 b
  4633. #define ASCII_63 KEY_C // 99 c
  4634. #define ASCII_64 KEY_D // 100 d
  4635. #define ASCII_65 KEY_E // 101 e
  4636. #define ASCII_66 KEY_F // 102 f
  4637. #define ASCII_67 KEY_G // 103 g
  4638. #define ASCII_68 KEY_H // 104 h
  4639. #define ASCII_69 KEY_I // 105 i
  4640. #define ASCII_6A KEY_J // 106 j
  4641. #define ASCII_6B KEY_K // 107 k
  4642. #define ASCII_6C KEY_L // 108 l
  4643. #define ASCII_6D KEY_M // 109 m
  4644. #define ASCII_6E KEY_N // 110 n
  4645. #define ASCII_6F KEY_O // 111 o
  4646. #define ASCII_70 KEY_P // 112 p
  4647. #define ASCII_71 KEY_Q // 113 q
  4648. #define ASCII_72 KEY_R // 114 r
  4649. #define ASCII_73 KEY_S // 115 s
  4650. #define ASCII_74 KEY_T // 116 t
  4651. #define ASCII_75 KEY_U // 117 u
  4652. #define ASCII_76 KEY_V // 118 v
  4653. #define ASCII_77 KEY_W // 119 w
  4654. #define ASCII_78 KEY_X // 120 x
  4655. #define ASCII_79 KEY_Y // 121 y
  4656. #define ASCII_7A KEY_Z // 122 z
  4657. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  4658. #define ASCII_7C KEY_NON_US_100 + ALTGR_MASK // 124 |
  4659. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  4660. #define ASCII_7E KEY_RIGHT_BRACE + ALTGR_MASK // 126 ~
  4661. #define ASCII_7F KEY_BACKSPACE // 127
  4662. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  4663. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  4664. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  4665. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  4666. #define ISO_8859_1_A4 0 // 164 ¤ Currency or Euro Sign
  4667. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  4668. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR ??
  4669. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  4670. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  4671. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  4672. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  4673. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  4674. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN ??
  4675. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  4676. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  4677. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  4678. #define ISO_8859_1_B0 KEY_TILDE + ALTGR_MASK // 176 ° DEGREE SIGN
  4679. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  4680. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  4681. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  4682. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  4683. #define ISO_8859_1_B5 KEY_M + ALTGR_MASK // 181 µ MICRO SIGN
  4684. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  4685. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  4686. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  4687. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  4688. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  4689. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  4690. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  4691. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  4692. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  4693. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  4694. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  4695. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + ALTGR_MASK // 193 Á A ACUTE
  4696. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  4697. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  4698. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  4699. #define ISO_8859_1_C5 RING_ABOVE_BITS + KEY_A + SHIFT_MASK // 197 Å A RING ABOVE
  4700. #define ISO_8859_1_C6 KEY_SEMICOLON + SHIFT_MASK // 198 Æ AE
  4701. #define ISO_8859_1_C7 0 // 199 Ç C CEDILLA
  4702. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  4703. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  4704. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  4705. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  4706. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  4707. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  4708. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  4709. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  4710. #define ISO_8859_1_D0 KEY_LEFT_BRACE + SHIFT_MASK // 208 Ð ETH
  4711. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  4712. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  4713. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  4714. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  4715. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  4716. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  4717. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  4718. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  4719. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  4720. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  4721. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  4722. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  4723. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  4724. #define ISO_8859_1_DE KEY_SLASH + SHIFT_MASK // 222 Þ THORN
  4725. #define ISO_8859_1_DF 0 // 223 ß SHARP S
  4726. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  4727. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  4728. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  4729. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  4730. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  4731. #define ISO_8859_1_E5 RING_ABOVE_BITS + KEY_A // 229 å a RING ABOVE
  4732. #define ISO_8859_1_E6 KEY_SEMICOLON // 230 æ ae
  4733. #define ISO_8859_1_E7 0 // 231 ç c CEDILLA
  4734. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  4735. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  4736. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  4737. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  4738. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  4739. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  4740. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  4741. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  4742. #define ISO_8859_1_F0 KEY_LEFT_BRACE // 240 ð ETH
  4743. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  4744. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  4745. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  4746. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  4747. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  4748. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  4749. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  4750. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  4751. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  4752. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  4753. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  4754. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  4755. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  4756. #define ISO_8859_1_FE KEY_SLASH // 254 þ THORN
  4757. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  4758. #define UNICODE_20AC KEY_5 + ALTGR_MASK // € Euro Sign
  4759. // not yet implemented
  4760. #define UNICODE_EXTRA00 0x20AC
  4761. #define KEYCODE_EXTRA00 KEY_5 + ALTGR_MASK // 20AC € Euro Sign
  4762. #endif // LAYOUT_ICELANDIC
  4763. #ifdef LAYOUT_TURKISH
  4764. // http://forum.pjrc.com/threads/18781-Turkish-Language-Support
  4765. #define SHIFT_MASK 0x0040
  4766. #define ALTGR_MASK 0x0080
  4767. #define DEADKEYS_MASK 0x0700
  4768. #define CIRCUMFLEX_BITS 0x0100
  4769. #define ACUTE_ACCENT_BITS 0x0200
  4770. #define GRAVE_ACCENT_BITS 0x0300
  4771. #define TILDE_BITS 0x0400
  4772. #define DIAERESIS_BITS 0x0500
  4773. #define KEYCODE_TYPE uint16_t
  4774. #define KEYCODE_MASK 0x07FF
  4775. #define DEADKEY_CIRCUMFLEX KEY_3 + SHIFT_MASK
  4776. #define DEADKEY_ACUTE_ACCENT KEY_SEMICOLON + ALTGR_MASK
  4777. #define DEADKEY_GRAVE_ACCENT KEY_BACKSLASH + ALTGR_MASK
  4778. #define DEADKEY_TILDE KEY_RIGHT_BRACE + ALTGR_MASK
  4779. #define DEADKEY_DIAERESIS KEY_LEFT_BRACE + ALTGR_MASK
  4780. #define ASCII_20 KEY_SPACE // 32
  4781. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  4782. #define ASCII_22 KEY_TILDE // 34 "
  4783. #define ASCII_23 KEY_3 + ALTGR_MASK // 35 #
  4784. #define ASCII_24 KEY_4 + ALTGR_MASK // 36 $
  4785. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  4786. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  4787. #define ASCII_27 KEY_2 + SHIFT_MASK // 39 '
  4788. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  4789. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  4790. #define ASCII_2A KEY_MINUS // 42 *
  4791. #define ASCII_2B KEY_4 + SHIFT_MASK // 43 +
  4792. #define ASCII_2C KEY_BACKSLASH // 44 ,
  4793. #define ASCII_2D KEY_EQUAL // 45 -
  4794. #define ASCII_2E KEY_SLASH // 46 .
  4795. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  4796. #define ASCII_30 KEY_0 // 48 0
  4797. #define ASCII_31 KEY_1 // 49 1
  4798. #define ASCII_32 KEY_2 // 50 2
  4799. #define ASCII_33 KEY_3 // 51 3
  4800. #define ASCII_34 KEY_4 // 52 4
  4801. #define ASCII_35 KEY_5 // 53 5
  4802. #define ASCII_36 KEY_6 // 54 6
  4803. #define ASCII_37 KEY_7 // 55 7
  4804. #define ASCII_38 KEY_8 // 55 8
  4805. #define ASCII_39 KEY_9 // 57 9
  4806. #define ASCII_3A KEY_SLASH + SHIFT_MASK // 58 :
  4807. #define ASCII_3B KEY_BACKSLASH + SHIFT_MASK // 59 ;
  4808. #define ASCII_3C KEY_TILDE + ALTGR_MASK // 60 <
  4809. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  4810. #define ASCII_3E KEY_1 + ALTGR_MASK // 62 >
  4811. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  4812. #define ASCII_40 KEY_Q + ALTGR_MASK // 64 @
  4813. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  4814. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  4815. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  4816. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  4817. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  4818. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  4819. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  4820. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  4821. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  4822. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  4823. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  4824. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  4825. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  4826. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  4827. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  4828. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  4829. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  4830. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  4831. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  4832. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  4833. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  4834. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  4835. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  4836. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  4837. #define ASCII_59 KEY_Y + SHIFT_MASK // 89 Y
  4838. #define ASCII_5A KEY_Z + SHIFT_MASK // 90 Z
  4839. #define ASCII_5B KEY_8 + ALTGR_MASK // 91 [
  4840. #define ASCII_5C KEY_MINUS + ALTGR_MASK // 92
  4841. #define ASCII_5D KEY_9 + ALTGR_MASK // 93 ]
  4842. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  4843. #define ASCII_5F KEY_EQUAL + SHIFT_MASK // 95 _
  4844. #define ASCII_60 GRAVE_ACCENT_BITS + KEY_SPACE // 96 `
  4845. #define ASCII_61 KEY_A // 97 a
  4846. #define ASCII_62 KEY_B // 98 b
  4847. #define ASCII_63 KEY_C // 99 c
  4848. #define ASCII_64 KEY_D // 100 d
  4849. #define ASCII_65 KEY_E // 101 e
  4850. #define ASCII_66 KEY_F // 102 f
  4851. #define ASCII_67 KEY_G // 103 g
  4852. #define ASCII_68 KEY_H // 104 h
  4853. #define ASCII_69 KEY_QUOTE // 105 i
  4854. #define ASCII_6A KEY_J // 106 j
  4855. #define ASCII_6B KEY_K // 107 k
  4856. #define ASCII_6C KEY_L // 108 l
  4857. #define ASCII_6D KEY_M // 109 m
  4858. #define ASCII_6E KEY_N // 110 n
  4859. #define ASCII_6F KEY_O // 111 o
  4860. #define ASCII_70 KEY_P // 112 p
  4861. #define ASCII_71 KEY_Q // 113 q
  4862. #define ASCII_72 KEY_R // 114 r
  4863. #define ASCII_73 KEY_S // 115 s
  4864. #define ASCII_74 KEY_T // 116 t
  4865. #define ASCII_75 KEY_U // 117 u
  4866. #define ASCII_76 KEY_V // 118 v
  4867. #define ASCII_77 KEY_W // 119 w
  4868. #define ASCII_78 KEY_X // 120 x
  4869. #define ASCII_79 KEY_Y // 121 y
  4870. #define ASCII_7A KEY_Z // 122 z
  4871. #define ASCII_7B KEY_7 + ALTGR_MASK // 123 {
  4872. #define ASCII_7C KEY_EQUAL + ALTGR_MASK // 124 |
  4873. #define ASCII_7D KEY_0 + ALTGR_MASK // 125 }
  4874. #define ASCII_7E TILDE_BITS + KEY_SPACE // 126 ~
  4875. #define ASCII_7F KEY_BACKSPACE // 127
  4876. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  4877. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  4878. #define ISO_8859_1_A2 0 // 162 ¢ Cent SIGN
  4879. #define ISO_8859_1_A3 KEY_2 + ALTGR_MASK // 163 £ Pound Sign
  4880. #define ISO_8859_1_A4 0 // 164 ¤ Currency or Euro Sign
  4881. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  4882. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR ??
  4883. #define ISO_8859_1_A7 0 // 167 § SECTION SIGN
  4884. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  4885. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  4886. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  4887. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  4888. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN ??
  4889. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  4890. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  4891. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  4892. #define ISO_8859_1_B0 0 // 176 ° DEGREE SIGN
  4893. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  4894. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  4895. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  4896. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  4897. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  4898. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  4899. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  4900. #define ISO_8859_1_B8 0 // 184 ¸ CEDILLA
  4901. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  4902. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  4903. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  4904. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  4905. #define ISO_8859_1_BD KEY_5 + ALTGR_MASK // 189 ½ FRACTION ONE HALF
  4906. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  4907. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  4908. #define ISO_8859_1_C0 GRAVE_ACCENT_BITS + KEY_A + SHIFT_MASK // 192 À A GRAVE
  4909. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  4910. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  4911. #define ISO_8859_1_C3 TILDE_BITS + KEY_A + SHIFT_MASK // 195 Ã A TILDE
  4912. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  4913. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  4914. #define ISO_8859_1_C6 KEY_A + ALTGR_MASK // 198 Æ AE
  4915. #define ISO_8859_1_C7 KEY_PERIOD + SHIFT_MASK // 199 Ç C CEDILLA
  4916. #define ISO_8859_1_C8 GRAVE_ACCENT_BITS + KEY_E + SHIFT_MASK // 200 È E GRAVE
  4917. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  4918. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  4919. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  4920. #define ISO_8859_1_CC GRAVE_ACCENT_BITS + KEY_I + SHIFT_MASK // 204 Ì I GRAVE
  4921. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  4922. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  4923. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  4924. #define ISO_8859_1_D0 0 // 208 Ð ETH
  4925. #define ISO_8859_1_D1 TILDE_BITS + KEY_N + SHIFT_MASK // 209 Ñ N TILDE
  4926. #define ISO_8859_1_D2 GRAVE_ACCENT_BITS + KEY_O + SHIFT_MASK // 210 Ò O GRAVE
  4927. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  4928. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  4929. #define ISO_8859_1_D5 TILDE_BITS + KEY_O + SHIFT_MASK // 213 Õ O TILDE
  4930. #define ISO_8859_1_D6 KEY_COMMA + SHIFT_MASK // 214 Ö O DIAERESIS
  4931. #define ISO_8859_1_D7 0 // 215 × MULTIPLICATION
  4932. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  4933. #define ISO_8859_1_D9 GRAVE_ACCENT_BITS + KEY_U + SHIFT_MASK // 217 Ù U GRAVE
  4934. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  4935. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  4936. #define ISO_8859_1_DC KEY_RIGHT_BRACE + SHIFT_MASK // 220 Ü U DIAERESIS
  4937. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Y + SHIFT_MASK // 221 Ý Y ACUTE
  4938. #define ISO_8859_1_DE 0 // 222 Þ THORN
  4939. #define ISO_8859_1_DF KEY_S + ALTGR_MASK // 223 ß SHARP S
  4940. #define ISO_8859_1_E0 GRAVE_ACCENT_BITS + KEY_A // 224 à a GRAVE
  4941. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  4942. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  4943. #define ISO_8859_1_E3 TILDE_BITS + KEY_A // 227 ã a TILDE
  4944. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  4945. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  4946. #define ISO_8859_1_E6 0 // 230 æ ae
  4947. #define ISO_8859_1_E7 KEY_PERIOD // 231 ç c CEDILLA
  4948. #define ISO_8859_1_E8 GRAVE_ACCENT_BITS + KEY_E // 232 è e GRAVE
  4949. #define ISO_8859_1_E9 KEY_TILDE + SHIFT_MASK // 233 é e ACUTE
  4950. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  4951. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  4952. #define ISO_8859_1_EC GRAVE_ACCENT_BITS + KEY_I // 236 ì i GRAVE
  4953. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  4954. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  4955. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  4956. #define ISO_8859_1_F0 0 // 240 ð ETH
  4957. #define ISO_8859_1_F1 TILDE_BITS + KEY_N // 241 ñ n TILDE
  4958. #define ISO_8859_1_F2 GRAVE_ACCENT_BITS + KEY_O // 242 ò o GRAVE
  4959. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  4960. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  4961. #define ISO_8859_1_F5 TILDE_BITS + KEY_O // 245 õ o TILDE
  4962. #define ISO_8859_1_F6 KEY_COMMA // 246 ö o DIAERESIS
  4963. #define ISO_8859_1_F7 0 // 247 ÷ DIVISION
  4964. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  4965. #define ISO_8859_1_F9 GRAVE_ACCENT_BITS + KEY_U // 249 ù u GRAVE
  4966. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  4967. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  4968. #define ISO_8859_1_FC KEY_RIGHT_BRACE // 252 ü u DIAERESIS
  4969. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Y // 253 ý y ACUTE
  4970. #define ISO_8859_1_FE 0 // 254 þ THORN
  4971. #define ISO_8859_1_FF DIAERESIS_BITS + KEY_Y // 255 ÿ y DIAERESIS
  4972. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  4973. // not yet implemented
  4974. #define UNICODE_EXTRA00 0x20AC
  4975. #define KEYCODE_EXTRA00 KEY_E + ALTGR_MASK // 20AC € Euro Sign
  4976. #define UNICODE_EXTRA01 0x011E
  4977. #define KEYCODE_EXTRA01 KEY_LEFT_BRACE + SHIFT_MASK // 011E Ğ Latin capital letter G with breve
  4978. #define UNICODE_EXTRA02 0x011F
  4979. #define KEYCODE_EXTRA02 KEY_LEFT_BRACE // 011F ğ Latin small letter g with breve
  4980. #define UNICODE_EXTRA03 0x0130
  4981. #define KEYCODE_EXTRA03 KEY_QUOTE + SHIFT_MASK // 0130 İ Latin captial letter I with dot above
  4982. #define UNICODE_EXTRA04 0x0131
  4983. #define KEYCODE_EXTRA04 KEY_I // 0131 ı Latin small letter dotless i
  4984. #define UNICODE_EXTRA05 0x015E
  4985. #define KEYCODE_EXTRA05 KEY_SEMICOLON + SHIFT_MASK // 015E Ş Latin capital letter S with cedilla
  4986. #define UNICODE_EXTRA06 0x0151
  4987. #define KEYCODE_EXTRA06 KEY_SEMICOLON // 0151 ş Latin small letter s with cedilla
  4988. #endif // LAYOUT_TURKISH
  4989. #ifdef LAYOUT_CZECH
  4990. // http://forum.pjrc.com/threads/24495-Czech-keyboard
  4991. #define SHIFT_MASK 0x0040
  4992. #define ALTGR_MASK 0x0080
  4993. #define DEADKEYS_MASK 0x0F00
  4994. #define ACUTE_ACCENT_BITS 0x0100 // TODO: the Czech might not support some
  4995. #define DEGREE_SIGN_BITS 0x0200 // of these deadkeys, perhaps not any???
  4996. #define CARON_BITS 0x0300
  4997. //#define CIRCUMFLEX_BITS 0x0400
  4998. #define BREVE_BITS 0x0500
  4999. #define OGONEK_BITS 0x0600
  5000. //#define GRAVE_ACCENT_BITS 0x0700
  5001. #define DOT_ABOVE_BITS 0x0800
  5002. #define DOUBLE_ACUTE_BITS 0x0900
  5003. //#define DIAERESIS_BITS 0x0A00
  5004. #define CEDILLA_BITS 0x0B00
  5005. #define KEYCODE_TYPE uint16_t
  5006. #define KEYCODE_MASK 0x0FFF
  5007. #define DEADKEY_ACUTE_ACCENT KEY_EQUAL // TODO: is it KEY_9 + ALTGR_MASK
  5008. #define DEADKEY_DEGREE_SIGN KEY_TILDE + SHIFT_MASK // TODO: is it KEY_5 + ALTGR_MASK
  5009. #define DEADKEY_CARON KEY_EQUAL + SHIFT_MASK // TODO: is it KEY_2 + ALTGR_MASK
  5010. //#define DEADKEY_CIRCUMFLEX KEY_3 + ALTGR_MASK
  5011. #define DEADKEY_BREVE KEY_4 + ALTGR_MASK
  5012. #define DEADKEY_OGONEK KEY_6 + ALTGR_MASK
  5013. //#define DEADKEY_GRAVE_ACCENT KEY_7 + ALTGR_MASK
  5014. #define DEADKEY_DOT_ABOVE KEY_8 + ALTGR_MASK
  5015. #define DEADKEY_DOUBLE_ACUTE KEY_0 + ALTGR_MASK
  5016. #define DEADKEY_DIAERESIS KEY_MINUS + ALTGR_MASK
  5017. #define DEADKEY_CEDILLA KEY_EQUAL + ALTGR_MASK
  5018. #define KEY_NON_US_100 63
  5019. #define ASCII_20 KEY_SPACE // 32
  5020. #define ASCII_21 KEY_QUOTE + SHIFT_MASK // 33 !
  5021. #define ASCII_22 KEY_SEMICOLON + SHIFT_MASK // 34 "
  5022. #define ASCII_23 KEY_X + ALTGR_MASK // 35 #
  5023. #define ASCII_24 KEY_SEMICOLON + ALTGR_MASK // 36 $
  5024. #define ASCII_25 KEY_MINUS + SHIFT_MASK // 37 %
  5025. #define ASCII_26 KEY_C + ALTGR_MASK // 38 &
  5026. #define ASCII_27 KEY_BACKSLASH + SHIFT_MASK // 39 '
  5027. #define ASCII_28 KEY_RIGHT_BRACE + SHIFT_MASK // 40 (
  5028. #define ASCII_29 KEY_RIGHT_BRACE // 41 )
  5029. #define ASCII_2A KEY_SLASH + ALTGR_MASK // 42 *
  5030. #define ASCII_2B KEY_1 // 43 +
  5031. #define ASCII_2C KEY_COMMA // 44 ,
  5032. #define ASCII_2D KEY_SLASH // 45 -
  5033. #define ASCII_2E KEY_PERIOD // 46 .
  5034. #define ASCII_2F KEY_LEFT_BRACE + SHIFT_MASK // 47 /
  5035. #define ASCII_30 KEY_0 + SHIFT_MASK // 48 0
  5036. #define ASCII_31 KEY_1 + SHIFT_MASK // 49 1
  5037. #define ASCII_32 KEY_2 + SHIFT_MASK // 50 2
  5038. #define ASCII_33 KEY_3 + SHIFT_MASK // 51 3
  5039. #define ASCII_34 KEY_4 + SHIFT_MASK // 52 4
  5040. #define ASCII_35 KEY_5 + SHIFT_MASK // 53 5
  5041. #define ASCII_36 KEY_6 + SHIFT_MASK // 54 6
  5042. #define ASCII_37 KEY_7 + SHIFT_MASK // 55 7
  5043. #define ASCII_38 KEY_8 + SHIFT_MASK // 55 8
  5044. #define ASCII_39 KEY_9 + SHIFT_MASK // 57 9
  5045. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  5046. #define ASCII_3B KEY_TILDE // 59 ;
  5047. #define ASCII_3C KEY_COMMA + ALTGR_MASK // 60 <
  5048. #define ASCII_3D KEY_MINUS // 61 =
  5049. #define ASCII_3E KEY_PERIOD + ALTGR_MASK // 62 >
  5050. #define ASCII_3F KEY_COMMA + SHIFT_MASK // 63 ?
  5051. #define ASCII_40 KEY_V + ALTGR_MASK // 64 @
  5052. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  5053. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  5054. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  5055. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  5056. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  5057. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  5058. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  5059. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  5060. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  5061. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  5062. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  5063. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  5064. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  5065. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  5066. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  5067. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  5068. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  5069. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  5070. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  5071. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  5072. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  5073. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  5074. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  5075. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  5076. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  5077. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  5078. #define ASCII_5B KEY_F + ALTGR_MASK // 91 [
  5079. #define ASCII_5C KEY_NON_US_100 // 92
  5080. #define ASCII_5D KEY_G + ALTGR_MASK // 93 ]
  5081. #define ASCII_5E KEY_3 + ALTGR_MASK // 94 ^ TODO: testme
  5082. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _
  5083. #define ASCII_60 KEY_7 + ALTGR_MASK // 96 ` TODO: testme
  5084. #define ASCII_61 KEY_A // 97 a
  5085. #define ASCII_62 KEY_B // 98 b
  5086. #define ASCII_63 KEY_C // 99 c
  5087. #define ASCII_64 KEY_D // 100 d
  5088. #define ASCII_65 KEY_E // 101 e
  5089. #define ASCII_66 KEY_F // 102 f
  5090. #define ASCII_67 KEY_G // 103 g
  5091. #define ASCII_68 KEY_H // 104 h
  5092. #define ASCII_69 KEY_I // 105 i
  5093. #define ASCII_6A KEY_J // 106 j
  5094. #define ASCII_6B KEY_K // 107 k
  5095. #define ASCII_6C KEY_L // 108 l
  5096. #define ASCII_6D KEY_M // 109 m
  5097. #define ASCII_6E KEY_N // 110 n
  5098. #define ASCII_6F KEY_O // 111 o
  5099. #define ASCII_70 KEY_P // 112 p
  5100. #define ASCII_71 KEY_Q // 113 q
  5101. #define ASCII_72 KEY_R // 114 r
  5102. #define ASCII_73 KEY_S // 115 s
  5103. #define ASCII_74 KEY_T // 116 t
  5104. #define ASCII_75 KEY_U // 117 u
  5105. #define ASCII_76 KEY_V // 118 v
  5106. #define ASCII_77 KEY_W // 119 w
  5107. #define ASCII_78 KEY_X // 120 x
  5108. #define ASCII_79 KEY_Z // 121 y
  5109. #define ASCII_7A KEY_Y // 122 z
  5110. #define ASCII_7B KEY_B + ALTGR_MASK // 123 {
  5111. #define ASCII_7C KEY_NON_US_100 + SHIFT_MASK // 124 |
  5112. #define ASCII_7D KEY_N + ALTGR_MASK // 125 }
  5113. #define ASCII_7E KEY_1 + ALTGR_MASK // 126 ~ TODO: fixme
  5114. #define ASCII_7F KEY_BACKSPACE // 127
  5115. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  5116. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  5117. #define ISO_8859_1_A2 0 // 162 ¢ Cent Sign
  5118. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  5119. #define ISO_8859_1_A4 KEY_BACKSLASH + ALTGR_MASK // 164 ¤ Currency Sign
  5120. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  5121. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  5122. #define ISO_8859_1_A7 KEY_QUOTE // 167 § SECTION SIGN
  5123. #define ISO_8859_1_A8 0 // 168 ¨ DIAERESIS
  5124. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  5125. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  5126. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  5127. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  5128. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  5129. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  5130. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  5131. #define ISO_8859_1_B0 DEGREE_SIGN_BITS + KEY_SPACE // 176 ° DEGREE SIGN
  5132. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  5133. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  5134. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  5135. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  5136. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  5137. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  5138. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  5139. #define ISO_8859_1_B8 CEDILLA_BITS + KEY_SPACE // 184 ¸ CEDILLA
  5140. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  5141. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  5142. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  5143. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  5144. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  5145. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  5146. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  5147. #define ISO_8859_1_C0 0 // 192 À A GRAVE
  5148. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  5149. #define ISO_8859_1_C2 0 // 194 Â A CIRCUMFLEX
  5150. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  5151. #define ISO_8859_1_C4 0 // 196 Ä A DIAERESIS
  5152. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  5153. #define ISO_8859_1_C6 0 // 198 Æ AE
  5154. #define ISO_8859_1_C7 CEDILLA_BITS + KEY_C + SHIFT_MASK // 199 Ç C CEDILLA
  5155. #define ISO_8859_1_C8 0 // 200 È E GRAVE
  5156. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  5157. #define ISO_8859_1_CA 0 // 202 Ê E CIRCUMFLEX
  5158. #define ISO_8859_1_CB 0 // 203 Ë E DIAERESIS
  5159. #define ISO_8859_1_CC 0 // 204 Ì I GRAVE
  5160. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  5161. #define ISO_8859_1_CE 0 // 206 Î I CIRCUMFLEX
  5162. #define ISO_8859_1_CF 0 // 207 Ï I DIAERESIS
  5163. #define ISO_8859_1_D0 0 // 208 Ð ETH
  5164. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  5165. #define ISO_8859_1_D2 0 // 210 Ò O GRAVE
  5166. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  5167. #define ISO_8859_1_D4 0 // 212 Ô O CIRCUMFLEX
  5168. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  5169. #define ISO_8859_1_D6 0 // 214 Ö O DIAERESIS
  5170. #define ISO_8859_1_D7 KEY_RIGHT_BRACE + ALTGR_MASK // 215 × MULTIPLICATION
  5171. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  5172. #define ISO_8859_1_D9 0 // 217 Ù U GRAVE
  5173. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  5174. #define ISO_8859_1_DB 0 // 219 Û U CIRCUMFLEX
  5175. #define ISO_8859_1_DC 0 // 220 Ü U DIAERESIS
  5176. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Z + SHIFT_MASK // 221 Ý Y ACUTE
  5177. #define ISO_8859_1_DE 0 // 222 Þ THORN
  5178. #define ISO_8859_1_DF KEY_QUOTE + ALTGR_MASK // 223 ß SHARP S TODO: testme
  5179. #define ISO_8859_1_E0 0 // 224 à a GRAVE
  5180. #define ISO_8859_1_E1 KEY_8 // 225 á a ACUTE
  5181. #define ISO_8859_1_E2 0 // 226 â a CIRCUMFLEX
  5182. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  5183. #define ISO_8859_1_E4 0 // 228 ä a DIAERESIS
  5184. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  5185. #define ISO_8859_1_E6 0 // 230 æ ae
  5186. #define ISO_8859_1_E7 CEDILLA_BITS + KEY_C // 231 ç c CEDILLA
  5187. #define ISO_8859_1_E8 0 // 232 è e GRAVE
  5188. #define ISO_8859_1_E9 KEY_0 // 233 é e ACUTE
  5189. #define ISO_8859_1_EA 0 // 234 ê e CIRCUMFLEX
  5190. #define ISO_8859_1_EB 0 // 235 ë e DIAERESIS
  5191. #define ISO_8859_1_EC 0 // 236 ì i GRAVE
  5192. #define ISO_8859_1_ED KEY_9 // 237 í i ACUTE
  5193. #define ISO_8859_1_EE 0 // 238 î i CIRCUMFLEX
  5194. #define ISO_8859_1_EF 0 // 239 ï i DIAERESIS
  5195. #define ISO_8859_1_F0 0 // 240 ð ETH
  5196. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  5197. #define ISO_8859_1_F2 0 // 242 ò o GRAVE
  5198. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  5199. #define ISO_8859_1_F4 0 // 244 ô o CIRCUMFLEX
  5200. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  5201. #define ISO_8859_1_F6 0 // 246 ö o DIAERESIS
  5202. #define ISO_8859_1_F7 KEY_LEFT_BRACE + ALTGR_MASK // 247 ÷ DIVISION
  5203. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  5204. #define ISO_8859_1_F9 0 // 249 ù u GRAVE
  5205. #define ISO_8859_1_FA KEY_LEFT_BRACE // 250 ú u ACUTE
  5206. #define ISO_8859_1_FB 0 // 251 û u CIRCUMFLEX
  5207. #define ISO_8859_1_FC 0 // 252 ü u DIAERESIS
  5208. #define ISO_8859_1_FD KEY_7 // 253 ý y ACUTE
  5209. #define ISO_8859_1_FE 0 // 254 þ THORN
  5210. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  5211. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  5212. #define UNICODE_EXTRA00 0x011B // ě Small Letter E with caron
  5213. #define KEYCODE_EXTRA00 KEY_2
  5214. #define UNICODE_EXTRA01 0x0161 // š Small Letter S with caron
  5215. #define KEYCODE_EXTRA01 KEY_3
  5216. #define UNICODE_EXTRA02 0x010D // č Small Letter C with caron
  5217. #define KEYCODE_EXTRA02 KEY_4
  5218. #define UNICODE_EXTRA03 0x0159 // ř Small Letter R with caron
  5219. #define KEYCODE_EXTRA03 KEY_5
  5220. #define UNICODE_EXTRA04 0x017E // ž Small Letter Z with caron
  5221. #define KEYCODE_EXTRA04 KEY_6
  5222. #define UNICODE_EXTRA05 0x016F // ů Small Letter U with ring above
  5223. #define KEYCODE_EXTRA05 KEY_SEMICOLON
  5224. #define UNICODE_EXTRA06 0x0111 // đ Small Letter D with stroke
  5225. #define KEYCODE_EXTRA06 KEY_S + ALTGR_MASK
  5226. #define UNICODE_EXTRA07 0x0110 // Đ Capital Letter D with stroke
  5227. #define KEYCODE_EXTRA07 KEY_D + ALTGR_MASK
  5228. #define UNICODE_EXTRA08 0x0142 // ł Small Letter L with stroke
  5229. #define KEYCODE_EXTRA08 KEY_K + ALTGR_MASK
  5230. #define UNICODE_EXTRA09 0x0141 // Ł Capital Letter L with stroke
  5231. #define KEYCODE_EXTRA09 KEY_L + ALTGR_MASK
  5232. #define UNICODE_EXTRA0A 0x20AC // € Euro Sign
  5233. #define KEYCODE_EXTRA0A KEY_E + ALTGR_MASK
  5234. #endif // LAYOUT_CZECH
  5235. #ifdef LAYOUT_SERBIAN_LATIN_ONLY
  5236. // http://forum.pjrc.com/threads/27032-Serbian-Keyboard-Layout
  5237. #define SHIFT_MASK 0x0040
  5238. #define ALTGR_MASK 0x0080
  5239. #define DEADKEYS_MASK 0x0F00
  5240. #define CEDILLA_BITS 0x0100
  5241. #define CARON_BITS 0x0200
  5242. #define CIRCUMFLEX_BITS 0x0300
  5243. #define BREVE_BITS 0x0400
  5244. #define DEGREE_SIGN_BITS 0x0500
  5245. #define OGONEK_BITS 0x0600
  5246. #define DOT_ABOVE_BITS 0x0700
  5247. #define ACUTE_ACCENT_BITS 0x0800
  5248. #define DOUBLE_ACUTE_BITS 0x0900
  5249. #define DIAERESIS_BITS 0x0A00
  5250. #define KEYCODE_TYPE uint16_t
  5251. #define KEYCODE_MASK 0x0FFF
  5252. #define DEADKEY_CEDILLA KEY_TILDE
  5253. #define DEADKEY_CARON KEY_2 + ALTGR_MASK
  5254. #define DEADKEY_CIRCUMFLEX KEY_3 + ALTGR_MASK
  5255. #define DEADKEY_BREVE KEY_4 + ALTGR_MASK
  5256. #define DEADKEY_DEGREE_SIGN KEY_5 + ALTGR_MASK
  5257. #define DEADKEY_OGONEK KEY_6 + ALTGR_MASK
  5258. #define DEADKEY_DOT_ABOVE KEY_8 + ALTGR_MASK
  5259. #define DEADKEY_ACUTE_ACCENT KEY_9 + ALTGR_MASK
  5260. #define DEADKEY_DOUBLE_ACUTE KEY_0 + ALTGR_MASK
  5261. #define DEADKEY_DIAERESIS KEY_MINUS + ALTGR_MASK
  5262. //#define DEADKEY_CEDILLA KEY_EQUAL + ALTGR_MASK <-- TODO: why are there 2 Cedilla deadkeys?
  5263. #define KEY_NON_US_100 63
  5264. #define ASCII_20 KEY_SPACE // 32
  5265. #define ASCII_21 KEY_1 + SHIFT_MASK // 33 !
  5266. #define ASCII_22 KEY_2 + SHIFT_MASK // 34 "
  5267. #define ASCII_23 KEY_3 + SHIFT_MASK // 35 #
  5268. #define ASCII_24 KEY_4 + SHIFT_MASK // 36 $
  5269. #define ASCII_25 KEY_5 + SHIFT_MASK // 37 %
  5270. #define ASCII_26 KEY_6 + SHIFT_MASK // 38 &
  5271. #define ASCII_27 KEY_MINUS // 39 '
  5272. #define ASCII_28 KEY_8 + SHIFT_MASK // 40 (
  5273. #define ASCII_29 KEY_9 + SHIFT_MASK // 41 )
  5274. #define ASCII_2A KEY_EQUAL + SHIFT_MASK // 42 *
  5275. #define ASCII_2B KEY_EQUAL // 43 +
  5276. #define ASCII_2C KEY_COMMA // 44 ,
  5277. #define ASCII_2D KEY_SLASH // 45 - TODO: verify
  5278. #define ASCII_2E KEY_PERIOD // 46 .
  5279. #define ASCII_2F KEY_7 + SHIFT_MASK // 47 /
  5280. #define ASCII_30 KEY_0 // 48 0
  5281. #define ASCII_31 KEY_1 // 49 1
  5282. #define ASCII_32 KEY_2 // 50 2
  5283. #define ASCII_33 KEY_3 // 51 3
  5284. #define ASCII_34 KEY_4 // 52 4
  5285. #define ASCII_35 KEY_5 // 53 5
  5286. #define ASCII_36 KEY_6 // 54 6
  5287. #define ASCII_37 KEY_7 // 55 7
  5288. #define ASCII_38 KEY_8 // 55 8
  5289. #define ASCII_39 KEY_9 // 57 9
  5290. #define ASCII_3A KEY_PERIOD + SHIFT_MASK // 58 :
  5291. #define ASCII_3B KEY_COMMA + SHIFT_MASK // 59 ;
  5292. #define ASCII_3C KEY_NON_US_100 // 60 <
  5293. #define ASCII_3D KEY_0 + SHIFT_MASK // 61 =
  5294. #define ASCII_3E KEY_NON_US_100 + SHIFT_MASK // 62 >
  5295. #define ASCII_3F KEY_MINUS + SHIFT_MASK // 63 ?
  5296. #define ASCII_40 KEY_V + ALTGR_MASK // 64 @
  5297. #define ASCII_41 KEY_A + SHIFT_MASK // 65 A
  5298. #define ASCII_42 KEY_B + SHIFT_MASK // 66 B
  5299. #define ASCII_43 KEY_C + SHIFT_MASK // 67 C
  5300. #define ASCII_44 KEY_D + SHIFT_MASK // 68 D
  5301. #define ASCII_45 KEY_E + SHIFT_MASK // 69 E
  5302. #define ASCII_46 KEY_F + SHIFT_MASK // 70 F
  5303. #define ASCII_47 KEY_G + SHIFT_MASK // 71 G
  5304. #define ASCII_48 KEY_H + SHIFT_MASK // 72 H
  5305. #define ASCII_49 KEY_I + SHIFT_MASK // 73 I
  5306. #define ASCII_4A KEY_J + SHIFT_MASK // 74 J
  5307. #define ASCII_4B KEY_K + SHIFT_MASK // 75 K
  5308. #define ASCII_4C KEY_L + SHIFT_MASK // 76 L
  5309. #define ASCII_4D KEY_M + SHIFT_MASK // 77 M
  5310. #define ASCII_4E KEY_N + SHIFT_MASK // 78 N
  5311. #define ASCII_4F KEY_O + SHIFT_MASK // 79 O
  5312. #define ASCII_50 KEY_P + SHIFT_MASK // 80 P
  5313. #define ASCII_51 KEY_Q + SHIFT_MASK // 81 Q
  5314. #define ASCII_52 KEY_R + SHIFT_MASK // 82 R
  5315. #define ASCII_53 KEY_S + SHIFT_MASK // 83 S
  5316. #define ASCII_54 KEY_T + SHIFT_MASK // 84 T
  5317. #define ASCII_55 KEY_U + SHIFT_MASK // 85 U
  5318. #define ASCII_56 KEY_V + SHIFT_MASK // 86 V
  5319. #define ASCII_57 KEY_W + SHIFT_MASK // 87 W
  5320. #define ASCII_58 KEY_X + SHIFT_MASK // 88 X
  5321. #define ASCII_59 KEY_Z + SHIFT_MASK // 89 Y
  5322. #define ASCII_5A KEY_Y + SHIFT_MASK // 90 Z
  5323. #define ASCII_5B KEY_F + ALTGR_MASK // 91 [
  5324. #define ASCII_5C KEY_Q + ALTGR_MASK // 92
  5325. #define ASCII_5D KEY_G + ALTGR_MASK // 93 ]
  5326. #define ASCII_5E CIRCUMFLEX_BITS + KEY_SPACE // 94 ^
  5327. #define ASCII_5F KEY_SLASH + SHIFT_MASK // 95 _ TODO: verify
  5328. #define ASCII_60 KEY_7 + ALTGR_MASK // 96 `
  5329. #define ASCII_61 KEY_A // 97 a
  5330. #define ASCII_62 KEY_B // 98 b
  5331. #define ASCII_63 KEY_C // 99 c
  5332. #define ASCII_64 KEY_D // 100 d
  5333. #define ASCII_65 KEY_E // 101 e
  5334. #define ASCII_66 KEY_F // 102 f
  5335. #define ASCII_67 KEY_G // 103 g
  5336. #define ASCII_68 KEY_H // 104 h
  5337. #define ASCII_69 KEY_I // 105 i
  5338. #define ASCII_6A KEY_J // 106 j
  5339. #define ASCII_6B KEY_K // 107 k
  5340. #define ASCII_6C KEY_L // 108 l
  5341. #define ASCII_6D KEY_M // 109 m
  5342. #define ASCII_6E KEY_N // 110 n
  5343. #define ASCII_6F KEY_O // 111 o
  5344. #define ASCII_70 KEY_P // 112 p
  5345. #define ASCII_71 KEY_Q // 113 q
  5346. #define ASCII_72 KEY_R // 114 r
  5347. #define ASCII_73 KEY_S // 115 s
  5348. #define ASCII_74 KEY_T // 116 t
  5349. #define ASCII_75 KEY_U // 117 u
  5350. #define ASCII_76 KEY_V // 118 v
  5351. #define ASCII_77 KEY_W // 119 w
  5352. #define ASCII_78 KEY_X // 120 x
  5353. #define ASCII_79 KEY_Z // 121 y
  5354. #define ASCII_7A KEY_Y // 122 z
  5355. #define ASCII_7B KEY_B + ALTGR_MASK // 123 {
  5356. #define ASCII_7C KEY_W + ALTGR_MASK // 124 |
  5357. #define ASCII_7D KEY_N + ALTGR_MASK // 125 }
  5358. #define ASCII_7E KEY_1 + ALTGR_MASK // 126 ~
  5359. #define ASCII_7F KEY_BACKSPACE // 127
  5360. #define ISO_8859_1_A0 KEY_SPACE // 160 Nonbreakng Space
  5361. #define ISO_8859_1_A1 0 // 161 ¡ Inverted Exclamation
  5362. #define ISO_8859_1_A2 0 // 162 ¢ Cent Sign
  5363. #define ISO_8859_1_A3 0 // 163 £ Pound Sign
  5364. #define ISO_8859_1_A4 KEY_BACKSLASH + ALTGR_MASK // 164 ¤ Currency Sign
  5365. #define ISO_8859_1_A5 0 // 165 ¥ YEN SIGN
  5366. #define ISO_8859_1_A6 0 // 166 ¦ BROKEN BAR
  5367. #define ISO_8859_1_A7 KEY_M + ALTGR_MASK // 167 § SECTION SIGN
  5368. #define ISO_8859_1_A8 DIAERESIS_BITS + KEY_SPACE // 168 ¨ DIAERESIS
  5369. #define ISO_8859_1_A9 0 // 169 © COPYRIGHT SIGN
  5370. #define ISO_8859_1_AA 0 // 170 ª FEMININE ORDINAL
  5371. #define ISO_8859_1_AB 0 // 171 « LEFT DOUBLE ANGLE QUOTE
  5372. #define ISO_8859_1_AC 0 // 172 ¬ NOT SIGN
  5373. #define ISO_8859_1_AD 0 // 173 SOFT HYPHEN
  5374. #define ISO_8859_1_AE 0 // 174 ® REGISTERED SIGN
  5375. #define ISO_8859_1_AF 0 // 175 ¯ MACRON
  5376. #define ISO_8859_1_B0 DEGREE_SIGN_BITS + KEY_SPACE // 176 ° DEGREE SIGN
  5377. #define ISO_8859_1_B1 0 // 177 ± PLUS-MINUS SIGN
  5378. #define ISO_8859_1_B2 0 // 178 ² SUPERSCRIPT TWO
  5379. #define ISO_8859_1_B3 0 // 179 ³ SUPERSCRIPT THREE
  5380. #define ISO_8859_1_B4 ACUTE_ACCENT_BITS + KEY_SPACE // 180 ´ ACUTE ACCENT
  5381. #define ISO_8859_1_B5 0 // 181 µ MICRO SIGN
  5382. #define ISO_8859_1_B6 0 // 182 ¶ PILCROW SIGN
  5383. #define ISO_8859_1_B7 0 // 183 · MIDDLE DOT
  5384. #define ISO_8859_1_B8 CEDILLA_BITS + KEY_SPACE // 184 ¸ CEDILLA
  5385. #define ISO_8859_1_B9 0 // 185 ¹ SUPERSCRIPT ONE
  5386. #define ISO_8859_1_BA 0 // 186 º MASCULINE ORDINAL
  5387. #define ISO_8859_1_BB 0 // 187 » RIGHT DOUBLE ANGLE QUOTE
  5388. #define ISO_8859_1_BC 0 // 188 ¼ FRACTION ONE QUARTER
  5389. #define ISO_8859_1_BD 0 // 189 ½ FRACTION ONE HALF
  5390. #define ISO_8859_1_BE 0 // 190 ¾ FRACTION THREE QUARTERS
  5391. #define ISO_8859_1_BF 0 // 191 ¿ INVERTED QUESTION MARK
  5392. #define ISO_8859_1_C0 0 // 192 À A GRAVE
  5393. #define ISO_8859_1_C1 ACUTE_ACCENT_BITS + KEY_A + SHIFT_MASK // 193 Á A ACUTE
  5394. #define ISO_8859_1_C2 CIRCUMFLEX_BITS + KEY_A + SHIFT_MASK // 194 Â A CIRCUMFLEX
  5395. #define ISO_8859_1_C3 0 // 195 Ã A TILDE
  5396. #define ISO_8859_1_C4 DIAERESIS_BITS + KEY_A + SHIFT_MASK // 196 Ä A DIAERESIS
  5397. #define ISO_8859_1_C5 0 // 197 Å A RING ABOVE
  5398. #define ISO_8859_1_C6 0 // 198 Æ AE
  5399. #define ISO_8859_1_C7 CEDILLA_BITS + KEY_C + SHIFT_MASK // 199 Ç C CEDILLA
  5400. #define ISO_8859_1_C8 0 // 200 È E GRAVE
  5401. #define ISO_8859_1_C9 ACUTE_ACCENT_BITS + KEY_E + SHIFT_MASK // 201 É E ACUTE
  5402. #define ISO_8859_1_CA CIRCUMFLEX_BITS + KEY_E + SHIFT_MASK // 202 Ê E CIRCUMFLEX
  5403. #define ISO_8859_1_CB DIAERESIS_BITS + KEY_E + SHIFT_MASK // 203 Ë E DIAERESIS
  5404. #define ISO_8859_1_CC 0 // 204 Ì I GRAVE
  5405. #define ISO_8859_1_CD ACUTE_ACCENT_BITS + KEY_I + SHIFT_MASK // 205 Í I ACUTE
  5406. #define ISO_8859_1_CE CIRCUMFLEX_BITS + KEY_I + SHIFT_MASK // 206 Î I CIRCUMFLEX
  5407. #define ISO_8859_1_CF DIAERESIS_BITS + KEY_I + SHIFT_MASK // 207 Ï I DIAERESIS
  5408. #define ISO_8859_1_D0 0 // 208 Ð ETH
  5409. #define ISO_8859_1_D1 0 // 209 Ñ N TILDE
  5410. #define ISO_8859_1_D2 0 // 210 Ò O GRAVE
  5411. #define ISO_8859_1_D3 ACUTE_ACCENT_BITS + KEY_O + SHIFT_MASK // 211 Ó O ACUTE
  5412. #define ISO_8859_1_D4 CIRCUMFLEX_BITS + KEY_O + SHIFT_MASK // 212 Ô O CIRCUMFLEX
  5413. #define ISO_8859_1_D5 0 // 213 Õ O TILDE
  5414. #define ISO_8859_1_D6 DIAERESIS_BITS + KEY_O + SHIFT_MASK // 214 Ö O DIAERESIS
  5415. #define ISO_8859_1_D7 KEY_RIGHT_BRACE + ALTGR_MASK // 215 × MULTIPLICATION
  5416. #define ISO_8859_1_D8 0 // 216 Ø O STROKE
  5417. #define ISO_8859_1_D9 0 // 217 Ù U GRAVE
  5418. #define ISO_8859_1_DA ACUTE_ACCENT_BITS + KEY_U + SHIFT_MASK // 218 Ú U ACUTE
  5419. #define ISO_8859_1_DB CIRCUMFLEX_BITS + KEY_U + SHIFT_MASK // 219 Û U CIRCUMFLEX
  5420. #define ISO_8859_1_DC DIAERESIS_BITS + KEY_U + SHIFT_MASK // 220 Ü U DIAERESIS
  5421. #define ISO_8859_1_DD ACUTE_ACCENT_BITS + KEY_Z + SHIFT_MASK // 221 Ý Y ACUTE
  5422. #define ISO_8859_1_DE 0 // 222 Þ THORN
  5423. #define ISO_8859_1_DF KEY_QUOTE + ALTGR_MASK // 223 ß SHARP S
  5424. #define ISO_8859_1_E0 0 // 224 à a GRAVE
  5425. #define ISO_8859_1_E1 ACUTE_ACCENT_BITS + KEY_A // 225 á a ACUTE
  5426. #define ISO_8859_1_E2 CIRCUMFLEX_BITS + KEY_A // 226 â a CIRCUMFLEX
  5427. #define ISO_8859_1_E3 0 // 227 ã a TILDE
  5428. #define ISO_8859_1_E4 DIAERESIS_BITS + KEY_A // 228 ä a DIAERESIS
  5429. #define ISO_8859_1_E5 0 // 229 å a RING ABOVE
  5430. #define ISO_8859_1_E6 0 // 230 æ ae
  5431. #define ISO_8859_1_E7 CEDILLA_BITS + KEY_C // 231 ç c CEDILLA
  5432. #define ISO_8859_1_E8 0 // 232 è e GRAVE
  5433. #define ISO_8859_1_E9 ACUTE_ACCENT_BITS + KEY_E // 233 é e ACUTE
  5434. #define ISO_8859_1_EA CIRCUMFLEX_BITS + KEY_E // 234 ê e CIRCUMFLEX
  5435. #define ISO_8859_1_EB DIAERESIS_BITS + KEY_E // 235 ë e DIAERESIS
  5436. #define ISO_8859_1_EC 0 // 236 ì i GRAVE
  5437. #define ISO_8859_1_ED ACUTE_ACCENT_BITS + KEY_I // 237 í i ACUTE
  5438. #define ISO_8859_1_EE CIRCUMFLEX_BITS + KEY_I // 238 î i CIRCUMFLEX
  5439. #define ISO_8859_1_EF DIAERESIS_BITS + KEY_I // 239 ï i DIAERESIS
  5440. #define ISO_8859_1_F0 0 // 240 ð ETH
  5441. #define ISO_8859_1_F1 0 // 241 ñ n TILDE
  5442. #define ISO_8859_1_F2 0 // 242 ò o GRAVE
  5443. #define ISO_8859_1_F3 ACUTE_ACCENT_BITS + KEY_O // 243 ó o ACUTE
  5444. #define ISO_8859_1_F4 CIRCUMFLEX_BITS + KEY_O // 244 ô o CIRCUMFLEX
  5445. #define ISO_8859_1_F5 0 // 245 õ o TILDE
  5446. #define ISO_8859_1_F6 DIAERESIS_BITS + KEY_O // 246 ö o DIAERESIS
  5447. #define ISO_8859_1_F7 KEY_LEFT_BRACE + ALTGR_MASK // 247 ÷ DIVISION
  5448. #define ISO_8859_1_F8 0 // 248 ø o STROKE
  5449. #define ISO_8859_1_F9 0 // 249 ù u GRAVE
  5450. #define ISO_8859_1_FA ACUTE_ACCENT_BITS + KEY_U // 250 ú u ACUTE
  5451. #define ISO_8859_1_FB CIRCUMFLEX_BITS + KEY_U // 251 û u CIRCUMFLEX
  5452. #define ISO_8859_1_FC DIAERESIS_BITS + KEY_U // 252 ü u DIAERESIS
  5453. #define ISO_8859_1_FD ACUTE_ACCENT_BITS + KEY_Z // 253 ý y ACUTE
  5454. #define ISO_8859_1_FE 0 // 254 þ THORN
  5455. #define ISO_8859_1_FF 0 // 255 ÿ y DIAERESIS
  5456. #define UNICODE_20AC KEY_E + ALTGR_MASK // € Euro Sign
  5457. #define UNICODE_EXTRA00 0x0160 // S caron
  5458. #define KEYCODE_EXTRA00 KEY_LEFT_BRACE + SHIFT_MASK
  5459. #define UNICODE_EXTRA01 0x0161 // s caron
  5460. #define KEYCODE_EXTRA01 KEY_LEFT_BRACE
  5461. #define UNICODE_EXTRA02 0x0110 // D with stroke
  5462. #define KEYCODE_EXTRA02 KEY_RIGHT_BRACE + SHIFT_MASK
  5463. #define UNICODE_EXTRA03 0x0111 // d with stroke
  5464. #define KEYCODE_EXTRA03 KEY_RIGHT_BRACE
  5465. #define UNICODE_EXTRA04 0x010C // C with caron
  5466. #define KEYCODE_EXTRA04 KEY_SEMICOLON + SHIFT_MASK
  5467. #define UNICODE_EXTRA05 0x010D // c with caron
  5468. #define KEYCODE_EXTRA05 KEY_SEMICOLON
  5469. #define UNICODE_EXTRA06 0x0106 // C with acute
  5470. #define KEYCODE_EXTRA06 KEY_QUOTE + SHIFT_MASK
  5471. #define UNICODE_EXTRA07 0x0107 // c with acute
  5472. #define KEYCODE_EXTRA07 KEY_QUOTE
  5473. #define UNICODE_EXTRA08 0x017D // Z with caron
  5474. #define KEYCODE_EXTRA08 KEY_BACKSLASH + SHIFT_MASK
  5475. #define UNICODE_EXTRA09 0x017E // z with caron
  5476. #define KEYCODE_EXTRA09 KEY_BACKSLASH
  5477. #define UNICODE_EXTRA10 0x0141 // L with stroke
  5478. #define KEYCODE_EXTRA10 KEY_L + ALTGR_MASK
  5479. #define UNICODE_EXTRA11 0x0142 // l with stroke
  5480. #define KEYCODE_EXTRA11 KEY_K + ALTGR_MASK
  5481. #define UNICODE_EXTRA12 0x010E // D with caron
  5482. #define KEYCODE_EXTRA12 CARON_BITS + KEY_D + SHIFT_MASK
  5483. #define UNICODE_EXTRA13 0x010F // d with caron
  5484. #define KEYCODE_EXTRA13 CARON_BITS + KEY_D
  5485. #define UNICODE_EXTRA14 0x011A // E with caron
  5486. #define KEYCODE_EXTRA14 CARON_BITS + KEY_E + SHIFT_MASK
  5487. #define UNICODE_EXTRA15 0x011B // e with caron
  5488. #define KEYCODE_EXTRA15 CARON_BITS + KEY_E
  5489. #define UNICODE_EXTRA16 0x013D // L with caron
  5490. #define KEYCODE_EXTRA16 CARON_BITS + KEY_L + SHIFT_MASK
  5491. #define UNICODE_EXTRA17 0x013E // l with caron
  5492. #define KEYCODE_EXTRA17 CARON_BITS + KEY_L
  5493. #define UNICODE_EXTRA18 0x0147 // N with caron
  5494. #define KEYCODE_EXTRA18 CARON_BITS + KEY_N + SHIFT_MASK
  5495. #define UNICODE_EXTRA19 0x0148 // n with caron
  5496. #define KEYCODE_EXTRA19 CARON_BITS + KEY_N
  5497. #define UNICODE_EXTRA20 0x0158 // R with caron
  5498. #define KEYCODE_EXTRA20 CARON_BITS + KEY_R + SHIFT_MASK
  5499. #define UNICODE_EXTRA21 0x0159 // r with caron
  5500. #define KEYCODE_EXTRA21 CARON_BITS + KEY_R
  5501. #define UNICODE_EXTRA22 0x0164 // T with caron
  5502. #define KEYCODE_EXTRA22 CARON_BITS + KEY_T + SHIFT_MASK
  5503. #define UNICODE_EXTRA23 0x0165 // t with caron
  5504. #define KEYCODE_EXTRA23 CARON_BITS + KEY_T
  5505. #define UNICODE_EXTRA24 0x0102 // A with breve
  5506. #define KEYCODE_EXTRA24 BREVE_BITS + KEY_A + SHIFT_MASK
  5507. #define UNICODE_EXTRA25 0x0103 // a with breve
  5508. #define KEYCODE_EXTRA25 BREVE_BITS + KEY_A
  5509. #define UNICODE_EXTRA26 0x016E // U with ring above TODO: verify
  5510. #define KEYCODE_EXTRA26 DEADKEY_DEGREE_SIGN + KEY_U + SHIFT_MASK
  5511. #define UNICODE_EXTRA27 0x016F // u with ring above TODO: verify
  5512. #define KEYCODE_EXTRA27 DEADKEY_DEGREE_SIGN + KEY_U
  5513. #define UNICODE_EXTRA28 0x0104 // A with ogonek
  5514. #define KEYCODE_EXTRA28 OGONEK_BITS + KEY_A + SHIFT_MASK
  5515. #define UNICODE_EXTRA29 0x0105 // a with ogonek
  5516. #define KEYCODE_EXTRA29 OGONEK_BITS + KEY_A
  5517. #define UNICODE_EXTRA30 0x0118 // E with ogonek
  5518. #define KEYCODE_EXTRA30 OGONEK_BITS + KEY_E + SHIFT_MASK
  5519. #define UNICODE_EXTRA31 0x0119 // e with ogonek
  5520. #define KEYCODE_EXTRA31 OGONEK_BITS + KEY_E
  5521. #define UNICODE_EXTRA32 0x017B // Z with dot above
  5522. #define KEYCODE_EXTRA32 DEADKEY_DOT_ABOVE + KEY_Z + SHIFT_MASK
  5523. #define UNICODE_EXTRA33 0x017C // z with dot above
  5524. #define KEYCODE_EXTRA33 DEADKEY_DOT_ABOVE + KEY_Z
  5525. #define UNICODE_EXTRA34 0x0139 // L with acute
  5526. #define KEYCODE_EXTRA34 ACUTE_ACCENT_BITS + KEY_L + SHIFT_MASK
  5527. #define UNICODE_EXTRA35 0x013A // l with acute
  5528. #define KEYCODE_EXTRA35 ACUTE_ACCENT_BITS + KEY_L
  5529. #define UNICODE_EXTRA36 0x0143 // N with acute
  5530. #define KEYCODE_EXTRA36 ACUTE_ACCENT_BITS + KEY_N + SHIFT_MASK
  5531. #define UNICODE_EXTRA37 0x0144 // n with acute
  5532. #define KEYCODE_EXTRA37 ACUTE_ACCENT_BITS + KEY_N
  5533. #define UNICODE_EXTRA38 0x0154 // R with acute
  5534. #define KEYCODE_EXTRA38 ACUTE_ACCENT_BITS + KEY_R + SHIFT_MASK
  5535. #define UNICODE_EXTRA39 0x0155 // r with acute
  5536. #define KEYCODE_EXTRA39 ACUTE_ACCENT_BITS + KEY_R
  5537. #define UNICODE_EXTRA40 0x015A // S with acute
  5538. #define KEYCODE_EXTRA40 ACUTE_ACCENT_BITS + KEY_S + SHIFT_MASK
  5539. #define UNICODE_EXTRA41 0x015B // s with acute
  5540. #define KEYCODE_EXTRA41 ACUTE_ACCENT_BITS + KEY_S
  5541. #define UNICODE_EXTRA42 0x0179 // Z with acute
  5542. #define KEYCODE_EXTRA42 ACUTE_ACCENT_BITS + KEY_Z + SHIFT_MASK
  5543. #define UNICODE_EXTRA43 0x017A // z with acute
  5544. #define KEYCODE_EXTRA43 ACUTE_ACCENT_BITS + KEY_Z
  5545. #define UNICODE_EXTRA44 0x0150 // O with double acute
  5546. #define KEYCODE_EXTRA44 DOUBLE_ACUTE_BITS + KEY_O + SHIFT_MASK
  5547. #define UNICODE_EXTRA45 0x0151 // o with double acute
  5548. #define KEYCODE_EXTRA45 DOUBLE_ACUTE_BITS + KEY_O
  5549. #define UNICODE_EXTRA46 0x0170 // U with double acute
  5550. #define KEYCODE_EXTRA46 DOUBLE_ACUTE_BITS + KEY_u + SHIFT_MASK
  5551. #define UNICODE_EXTRA47 0x0171 // u with double acute
  5552. #define KEYCODE_EXTRA47 DOUBLE_ACUTE_BITS + KEY_u
  5553. #define UNICODE_EXTRA48 0x015E // S with cedilla
  5554. #define KEYCODE_EXTRA48 CEDILLA_BITS + KEY_S + SHIFT_MASK
  5555. #define UNICODE_EXTRA49 0x015F // s with cedilla
  5556. #define KEYCODE_EXTRA49 CEDILLA_BITS + KEY_S
  5557. #define UNICODE_EXTRA50 0x201A // single low quote
  5558. #define KEYCODE_EXTRA50 KEY_TILDE
  5559. #define UNICODE_EXTRA51 0x20AC // euro sign
  5560. #define KEYCODE_EXTRA51 KEY_E + ALTGR_MASK
  5561. #endif // LAYOUT_SERBIAN_LATIN_ONLY
  5562. extern const KEYCODE_TYPE keycodes_ascii[];
  5563. extern const KEYCODE_TYPE keycodes_iso_8859_1[];
  5564. #ifdef __cplusplus
  5565. } // extern "C"
  5566. #endif
  5567. #endif