Teensy 4.1 core updated for C++20
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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