You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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