netsurf: branch tlsa/shared-styles updated. release/3.3-224-gb70c609
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/b70c6091db84297432284...
...commit http://git.netsurf-browser.org/netsurf.git/commit/b70c6091db8429743228425...
...tree http://git.netsurf-browser.org/netsurf.git/tree/b70c6091db84297432284250f...
The branch, tlsa/shared-styles has been updated
discards f8ef27700ad6c81bcbda68576b473042d2dae015 (commit)
discards a791958074e8add1854fd0ac239c1815628e0fa0 (commit)
discards 5e82d6eb26cc48b0918b43cd4137ced288df759f (commit)
discards 1e65ced54d91078ef5ce5d2471b5eae1cf7dff4d (commit)
discards c682d2663580bf75832334b0a3c749f823b03929 (commit)
discards 44894cf59b74655e674f94c021c22a6d71dacace (commit)
discards bd7df34709f5a5b30d0c6e1bfc0fb9d38e85c48e (commit)
discards 593ae2ab651bbe5634d2bd074c4cf68a02f91b2b (commit)
discards 921d04ee7a0d371ccbc7e8f65c6a88fe40b864a3 (commit)
discards e902491fbda55e1055a30b6aaa2a745e70128fb8 (commit)
discards 692849809d15f3b9ee221c1404814c79e3085b86 (commit)
discards b3c85c0082d34a5a66593fa1b96b19bdf22d0a9d (commit)
discards 507a35263a79078e1040bbee5fac9ad5df13d856 (commit)
discards e02df83bf8fc4f16e6b9d22c2d4f352255e2f0b5 (commit)
discards ecf9ca4f17bc5bcfbec477bbeb5f2216c0d9e887 (commit)
discards 194d689d7a7633eb03bff2187598eaecee7455c1 (commit)
discards e9e93446a634804f62d35d29af41228ed16ddb92 (commit)
discards 7bdc8b0026881bb673d3d02199619da6459b5963 (commit)
discards 982c7c1a89809ae5532b3c22bbaafe3239f912d1 (commit)
discards 8ec2deebf3e4fbe372e9b2e27b80bc6d16d3914e (commit)
discards 4a036bc1526394e647804c70ebe505c6f7920305 (commit)
discards d4a57599482e602351e06ab2c41460b9d87fde34 (commit)
discards 318a76145b008c7f1e7a64ec74b3d7077857755d (commit)
discards 39f2986dfdefc3d7e7350271c462eaff034737ea (commit)
discards 8a4001d597d1df55815baaa4d10ad505566d3802 (commit)
discards c5b01b92952c0d961f021c08d88d53e0cbc882f3 (commit)
discards 03bc8ce1f72ae7021b40441ccc8da35b187ea5f8 (commit)
discards e33e75412fd3f72eb8a691d0ac8c0272d93750ce (commit)
discards dada157cec7d580eeb940125f79fae72eb49dc36 (commit)
discards de43e45f546e06dd611d1223b2b16254e3929039 (commit)
discards 5244fce5d608c6e7077e22df742cee71240f96c7 (commit)
discards 8fded9c2fcba89b41e0c30f805bf1de989db118b (commit)
discards 09cbc610a69997dc07df4117744f4155d526595f (commit)
discards 5a68ea700251705670a3d55391015227b830ed2e (commit)
discards a3cab859c32b0446020ae581192a57283e9d424a (commit)
discards f99796e74ec17d179170bafea7369e10fee2a53f (commit)
discards 81ccc7a6b99bd5043a54da5d559f81866690046a (commit)
discards 345b8882bd012f829c59aa1ba384aff1d9cc50ea (commit)
discards 396d9f9330a1dbce35e65a703c0ce6defa64ae8d (commit)
discards 7555fd16164ecaf40fb8205687b68ec1b0af9dee (commit)
discards 7e653df2da1de6a5c5c6d05d3b5b74647f7ab010 (commit)
discards fdb067f070d89a7b29f4bee85da10d2b10cdec18 (commit)
discards 620a6d6f62616c58a4a5c9f683644d091f1a1d6c (commit)
discards dd77f10c9067c014aa25df982af753aaf768a446 (commit)
discards ea4c24585714c78cec39247136fb28efb25403d0 (commit)
discards 699efe4af230dba239daa7f3508b4879b56e499c (commit)
discards 0bb0702772a9ef19d885c5ae9d993ba52f01860b (commit)
discards b2bfc72ce053335ed59a7d45589cfe2eeb904691 (commit)
discards 2a88a1d54f9fbd3c01630113dae047bdea19042f (commit)
discards b1b84b136e851396f6ee874c613a52b63d71321b (commit)
discards c3bda91930d68312ab95e1f79192091e596f3e24 (commit)
discards dedc01229017973a3b64cc51e084a92c36482f22 (commit)
discards cf8cee758191550b212db128596c7700a237f46b (commit)
discards b2067302a36c3c1679795fb20d8106313e995b37 (commit)
discards 297cca0e6046fc481ccdeee870b11cfaa8896d0b (commit)
discards 33630b924406a4397beebca47b0ba4945c3633a9 (commit)
discards 99f93b5561d2c6407376610a544da2e4c7bd3a0c (commit)
discards 1f6c4e91b260be6cae01e01c738ffa9d3e9f2239 (commit)
discards 4f1f23c492fd484c15c3c8749514730abe932f26 (commit)
discards 83568586608c952a5466fa50b9ee75de901f0dff (commit)
discards a5a8b29d7db91758104cd41852535790a9672490 (commit)
discards 424aff83908e2bd14ca669e145c8bc049787d5fb (commit)
discards 1130cb3edaa5ff2e4884f1731c30619fb71a7ab2 (commit)
discards 479ccecc39aabc42c6c24a91ad1899b2bcebc112 (commit)
discards 6b562418649b228d1a7aa4e97b7b8678ae42af49 (commit)
discards 0bdd853e18d470f875d9fa1b42d0fed30f6319ea (commit)
discards d44716f14d67accf8a312c640fc1f8faa11ebf20 (commit)
discards 9ef309aabb4cbeed8fa16e1d7e27435122eadf61 (commit)
discards d86ad0a75aed28a7fcd63a257c9a19ba8037cbd7 (commit)
discards 206e82746a183ff3d4280a72a6325094ea4a7033 (commit)
discards 315d38112d701ead29235767a7e699a6e6d6c742 (commit)
discards 5ca8a3183d98f3498abf8d62cfa4dc50815a2602 (commit)
discards c819ff3af052363bb114f202e18362ceab9a1149 (commit)
discards 90cacd8d6c8a2eec2609f58d84e802745fed12ce (commit)
discards 4393f98e2542019b8682998e824860cbb1581c81 (commit)
discards 7705babc4761c494afd424cc1c5526532d49db64 (commit)
discards 8cd99f063c248b89bf916761465993d21944504d (commit)
discards 9c8dffc8b938dc6816e7a18fb35bc9973f56802f (commit)
discards 3d981ca4f159ce0f03a2212e33a5432f6e142bbe (commit)
discards 0035baa71eec9c5ecfad8ba0fb1bab3a1c1f4222 (commit)
discards 26922986619556817c87bc53fad98ff472812172 (commit)
discards 6c89b8b5d379cccd786f2660812f264ff56e00f7 (commit)
discards c5fa3ad4f67251e14094a59341606eed1392c33b (commit)
discards 8a08b3d1039393e7029184261361a1d31fed022d (commit)
discards 167a0aa86d9441b9f3bebdf164dc52b9160a8892 (commit)
discards f1f8ea4e1257f863007f124a268575e03744593d (commit)
discards 5c25c8a41cb6e747b1043acb344d70265483a736 (commit)
discards 4b05b46e07e255c01b9edf599e2c1dbf1095af5d (commit)
discards 39cd3c9d6e72ed7a8028ca245dd7794eeb290ad4 (commit)
discards 8f5ea2b2467f0f5e0a4d83e18bfa10ca40b97097 (commit)
discards 7e03a6be4cafb1dbf7e065f9f90e7ff1fea50ebe (commit)
discards f02cfe98e60533a0f313fa941043682fc7328f09 (commit)
discards e4a88db5e266c051081e5ea1f87e4bcd39749e4a (commit)
discards 84a02e6edd4f16a58c9d257e33c705e678476904 (commit)
discards d9b91309af22726d5e152f81618a2ba35eedbcc7 (commit)
discards 72c58a61387d41d3cc7568b84d986f9d82d051c9 (commit)
discards 9a74dbbc9e81959c7c6d79b67ccf451c3cf28b11 (commit)
discards c55bd5ec281d03844c02de26ae28fa7591cf39a2 (commit)
discards b7e774584b299c03a13338c420325a386f214c2d (commit)
discards fc585896ba06d3d6263bccde27860f7f67370a83 (commit)
discards aa5f9228d55a3e1fadb82d8203dc63ffe4c2fa63 (commit)
discards 7c83d9d1b1c3dd747613a8fb4efa4e92405df989 (commit)
discards 31f6420912d43a4bf98e976573907870f88dabf5 (commit)
discards a3588c5432025504f111ccf63b58f44b5701a125 (commit)
discards 06e1551d43ed92e6b90a3fa17a89e26b741f5c39 (commit)
discards 0a7caca5927b4f0048175fdb278178f12b4b3417 (commit)
discards e0bfd32eafff3e84cdc1182253b1d06cd21bcdf0 (commit)
discards 393b74c1092e2570cb5cf7fc6a1c192e84ec3247 (commit)
discards 7a4968271ac7ad771b9651a851eb0149a39f94c4 (commit)
discards 6d8bcc19f57fc330946096eecfd55fa7e638c736 (commit)
discards 50da773237193b983a816b5b06bf07645f270ec9 (commit)
discards 4c07989dfaad4e645e83e676414c4da7ab938f9a (commit)
discards 698084b94b0c2f22794fe3f4ee6fd2593390eab3 (commit)
discards c5ce2e585819a56d8142f378c6f344c8071efdc1 (commit)
discards 5c59c956bdc5b7d9d33713654c9ebb2d5effe6c7 (commit)
discards db13e7df23fdd33fa1d65392abb55f4a61764cdd (commit)
discards a9124f3b4af1d154be3d561a2e460282df81d95f (commit)
discards e032d6ea2f395184cafa6879aacf5a8a2c7221bd (commit)
discards d6215cb8d2306771aeaf3b3a1c79a818ab755d4a (commit)
discards fce1a9315c656d95f2b37679f8f36d8bc4231046 (commit)
discards 54e01650acfa07584f7d5f9027ec4fa8c90a8f62 (commit)
discards 8e1e5128d253d6a7f761505606dab2b3cd8a013f (commit)
discards 531f9a26d9c50de023e3901fa27aeefe7682f984 (commit)
discards c8477099e45c13c607c27985feb146defc936f6a (commit)
discards f852dda753d540c5d98796eed6ea83e3fe64597f (commit)
discards 231a5f958e1f9e7d7196f50224397197eba91c03 (commit)
discards ececb694df747744c9f3a3bb22eb89c3370224a1 (commit)
discards 10738e05f95439bce34ade26ed5a98dea4a4dcb3 (commit)
discards e951363f6c6282963d3a9fbc830f62dab7395424 (commit)
discards ab82f36cc88f15948ff8dcfe9849f3e3da9b93fa (commit)
discards ae99d6f6a67ddf29710d9240271d7494cb1fd861 (commit)
discards ded62db025b8b52c164e12591253334728658330 (commit)
discards 725139c50e97e3906f3915c6921f3f56c903da0c (commit)
discards adaae46bca823b3fb234fff74f82f9ac03813f0d (commit)
discards f765d4254cde3dd46518c4b76eeb484913e86da1 (commit)
discards 973b398af54021d3a2c43a40cec13c78f41f2818 (commit)
discards c51375f0888a77a29aaa4c4d43b50a38d3139ff8 (commit)
discards 321bef3146bbc5b41e2a4561251805b5bb677206 (commit)
discards 17383f05e4940006445dc04dd7910682ee7b2ed6 (commit)
discards f1d87d2cf6707686b0d06463ae99df2490a41207 (commit)
via b70c6091db84297432284250f024a118e3cc5241 (commit)
via 44394257a8548dd6faf90661b901a826a35af20d (commit)
via 9b4e3a05288e7a5e96a22cffa5687c9abc6af883 (commit)
via 1b1b726456789566734ecaea6c85735c7b2c31a7 (commit)
via f5c48695a21298dc84fd6f3ba23e8255e3338f4c (commit)
via 22023d616a57286cb9d99489957489ba103e07c0 (commit)
via e5ff82ff529b66a278c4489a7ef107000b0eb540 (commit)
via 2e7b69be0a7e2000f2a40c0607f1def6c9c92ca1 (commit)
via 94b5c956766a3f1ee916f2bb946c3d9273c90ae1 (commit)
via 7b2d15a036bf4ef67eb88cfee23272d564c4a766 (commit)
via 5b09363597d9586ec421817459efe8a242c953c8 (commit)
via cd1949bc964d2b1846f9745d914213548217d2e1 (commit)
via eb962f94c3247c6b64802f12197ac9567315f371 (commit)
via 433f47641e501d30f55c55cb0a17c0397a35fd14 (commit)
via 6f1ed5979d9c2d775fedaa4d5defb9b1ea18f178 (commit)
via be879ad526abb72423866f63d0c4ac93ed92f886 (commit)
via cb3f267d4562c0a23ebf16b758e421d77c0dc51c (commit)
via 8756793079c653e788f5932fc1d70cb35681cfc4 (commit)
via bd802e763e5c035817a62114b957ed6778ad491f (commit)
via ccfc2aeefa87400d506a59799933ad591e7d92ca (commit)
via c38670ade8c664fa511cebb4b5d2950b12e7bf81 (commit)
via 8282f53880877f84b1fce05c5529e8994abcb690 (commit)
via bc3534d920f07bd30ca9281ea7f2ea3aa0767901 (commit)
via 7459d4dc93f449ad8fcf98e5fd5e0f33d857703d (commit)
via 8e26870e15b46db20634fdef4815e6acdc8beb4b (commit)
via ccac30117601f6773c65a07a9f34aab76dbe6fc0 (commit)
via 123c8bc8b3d621d0e259ae9ce99ebe753036ac0b (commit)
via 7736a611a2c9d13d697cfc8bc83f9dddbb99138c (commit)
via 55260cc9a06e7d62c5d242c4420ab5e5474242b0 (commit)
via 65ef60d2b5ac0a39a14538b8abab5cdd9da6fad6 (commit)
via b208c60dddc639cfce3333f39ca542f34777407a (commit)
via 1c5a5207fb2056b58be7a27a5135f39228702260 (commit)
via 796ac470b5e86e185ebfcd9b5d3f1a8686b7662f (commit)
via 822e3a8fd05466df1ddd9450374e8d0aaeb7f272 (commit)
via 73e45ff0246c2624b890bbbec0367eb1c450eec3 (commit)
via 5bd7606103182a824b530a24a1f4753e04c145ec (commit)
via ee74f9ac8cacc89a1f8a94f63feac662bb13cbad (commit)
via 11dc7304d96a2ac3e2ac346e3cb6236f8e14225b (commit)
via 3160f9fd898720aba47e726a4b50910c92acd36e (commit)
via 354de433e9b9599a46952cbddfb0e53f1e9f37e6 (commit)
via 73d6b47e6a4152cd0fe7dd6b9651701ef2a47609 (commit)
via 2522ecf714cb8c238756119bbaf5749527c1ae85 (commit)
via 83f77d3a411019c3fb861d0feb1a91222b7819f8 (commit)
via 51a92fbd844b9ae4a102452a9bccf0d1af48a004 (commit)
via c08bccbcea4e907836234279fd964dd1baa4fd4d (commit)
via a94ae7a80a9d96c4aa88995412ea26feafa69f3b (commit)
via 67ded2a02a4f3f4d2a0ab156f3343dc93f4ba04c (commit)
via 335bbe4f52b9fdb74e377b83906eaab4456666cf (commit)
via 9ccf0cee9f4c070146a225fc633591436b1a88eb (commit)
via 010306e1ad48c66650bff68ec0e4e485f6518a65 (commit)
via fcadb1f6f884dac4191090175655602ed5117127 (commit)
via 451b021c36bff36a388d493b740f7069e3235371 (commit)
via 57ca8bbd21346ad46950ea279743b1064b684aab (commit)
via fbbb6d664d2cf1549fb64a980dd829be0553aa12 (commit)
via 8aa04c24473947e2d2496bca1ca17275aee549dc (commit)
via 9c6b3e8c32991ac8436afcf8016268eeb8ef24c3 (commit)
via e1bbe4528b479881a1912f96f3160ab6e2fbb2ec (commit)
via e9b89f776db705ee4403a2235ec21aabab12c8f6 (commit)
via be7a45fefed2736f7ed7f1799e9f2b1cd52235b7 (commit)
via 3e2270482f73528949746fc24a01d0f0c01baee8 (commit)
via 59fbd51a77a684c15b189f666e4359bfd820f627 (commit)
via 61fdc8fd6ffd24abf007598e33cde58fee2b9a83 (commit)
via 8ef292b9caf5cae2197493a87480723138f10344 (commit)
via 16fbb97dbb1688fd9b6f19546792b4173bc30bf1 (commit)
via 3db1e7381ab5cf31f1d47f5aa61ad85e3eafa494 (commit)
via d8ce401591add1d03dcee8da63f00ecc07172f16 (commit)
via c4d5393a972bb7ed276ce4bc5c92ba825d0a33f5 (commit)
via c8ae7446806d5f329b844a098109e83e347e16ce (commit)
via b62fad759a07ee8a652d69147682508647094fdc (commit)
via 51c5f7f142ef7afe396541da9397cb7f87af73e0 (commit)
via 25d7f0c6575f78cd361dcad9b33f889f6d9dd182 (commit)
via faf9b9d9196285d42bb106426b77e84baf3bfd6e (commit)
via 4324bf535f4e65561bd48d78032edd4455f1579a (commit)
via 20d29c0537385ed4456e242a792784fc33344f3a (commit)
via 0d811963c1498aa625b5438bf66dbb677a0d4494 (commit)
via 30c2962faa0c31d70b91993ccd9c2f3f8f298810 (commit)
via c105738fa36bb2400adc47399c5b878d252d1c86 (commit)
via 20f2c86a511f7913cf858e7bd3668b0b59663ba0 (commit)
via a098626ff1c87726551419448c8b01b05aff20b9 (commit)
via a29e9589f6bd54e258805bef367528a18d7b0c2b (commit)
via 8f1c9673d72faf3c09de1adee509d52b80f43d22 (commit)
via 82237d7070b6b82620a2b4255608a23539f19dec (commit)
via d038af317888dc6c14381230eb2927b4231ff52c (commit)
via 37aad9c749892219a303734581fae887ee074d22 (commit)
via 2c51dabfeb8f48c4fc1280ae02ae56cd246045c5 (commit)
via 2092ab252f8526453930e1b5b4d9cb3a169af9e0 (commit)
via 35751f3faab45f6cedc9249822dbcf1ad508ba8e (commit)
via 31f8c363beb1e3198964884b28b91139462d10aa (commit)
via a375e58bb872feea4773a8791d68fbd6303a7000 (commit)
via 7e6b86eb1ad6096d48bd7ddb10b827335293ec6c (commit)
via 3020dd698d7e8e57a2b977dc31a3f779017834f9 (commit)
via a14b689b7aebe990e99727bca911d488f04f69b9 (commit)
via 408e818cbeaf32d3e5fddc6c6110b4caf06098d5 (commit)
via f6dde27dd2aa11c5ac4ebe2e8c51ce9b1fcea79d (commit)
via 3c129b32212dfe1737cf7e30f041f5ac2b6f322d (commit)
via 2aef095f27e55600f6cbdf6f3d4c4f1fe584f07b (commit)
via 05538c0264db8ba117248f481e769f62969dc82b (commit)
via c6a6c8e7faa9165d5337e61c6bd331071367cec0 (commit)
via 55f8a41cfe2e5570c62e94d42e5f579daec31e4b (commit)
via 7bc29f778280c8b4138206313774f5c589a8da4e (commit)
via ad779dc38a90b2dd243fa20fe4c504ae21985999 (commit)
via 3cabd331ee1b638b02334155f831a8715fea399a (commit)
via e64d48980e38448eeb83daa8659788d48f845692 (commit)
via b879bed11461095d589ec078757ba47fabf1a380 (commit)
via c8caf08ef16297379754d4a70e80cef3a0fde820 (commit)
via 5b5e621c7ac1bedc8c153b8ab99d47224b537497 (commit)
via 9729febf7245431e80f4fe0acfba212db08e770d (commit)
via 75d3fdc42e4b92f73efa93271c4bb37b1be6a650 (commit)
via 596a62e20ea45f8c78b58b32860e0254f9f0f16a (commit)
via 2df03e2d85e061ad2c787e849d4b0a19a560be32 (commit)
via 217aa3adc121e55d996d0ab9669cba71fe0b7a40 (commit)
via 818b8276df618bd9dbc32e915e58a69e55d95801 (commit)
via 124de5775a3a469d797a805ebe1f97312f7e1a0c (commit)
via 4e7dcde2b056c16a96dde6adcadb29a65ca72fde (commit)
via 1a22eb2b658215ccb1d5281a4b30a2055fe6b8f6 (commit)
via 7e2f1094ce8d527c07e06dea164d7647d6605a4f (commit)
via ee78742363632583f283d0187d6b464284636f43 (commit)
via 8ccbc960d354e55d6fc18df9a4e44e05e1c18a39 (commit)
via 921f15bb7d543390cfbd19cea9e30b527e7f6c28 (commit)
via 98171fae629aa0459faaf274f77c4049e3e74f92 (commit)
via ea2e1c4d987421ff8b96a098566c6bd24bac3bef (commit)
via 69776768d2e6fe20bf2346d164e37420f553a2d7 (commit)
via de98108e7f5dde136164a6e74596d70fd1289397 (commit)
via df3a8894357444704ec6c72df2dd3b2161e3f4c7 (commit)
via e7f9dbcb10594a46c559d0ae7c7ed26ede8af9a2 (commit)
via 19abe9bddfaeba06222ded85ca1e3430c4414354 (commit)
via eab53da088c16449243218a527ba142a9677d93d (commit)
via 1c9c303df886c073970982b78b2308f180f9cb9d (commit)
via 1c3211c50fa189249968d6d69eade889c9fd2069 (commit)
via 2016628e8e20b64dbd9b980b8d11084e11c7cc3a (commit)
via 8f41764268032d4286ede2d27f1bf106effc99f8 (commit)
via 10f621441f29c1f4e8b612e57f3619debc2b6808 (commit)
via 2465fc4e6b8476fff1e081536e6145e4ce811ee5 (commit)
via 89a3f250d257b1f4ae018e2057377243d98226e1 (commit)
via 7ec917eed28fa973438f0d1d8d3e3a45649f6875 (commit)
via 82c1ed9f4a6d164eaab9ccb98311fe1a5e8e07e8 (commit)
via 402d74013765509c687609f42960071a8fda0ff5 (commit)
via e36907c5e11cbbe39d45dead0c9763d86f08185e (commit)
via 881cb6394b8b511fa3b1d96be9520de581faed86 (commit)
via 2e961c47ce50c3d185d9372c51caaa9a4a216b20 (commit)
via 1629c57b9b6a778af3374ee32f136adda089fb09 (commit)
via ef1a8f3b0f5bd8e148eefbbdacc8c209ed6d614b (commit)
via 8dc2a8f0b21a7c430da450a4051cf056f09b5a78 (commit)
via 839f15fc72166eb63be4f2afc4588d253e88c9f4 (commit)
via fb0bd7994491da2a7fa6913c5b5666ed49c6e153 (commit)
via 3c61db33ffc94ee194dd0111a332762199334d37 (commit)
via ad18ef5db99eb38075e6e49246b097a8ba727ab8 (commit)
via 5c7e8618d5e5f2eb0b37dd937fb5669eeba407d0 (commit)
via 9679561eca26bf792764002465bc0548c5d694bf (commit)
via cc11912da1e2881803828330f85b0fe177b570b6 (commit)
via c02f552e8704f52e1a9ab92b21cb7d23211d98ab (commit)
via f37e52c39475e6efd3740c5ae1ec4f290662928f (commit)
via 7a28131e4953934150967eb7886bc06678e249e8 (commit)
via 41331542154594970fb6c36bc1c147c244fe9279 (commit)
via de09dc8efdfdb4ce27c85733cfec139a52d70776 (commit)
via d513d6261a83c6bde07be1ae8e30ea303c780d47 (commit)
via c134750575d8f1bf05b97162ee7fb138058c40d9 (commit)
via fb73ff80eddbe52b240d1e8cd023199a5d2059f3 (commit)
via 997e8999d5a3a496a81d45b37f723d5bc539f5c4 (commit)
via f3158f79b6357558e3a0083039857bba21c6ca5b (commit)
via 5e51600cfe713fa320734291ec15a7a584c1c25b (commit)
via df4e9e322dc8c64af1fc8aabc26c8d4ddab32574 (commit)
via e193566de41d65e055db306b9ca28b35daa8bc43 (commit)
via 4f13cbd31c984957d17081ac6d59a62b04d57765 (commit)
via 267fb0b00eec762da36f9f763521399efb914c2b (commit)
via 1922eb1e2a688c1927ab05436dec5043c31b8e78 (commit)
via 98f8acdfe572cc9805b4bf492ca91e802e578ea1 (commit)
via 44c0196dbf09c4e48ee4229e76382f29a8a35dd3 (commit)
via 85f90899ed5fc9756fdd884b8936dc9e97c9fa09 (commit)
via 50f68b11a4983341bd94f0946e2f05f1d89ca1c8 (commit)
via 23ae8ccf110f94019c745ebc4959c06b842a626d (commit)
via d0b56d660f1018741f0aabd5f5e02dc69db2e479 (commit)
via ab997398ad2d413fa272fe4614e5b946d0349786 (commit)
via b9b952cddf161535548644c3df31e2856859a895 (commit)
via ae98fbe8c81712746073d10e328b02bfb454fda8 (commit)
via 5a14a74ab193c1252cac62a94e019747aaad9d99 (commit)
via a6b02680a70afebacc479730edcf3a7b1449b5f3 (commit)
via a14048f6d19a3206a00d71ed76b5df52f51a8328 (commit)
via 062c40140f355feecc73623ddc4faeff7e1db99f (commit)
via a838fa3ee93c813cc648bbf540639ea7fbbe6189 (commit)
via 05c742df09825079be2d21b8e52726f68cc5343c (commit)
via d3c4eb73631b0f3fb5b08400592f438f0cf71f79 (commit)
via 2f2a73beea5e9e66505ba2adba98be83452fc93b (commit)
via ea9a2ff01d4ca599215a3bd943f7c5fd55d12f63 (commit)
via 77ffda1e46d602fa1efc6eac0e7c4f97f4dfbae1 (commit)
via 47d08b6506a16b1d8a806d9dfa971398553a250e (commit)
via 576b1c55bf5a8b37983e1581a6c0cc1a9d7158f5 (commit)
via 88711495858ead8749bfcf4c08e1da49a671dd43 (commit)
via 82c7a7a4baf4a7a15381ee720799dc41c3d54909 (commit)
via 87a38ca5c1624cb86d8c031b38166a00494d6be0 (commit)
via 9511e9c4e9e1398e4dde504289556d655ad05fb2 (commit)
via f1d4094566f7ac14b33b39f15407c6659c64ea4f (commit)
via 706a77170df0371ffa6bc97c6c0766e0e3b995ae (commit)
via c965fa87395c0c59afa0690968eb266935e2cec8 (commit)
via a8e501a6637cef13a056d4be5d5a0fdc5ce4fa27 (commit)
via 980e28d916e22d33ec8cea3aa57fdc49d83f1b9e (commit)
via 1d03f34d62ef90fcdd5ddab25547b208fd9ff502 (commit)
via c2eda75710da1e8422de9eaac69735e25d19af75 (commit)
via 6f523a72f12284550bdffa77fff473242382aa27 (commit)
via 729cd9134bc3f959a46179f91876894b88bf6819 (commit)
via 81f6cd2074f76f3e976537453be18b6f34f1ab7f (commit)
via c0469ca905ef699fef36b02c058a21fed821d564 (commit)
via e62db5a49cbd7c8786a1b88617e5629ad0d0f64e (commit)
via 22e0c0536a3f9a881ad9e80a9562580c143b06a9 (commit)
via 733400ed38bac9b4153ab125bc585f34c3f268b4 (commit)
via c9e8bd24c893ea0cfb85ab3d33379fb5341ecf92 (commit)
via fcfc9453ecabc017723a3c1523a2f1aa18060fbe (commit)
via 1e1df590891707c542dd40fa93067021ad82bf55 (commit)
via 6f4f860ce3c6a569b15dce17b8d459636c936993 (commit)
via 78663e91110b174c9febd29bb96b4a89f5a295a3 (commit)
via befa5e6ed356e019fa82b7ebf9be90913aad3edb (commit)
via 9d6ab0475f6cd259bc6135696900bad9295f5bcb (commit)
via 07634ee58c5142f1be003eac4171f3c5cd6ed657 (commit)
via a1f45dcf121abe51c09ed94fbcc7a19079468fcb (commit)
via e7f1ad318f85d54bee0bd3e18e8a86cb6688622c (commit)
via f4d173b7ee6e99b5f20790a19f87bff358e073d3 (commit)
via 8657bc563a32235c9b99ade4c0009e71c681f62f (commit)
via 8a99b045bc48e0c5eb89129ea8ee034c72b955de (commit)
via 52b50db3a6f1d52b3c9e18b36121f487c09de906 (commit)
via 8525c857da966580c57aa595ec44ba1c4fc2326a (commit)
via a487f7e611550b0058a780cf673480eb8de6f799 (commit)
via 8b00dfcfbf9003692e6c4f905500c55aac79b7f0 (commit)
via c8d4fe96c4af5edf419eb88b0a54ce5cdf6fd90f (commit)
via f49a9eb9a6d2301e4e61db245c703971b243dc4b (commit)
via f06353959f551b48fce06bdbb43df3f77bdd2bb0 (commit)
via 0d59fe834f6304e5d8172c97b936a4152d511911 (commit)
via 6af5ba0c8f6a08813fceab8e02dec0a9ae6497b8 (commit)
via f4b3f10d57207b824039d5cdd07f9ff7d51baefa (commit)
via 84c29f1d8628fd77de72269b0f424d402fa59a47 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (f8ef27700ad6c81bcbda68576b473042d2dae015)
\
N -- N -- N (b70c6091db84297432284250f024a118e3cc5241)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=b70c6091db842974322...
commit b70c6091db84297432284250f024a118e3cc5241
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Change hints handling to use new libcss API.
diff --git a/css/hints.c b/css/hints.c
index 256d3e8..9f2c8d1 100644
--- a/css/hints.c
+++ b/css/hints.c
@@ -1709,77 +1709,213 @@ static css_error node_presentational_hint_background_image(
return CSS_PROPERTY_NOT_SET;
}
+struct css_hint_ctx {
+ struct css_hint *hints;
+ uint32_t alloc;
+ uint32_t len;
+};
+
+struct css_hint_ctx hint1;
+struct css_hint_ctx hint2;
+
+static void css_hint_destroy(struct css_hint_ctx *hint)
+{
+ hint->alloc = 0;
+ hint->len = 0;
+ free(hint->hints);
+}
+
+static nserror css_hint_extend(struct css_hint_ctx *hint)
+{
+ uint32_t alloc = (hint->alloc == 0) ? 32 : hint->alloc * 2;
+ struct css_hint *temp;
+
+ temp = realloc(hint->hints, sizeof(struct css_hint) * alloc);
+ if (temp != NULL) {
+ hint->hints = temp;
+ hint->alloc = alloc;
+
+ return NSERROR_OK;
+ }
+
+ return NSERROR_NOMEM;
+}
+
+nserror css_hint_init(void)
+{
+ nserror err;
+
+ err = css_hint_extend(&hint1);
+ if (err != NSERROR_OK) {
+ return err;
+ }
+
+ err = css_hint_extend(&hint2);
+ if (err != NSERROR_OK) {
+ css_hint_destroy(&hint1);
+ return err;
+ }
+
+ return NSERROR_OK;
+}
+
+void css_hint_fini(void)
+{
+ css_hint_destroy(&hint1);
+ css_hint_destroy(&hint2);
+}
+
+
/* Exported function, documeted in css/hints.h */
-css_error node_presentational_hint(void *pw, void *node,
- uint32_t property, css_hint *hint)
+static inline css_error node_presentational_hint_internal(
+ void *pw, void *node, struct css_hint_ctx *hints)
{
+ struct css_hint_ctx *ctx = hints;
+ uint32_t property;
+ nserror nserr;
+ css_error err;
- switch (property) {
- case CSS_PROP_BACKGROUND_IMAGE:
- return node_presentational_hint_background_image(pw, node, hint);
+ ctx->len = 0;
- case CSS_PROP_BACKGROUND_COLOR:
- return node_presentational_hint_background_color(pw, node, hint);
- case CSS_PROP_CAPTION_SIDE:
- return node_presentational_hint_caption_side(pw, node, hint);
+ for (property = 0; property < CSS_N_PROPERTIES; property++) {
+ css_hint *hint = &(ctx->hints[ctx->len]);
- case CSS_PROP_COLOR:
- return node_presentational_hint_color(pw, node, hint);
+ if (ctx->alloc == 0 || ctx->len == ctx->alloc - 1) {
+ nserr = css_hint_extend(ctx);
+ if (nserr != NSERROR_OK) {
+ return NSERROR_NOMEM;
+ }
+ }
- case CSS_PROP_FLOAT:
- return node_presentational_hint_float(pw, node, hint);
+ switch (property) {
+ case CSS_PROP_BACKGROUND_IMAGE:
+ err = node_presentational_hint_background_image(
+ pw, node, hint);
+ break;
- case CSS_PROP_FONT_SIZE:
- return node_presentational_hint_font_size(pw, node, hint);
+ case CSS_PROP_BACKGROUND_COLOR:
+ err = node_presentational_hint_background_color(
+ pw, node, hint);
+ break;
- case CSS_PROP_HEIGHT:
- return node_presentational_hint_height(pw, node, hint);
+ case CSS_PROP_CAPTION_SIDE:
+ err = node_presentational_hint_caption_side(
+ pw, node, hint);
+ break;
- case CSS_PROP_WIDTH:
- return node_presentational_hint_width(pw, node, hint);
+ case CSS_PROP_COLOR:
+ err = node_presentational_hint_color(
+ pw, node, hint);
+ break;
- case CSS_PROP_BORDER_SPACING:
- return node_presentational_hint_border_spacing(pw, node, hint);
+ case CSS_PROP_FLOAT:
+ err = node_presentational_hint_float(
+ pw, node, hint);
+ break;
- case CSS_PROP_BORDER_TOP_COLOR :
- case CSS_PROP_BORDER_RIGHT_COLOR :
- case CSS_PROP_BORDER_BOTTOM_COLOR :
- case CSS_PROP_BORDER_LEFT_COLOR :
- return node_presentational_hint_border_trbl_color(pw, node, hint);
+ case CSS_PROP_FONT_SIZE:
+ err = node_presentational_hint_font_size(
+ pw, node, hint);
+ break;
- case CSS_PROP_BORDER_TOP_STYLE :
- case CSS_PROP_BORDER_RIGHT_STYLE :
- case CSS_PROP_BORDER_BOTTOM_STYLE :
- case CSS_PROP_BORDER_LEFT_STYLE :
- return node_presentational_hint_border_trbl_style(pw, node, hint);
+ case CSS_PROP_HEIGHT:
+ err = node_presentational_hint_height(
+ pw, node, hint);
+ break;
- case CSS_PROP_BORDER_TOP_WIDTH :
- case CSS_PROP_BORDER_RIGHT_WIDTH :
- case CSS_PROP_BORDER_BOTTOM_WIDTH :
- case CSS_PROP_BORDER_LEFT_WIDTH :
- return node_presentational_hint_border_trbl_width(pw, node, hint);
+ case CSS_PROP_WIDTH:
+ err = node_presentational_hint_width(
+ pw, node, hint);
+ break;
- case CSS_PROP_MARGIN_TOP :
- case CSS_PROP_MARGIN_BOTTOM :
- return node_presentational_hint_margin_tb(pw, node, hint);
+ case CSS_PROP_BORDER_SPACING:
+ err = node_presentational_hint_border_spacing(
+ pw, node, hint);
+ break;
- case CSS_PROP_MARGIN_RIGHT:
- case CSS_PROP_MARGIN_LEFT:
- return node_presentational_hint_margin_rl(pw, node, hint, property);
+ case CSS_PROP_BORDER_TOP_COLOR:
+ case CSS_PROP_BORDER_RIGHT_COLOR:
+ case CSS_PROP_BORDER_BOTTOM_COLOR:
+ case CSS_PROP_BORDER_LEFT_COLOR:
+ err = node_presentational_hint_border_trbl_color(
+ pw, node, hint);
+ break;
- case CSS_PROP_PADDING_TOP:
- case CSS_PROP_PADDING_RIGHT :
- case CSS_PROP_PADDING_BOTTOM :
- case CSS_PROP_PADDING_LEFT:
- return node_presentational_hint_padding_trbl(pw, node, hint);
+ case CSS_PROP_BORDER_TOP_STYLE:
+ case CSS_PROP_BORDER_RIGHT_STYLE:
+ case CSS_PROP_BORDER_BOTTOM_STYLE:
+ case CSS_PROP_BORDER_LEFT_STYLE:
+ err = node_presentational_hint_border_trbl_style(
+ pw, node, hint);
+ break;
- case CSS_PROP_TEXT_ALIGN:
- return node_presentational_hint_text_align(pw, node, hint);
+ case CSS_PROP_BORDER_TOP_WIDTH:
+ case CSS_PROP_BORDER_RIGHT_WIDTH:
+ case CSS_PROP_BORDER_BOTTOM_WIDTH:
+ case CSS_PROP_BORDER_LEFT_WIDTH:
+ err = node_presentational_hint_border_trbl_width(
+ pw, node, hint);
+ break;
+
+ case CSS_PROP_MARGIN_TOP:
+ case CSS_PROP_MARGIN_BOTTOM:
+ err = node_presentational_hint_margin_tb(
+ pw, node, hint);
+ break;
- case CSS_PROP_VERTICAL_ALIGN:
- return node_presentational_hint_vertical_align(pw, node, hint);
+ case CSS_PROP_MARGIN_RIGHT:
+ case CSS_PROP_MARGIN_LEFT:
+ err = node_presentational_hint_margin_rl(
+ pw, node, hint, property);
+ break;
+
+ case CSS_PROP_PADDING_TOP:
+ case CSS_PROP_PADDING_RIGHT:
+ case CSS_PROP_PADDING_BOTTOM:
+ case CSS_PROP_PADDING_LEFT:
+ err = node_presentational_hint_padding_trbl(
+ pw, node, hint);
+ break;
+
+ case CSS_PROP_TEXT_ALIGN:
+ err = node_presentational_hint_text_align(
+ pw, node, hint);
+ break;
+
+ case CSS_PROP_VERTICAL_ALIGN:
+ err = node_presentational_hint_vertical_align(
+ pw, node, hint);
+ break;
+
+ default:
+ err = CSS_PROPERTY_NOT_SET;
+ break;
+ }
+
+ if (err == CSS_OK) {
+ hint[hints->len].prop = property;
+ hints->len++;
+ }
}
- return CSS_PROPERTY_NOT_SET;
+ return CSS_OK;
+}
+
+
+/* Exported function, documeted in css/hints.h */
+css_error node_presentational_hint(void *pw, void *node,
+ uint32_t *nhints, css_hint **hints)
+{
+ css_error err;
+
+ err = node_presentational_hint_internal(pw, node, &hint1);
+ if (err != CSS_OK) {
+ return err;
+ }
+
+ *nhints = hint1.len;
+ *hints = hint1.hints;
+
+ return CSS_OK;
}
diff --git a/css/hints.h b/css/hints.h
index 68d4c10..d2b07b5 100644
--- a/css/hints.h
+++ b/css/hints.h
@@ -23,7 +23,8 @@
#include "css/css.h"
-
+nserror css_hint_init(void);
+void css_hint_fini(void);
/**
@@ -40,8 +41,8 @@
css_error node_presentational_hint(
void *pw,
void *node,
- uint32_t property,
- css_hint *hint);
+ uint32_t *nhints,
+ css_hint **hints);
bool nscss_parse_colour(const char *data, css_color *result);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=44394257a8548dd6faf...
commit 44394257a8548dd6faf90661b901a826a35af20d
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Remove duplicate branch.
diff --git a/css/hints.c b/css/hints.c
index 770e158..256d3e8 100644
--- a/css/hints.c
+++ b/css/hints.c
@@ -1576,14 +1576,6 @@ static css_error node_presentational_hint_color(
return CSS_PROPERTY_NOT_SET;
}
}
- } else if (dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_body)) {
- err = dom_element_get_attribute(node,
- corestring_dom_text, &color);
- if ((err != DOM_NO_ERR) || (color == NULL)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
} else {
err = dom_element_get_attribute(node,
corestring_dom_color, &color);
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=9b4e3a05288e7a5e96a...
commit 9b4e3a05288e7a5e96a22cffa5687c9abc6af883
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Tidy cellpadding hint handling.
diff --git a/css/hints.c b/css/hints.c
index 689d6a0..770e158 100644
--- a/css/hints.c
+++ b/css/hints.c
@@ -832,7 +832,6 @@ static css_error node_presentational_hint_padding_trbl(
{
dom_string *name;
dom_exception exc;
- dom_string *cellpadding = NULL;
css_error result = CSS_PROPERTY_NOT_SET;
exc = dom_node_get_node_name(node, &name);
@@ -843,6 +842,8 @@ static css_error node_presentational_hint_padding_trbl(
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
css_qname qs;
dom_node *tablenode = NULL;
+ dom_string *cellpadding = NULL;
+
qs.ns = NULL;
qs.name = lwc_string_ref(corestring_lwc_table);
if (named_ancestor_node(ctx, node, &qs,
@@ -866,20 +867,20 @@ static css_error node_presentational_hint_padding_trbl(
/* No need to unref tablenode, named_ancestor_node does not
* return a reffed node to the CSS
*/
- }
-
- dom_string_unref(name);
- if (cellpadding != NULL) {
- if (parse_dimension(dom_string_data(cellpadding), false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_PADDING_SET;
- result = CSS_OK;
+ if (cellpadding != NULL) {
+ if (parse_dimension(dom_string_data(cellpadding), false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_PADDING_SET;
+ result = CSS_OK;
+ }
+ dom_string_unref(cellpadding);
}
- dom_string_unref(cellpadding);
}
+ dom_string_unref(name);
+
return result;
}
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=1b1b726456789566734...
commit 1b1b726456789566734ecaea6c85735c7b2c31a7
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Split out presentational hints handling.
diff --git a/css/Makefile b/css/Makefile
index 1280d57..127dbaa 100644
--- a/css/Makefile
+++ b/css/Makefile
@@ -1,5 +1,5 @@
# CSS sources
-S_CSS := css.c dump.c internal.c select.c utils.c
+S_CSS := css.c dump.c internal.c hints.c select.c utils.c
S_CSS := $(addprefix css/,$(S_CSS))
diff --git a/css/hints.c b/css/hints.c
new file mode 100644
index 0000000..689d6a0
--- /dev/null
+++ b/css/hints.c
@@ -0,0 +1,1792 @@
+/*
+ * Copyright 2009 John-Mark Bell <jmb(a)netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string.h>
+#include <strings.h>
+
+#include "utils/nsoption.h"
+#include "utils/corestrings.h"
+#include "utils/log.h"
+#include "utils/nsurl.h"
+#include "utils/utils.h"
+
+#include "css/hints.h"
+#include "css/select.h"
+
+/******************************************************************************
+ * Utility functions *
+ ******************************************************************************/
+
+/**
+ * Determine if a given character is whitespace
+ *
+ * \param c Character to consider
+ * \return true if character is whitespace, false otherwise
+ */
+static bool isWhitespace(char c)
+{
+ return c == ' ' || c == '\t' || c == '\f' || c == '\r' || c == '\n';
+}
+
+/**
+ * Determine if a given character is a valid hex digit
+ *
+ * \param c Character to consider
+ * \return true if character is a valid hex digit, false otherwise
+ */
+static bool isHex(char c)
+{
+ return ('0' <= c && c <= '9') ||
+ ('A' <= (c & ~0x20) && (c & ~0x20) <= 'F');
+}
+
+/**
+ * Convert a character representing a hex digit to the corresponding hex value
+ *
+ * \param c Character to convert
+ * \return Hex value represented by character
+ *
+ * \note This function assumes an ASCII-compatible character set
+ */
+static uint8_t charToHex(char c)
+{
+ /* 0-9 */
+ c -= '0';
+
+ /* A-F */
+ if (c > 9)
+ c -= 'A' - '9' - 1;
+
+ /* a-f */
+ if (c > 15)
+ c -= 'a' - 'A';
+
+ return c;
+}
+
+
+/******************************************************************************
+ * Common parsing functions *
+ ******************************************************************************/
+
+/**
+ * Parse a number string
+ *
+ * \param data Data to parse (NUL-terminated)
+ * \param maybe_negative Negative numbers permitted
+ * \param real Floating point numbers permitted
+ * \param value Pointer to location to receive numeric value
+ * \param consumed Pointer to location to receive number of input
+ * bytes consumed
+ * \return true on success, false on invalid input
+ */
+static bool parse_number(const char *data, bool maybe_negative, bool real,
+ css_fixed *value, size_t *consumed)
+{
+ size_t len;
+ const uint8_t *ptr;
+ int32_t intpart = 0;
+ int32_t fracpart = 0;
+ int32_t pwr = 1;
+ int sign = 1;
+
+ *consumed = 0;
+
+ len = strlen(data);
+ ptr = (const uint8_t *) data;
+
+ if (len == 0)
+ return false;
+
+ /* Skip leading whitespace */
+ while (len > 0 && isWhitespace(ptr[0])) {
+ len--;
+ ptr++;
+ }
+
+ if (len == 0)
+ return false;
+
+ /* Extract sign, if any */
+ if (ptr[0] == '+') {
+ len--;
+ ptr++;
+ } else if (ptr[0] == '-' && maybe_negative) {
+ sign = -1;
+ len--;
+ ptr++;
+ }
+
+ if (len == 0)
+ return false;
+
+ /* Must have a digit [0,9] */
+ if ('0' > ptr[0] || ptr[0] > '9')
+ return false;
+
+ /* Now extract intpart, assuming base 10 */
+ while (len > 0) {
+ /* Stop on first non-digit */
+ if (ptr[0] < '0' || '9' < ptr[0])
+ break;
+
+ /* Prevent overflow of 'intpart'; proper clamping below */
+ if (intpart < (1 << 22)) {
+ intpart *= 10;
+ intpart += ptr[0] - '0';
+ }
+ ptr++;
+ len--;
+ }
+
+ /* And fracpart, again, assuming base 10 */
+ if (real && len > 1 && ptr[0] == '.' &&
+ ('0' <= ptr[1] && ptr[1] <= '9')) {
+ ptr++;
+ len--;
+
+ while (len > 0) {
+ if (ptr[0] < '0' || '9' < ptr[0])
+ break;
+
+ if (pwr < 1000000) {
+ pwr *= 10;
+ fracpart *= 10;
+ fracpart += ptr[0] - '0';
+ }
+ ptr++;
+ len--;
+ }
+
+ fracpart = ((1 << 10) * fracpart + pwr/2) / pwr;
+ if (fracpart >= (1 << 10)) {
+ intpart++;
+ fracpart &= (1 << 10) - 1;
+ }
+ }
+
+ if (sign > 0) {
+ /* If the result is larger than we can represent,
+ * then clamp to the maximum value we can store. */
+ if (intpart >= (1 << 21)) {
+ intpart = (1 << 21) - 1;
+ fracpart = (1 << 10) - 1;
+ }
+ } else {
+ /* If the negated result is smaller than we can represent
+ * then clamp to the minimum value we can store. */
+ if (intpart >= (1 << 21)) {
+ intpart = -(1 << 21);
+ fracpart = 0;
+ } else {
+ intpart = -intpart;
+ if (fracpart) {
+ fracpart = (1 << 10) - fracpart;
+ intpart--;
+ }
+ }
+ }
+
+ *value = (intpart << 10) | fracpart;
+
+ *consumed = ptr - (const uint8_t *) data;
+
+ return true;
+}
+
+/**
+ * Parse a dimension string
+ *
+ * \param data Data to parse (NUL-terminated)
+ * \param strict Whether to enforce strict parsing rules
+ * \param length Pointer to location to receive dimension's length
+ * \param unit Pointer to location to receive dimension's unit
+ * \return true on success, false on invalid input
+ */
+static bool parse_dimension(const char *data, bool strict, css_fixed *length,
+ css_unit *unit)
+{
+ size_t len;
+ size_t read;
+ css_fixed value;
+
+ len = strlen(data);
+
+ if (parse_number(data, false, true, &value, &read) == false)
+ return false;
+
+ if (strict && value < INTTOFIX(1))
+ return false;
+
+ *length = value;
+
+ if (len > read && data[read] == '%')
+ *unit = CSS_UNIT_PCT;
+ else
+ *unit = CSS_UNIT_PX;
+
+ return true;
+}
+
+/**
+ * Mapping of colour name to CSS color
+ */
+struct colour_map {
+ const char *name;
+ css_color color;
+};
+
+/**
+ * Name comparator for named colour matching
+ *
+ * \param a Name to match
+ * \param b Colour map entry to consider
+ * \return 0 on match,
+ * < 0 if a < b,
+ * > 0 if b > a.
+ */
+static int cmp_colour_name(const void *a, const void *b)
+{
+ const char *aa = a;
+ const struct colour_map *bb = b;
+
+ return strcasecmp(aa, bb->name);
+}
+
+/**
+ * Parse a named colour
+ *
+ * \param name Name to parse
+ * \param result Pointer to location to receive css_color
+ * \return true on success, false on invalid input
+ */
+static bool parse_named_colour(const char *name, css_color *result)
+{
+ static const struct colour_map named_colours[] = {
+ { "aliceblue", 0xfff0f8ff },
+ { "antiquewhite", 0xfffaebd7 },
+ { "aqua", 0xff00ffff },
+ { "aquamarine", 0xff7fffd4 },
+ { "azure", 0xfff0ffff },
+ { "beige", 0xfff5f5dc },
+ { "bisque", 0xffffe4c4 },
+ { "black", 0xff000000 },
+ { "blanchedalmond", 0xffffebcd },
+ { "blue", 0xff0000ff },
+ { "blueviolet", 0xff8a2be2 },
+ { "brown", 0xffa52a2a },
+ { "burlywood", 0xffdeb887 },
+ { "cadetblue", 0xff5f9ea0 },
+ { "chartreuse", 0xff7fff00 },
+ { "chocolate", 0xffd2691e },
+ { "coral", 0xffff7f50 },
+ { "cornflowerblue", 0xff6495ed },
+ { "cornsilk", 0xfffff8dc },
+ { "crimson", 0xffdc143c },
+ { "cyan", 0xff00ffff },
+ { "darkblue", 0xff00008b },
+ { "darkcyan", 0xff008b8b },
+ { "darkgoldenrod", 0xffb8860b },
+ { "darkgray", 0xffa9a9a9 },
+ { "darkgreen", 0xff006400 },
+ { "darkgrey", 0xffa9a9a9 },
+ { "darkkhaki", 0xffbdb76b },
+ { "darkmagenta", 0xff8b008b },
+ { "darkolivegreen", 0xff556b2f },
+ { "darkorange", 0xffff8c00 },
+ { "darkorchid", 0xff9932cc },
+ { "darkred", 0xff8b0000 },
+ { "darksalmon", 0xffe9967a },
+ { "darkseagreen", 0xff8fbc8f },
+ { "darkslateblue", 0xff483d8b },
+ { "darkslategray", 0xff2f4f4f },
+ { "darkslategrey", 0xff2f4f4f },
+ { "darkturquoise", 0xff00ced1 },
+ { "darkviolet", 0xff9400d3 },
+ { "deeppink", 0xffff1493 },
+ { "deepskyblue", 0xff00bfff },
+ { "dimgray", 0xff696969 },
+ { "dimgrey", 0xff696969 },
+ { "dodgerblue", 0xff1e90ff },
+ { "feldspar", 0xffd19275 },
+ { "firebrick", 0xffb22222 },
+ { "floralwhite", 0xfffffaf0 },
+ { "forestgreen", 0xff228b22 },
+ { "fuchsia", 0xffff00ff },
+ { "gainsboro", 0xffdcdcdc },
+ { "ghostwhite", 0xfff8f8ff },
+ { "gold", 0xffffd700 },
+ { "goldenrod", 0xffdaa520 },
+ { "gray", 0xff808080 },
+ { "green", 0xff008000 },
+ { "greenyellow", 0xffadff2f },
+ { "grey", 0xff808080 },
+ { "honeydew", 0xfff0fff0 },
+ { "hotpink", 0xffff69b4 },
+ { "indianred", 0xffcd5c5c },
+ { "indigo", 0xff4b0082 },
+ { "ivory", 0xfffffff0 },
+ { "khaki", 0xfff0e68c },
+ { "lavender", 0xffe6e6fa },
+ { "lavenderblush", 0xfffff0f5 },
+ { "lawngreen", 0xff7cfc00 },
+ { "lemonchiffon", 0xfffffacd },
+ { "lightblue", 0xffadd8e6 },
+ { "lightcoral", 0xfff08080 },
+ { "lightcyan", 0xffe0ffff },
+ { "lightgoldenrodyellow", 0xfffafad2 },
+ { "lightgray", 0xffd3d3d3 },
+ { "lightgreen", 0xff90ee90 },
+ { "lightgrey", 0xffd3d3d3 },
+ { "lightpink", 0xffffb6c1 },
+ { "lightsalmon", 0xffffa07a },
+ { "lightseagreen", 0xff20b2aa },
+ { "lightskyblue", 0xff87cefa },
+ { "lightslateblue", 0xff8470ff },
+ { "lightslategray", 0xff778899 },
+ { "lightslategrey", 0xff778899 },
+ { "lightsteelblue", 0xffb0c4de },
+ { "lightyellow", 0xffffffe0 },
+ { "lime", 0xff00ff00 },
+ { "limegreen", 0xff32cd32 },
+ { "linen", 0xfffaf0e6 },
+ { "magenta", 0xffff00ff },
+ { "maroon", 0xff800000 },
+ { "mediumaquamarine", 0xff66cdaa },
+ { "mediumblue", 0xff0000cd },
+ { "mediumorchid", 0xffba55d3 },
+ { "mediumpurple", 0xff9370db },
+ { "mediumseagreen", 0xff3cb371 },
+ { "mediumslateblue", 0xff7b68ee },
+ { "mediumspringgreen", 0xff00fa9a },
+ { "mediumturquoise", 0xff48d1cc },
+ { "mediumvioletred", 0xffc71585 },
+ { "midnightblue", 0xff191970 },
+ { "mintcream", 0xfff5fffa },
+ { "mistyrose", 0xffffe4e1 },
+ { "moccasin", 0xffffe4b5 },
+ { "navajowhite", 0xffffdead },
+ { "navy", 0xff000080 },
+ { "oldlace", 0xfffdf5e6 },
+ { "olive", 0xff808000 },
+ { "olivedrab", 0xff6b8e23 },
+ { "orange", 0xffffa500 },
+ { "orangered", 0xffff4500 },
+ { "orchid", 0xffda70d6 },
+ { "palegoldenrod", 0xffeee8aa },
+ { "palegreen", 0xff98fb98 },
+ { "paleturquoise", 0xffafeeee },
+ { "palevioletred", 0xffdb7093 },
+ { "papayawhip", 0xffffefd5 },
+ { "peachpuff", 0xffffdab9 },
+ { "peru", 0xffcd853f },
+ { "pink", 0xffffc0cb },
+ { "plum", 0xffdda0dd },
+ { "powderblue", 0xffb0e0e6 },
+ { "purple", 0xff800080 },
+ { "red", 0xffff0000 },
+ { "rosybrown", 0xffbc8f8f },
+ { "royalblue", 0xff4169e1 },
+ { "saddlebrown", 0xff8b4513 },
+ { "salmon", 0xfffa8072 },
+ { "sandybrown", 0xfff4a460 },
+ { "seagreen", 0xff2e8b57 },
+ { "seashell", 0xfffff5ee },
+ { "sienna", 0xffa0522d },
+ { "silver", 0xffc0c0c0 },
+ { "skyblue", 0xff87ceeb },
+ { "slateblue", 0xff6a5acd },
+ { "slategray", 0xff708090 },
+ { "slategrey", 0xff708090 },
+ { "snow", 0xfffffafa },
+ { "springgreen", 0xff00ff7f },
+ { "steelblue", 0xff4682b4 },
+ { "tan", 0xffd2b48c },
+ { "teal", 0xff008080 },
+ { "thistle", 0xffd8bfd8 },
+ { "tomato", 0xffff6347 },
+ { "turquoise", 0xff40e0d0 },
+ { "violet", 0xffee82ee },
+ { "violetred", 0xffd02090 },
+ { "wheat", 0xfff5deb3 },
+ { "white", 0xffffffff },
+ { "whitesmoke", 0xfff5f5f5 },
+ { "yellow", 0xffffff00 },
+ { "yellowgreen", 0xff9acd32 }
+ };
+ const struct colour_map *entry;
+
+ entry = bsearch(name, named_colours,
+ sizeof(named_colours) / sizeof(named_colours[0]),
+ sizeof(named_colours[0]),
+ cmp_colour_name);
+
+ if (entry != NULL)
+ *result = entry->color;
+
+ return entry != NULL;
+}
+
+/**
+ * Parser for colours specified in attribute values.
+ *
+ * \param data Data to parse (NUL-terminated)
+ * \param result Pointer to location to receive resulting css_color
+ * \return true on success, false on invalid input
+ */
+bool nscss_parse_colour(const char *data, css_color *result)
+{
+ size_t len = strlen(data);
+ uint8_t r, g, b;
+
+ /* 2 */
+ if (len == 0)
+ return false;
+
+ /* 3 */
+ if (len == SLEN("transparent") && strcasecmp(data, "transparent") == 0)
+ return false;
+
+ /* 4 */
+ if (parse_named_colour(data, result))
+ return true;
+
+ /** \todo Implement HTML5's utterly insane legacy colour parsing */
+
+ if (data[0] == '#') {
+ data++;
+ len--;
+ }
+
+ if (len == 3 && isHex(data[0]) && isHex(data[1]) && isHex(data[2])) {
+ r = charToHex(data[0]);
+ g = charToHex(data[1]);
+ b = charToHex(data[2]);
+
+ r |= (r << 4);
+ g |= (g << 4);
+ b |= (b << 4);
+
+ *result = (0xff << 24) | (r << 16) | (g << 8) | b;
+
+ return true;
+ } else if (len == 6 && isHex(data[0]) && isHex(data[1]) &&
+ isHex(data[2]) && isHex(data[3]) && isHex(data[4]) &&
+ isHex(data[5])) {
+ r = (charToHex(data[0]) << 4) | charToHex(data[1]);
+ g = (charToHex(data[2]) << 4) | charToHex(data[3]);
+ b = (charToHex(data[4]) << 4) | charToHex(data[5]);
+
+ *result = (0xff << 24) | (r << 16) | (g << 8) | b;
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Parse a font \@size attribute
+ *
+ * \param size Data to parse (NUL-terminated)
+ * \param val Pointer to location to receive enum value
+ * \param len Pointer to location to receive length
+ * \param unit Pointer to location to receive unit
+ * \return True on success, false on failure
+ */
+static bool parse_font_size(const char *size, uint8_t *val,
+ css_fixed *len, css_unit *unit)
+{
+ static const uint8_t size_map[] = {
+ CSS_FONT_SIZE_XX_SMALL,
+ CSS_FONT_SIZE_SMALL,
+ CSS_FONT_SIZE_MEDIUM,
+ CSS_FONT_SIZE_LARGE,
+ CSS_FONT_SIZE_X_LARGE,
+ CSS_FONT_SIZE_XX_LARGE,
+ CSS_FONT_SIZE_DIMENSION /* xxx-large (see below) */
+ };
+
+ const char *p = size;
+ char mode;
+ int value = 0;
+
+ /* Skip whitespace */
+ while (*p != '\0' && isWhitespace(*p))
+ p++;
+
+ mode = *p;
+
+ /* Skip +/- */
+ if (mode == '+' || mode == '-')
+ p++;
+
+ /* Need at least one digit */
+ if (*p < '0' || *p > '9') {
+ return false;
+ }
+
+ /* Consume digits, computing value */
+ while ('0' <= *p && *p <= '9') {
+ value = value * 10 + (*p - '0');
+ p++;
+ }
+
+ /* Resolve relative sizes */
+ if (mode == '+')
+ value += 3;
+ else if (mode == '-')
+ value = 3 - value;
+
+ /* Clamp to range [1,7] */
+ if (value < 1)
+ value = 1;
+ else if (value > 7)
+ value = 7;
+
+ if (value == 7) {
+ /* Manufacture xxx-large */
+ *len = FDIV(FMUL(INTTOFIX(3), INTTOFIX(nsoption_int(font_size))),
+ F_10);
+ } else {
+ /* Len is irrelevant */
+ *len = 0;
+ }
+
+ *unit = CSS_UNIT_PT;
+ *val = size_map[value - 1];
+
+ return true;
+}
+
+
+/******************************************************************************
+ * Presentational hint handlers *
+ ******************************************************************************/
+
+static css_error node_presentational_hint_vertical_align(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_string *valign = NULL;
+ dom_exception err;
+
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_col) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_thead) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_tbody) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_tfoot) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_valign, &valign);
+ if (err != DOM_NO_ERR || valign == NULL) {
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_top)) {
+ hint->status = CSS_VERTICAL_ALIGN_TOP;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_middle)) {
+ hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_bottom)) {
+ hint->status = CSS_VERTICAL_ALIGN_BOTTOM;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_baseline)) {
+ hint->status = CSS_VERTICAL_ALIGN_BASELINE;
+ } else {
+ dom_string_unref(valign);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(valign);
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_applet) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_embed) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_iframe) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_img) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_object)) {
+ /** \todo input[type=image][align=*] - $11.3.3 */
+ err = dom_element_get_attribute(node,
+ corestring_dom_align, &valign);
+ if (err != DOM_NO_ERR || valign == NULL) {
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_top)) {
+ hint->status = CSS_VERTICAL_ALIGN_TOP;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_bottom) ||
+ dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_baseline)) {
+ hint->status = CSS_VERTICAL_ALIGN_BASELINE;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_texttop)) {
+ hint->status = CSS_VERTICAL_ALIGN_TEXT_TOP;
+ } else if (dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_absmiddle) ||
+ dom_string_caseless_lwc_isequal(valign,
+ corestring_lwc_abscenter)) {
+ hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
+ } else {
+ dom_string_unref(valign);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(valign);
+ dom_string_unref(name);
+
+ return CSS_OK;
+ }
+
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_text_align(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_string *align = NULL;
+ dom_exception err;
+
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_p) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h1) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h2) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h3) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h4) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h5) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_h6)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_align, &align);
+ if (err != DOM_NO_ERR || align == NULL) {
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_left)) {
+ hint->status = CSS_TEXT_ALIGN_LEFT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_center)) {
+ hint->status = CSS_TEXT_ALIGN_CENTER;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_right)) {
+ hint->status = CSS_TEXT_ALIGN_RIGHT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_justify)) {
+ hint->status = CSS_TEXT_ALIGN_JUSTIFY;
+ } else {
+ dom_string_unref(align);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(align);
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_center)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
+
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_caption)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_align, &align);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (align == NULL || dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_center)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_left)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_right)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_justify)) {
+ hint->status = CSS_TEXT_ALIGN_JUSTIFY;
+ } else {
+ dom_string_unref(align);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (align != NULL)
+ dom_string_unref(align);
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_div) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_thead) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_tbody) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_tfoot) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_tr) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_th)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_align, &align);
+ if (err != DOM_NO_ERR || align == NULL) {
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_center)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_left)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_right)) {
+ hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_justify)) {
+ hint->status = CSS_TEXT_ALIGN_JUSTIFY;
+ } else {
+ dom_string_unref(align);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(align);
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_table)) {
+ /* Tables usually reset alignment */
+ hint->status = CSS_TEXT_ALIGN_INHERIT_IF_NON_MAGIC;
+
+ dom_string_unref(name);
+
+ return CSS_OK;
+ } else {
+ dom_string_unref(name);
+
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+}
+
+static css_error node_presentational_hint_padding_trbl(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_exception exc;
+ dom_string *cellpadding = NULL;
+ css_error result = CSS_PROPERTY_NOT_SET;
+
+ exc = dom_node_get_node_name(node, &name);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
+ css_qname qs;
+ dom_node *tablenode = NULL;
+ qs.ns = NULL;
+ qs.name = lwc_string_ref(corestring_lwc_table);
+ if (named_ancestor_node(ctx, node, &qs,
+ (void *)&tablenode) != CSS_OK) {
+ /* Didn't find, or had error */
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ lwc_string_unref(qs.name);
+
+ if (tablenode != NULL) {
+ exc = dom_element_get_attribute(tablenode,
+ corestring_dom_cellpadding,
+ &cellpadding);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+ }
+ /* No need to unref tablenode, named_ancestor_node does not
+ * return a reffed node to the CSS
+ */
+ }
+
+ dom_string_unref(name);
+
+ if (cellpadding != NULL) {
+ if (parse_dimension(dom_string_data(cellpadding), false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_PADDING_SET;
+ result = CSS_OK;
+ }
+ dom_string_unref(cellpadding);
+ }
+
+ return result;
+}
+
+static css_error node_presentational_hint_margin_rl(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint,
+ uint32_t property)
+{
+ dom_string *n;
+ dom_exception exc;
+
+ exc = dom_node_get_node_name(node, &n);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (dom_string_caseless_lwc_isequal(n, corestring_lwc_img) ||
+ dom_string_caseless_lwc_isequal(n, corestring_lwc_applet)) {
+ dom_string_unref(n);
+ exc = dom_element_get_attribute(node,
+ corestring_dom_hspace, &n);
+ if (exc != DOM_NO_ERR) {
+ return CSS_BADPARM;
+ }
+
+ if (n == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (parse_dimension(dom_string_data(n), false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_MARGIN_SET;
+ } else {
+ dom_string_unref(n);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ dom_string_unref(n);
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_table) ||
+ dom_string_caseless_lwc_isequal(n, corestring_lwc_align)) {
+ dom_string_unref(n);
+ exc = dom_element_get_attribute(node,
+ corestring_dom_align, &n);
+ if (exc != DOM_NO_ERR) {
+ return CSS_BADPARM;
+ }
+
+ if (n == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_center) ||
+ dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_abscenter) ||
+ dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_middle) ||
+ dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_absmiddle)) {
+ hint->status = CSS_MARGIN_AUTO;
+ } else {
+ dom_string_unref(n);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(n);
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_hr)) {
+ dom_string_unref(n);
+ exc = dom_element_get_attribute(node,
+ corestring_dom_align, &n);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (n == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_left)) {
+ if (property == CSS_PROP_MARGIN_LEFT) {
+ hint->data.length.value = 0;
+ hint->data.length.unit = CSS_UNIT_PX;
+ hint->status = CSS_MARGIN_SET;
+ } else {
+ hint->status = CSS_MARGIN_AUTO;
+ }
+ } else if (dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_center)) {
+ hint->status = CSS_MARGIN_AUTO;
+ } else if (dom_string_caseless_lwc_isequal(n,
+ corestring_lwc_right)) {
+ if (property == CSS_PROP_MARGIN_RIGHT) {
+ hint->data.length.value = 0;
+ hint->data.length.unit = CSS_UNIT_PX;
+ hint->status = CSS_MARGIN_SET;
+ } else {
+ hint->status = CSS_MARGIN_AUTO;
+ }
+ } else {
+ dom_string_unref(n);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ dom_string_unref(n);
+
+ return CSS_OK;
+ }
+
+ dom_string_unref(n);
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_margin_tb(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name, *vspace = NULL;
+ dom_exception exc;
+
+ exc = dom_node_get_node_name(node, &name);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
+ exc = dom_element_get_attribute(node, corestring_dom_vspace,
+ &vspace);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+ }
+
+ dom_string_unref(name);
+
+ if (vspace == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (parse_dimension(dom_string_data(vspace), false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_MARGIN_SET;
+ } else {
+ dom_string_unref(vspace);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(vspace);
+
+ return CSS_OK;
+}
+
+static css_error node_presentational_hint_border_trbl_width(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_exception exc;
+ dom_string *width = NULL;
+ bool is_table_cell = false;
+
+ exc = dom_node_get_node_name(node, &name);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
+ css_qname qs;
+ dom_node *tablenode = NULL;
+ qs.ns = NULL;
+ qs.name = lwc_string_ref(corestring_lwc_table);
+ if (named_ancestor_node(ctx, node, &qs,
+ (void *)&tablenode) != CSS_OK) {
+ /* Didn't find, or had error */
+ lwc_string_unref(qs.name);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ lwc_string_unref(qs.name);
+ if (tablenode != NULL) {
+ exc = dom_element_get_attribute(tablenode,
+ corestring_dom_border, &width);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+ }
+ /* No need to unref tablenode, named_ancestor_node does not
+ * return a reffed node to the CSS
+ */
+ is_table_cell = true;
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_table)) {
+ exc = dom_element_get_attribute(node, corestring_dom_border,
+ &width);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+ }
+
+ dom_string_unref(name);
+
+ if (width == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (parse_dimension(dom_string_data(width), false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ if (is_table_cell &&
+ INTTOFIX(0) !=
+ hint->data.length.value) {
+ hint->data.length.value = INTTOFIX(1);
+ hint->data.length.unit = CSS_UNIT_PX;
+ }
+ hint->status = CSS_BORDER_WIDTH_WIDTH;
+ } else {
+ dom_string_unref(width);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(width);
+
+ return CSS_OK;
+}
+
+static css_error node_presentational_hint_border_trbl_style(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_exception exc;
+
+ exc = dom_node_get_node_name(node, &name);
+ if (exc != DOM_NO_ERR)
+ return CSS_BADPARM;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
+ css_qname qs;
+ dom_node *tablenode = NULL;
+ qs.ns = NULL;
+ qs.name = lwc_string_ref(corestring_lwc_table);
+
+ if (named_ancestor_node(ctx, node, &qs,
+ (void *)&tablenode) != CSS_OK) {
+ /* Didn't find, or had error */
+ lwc_string_unref(qs.name);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ lwc_string_unref(qs.name);
+
+ if (tablenode != NULL) {
+ bool has_border = false;
+
+ exc = dom_element_has_attribute(tablenode,
+ corestring_dom_border,
+ &has_border);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+
+ if (has_border) {
+ hint->status = CSS_BORDER_STYLE_INSET;
+ dom_string_unref(name);
+ return CSS_OK;
+ }
+ }
+ /* No need to unref tablenode, named_ancestor_node does not
+ * return a reffed node to the CSS
+ */
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_table)) {
+ bool has_border = false;
+
+ exc = dom_element_has_attribute(node,
+ corestring_dom_border,
+ &has_border);
+ if (exc != DOM_NO_ERR) {
+ dom_string_unref(name);
+ return CSS_BADPARM;
+ }
+
+ if (has_border) {
+ hint->status = CSS_BORDER_STYLE_OUTSET;
+ dom_string_unref(name);
+ return CSS_OK;
+ }
+ }
+
+ dom_string_unref(name);
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_border_trbl_color(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_string *bordercolor = NULL;
+ dom_exception err;
+
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
+ css_qname qs;
+ dom_node *tablenode = NULL;
+ qs.ns = NULL;
+ qs.name = lwc_string_ref(corestring_lwc_table);
+
+ if (named_ancestor_node(ctx, node, &qs,
+ (void *)&tablenode) != CSS_OK) {
+ /* Didn't find, or had error */
+ lwc_string_unref(qs.name);
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ lwc_string_unref(qs.name);
+
+ if (tablenode != NULL) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_bordercolor,
+ &bordercolor);
+ }
+ /* No need to unref tablenode, named_ancestor_node does not
+ * return a reffed node to the CSS
+ */
+
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_table)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_bordercolor,
+ &bordercolor);
+ }
+
+ dom_string_unref(name);
+
+ if ((err != DOM_NO_ERR) || (bordercolor == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (nscss_parse_colour((const char *)dom_string_data(bordercolor),
+ &hint->data.color)) {
+ hint->status = CSS_BORDER_COLOR_COLOR;
+ dom_string_unref(bordercolor);
+ return CSS_OK;
+ }
+
+ dom_string_unref(bordercolor);
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_border_spacing(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *node_name = NULL;
+ dom_string *cellspacing = NULL;
+
+ err = dom_node_get_node_name(node, &node_name);
+ if ((err != DOM_NO_ERR) || (node_name == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (!dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_table)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(node_name);
+
+ err = dom_element_get_attribute(node,
+ corestring_dom_cellspacing, &cellspacing);
+ if ((err != DOM_NO_ERR) || (cellspacing == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+
+ if (parse_dimension((const char *)dom_string_data(cellspacing),
+ false,
+ &hint->data.position.h.value,
+ &hint->data.position.h.unit)) {
+
+ hint->data.position.v = hint->data.position.h;
+ hint->status = CSS_BORDER_SPACING_SET;
+
+ dom_string_unref(cellspacing);
+ return CSS_OK;
+ }
+
+ dom_string_unref(cellspacing);
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_width(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_string *width = NULL;
+ dom_exception err;
+ bool textarea = false;
+ bool input = false;
+
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_hr) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_table) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_width, &width);
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_textarea)) {
+ textarea = true;
+ err = dom_element_get_attribute(node,
+ corestring_dom_cols, &width);
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_input)) {
+ input = true;
+ err = dom_element_get_attribute(node,
+ corestring_dom_size, &width);
+ }
+
+ dom_string_unref(name);
+
+ if ((err != DOM_NO_ERR) || (width == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (parse_dimension((const char *)dom_string_data(width),
+ false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_WIDTH_SET;
+ dom_string_unref(width);
+
+ if (textarea) {
+ hint->data.length.unit = CSS_UNIT_EX;
+ }
+
+ if (input) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_type, &width);
+ if (err != DOM_NO_ERR) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if ((width == NULL) ||
+ dom_string_caseless_lwc_isequal(width,
+ corestring_lwc_text) ||
+ dom_string_caseless_lwc_isequal(width,
+ corestring_lwc_search) ||
+ dom_string_caseless_lwc_isequal(width,
+ corestring_lwc_file) ||
+ dom_string_caseless_lwc_isequal(width,
+ corestring_lwc_password)) {
+ hint->data.length.unit = CSS_UNIT_EX;
+ }
+ dom_string_unref(width);
+ }
+
+ return CSS_OK;
+ }
+
+ dom_string_unref(width);
+ return CSS_PROPERTY_NOT_SET;
+
+}
+
+static css_error node_presentational_hint_height(nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_string *name;
+ dom_string *height = NULL;
+ dom_exception err;
+ bool textarea = false;
+
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
+ dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_height, &height);
+ } else if (dom_string_caseless_lwc_isequal(name,
+ corestring_lwc_textarea)) {
+ textarea = true;
+ err = dom_element_get_attribute(node,
+ corestring_dom_rows, &height);
+ }
+
+ dom_string_unref(name);
+
+ if ((err != DOM_NO_ERR) || (height == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (parse_dimension((const char *)dom_string_data(height),
+ false,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ hint->status = CSS_HEIGHT_SET;
+
+ if (textarea) {
+ hint->data.length.unit = CSS_UNIT_EM;
+ }
+
+ dom_string_unref(height);
+ return CSS_OK;
+ }
+
+ dom_string_unref(height);
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_font_size(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *node_name = NULL;
+ dom_string *size;
+
+ err = dom_node_get_node_name(node, &node_name);
+ if ((err != DOM_NO_ERR) || (node_name == NULL)) {
+ return CSS_NOMEM;
+ }
+
+ if (!dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_font)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(node_name);
+
+ err = dom_element_get_attribute(node, corestring_dom_size, &size);
+ if ((err != DOM_NO_ERR) || (size == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (parse_font_size((const char *)dom_string_data(size),
+ &hint->status,
+ &hint->data.length.value,
+ &hint->data.length.unit)) {
+ dom_string_unref(size);
+ return CSS_OK;
+ }
+
+ dom_string_unref(size);
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_float(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *node_name = NULL;
+ dom_string *align;
+
+ err = dom_node_get_node_name(node, &node_name);
+ if ((err != DOM_NO_ERR) || (node_name == NULL)) {
+ return CSS_NOMEM;
+ }
+
+ /** \todo input[type=image][align=*] - $11.3.3 */
+ if (!dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_applet) &&
+ !dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_embed) &&
+ !dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_iframe) &&
+ !dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_img) &&
+ !dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_object)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(node_name);
+
+ err = dom_element_get_attribute(node, corestring_dom_align, &align);
+ if ((err != DOM_NO_ERR) || (align == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_left)) {
+ hint->status = CSS_FLOAT_LEFT;
+ dom_string_unref(align);
+ return CSS_OK;
+ } else if (dom_string_caseless_lwc_isequal(align,
+ corestring_lwc_right)) {
+ hint->status = CSS_FLOAT_RIGHT;
+ dom_string_unref(align);
+ return CSS_OK;
+ }
+
+ dom_string_unref(align);
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_color(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ css_error error;
+ dom_exception err;
+ dom_string *node_name = NULL;
+ dom_string *color;
+
+ err = dom_node_get_node_name(node, &node_name);
+ if ((err != DOM_NO_ERR) || (node_name == NULL)) {
+ return CSS_NOMEM;
+ }
+
+ if (dom_string_caseless_lwc_isequal(node_name, corestring_lwc_a)) {
+ /* find body node */
+ css_qname qs;
+ dom_node *bodynode = NULL;
+ bool is_visited;
+
+ qs.ns = NULL;
+ qs.name = lwc_string_ref(corestring_lwc_body);
+ if (named_ancestor_node(ctx, node, &qs,
+ (void *)&bodynode) != CSS_OK) {
+ /* Didn't find, or had error */
+ lwc_string_unref(qs.name);
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ lwc_string_unref(qs.name);
+
+ /* deal with missing body ancestor */
+ if (bodynode == NULL) {
+ dom_string_unref(node_name);
+ return CSS_BADPARM;
+ }
+
+ error = node_is_visited(ctx, node, &is_visited);
+ if (error != CSS_OK)
+ return error;
+
+ if (is_visited) {
+ err = dom_element_get_attribute(bodynode,
+ corestring_dom_vlink, &color);
+ if ((err != DOM_NO_ERR) || (color == NULL)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ } else {
+ err = dom_element_get_attribute(bodynode,
+ corestring_dom_link, &color);
+ if ((err != DOM_NO_ERR) || (color == NULL)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ }
+ } else if (dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_body)) {
+ err = dom_element_get_attribute(node,
+ corestring_dom_text, &color);
+ if ((err != DOM_NO_ERR) || (color == NULL)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ } else {
+ err = dom_element_get_attribute(node,
+ corestring_dom_color, &color);
+ if ((err != DOM_NO_ERR) || (color == NULL)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+ }
+
+ if (!nscss_parse_colour((const char *)dom_string_data(color),
+ &hint->data.color)) {
+ dom_string_unref(color);
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ hint->status = CSS_COLOR_COLOR;
+
+ dom_string_unref(color);
+ dom_string_unref(node_name);
+
+ return CSS_OK;
+}
+
+static css_error node_presentational_hint_caption_side(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *node_name = NULL;
+ dom_string *align = NULL;
+
+ err = dom_node_get_node_name(node, &node_name);
+ if ((err != DOM_NO_ERR) || (node_name == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (!dom_string_caseless_lwc_isequal(node_name,
+ corestring_lwc_caption)) {
+ dom_string_unref(node_name);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ dom_string_unref(node_name);
+
+ err = dom_element_get_attribute(node, corestring_dom_align, &align);
+ if ((err != DOM_NO_ERR) || (align == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (dom_string_caseless_lwc_isequal(align, corestring_lwc_bottom)) {
+ hint->status = CSS_CAPTION_SIDE_BOTTOM;
+ dom_string_unref(align);
+ return CSS_OK;
+ }
+
+ dom_string_unref(align);
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_background_color(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *bgcolor;
+
+ err = dom_element_get_attribute(node,
+ corestring_dom_bgcolor, &bgcolor);
+ if ((err != DOM_NO_ERR) || (bgcolor == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ if (nscss_parse_colour((const char *)dom_string_data(bgcolor),
+ &hint->data.color)) {
+ hint->status = CSS_BACKGROUND_COLOR_COLOR;
+ dom_string_unref(bgcolor);
+ return CSS_OK;
+ }
+
+ dom_string_unref(bgcolor);
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+static css_error node_presentational_hint_background_image(
+ nscss_select_ctx *ctx,
+ dom_node *node,
+ css_hint *hint)
+{
+ dom_exception err;
+ dom_string *atr_val;
+ nserror error;
+ nsurl *url;
+ lwc_string *iurl;
+ lwc_error lerror;
+
+ err = dom_element_get_attribute(node,
+ corestring_dom_background, &atr_val);
+ if ((err != DOM_NO_ERR) || (atr_val == NULL)) {
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ error = nsurl_join(ctx->base_url,
+ (const char *)dom_string_data(atr_val), &url);
+
+ dom_string_unref(atr_val);
+
+ if (error != NSERROR_OK) {
+ return CSS_NOMEM;
+ }
+
+ lerror = lwc_intern_string(nsurl_access(url),
+ nsurl_length(url), &iurl);
+
+ nsurl_unref(url);
+
+ if (lerror == lwc_error_oom) {
+ return CSS_NOMEM;
+ }
+
+ if (lerror == lwc_error_ok) {
+ hint->data.string = iurl;
+ hint->status = CSS_BACKGROUND_IMAGE_IMAGE;
+ return CSS_OK;
+ }
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
+/* Exported function, documeted in css/hints.h */
+css_error node_presentational_hint(void *pw, void *node,
+ uint32_t property, css_hint *hint)
+{
+
+ switch (property) {
+ case CSS_PROP_BACKGROUND_IMAGE:
+ return node_presentational_hint_background_image(pw, node, hint);
+
+ case CSS_PROP_BACKGROUND_COLOR:
+ return node_presentational_hint_background_color(pw, node, hint);
+ case CSS_PROP_CAPTION_SIDE:
+ return node_presentational_hint_caption_side(pw, node, hint);
+
+ case CSS_PROP_COLOR:
+ return node_presentational_hint_color(pw, node, hint);
+
+ case CSS_PROP_FLOAT:
+ return node_presentational_hint_float(pw, node, hint);
+
+ case CSS_PROP_FONT_SIZE:
+ return node_presentational_hint_font_size(pw, node, hint);
+
+ case CSS_PROP_HEIGHT:
+ return node_presentational_hint_height(pw, node, hint);
+
+ case CSS_PROP_WIDTH:
+ return node_presentational_hint_width(pw, node, hint);
+
+ case CSS_PROP_BORDER_SPACING:
+ return node_presentational_hint_border_spacing(pw, node, hint);
+
+ case CSS_PROP_BORDER_TOP_COLOR :
+ case CSS_PROP_BORDER_RIGHT_COLOR :
+ case CSS_PROP_BORDER_BOTTOM_COLOR :
+ case CSS_PROP_BORDER_LEFT_COLOR :
+ return node_presentational_hint_border_trbl_color(pw, node, hint);
+
+ case CSS_PROP_BORDER_TOP_STYLE :
+ case CSS_PROP_BORDER_RIGHT_STYLE :
+ case CSS_PROP_BORDER_BOTTOM_STYLE :
+ case CSS_PROP_BORDER_LEFT_STYLE :
+ return node_presentational_hint_border_trbl_style(pw, node, hint);
+
+ case CSS_PROP_BORDER_TOP_WIDTH :
+ case CSS_PROP_BORDER_RIGHT_WIDTH :
+ case CSS_PROP_BORDER_BOTTOM_WIDTH :
+ case CSS_PROP_BORDER_LEFT_WIDTH :
+ return node_presentational_hint_border_trbl_width(pw, node, hint);
+
+ case CSS_PROP_MARGIN_TOP :
+ case CSS_PROP_MARGIN_BOTTOM :
+ return node_presentational_hint_margin_tb(pw, node, hint);
+
+ case CSS_PROP_MARGIN_RIGHT:
+ case CSS_PROP_MARGIN_LEFT:
+ return node_presentational_hint_margin_rl(pw, node, hint, property);
+
+ case CSS_PROP_PADDING_TOP:
+ case CSS_PROP_PADDING_RIGHT :
+ case CSS_PROP_PADDING_BOTTOM :
+ case CSS_PROP_PADDING_LEFT:
+ return node_presentational_hint_padding_trbl(pw, node, hint);
+
+ case CSS_PROP_TEXT_ALIGN:
+ return node_presentational_hint_text_align(pw, node, hint);
+
+ case CSS_PROP_VERTICAL_ALIGN:
+ return node_presentational_hint_vertical_align(pw, node, hint);
+ }
+
+ return CSS_PROPERTY_NOT_SET;
+}
+
diff --git a/css/hints.h b/css/hints.h
new file mode 100644
index 0000000..68d4c10
--- /dev/null
+++ b/css/hints.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2009 John-Mark Bell <jmb(a)netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NETSURF_CSS_HINTS_H_
+#define NETSURF_CSS_HINTS_H_
+
+#include <stdint.h>
+
+#include "css/css.h"
+
+
+
+
+/**
+ * Callback to retrieve presentational hints for a node
+ *
+ * \param pw HTML document
+ * \param node DOM node
+ * \param property CSS property to retrieve
+ * \param hint Pointer to hint object to populate
+ * \return CSS_OK on success,
+ * CSS_PROPERTY_NOT_SET if there is no hint for the requested property,
+ * CSS_NOMEM on memory exhaustion.
+ */
+css_error node_presentational_hint(
+ void *pw,
+ void *node,
+ uint32_t property,
+ css_hint *hint);
+
+bool nscss_parse_colour(const char *data, css_color *result);
+
+#endif
diff --git a/css/select.c b/css/select.c
index 33d918c..a44f30f 100644
--- a/css/select.c
+++ b/css/select.c
@@ -17,28 +17,23 @@
*/
#include <assert.h>
-#include <stdbool.h>
#include <string.h>
#include <strings.h>
-#include "content/content_protected.h"
#include "content/urldb.h"
#include "desktop/system_colour.h"
#include "utils/nsoption.h"
#include "utils/corestrings.h"
#include "utils/log.h"
-#include "utils/utils.h"
#include "css/internal.h"
+#include "css/hints.h"
#include "css/select.h"
-#include "css/utils.h"
static css_error node_name(void *pw, void *node, css_qname *qname);
static css_error node_classes(void *pw, void *node,
lwc_string ***classes, uint32_t *n_classes);
static css_error node_id(void *pw, void *node, lwc_string **id);
-static css_error named_ancestor_node(void *pw, void *node,
- const css_qname *qname, void **ancestor);
static css_error named_parent_node(void *pw, void *node,
const css_qname *qname, void **parent);
static css_error named_sibling_node(void *pw, void *node,
@@ -78,7 +73,6 @@ static css_error node_count_siblings(void *pw, void *node,
bool same_name, bool after, int32_t *count);
static css_error node_is_empty(void *pw, void *node, bool *match);
static css_error node_is_link(void *pw, void *node, bool *match);
-static css_error node_is_visited(void *pw, void *node, bool *match);
static css_error node_is_hover(void *pw, void *node, bool *match);
static css_error node_is_active(void *pw, void *node, bool *match);
static css_error node_is_focus(void *pw, void *node, bool *match);
@@ -88,8 +82,6 @@ static css_error node_is_checked(void *pw, void *node, bool *match);
static css_error node_is_target(void *pw, void *node, bool *match);
static css_error node_is_lang(void *pw, void *node,
lwc_string *lang, bool *match);
-static css_error node_presentational_hint(void *pw, void *node,
- uint32_t property, css_hint *hint);
static css_error ua_default_for_property(void *pw, uint32_t property,
css_hint *hint);
static css_error set_libcss_node_data(void *pw, void *node,
@@ -97,18 +89,9 @@ static css_error set_libcss_node_data(void *pw, void *node,
static css_error get_libcss_node_data(void *pw, void *node,
void **libcss_node_data);
-static int cmp_colour_name(const void *a, const void *b);
-static bool parse_named_colour(const char *data, css_color *result);
-static bool parse_dimension(const char *data, bool strict,
- css_fixed *length, css_unit *unit);
-static bool parse_number(const char *data, bool non_negative, bool real,
- css_fixed *value, size_t *consumed);
-static bool parse_font_size(const char *size, uint8_t *val,
- css_fixed *len, css_unit *unit);
+static css_error nscss_compute_font_size(void *pw, const css_hint *parent,
+ css_hint *size);
-static bool isWhitespace(char c);
-static bool isHex(char c);
-static uint8_t charToHex(char c);
/**
* Selection callback table for libcss
@@ -465,64 +448,6 @@ css_error nscss_compute_font_size(void *pw, const css_hint *parent,
return CSS_OK;
}
-/**
- * Parser for colours specified in attribute values.
- *
- * \param data Data to parse (NUL-terminated)
- * \param result Pointer to location to receive resulting css_color
- * \return true on success, false on invalid input
- */
-bool nscss_parse_colour(const char *data, css_color *result)
-{
- size_t len = strlen(data);
- uint8_t r, g, b;
-
- /* 2 */
- if (len == 0)
- return false;
-
- /* 3 */
- if (len == SLEN("transparent") && strcasecmp(data, "transparent") == 0)
- return false;
-
- /* 4 */
- if (parse_named_colour(data, result))
- return true;
-
- /** \todo Implement HTML5's utterly insane legacy colour parsing */
-
- if (data[0] == '#') {
- data++;
- len--;
- }
-
- if (len == 3 && isHex(data[0]) && isHex(data[1]) && isHex(data[2])) {
- r = charToHex(data[0]);
- g = charToHex(data[1]);
- b = charToHex(data[2]);
-
- r |= (r << 4);
- g |= (g << 4);
- b |= (b << 4);
-
- *result = (0xff << 24) | (r << 16) | (g << 8) | b;
-
- return true;
- } else if (len == 6 && isHex(data[0]) && isHex(data[1]) &&
- isHex(data[2]) && isHex(data[3]) && isHex(data[4]) &&
- isHex(data[5])) {
- r = (charToHex(data[0]) << 4) | charToHex(data[1]);
- g = (charToHex(data[2]) << 4) | charToHex(data[3]);
- b = (charToHex(data[4]) << 4) | charToHex(data[5]);
-
- *result = (0xff << 24) | (r << 16) | (g << 8) | b;
-
- return true;
- }
-
- return false;
-}
-
/******************************************************************************
* Style selection callbacks *
******************************************************************************/
@@ -1844,1792 +1769,87 @@ css_error node_is_lang(void *pw, void *node,
return CSS_OK;
}
-static css_error
-node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_string *valign = NULL;
- dom_exception err;
-
- err = dom_node_get_node_name(node, &name);
- if (err != DOM_NO_ERR)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_col) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_thead) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_tbody) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_tfoot) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
- err = dom_element_get_attribute(node,
- corestring_dom_valign, &valign);
- if (err != DOM_NO_ERR || valign == NULL) {
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_top)) {
- hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_middle)) {
- hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_bottom)) {
- hint->status = CSS_VERTICAL_ALIGN_BOTTOM;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_baseline)) {
- hint->status = CSS_VERTICAL_ALIGN_BASELINE;
- } else {
- dom_string_unref(valign);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(valign);
- dom_string_unref(name);
-
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_applet) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_embed) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_iframe) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_img) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_object)) {
- /** \todo input[type=image][align=*] - $11.3.3 */
- err = dom_element_get_attribute(node,
- corestring_dom_align, &valign);
- if (err != DOM_NO_ERR || valign == NULL) {
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_top)) {
- hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_bottom) ||
- dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_baseline)) {
- hint->status = CSS_VERTICAL_ALIGN_BASELINE;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_texttop)) {
- hint->status = CSS_VERTICAL_ALIGN_TEXT_TOP;
- } else if (dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_absmiddle) ||
- dom_string_caseless_lwc_isequal(valign,
- corestring_lwc_abscenter)) {
- hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
- } else {
- dom_string_unref(valign);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(valign);
- dom_string_unref(name);
-
- return CSS_OK;
- }
-
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_text_align(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
+/**
+ * Callback to retrieve the User-Agent defaults for a CSS property.
+ *
+ * \param pw HTML document
+ * \param property Property to retrieve defaults for
+ * \param hint Pointer to hint object to populate
+ * \return CSS_OK on success,
+ * CSS_INVALID if the property should not have a user-agent default.
+ */
+css_error ua_default_for_property(void *pw, uint32_t property, css_hint *hint)
{
- dom_string *name;
- dom_string *align = NULL;
- dom_exception err;
-
- err = dom_node_get_node_name(node, &name);
- if (err != DOM_NO_ERR)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_p) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h1) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h2) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h3) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h4) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h5) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_h6)) {
- err = dom_element_get_attribute(node,
- corestring_dom_align, &align);
- if (err != DOM_NO_ERR || align == NULL) {
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_left)) {
- hint->status = CSS_TEXT_ALIGN_LEFT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_center)) {
- hint->status = CSS_TEXT_ALIGN_CENTER;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_right)) {
- hint->status = CSS_TEXT_ALIGN_RIGHT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_justify)) {
- hint->status = CSS_TEXT_ALIGN_JUSTIFY;
- } else {
- dom_string_unref(align);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(align);
- dom_string_unref(name);
-
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_center)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
-
- dom_string_unref(name);
-
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_caption)) {
- err = dom_element_get_attribute(node,
- corestring_dom_align, &align);
- if (err != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (align == NULL || dom_string_caseless_lwc_isequal(align,
- corestring_lwc_center)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_left)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_right)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_justify)) {
- hint->status = CSS_TEXT_ALIGN_JUSTIFY;
- } else {
- dom_string_unref(align);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (align != NULL)
- dom_string_unref(align);
- dom_string_unref(name);
-
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_div) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_thead) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_tbody) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_tfoot) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_tr) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name,
- corestring_lwc_th)) {
- err = dom_element_get_attribute(node,
- corestring_dom_align, &align);
- if (err != DOM_NO_ERR || align == NULL) {
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_center)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_left)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_right)) {
- hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_justify)) {
- hint->status = CSS_TEXT_ALIGN_JUSTIFY;
- } else {
- dom_string_unref(align);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
+ if (property == CSS_PROP_COLOR) {
+ hint->data.color = 0xff000000;
+ hint->status = CSS_COLOR_COLOR;
+ } else if (property == CSS_PROP_FONT_FAMILY) {
+ hint->data.strings = NULL;
+ switch (nsoption_int(font_default)) {
+ case PLOT_FONT_FAMILY_SANS_SERIF:
+ hint->status = CSS_FONT_FAMILY_SANS_SERIF;
+ break;
+ case PLOT_FONT_FAMILY_SERIF:
+ hint->status = CSS_FONT_FAMILY_SERIF;
+ break;
+ case PLOT_FONT_FAMILY_MONOSPACE:
+ hint->status = CSS_FONT_FAMILY_MONOSPACE;
+ break;
+ case PLOT_FONT_FAMILY_CURSIVE:
+ hint->status = CSS_FONT_FAMILY_CURSIVE;
+ break;
+ case PLOT_FONT_FAMILY_FANTASY:
+ hint->status = CSS_FONT_FAMILY_FANTASY;
+ break;
}
-
- dom_string_unref(align);
- dom_string_unref(name);
-
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_table)) {
- /* Tables usually reset alignment */
- hint->status = CSS_TEXT_ALIGN_INHERIT_IF_NON_MAGIC;
-
- dom_string_unref(name);
-
- return CSS_OK;
+ } else if (property == CSS_PROP_QUOTES) {
+ /** \todo Not exactly useful :) */
+ hint->data.strings = NULL;
+ hint->status = CSS_QUOTES_NONE;
+ } else if (property == CSS_PROP_VOICE_FAMILY) {
+ /** \todo Fix this when we have voice-family done */
+ hint->data.strings = NULL;
+ hint->status = 0;
} else {
- dom_string_unref(name);
-
- return CSS_PROPERTY_NOT_SET;
- }
-
-}
-
-static css_error
-node_presentational_hint_padding_trbl(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_exception exc;
- dom_string *cellpadding = NULL;
- css_error result = CSS_PROPERTY_NOT_SET;
-
- exc = dom_node_get_node_name(node, &name);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
- css_qname qs;
- dom_node *tablenode = NULL;
- qs.ns = NULL;
- qs.name = lwc_string_ref(corestring_lwc_table);
- if (named_ancestor_node(ctx, node, &qs,
- (void *)&tablenode) != CSS_OK) {
- /* Didn't find, or had error */
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- lwc_string_unref(qs.name);
-
- if (tablenode != NULL) {
- exc = dom_element_get_attribute(tablenode,
- corestring_dom_cellpadding,
- &cellpadding);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
- }
- /* No need to unref tablenode, named_ancestor_node does not
- * return a reffed node to the CSS
- */
+ return CSS_INVALID;
}
-
- dom_string_unref(name);
- if (cellpadding != NULL) {
- if (parse_dimension(dom_string_data(cellpadding), false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_PADDING_SET;
- result = CSS_OK;
- }
- dom_string_unref(cellpadding);
- }
-
- return result;
+ return CSS_OK;
}
-static css_error
-node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint,
- uint32_t property)
+css_error set_libcss_node_data(void *pw, void *node, void *libcss_node_data)
{
- dom_string *n;
- dom_exception exc;
-
- exc = dom_node_get_node_name(node, &n);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (dom_string_caseless_lwc_isequal(n, corestring_lwc_img) ||
- dom_string_caseless_lwc_isequal(n, corestring_lwc_applet)) {
- dom_string_unref(n);
- exc = dom_element_get_attribute(node,
- corestring_dom_hspace, &n);
- if (exc != DOM_NO_ERR) {
- return CSS_BADPARM;
- }
-
- if (n == NULL)
- return CSS_PROPERTY_NOT_SET;
-
- if (parse_dimension(dom_string_data(n), false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_MARGIN_SET;
- } else {
- dom_string_unref(n);
- return CSS_PROPERTY_NOT_SET;
- }
- dom_string_unref(n);
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_table) ||
- dom_string_caseless_lwc_isequal(n, corestring_lwc_align)) {
- dom_string_unref(n);
- exc = dom_element_get_attribute(node,
- corestring_dom_align, &n);
- if (exc != DOM_NO_ERR) {
- return CSS_BADPARM;
- }
-
- if (n == NULL)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(n,
- corestring_lwc_center) ||
- dom_string_caseless_lwc_isequal(n,
- corestring_lwc_abscenter) ||
- dom_string_caseless_lwc_isequal(n,
- corestring_lwc_middle) ||
- dom_string_caseless_lwc_isequal(n,
- corestring_lwc_absmiddle)) {
- hint->status = CSS_MARGIN_AUTO;
- } else {
- dom_string_unref(n);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(n);
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_hr)) {
- dom_string_unref(n);
- exc = dom_element_get_attribute(node,
- corestring_dom_align, &n);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (n == NULL)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(n,
- corestring_lwc_left)) {
- if (property == CSS_PROP_MARGIN_LEFT) {
- hint->data.length.value = 0;
- hint->data.length.unit = CSS_UNIT_PX;
- hint->status = CSS_MARGIN_SET;
- } else {
- hint->status = CSS_MARGIN_AUTO;
- }
- } else if (dom_string_caseless_lwc_isequal(n,
- corestring_lwc_center)) {
- hint->status = CSS_MARGIN_AUTO;
- } else if (dom_string_caseless_lwc_isequal(n,
- corestring_lwc_right)) {
- if (property == CSS_PROP_MARGIN_RIGHT) {
- hint->data.length.value = 0;
- hint->data.length.unit = CSS_UNIT_PX;
- hint->status = CSS_MARGIN_SET;
- } else {
- hint->status = CSS_MARGIN_AUTO;
- }
- } else {
- dom_string_unref(n);
- return CSS_PROPERTY_NOT_SET;
- }
- dom_string_unref(n);
-
- return CSS_OK;
- }
-
- dom_string_unref(n);
-
- return CSS_PROPERTY_NOT_SET;
-}
+ dom_node *n = node;
+ dom_exception err;
+ void *old_node_data;
-static css_error
-node_presentational_hint_margin_tb(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name, *vspace = NULL;
- dom_exception exc;
-
- exc = dom_node_get_node_name(node, &name);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
- exc = dom_element_get_attribute(node, corestring_dom_vspace,
- &vspace);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
- }
-
- dom_string_unref(name);
-
- if (vspace == NULL)
- return CSS_PROPERTY_NOT_SET;
-
- if (parse_dimension(dom_string_data(vspace), false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_MARGIN_SET;
- } else {
- dom_string_unref(vspace);
- return CSS_PROPERTY_NOT_SET;
+ /* Set this node's node data */
+ err = dom_node_set_user_data(n,
+ corestring_dom___ns_key_libcss_node_data,
+ libcss_node_data, nscss_dom_user_data_handler,
+ (void *) &old_node_data);
+ if (err != DOM_NO_ERR) {
+ return CSS_NOMEM;
}
- dom_string_unref(vspace);
+ assert(old_node_data == NULL);
return CSS_OK;
}
-static css_error
-node_presentational_hint_border_trbl_width(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
+css_error get_libcss_node_data(void *pw, void *node, void **libcss_node_data)
{
- dom_string *name;
- dom_exception exc;
- dom_string *width = NULL;
- bool is_table_cell = false;
-
- exc = dom_node_get_node_name(node, &name);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
- css_qname qs;
- dom_node *tablenode = NULL;
- qs.ns = NULL;
- qs.name = lwc_string_ref(corestring_lwc_table);
- if (named_ancestor_node(ctx, node, &qs,
- (void *)&tablenode) != CSS_OK) {
- /* Didn't find, or had error */
- lwc_string_unref(qs.name);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- lwc_string_unref(qs.name);
- if (tablenode != NULL) {
- exc = dom_element_get_attribute(tablenode,
- corestring_dom_border, &width);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
- }
- /* No need to unref tablenode, named_ancestor_node does not
- * return a reffed node to the CSS
- */
- is_table_cell = true;
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_table)) {
- exc = dom_element_get_attribute(node, corestring_dom_border,
- &width);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
- }
-
- dom_string_unref(name);
-
- if (width == NULL)
- return CSS_PROPERTY_NOT_SET;
-
- if (parse_dimension(dom_string_data(width), false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- if (is_table_cell &&
- INTTOFIX(0) !=
- hint->data.length.value) {
- hint->data.length.value = INTTOFIX(1);
- hint->data.length.unit = CSS_UNIT_PX;
- }
- hint->status = CSS_BORDER_WIDTH_WIDTH;
- } else {
- dom_string_unref(width);
- return CSS_PROPERTY_NOT_SET;
- }
+ dom_node *n = node;
+ dom_exception err;
- dom_string_unref(width);
+ /* Get this node's node data */
+ err = dom_node_get_user_data(n,
+ corestring_dom___ns_key_libcss_node_data,
+ libcss_node_data);
+ if (err != DOM_NO_ERR) {
+ return CSS_NOMEM;
+ }
return CSS_OK;
}
-static css_error
-node_presentational_hint_border_trbl_style(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_exception exc;
-
- exc = dom_node_get_node_name(node, &name);
- if (exc != DOM_NO_ERR)
- return CSS_BADPARM;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
- css_qname qs;
- dom_node *tablenode = NULL;
- qs.ns = NULL;
- qs.name = lwc_string_ref(corestring_lwc_table);
-
- if (named_ancestor_node(ctx, node, &qs,
- (void *)&tablenode) != CSS_OK) {
- /* Didn't find, or had error */
- lwc_string_unref(qs.name);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- lwc_string_unref(qs.name);
-
- if (tablenode != NULL) {
- bool has_border = false;
-
- exc = dom_element_has_attribute(tablenode,
- corestring_dom_border,
- &has_border);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
-
- if (has_border) {
- hint->status = CSS_BORDER_STYLE_INSET;
- dom_string_unref(name);
- return CSS_OK;
- }
- }
- /* No need to unref tablenode, named_ancestor_node does not
- * return a reffed node to the CSS
- */
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_table)) {
- bool has_border = false;
-
- exc = dom_element_has_attribute(node,
- corestring_dom_border,
- &has_border);
- if (exc != DOM_NO_ERR) {
- dom_string_unref(name);
- return CSS_BADPARM;
- }
-
- if (has_border) {
- hint->status = CSS_BORDER_STYLE_OUTSET;
- dom_string_unref(name);
- return CSS_OK;
- }
- }
-
- dom_string_unref(name);
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_border_trbl_color(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_string *bordercolor = NULL;
- dom_exception err;
-
- err = dom_node_get_node_name(node, &name);
- if (err != DOM_NO_ERR)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
- css_qname qs;
- dom_node *tablenode = NULL;
- qs.ns = NULL;
- qs.name = lwc_string_ref(corestring_lwc_table);
-
- if (named_ancestor_node(ctx, node, &qs,
- (void *)&tablenode) != CSS_OK) {
- /* Didn't find, or had error */
- lwc_string_unref(qs.name);
- dom_string_unref(name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- lwc_string_unref(qs.name);
-
- if (tablenode != NULL) {
- err = dom_element_get_attribute(node,
- corestring_dom_bordercolor,
- &bordercolor);
- }
- /* No need to unref tablenode, named_ancestor_node does not
- * return a reffed node to the CSS
- */
-
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_table)) {
- err = dom_element_get_attribute(node,
- corestring_dom_bordercolor,
- &bordercolor);
- }
-
- dom_string_unref(name);
-
- if ((err != DOM_NO_ERR) || (bordercolor == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (nscss_parse_colour((const char *)dom_string_data(bordercolor),
- &hint->data.color)) {
- hint->status = CSS_BORDER_COLOR_COLOR;
- dom_string_unref(bordercolor);
- return CSS_OK;
- }
-
- dom_string_unref(bordercolor);
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_border_spacing(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *node_name = NULL;
- dom_string *cellspacing = NULL;
-
- err = dom_node_get_node_name(node, &node_name);
- if ((err != DOM_NO_ERR) || (node_name == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (!dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_table)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(node_name);
-
- err = dom_element_get_attribute(node,
- corestring_dom_cellspacing, &cellspacing);
- if ((err != DOM_NO_ERR) || (cellspacing == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
-
- if (parse_dimension((const char *)dom_string_data(cellspacing),
- false,
- &hint->data.position.h.value,
- &hint->data.position.h.unit)) {
-
- hint->data.position.v = hint->data.position.h;
- hint->status = CSS_BORDER_SPACING_SET;
-
- dom_string_unref(cellspacing);
- return CSS_OK;
- }
-
- dom_string_unref(cellspacing);
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_width(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_string *width = NULL;
- dom_exception err;
- bool textarea = false;
- bool input = false;
-
- err = dom_node_get_node_name(node, &name);
- if (err != DOM_NO_ERR)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_hr) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_table) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
- err = dom_element_get_attribute(node,
- corestring_dom_width, &width);
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_textarea)) {
- textarea = true;
- err = dom_element_get_attribute(node,
- corestring_dom_cols, &width);
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_input)) {
- input = true;
- err = dom_element_get_attribute(node,
- corestring_dom_size, &width);
- }
-
- dom_string_unref(name);
-
- if ((err != DOM_NO_ERR) || (width == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (parse_dimension((const char *)dom_string_data(width),
- false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_WIDTH_SET;
- dom_string_unref(width);
-
- if (textarea) {
- hint->data.length.unit = CSS_UNIT_EX;
- }
-
- if (input) {
- err = dom_element_get_attribute(node,
- corestring_dom_type, &width);
- if (err != DOM_NO_ERR) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if ((width == NULL) ||
- dom_string_caseless_lwc_isequal(width,
- corestring_lwc_text) ||
- dom_string_caseless_lwc_isequal(width,
- corestring_lwc_search) ||
- dom_string_caseless_lwc_isequal(width,
- corestring_lwc_file) ||
- dom_string_caseless_lwc_isequal(width,
- corestring_lwc_password)) {
- hint->data.length.unit = CSS_UNIT_EX;
- }
- dom_string_unref(width);
- }
-
- return CSS_OK;
- }
-
- dom_string_unref(width);
- return CSS_PROPERTY_NOT_SET;
-
-}
-
-static css_error
-node_presentational_hint_height(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_string *name;
- dom_string *height = NULL;
- dom_exception err;
- bool textarea = false;
-
- err = dom_node_get_node_name(node, &name);
- if (err != DOM_NO_ERR)
- return CSS_PROPERTY_NOT_SET;
-
- if (dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
- dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
- err = dom_element_get_attribute(node,
- corestring_dom_height, &height);
- } else if (dom_string_caseless_lwc_isequal(name,
- corestring_lwc_textarea)) {
- textarea = true;
- err = dom_element_get_attribute(node,
- corestring_dom_rows, &height);
- }
-
- dom_string_unref(name);
-
- if ((err != DOM_NO_ERR) || (height == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (parse_dimension((const char *)dom_string_data(height),
- false,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- hint->status = CSS_HEIGHT_SET;
-
- if (textarea) {
- hint->data.length.unit = CSS_UNIT_EM;
- }
-
- dom_string_unref(height);
- return CSS_OK;
- }
-
- dom_string_unref(height);
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_font_size(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *node_name = NULL;
- dom_string *size;
-
- err = dom_node_get_node_name(node, &node_name);
- if ((err != DOM_NO_ERR) || (node_name == NULL)) {
- return CSS_NOMEM;
- }
-
- if (!dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_font)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(node_name);
-
- err = dom_element_get_attribute(node, corestring_dom_size, &size);
- if ((err != DOM_NO_ERR) || (size == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (parse_font_size((const char *)dom_string_data(size),
- &hint->status,
- &hint->data.length.value,
- &hint->data.length.unit)) {
- dom_string_unref(size);
- return CSS_OK;
- }
-
- dom_string_unref(size);
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_float(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *node_name = NULL;
- dom_string *align;
-
- err = dom_node_get_node_name(node, &node_name);
- if ((err != DOM_NO_ERR) || (node_name == NULL)) {
- return CSS_NOMEM;
- }
-
- /** \todo input[type=image][align=*] - $11.3.3 */
- if (!dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_applet) &&
- !dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_embed) &&
- !dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_iframe) &&
- !dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_img) &&
- !dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_object)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(node_name);
-
- err = dom_element_get_attribute(node, corestring_dom_align, &align);
- if ((err != DOM_NO_ERR) || (align == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_left)) {
- hint->status = CSS_FLOAT_LEFT;
- dom_string_unref(align);
- return CSS_OK;
- } else if (dom_string_caseless_lwc_isequal(align,
- corestring_lwc_right)) {
- hint->status = CSS_FLOAT_RIGHT;
- dom_string_unref(align);
- return CSS_OK;
- }
-
- dom_string_unref(align);
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_color(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- css_error error;
- dom_exception err;
- dom_string *node_name = NULL;
- dom_string *color;
-
- err = dom_node_get_node_name(node, &node_name);
- if ((err != DOM_NO_ERR) || (node_name == NULL)) {
- return CSS_NOMEM;
- }
-
- if (dom_string_caseless_lwc_isequal(node_name, corestring_lwc_a)) {
- /* find body node */
- css_qname qs;
- dom_node *bodynode = NULL;
- bool is_visited;
-
- qs.ns = NULL;
- qs.name = lwc_string_ref(corestring_lwc_body);
- if (named_ancestor_node(ctx, node, &qs,
- (void *)&bodynode) != CSS_OK) {
- /* Didn't find, or had error */
- lwc_string_unref(qs.name);
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- lwc_string_unref(qs.name);
-
- /* deal with missing body ancestor */
- if (bodynode == NULL) {
- dom_string_unref(node_name);
- return CSS_BADPARM;
- }
-
- error = node_is_visited(ctx, node, &is_visited);
- if (error != CSS_OK)
- return error;
-
- if (is_visited) {
- err = dom_element_get_attribute(bodynode,
- corestring_dom_vlink, &color);
- if ((err != DOM_NO_ERR) || (color == NULL)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
- } else {
- err = dom_element_get_attribute(bodynode,
- corestring_dom_link, &color);
- if ((err != DOM_NO_ERR) || (color == NULL)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
- }
- } else if (dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_body)) {
- err = dom_element_get_attribute(node,
- corestring_dom_text, &color);
- if ((err != DOM_NO_ERR) || (color == NULL)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
- } else {
- err = dom_element_get_attribute(node,
- corestring_dom_color, &color);
- if ((err != DOM_NO_ERR) || (color == NULL)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
- }
-
- if (!nscss_parse_colour((const char *)dom_string_data(color),
- &hint->data.color)) {
- dom_string_unref(color);
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- hint->status = CSS_COLOR_COLOR;
-
- dom_string_unref(color);
- dom_string_unref(node_name);
-
- return CSS_OK;
-}
-
-static css_error
-node_presentational_hint_caption_side(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *node_name = NULL;
- dom_string *align = NULL;
-
- err = dom_node_get_node_name(node, &node_name);
- if ((err != DOM_NO_ERR) || (node_name == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (!dom_string_caseless_lwc_isequal(node_name,
- corestring_lwc_caption)) {
- dom_string_unref(node_name);
- return CSS_PROPERTY_NOT_SET;
- }
-
- dom_string_unref(node_name);
-
- err = dom_element_get_attribute(node, corestring_dom_align, &align);
- if ((err != DOM_NO_ERR) || (align == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (dom_string_caseless_lwc_isequal(align, corestring_lwc_bottom)) {
- hint->status = CSS_CAPTION_SIDE_BOTTOM;
- dom_string_unref(align);
- return CSS_OK;
- }
-
- dom_string_unref(align);
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_background_color(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *bgcolor;
-
- err = dom_element_get_attribute(node,
- corestring_dom_bgcolor, &bgcolor);
- if ((err != DOM_NO_ERR) || (bgcolor == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- if (nscss_parse_colour((const char *)dom_string_data(bgcolor),
- &hint->data.color)) {
- hint->status = CSS_BACKGROUND_COLOR_COLOR;
- dom_string_unref(bgcolor);
- return CSS_OK;
- }
-
- dom_string_unref(bgcolor);
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-static css_error
-node_presentational_hint_background_image(nscss_select_ctx *ctx,
- dom_node *node,
- css_hint *hint)
-{
- dom_exception err;
- dom_string *atr_val;
- nserror error;
- nsurl *url;
- lwc_string *iurl;
- lwc_error lerror;
-
- err = dom_element_get_attribute(node,
- corestring_dom_background, &atr_val);
- if ((err != DOM_NO_ERR) || (atr_val == NULL)) {
- return CSS_PROPERTY_NOT_SET;
- }
-
- error = nsurl_join(ctx->base_url,
- (const char *)dom_string_data(atr_val), &url);
-
- dom_string_unref(atr_val);
-
- if (error != NSERROR_OK) {
- return CSS_NOMEM;
- }
-
- lerror = lwc_intern_string(nsurl_access(url),
- nsurl_length(url), &iurl);
-
- nsurl_unref(url);
-
- if (lerror == lwc_error_oom) {
- return CSS_NOMEM;
- }
-
- if (lerror == lwc_error_ok) {
- hint->data.string = iurl;
- hint->status = CSS_BACKGROUND_IMAGE_IMAGE;
- return CSS_OK;
- }
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-/**
- * Callback to retrieve presentational hints for a node
- *
- * \param pw HTML document
- * \param node DOM node
- * \param property CSS property to retrieve
- * \param hint Pointer to hint object to populate
- * \return CSS_OK on success,
- * CSS_PROPERTY_NOT_SET if there is no hint for the requested property,
- * CSS_NOMEM on memory exhaustion.
- */
-css_error node_presentational_hint(void *pw, void *node,
- uint32_t property, css_hint *hint)
-{
-
- switch (property) {
- case CSS_PROP_BACKGROUND_IMAGE:
- return node_presentational_hint_background_image(pw, node, hint);
-
- case CSS_PROP_BACKGROUND_COLOR:
- return node_presentational_hint_background_color(pw, node, hint);
- case CSS_PROP_CAPTION_SIDE:
- return node_presentational_hint_caption_side(pw, node, hint);
-
- case CSS_PROP_COLOR:
- return node_presentational_hint_color(pw, node, hint);
-
- case CSS_PROP_FLOAT:
- return node_presentational_hint_float(pw, node, hint);
-
- case CSS_PROP_FONT_SIZE:
- return node_presentational_hint_font_size(pw, node, hint);
-
- case CSS_PROP_HEIGHT:
- return node_presentational_hint_height(pw, node, hint);
-
- case CSS_PROP_WIDTH:
- return node_presentational_hint_width(pw, node, hint);
-
- case CSS_PROP_BORDER_SPACING:
- return node_presentational_hint_border_spacing(pw, node, hint);
-
- case CSS_PROP_BORDER_TOP_COLOR :
- case CSS_PROP_BORDER_RIGHT_COLOR :
- case CSS_PROP_BORDER_BOTTOM_COLOR :
- case CSS_PROP_BORDER_LEFT_COLOR :
- return node_presentational_hint_border_trbl_color(pw, node, hint);
-
- case CSS_PROP_BORDER_TOP_STYLE :
- case CSS_PROP_BORDER_RIGHT_STYLE :
- case CSS_PROP_BORDER_BOTTOM_STYLE :
- case CSS_PROP_BORDER_LEFT_STYLE :
- return node_presentational_hint_border_trbl_style(pw, node, hint);
-
- case CSS_PROP_BORDER_TOP_WIDTH :
- case CSS_PROP_BORDER_RIGHT_WIDTH :
- case CSS_PROP_BORDER_BOTTOM_WIDTH :
- case CSS_PROP_BORDER_LEFT_WIDTH :
- return node_presentational_hint_border_trbl_width(pw, node, hint);
-
- case CSS_PROP_MARGIN_TOP :
- case CSS_PROP_MARGIN_BOTTOM :
- return node_presentational_hint_margin_tb(pw, node, hint);
-
- case CSS_PROP_MARGIN_RIGHT:
- case CSS_PROP_MARGIN_LEFT:
- return node_presentational_hint_margin_rl(pw, node, hint, property);
-
- case CSS_PROP_PADDING_TOP:
- case CSS_PROP_PADDING_RIGHT :
- case CSS_PROP_PADDING_BOTTOM :
- case CSS_PROP_PADDING_LEFT:
- return node_presentational_hint_padding_trbl(pw, node, hint);
-
- case CSS_PROP_TEXT_ALIGN:
- return node_presentational_hint_text_align(pw, node, hint);
-
- case CSS_PROP_VERTICAL_ALIGN:
- return node_presentational_hint_vertical_align(pw, node, hint);
- }
-
- return CSS_PROPERTY_NOT_SET;
-}
-
-/**
- * Callback to retrieve the User-Agent defaults for a CSS property.
- *
- * \param pw HTML document
- * \param property Property to retrieve defaults for
- * \param hint Pointer to hint object to populate
- * \return CSS_OK on success,
- * CSS_INVALID if the property should not have a user-agent default.
- */
-css_error ua_default_for_property(void *pw, uint32_t property, css_hint *hint)
-{
- if (property == CSS_PROP_COLOR) {
- hint->data.color = 0xff000000;
- hint->status = CSS_COLOR_COLOR;
- } else if (property == CSS_PROP_FONT_FAMILY) {
- hint->data.strings = NULL;
- switch (nsoption_int(font_default)) {
- case PLOT_FONT_FAMILY_SANS_SERIF:
- hint->status = CSS_FONT_FAMILY_SANS_SERIF;
- break;
- case PLOT_FONT_FAMILY_SERIF:
- hint->status = CSS_FONT_FAMILY_SERIF;
- break;
- case PLOT_FONT_FAMILY_MONOSPACE:
- hint->status = CSS_FONT_FAMILY_MONOSPACE;
- break;
- case PLOT_FONT_FAMILY_CURSIVE:
- hint->status = CSS_FONT_FAMILY_CURSIVE;
- break;
- case PLOT_FONT_FAMILY_FANTASY:
- hint->status = CSS_FONT_FAMILY_FANTASY;
- break;
- }
- } else if (property == CSS_PROP_QUOTES) {
- /** \todo Not exactly useful :) */
- hint->data.strings = NULL;
- hint->status = CSS_QUOTES_NONE;
- } else if (property == CSS_PROP_VOICE_FAMILY) {
- /** \todo Fix this when we have voice-family done */
- hint->data.strings = NULL;
- hint->status = 0;
- } else {
- return CSS_INVALID;
- }
-
- return CSS_OK;
-}
-
-css_error set_libcss_node_data(void *pw, void *node, void *libcss_node_data)
-{
- dom_node *n = node;
- dom_exception err;
- void *old_node_data;
-
- /* Set this node's node data */
- err = dom_node_set_user_data(n,
- corestring_dom___ns_key_libcss_node_data,
- libcss_node_data, nscss_dom_user_data_handler,
- (void *) &old_node_data);
- if (err != DOM_NO_ERR) {
- return CSS_NOMEM;
- }
-
- assert(old_node_data == NULL);
-
- return CSS_OK;
-}
-
-css_error get_libcss_node_data(void *pw, void *node, void **libcss_node_data)
-{
- dom_node *n = node;
- dom_exception err;
-
- /* Get this node's node data */
- err = dom_node_get_user_data(n,
- corestring_dom___ns_key_libcss_node_data,
- libcss_node_data);
- if (err != DOM_NO_ERR) {
- return CSS_NOMEM;
- }
-
- return CSS_OK;
-}
-
-/**
- * Mapping of colour name to CSS color
- */
-struct colour_map {
- const char *name;
- css_color color;
-};
-
-/**
- * Name comparator for named colour matching
- *
- * \param a Name to match
- * \param b Colour map entry to consider
- * \return 0 on match,
- * < 0 if a < b,
- * > 0 if b > a.
- */
-int cmp_colour_name(const void *a, const void *b)
-{
- const char *aa = a;
- const struct colour_map *bb = b;
-
- return strcasecmp(aa, bb->name);
-}
-
-/**
- * Parse a named colour
- *
- * \param name Name to parse
- * \param result Pointer to location to receive css_color
- * \return true on success, false on invalid input
- */
-bool parse_named_colour(const char *name, css_color *result)
-{
- static const struct colour_map named_colours[] = {
- { "aliceblue", 0xfff0f8ff },
- { "antiquewhite", 0xfffaebd7 },
- { "aqua", 0xff00ffff },
- { "aquamarine", 0xff7fffd4 },
- { "azure", 0xfff0ffff },
- { "beige", 0xfff5f5dc },
- { "bisque", 0xffffe4c4 },
- { "black", 0xff000000 },
- { "blanchedalmond", 0xffffebcd },
- { "blue", 0xff0000ff },
- { "blueviolet", 0xff8a2be2 },
- { "brown", 0xffa52a2a },
- { "burlywood", 0xffdeb887 },
- { "cadetblue", 0xff5f9ea0 },
- { "chartreuse", 0xff7fff00 },
- { "chocolate", 0xffd2691e },
- { "coral", 0xffff7f50 },
- { "cornflowerblue", 0xff6495ed },
- { "cornsilk", 0xfffff8dc },
- { "crimson", 0xffdc143c },
- { "cyan", 0xff00ffff },
- { "darkblue", 0xff00008b },
- { "darkcyan", 0xff008b8b },
- { "darkgoldenrod", 0xffb8860b },
- { "darkgray", 0xffa9a9a9 },
- { "darkgreen", 0xff006400 },
- { "darkgrey", 0xffa9a9a9 },
- { "darkkhaki", 0xffbdb76b },
- { "darkmagenta", 0xff8b008b },
- { "darkolivegreen", 0xff556b2f },
- { "darkorange", 0xffff8c00 },
- { "darkorchid", 0xff9932cc },
- { "darkred", 0xff8b0000 },
- { "darksalmon", 0xffe9967a },
- { "darkseagreen", 0xff8fbc8f },
- { "darkslateblue", 0xff483d8b },
- { "darkslategray", 0xff2f4f4f },
- { "darkslategrey", 0xff2f4f4f },
- { "darkturquoise", 0xff00ced1 },
- { "darkviolet", 0xff9400d3 },
- { "deeppink", 0xffff1493 },
- { "deepskyblue", 0xff00bfff },
- { "dimgray", 0xff696969 },
- { "dimgrey", 0xff696969 },
- { "dodgerblue", 0xff1e90ff },
- { "feldspar", 0xffd19275 },
- { "firebrick", 0xffb22222 },
- { "floralwhite", 0xfffffaf0 },
- { "forestgreen", 0xff228b22 },
- { "fuchsia", 0xffff00ff },
- { "gainsboro", 0xffdcdcdc },
- { "ghostwhite", 0xfff8f8ff },
- { "gold", 0xffffd700 },
- { "goldenrod", 0xffdaa520 },
- { "gray", 0xff808080 },
- { "green", 0xff008000 },
- { "greenyellow", 0xffadff2f },
- { "grey", 0xff808080 },
- { "honeydew", 0xfff0fff0 },
- { "hotpink", 0xffff69b4 },
- { "indianred", 0xffcd5c5c },
- { "indigo", 0xff4b0082 },
- { "ivory", 0xfffffff0 },
- { "khaki", 0xfff0e68c },
- { "lavender", 0xffe6e6fa },
- { "lavenderblush", 0xfffff0f5 },
- { "lawngreen", 0xff7cfc00 },
- { "lemonchiffon", 0xfffffacd },
- { "lightblue", 0xffadd8e6 },
- { "lightcoral", 0xfff08080 },
- { "lightcyan", 0xffe0ffff },
- { "lightgoldenrodyellow", 0xfffafad2 },
- { "lightgray", 0xffd3d3d3 },
- { "lightgreen", 0xff90ee90 },
- { "lightgrey", 0xffd3d3d3 },
- { "lightpink", 0xffffb6c1 },
- { "lightsalmon", 0xffffa07a },
- { "lightseagreen", 0xff20b2aa },
- { "lightskyblue", 0xff87cefa },
- { "lightslateblue", 0xff8470ff },
- { "lightslategray", 0xff778899 },
- { "lightslategrey", 0xff778899 },
- { "lightsteelblue", 0xffb0c4de },
- { "lightyellow", 0xffffffe0 },
- { "lime", 0xff00ff00 },
- { "limegreen", 0xff32cd32 },
- { "linen", 0xfffaf0e6 },
- { "magenta", 0xffff00ff },
- { "maroon", 0xff800000 },
- { "mediumaquamarine", 0xff66cdaa },
- { "mediumblue", 0xff0000cd },
- { "mediumorchid", 0xffba55d3 },
- { "mediumpurple", 0xff9370db },
- { "mediumseagreen", 0xff3cb371 },
- { "mediumslateblue", 0xff7b68ee },
- { "mediumspringgreen", 0xff00fa9a },
- { "mediumturquoise", 0xff48d1cc },
- { "mediumvioletred", 0xffc71585 },
- { "midnightblue", 0xff191970 },
- { "mintcream", 0xfff5fffa },
- { "mistyrose", 0xffffe4e1 },
- { "moccasin", 0xffffe4b5 },
- { "navajowhite", 0xffffdead },
- { "navy", 0xff000080 },
- { "oldlace", 0xfffdf5e6 },
- { "olive", 0xff808000 },
- { "olivedrab", 0xff6b8e23 },
- { "orange", 0xffffa500 },
- { "orangered", 0xffff4500 },
- { "orchid", 0xffda70d6 },
- { "palegoldenrod", 0xffeee8aa },
- { "palegreen", 0xff98fb98 },
- { "paleturquoise", 0xffafeeee },
- { "palevioletred", 0xffdb7093 },
- { "papayawhip", 0xffffefd5 },
- { "peachpuff", 0xffffdab9 },
- { "peru", 0xffcd853f },
- { "pink", 0xffffc0cb },
- { "plum", 0xffdda0dd },
- { "powderblue", 0xffb0e0e6 },
- { "purple", 0xff800080 },
- { "red", 0xffff0000 },
- { "rosybrown", 0xffbc8f8f },
- { "royalblue", 0xff4169e1 },
- { "saddlebrown", 0xff8b4513 },
- { "salmon", 0xfffa8072 },
- { "sandybrown", 0xfff4a460 },
- { "seagreen", 0xff2e8b57 },
- { "seashell", 0xfffff5ee },
- { "sienna", 0xffa0522d },
- { "silver", 0xffc0c0c0 },
- { "skyblue", 0xff87ceeb },
- { "slateblue", 0xff6a5acd },
- { "slategray", 0xff708090 },
- { "slategrey", 0xff708090 },
- { "snow", 0xfffffafa },
- { "springgreen", 0xff00ff7f },
- { "steelblue", 0xff4682b4 },
- { "tan", 0xffd2b48c },
- { "teal", 0xff008080 },
- { "thistle", 0xffd8bfd8 },
- { "tomato", 0xffff6347 },
- { "turquoise", 0xff40e0d0 },
- { "violet", 0xffee82ee },
- { "violetred", 0xffd02090 },
- { "wheat", 0xfff5deb3 },
- { "white", 0xffffffff },
- { "whitesmoke", 0xfff5f5f5 },
- { "yellow", 0xffffff00 },
- { "yellowgreen", 0xff9acd32 }
- };
- const struct colour_map *entry;
-
- entry = bsearch(name, named_colours,
- sizeof(named_colours) / sizeof(named_colours[0]),
- sizeof(named_colours[0]),
- cmp_colour_name);
-
- if (entry != NULL)
- *result = entry->color;
-
- return entry != NULL;
-}
-
-/**
- * Parse a dimension string
- *
- * \param data Data to parse (NUL-terminated)
- * \param strict Whether to enforce strict parsing rules
- * \param length Pointer to location to receive dimension's length
- * \param unit Pointer to location to receive dimension's unit
- * \return true on success, false on invalid input
- */
-bool parse_dimension(const char *data, bool strict, css_fixed *length,
- css_unit *unit)
-{
- size_t len;
- size_t read;
- css_fixed value;
-
- len = strlen(data);
-
- if (parse_number(data, false, true, &value, &read) == false)
- return false;
-
- if (strict && value < INTTOFIX(1))
- return false;
-
- *length = value;
-
- if (len > read && data[read] == '%')
- *unit = CSS_UNIT_PCT;
- else
- *unit = CSS_UNIT_PX;
-
- return true;
-}
-
-/**
- * Parse a number string
- *
- * \param data Data to parse (NUL-terminated)
- * \param maybe_negative Negative numbers permitted
- * \param real Floating point numbers permitted
- * \param value Pointer to location to receive numeric value
- * \param consumed Pointer to location to receive number of input
- * bytes consumed
- * \return true on success, false on invalid input
- */
-bool parse_number(const char *data, bool maybe_negative, bool real,
- css_fixed *value, size_t *consumed)
-{
- size_t len;
- const uint8_t *ptr;
- int32_t intpart = 0;
- int32_t fracpart = 0;
- int32_t pwr = 1;
- int sign = 1;
-
- *consumed = 0;
-
- len = strlen(data);
- ptr = (const uint8_t *) data;
-
- if (len == 0)
- return false;
-
- /* Skip leading whitespace */
- while (len > 0 && isWhitespace(ptr[0])) {
- len--;
- ptr++;
- }
-
- if (len == 0)
- return false;
-
- /* Extract sign, if any */
- if (ptr[0] == '+') {
- len--;
- ptr++;
- } else if (ptr[0] == '-' && maybe_negative) {
- sign = -1;
- len--;
- ptr++;
- }
-
- if (len == 0)
- return false;
-
- /* Must have a digit [0,9] */
- if ('0' > ptr[0] || ptr[0] > '9')
- return false;
-
- /* Now extract intpart, assuming base 10 */
- while (len > 0) {
- /* Stop on first non-digit */
- if (ptr[0] < '0' || '9' < ptr[0])
- break;
-
- /* Prevent overflow of 'intpart'; proper clamping below */
- if (intpart < (1 << 22)) {
- intpart *= 10;
- intpart += ptr[0] - '0';
- }
- ptr++;
- len--;
- }
-
- /* And fracpart, again, assuming base 10 */
- if (real && len > 1 && ptr[0] == '.' &&
- ('0' <= ptr[1] && ptr[1] <= '9')) {
- ptr++;
- len--;
-
- while (len > 0) {
- if (ptr[0] < '0' || '9' < ptr[0])
- break;
-
- if (pwr < 1000000) {
- pwr *= 10;
- fracpart *= 10;
- fracpart += ptr[0] - '0';
- }
- ptr++;
- len--;
- }
-
- fracpart = ((1 << 10) * fracpart + pwr/2) / pwr;
- if (fracpart >= (1 << 10)) {
- intpart++;
- fracpart &= (1 << 10) - 1;
- }
- }
-
- if (sign > 0) {
- /* If the result is larger than we can represent,
- * then clamp to the maximum value we can store. */
- if (intpart >= (1 << 21)) {
- intpart = (1 << 21) - 1;
- fracpart = (1 << 10) - 1;
- }
- } else {
- /* If the negated result is smaller than we can represent
- * then clamp to the minimum value we can store. */
- if (intpart >= (1 << 21)) {
- intpart = -(1 << 21);
- fracpart = 0;
- } else {
- intpart = -intpart;
- if (fracpart) {
- fracpart = (1 << 10) - fracpart;
- intpart--;
- }
- }
- }
-
- *value = (intpart << 10) | fracpart;
-
- *consumed = ptr - (const uint8_t *) data;
-
- return true;
-}
-
-/**
- * Parse a font \@size attribute
- *
- * \param size Data to parse (NUL-terminated)
- * \param val Pointer to location to receive enum value
- * \param len Pointer to location to receive length
- * \param unit Pointer to location to receive unit
- * \return True on success, false on failure
- */
-bool parse_font_size(const char *size, uint8_t *val,
- css_fixed *len, css_unit *unit)
-{
- static const uint8_t size_map[] = {
- CSS_FONT_SIZE_XX_SMALL,
- CSS_FONT_SIZE_SMALL,
- CSS_FONT_SIZE_MEDIUM,
- CSS_FONT_SIZE_LARGE,
- CSS_FONT_SIZE_X_LARGE,
- CSS_FONT_SIZE_XX_LARGE,
- CSS_FONT_SIZE_DIMENSION /* xxx-large (see below) */
- };
-
- const char *p = size;
- char mode;
- int value = 0;
-
- /* Skip whitespace */
- while (*p != '\0' && isWhitespace(*p))
- p++;
-
- mode = *p;
-
- /* Skip +/- */
- if (mode == '+' || mode == '-')
- p++;
-
- /* Need at least one digit */
- if (*p < '0' || *p > '9') {
- return false;
- }
-
- /* Consume digits, computing value */
- while ('0' <= *p && *p <= '9') {
- value = value * 10 + (*p - '0');
- p++;
- }
-
- /* Resolve relative sizes */
- if (mode == '+')
- value += 3;
- else if (mode == '-')
- value = 3 - value;
-
- /* Clamp to range [1,7] */
- if (value < 1)
- value = 1;
- else if (value > 7)
- value = 7;
-
- if (value == 7) {
- /* Manufacture xxx-large */
- *len = FDIV(FMUL(INTTOFIX(3), INTTOFIX(nsoption_int(font_size))),
- F_10);
- } else {
- /* Len is irrelevant */
- *len = 0;
- }
-
- *unit = CSS_UNIT_PT;
- *val = size_map[value - 1];
-
- return true;
-}
-
-/******************************************************************************
- * Utility functions *
- ******************************************************************************/
-
-/**
- * Determine if a given character is whitespace
- *
- * \param c Character to consider
- * \return true if character is whitespace, false otherwise
- */
-bool isWhitespace(char c)
-{
- return c == ' ' || c == '\t' || c == '\f' || c == '\r' || c == '\n';
-}
-
-/**
- * Determine if a given character is a valid hex digit
- *
- * \param c Character to consider
- * \return true if character is a valid hex digit, false otherwise
- */
-bool isHex(char c)
-{
- return ('0' <= c && c <= '9') ||
- ('A' <= (c & ~0x20) && (c & ~0x20) <= 'F');
-}
-
-/**
- * Convert a character representing a hex digit to the corresponding hex value
- *
- * \param c Character to convert
- * \return Hex value represented by character
- *
- * \note This function assumes an ASCII-compatible character set
- */
-uint8_t charToHex(char c)
-{
- /* 0-9 */
- c -= '0';
-
- /* A-F */
- if (c > 9)
- c -= 'A' - '9' - 1;
-
- /* a-f */
- if (c > 15)
- c -= 'a' - 'A';
-
- return c;
-}
-
diff --git a/css/select.h b/css/select.h
index 13b9e12..0e0be95 100644
--- a/css/select.h
+++ b/css/select.h
@@ -49,9 +49,9 @@ css_select_results *nscss_get_style(nscss_select_ctx *ctx, dom_node *n,
css_computed_style *nscss_get_blank_style(nscss_select_ctx *ctx,
const css_computed_style *parent);
-css_error nscss_compute_font_size(void *pw, const css_hint *parent,
- css_hint *size);
-bool nscss_parse_colour(const char *data, css_color *result);
+css_error named_ancestor_node(void *pw, void *node,
+ const css_qname *qname, void **ancestor);
+css_error node_is_visited(void *pw, void *node, bool *match);
#endif
diff --git a/render/box_construct.c b/render/box_construct.c
index 581c6f2..228e6a6 100644
--- a/render/box_construct.c
+++ b/render/box_construct.c
@@ -36,8 +36,9 @@
#include "utils/config.h"
#include "content/content_protected.h"
#include "css/css.h"
-#include "css/utils.h"
+#include "css/hints.h"
#include "css/select.h"
+#include "css/utils.h"
#include "utils/nsoption.h"
#include "utils/corestrings.h"
#include "utils/locale.h"
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=f5c48695a21298dc84f...
commit f5c48695a21298dc84fd6f3ba23e8255e3338f4c
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Update to test shared computed styles version of libcss.
diff --git a/css/select.c b/css/select.c
index f4570f7..33d918c 100644
--- a/css/select.c
+++ b/css/select.c
@@ -290,7 +290,7 @@ css_select_results *nscss_get_style(nscss_select_ctx *ctx, dom_node *n,
error = css_computed_style_compose(ctx->parent_style,
styles->styles[CSS_PSEUDO_ELEMENT_NONE],
nscss_compute_font_size, NULL,
- styles->styles[CSS_PSEUDO_ELEMENT_NONE]);
+ &(styles->styles[CSS_PSEUDO_ELEMENT_NONE]));
if (error != CSS_OK) {
css_select_results_destroy(styles);
return NULL;
@@ -317,7 +317,7 @@ css_select_results *nscss_get_style(nscss_select_ctx *ctx, dom_node *n,
styles->styles[CSS_PSEUDO_ELEMENT_NONE],
styles->styles[pseudo_element],
nscss_compute_font_size, NULL,
- styles->styles[pseudo_element]);
+ &(styles->styles[pseudo_element]));
if (error != CSS_OK) {
/* TODO: perhaps this shouldn't be quite so
* catastrophic? */
@@ -371,7 +371,7 @@ css_computed_style *nscss_get_blank_style(nscss_select_ctx *ctx,
return NULL;
error = css_computed_style_compose(parent, partial,
- nscss_compute_font_size, NULL, partial);
+ nscss_compute_font_size, NULL, &partial);
if (error != CSS_OK) {
css_computed_style_destroy(partial);
return NULL;
-----------------------------------------------------------------------
Summary of changes:
!NetSurf/Resources/CSS,f79 | 15 +-
!NetSurf/Resources/nl/welcome.html,faf | 2 +-
Docs/BUILDING-GTK | 46 +-
Makefile | 53 +-
amiga/arexx.c | 2 +-
amiga/bitmap.c | 12 +-
amiga/bitmap.h | 2 +-
amiga/dist/NetSurf.guide | 2 +
amiga/drag.c | 2 +-
amiga/dt_anim.c | 14 +-
amiga/dt_picture.c | 6 +-
amiga/dt_sound.c | 16 +-
amiga/file.c | 33 +-
amiga/filetype.c | 8 +-
amiga/font.c | 90 +-
amiga/font_bitmap.c | 2 +-
amiga/font_scan.c | 21 +-
amiga/fs_backing_store.c | 6 +-
amiga/gui.c | 84 +-
amiga/libs.c | 18 +-
amiga/login.c | 1 +
amiga/menu.c | 123 +-
amiga/misc.c | 2 +-
amiga/options.h | 1 +
amiga/os3support.c | 12 +-
amiga/plotters.c | 44 +-
amiga/plugin_hack.c | 18 +-
amiga/resources/blankspace.png | Bin 0 -> 85 bytes
amiga/schedule.c | 6 +-
amiga/theme.c | 2 +-
atari/about.h | 11 +-
atari/bitmap.c | 29 +-
atari/certview.c | 593 ++--
atari/certview.h | 18 +-
atari/clipboard.c | 176 +-
atari/clipboard.h | 46 +-
atari/cookies.c | 15 +-
atari/cookies.h | 54 +-
atari/ctxmenu.c | 4 +-
atari/ctxmenu.h | 44 +-
atari/deskmenu.c | 355 ++-
atari/deskmenu.h | 11 +-
atari/download.c | 14 +-
atari/download.h | 114 +-
atari/encoding.c | 117 +-
atari/file.h | 10 +-
atari/filetype.c | 4 +-
atari/findfile.c | 18 +-
atari/findfile.h | 1 -
atari/font.c | 143 +-
atari/font.h | 47 +-
atari/gui.c | 56 +-
atari/history.c | 78 +-
atari/history.h | 56 +-
atari/hotlist.c | 162 +-
atari/hotlist.h | 94 +-
atari/login.h | 52 +-
atari/osspec.c | 19 +-
atari/osspec.h | 81 +-
atari/plot/font_freetype.c | 1038 +++----
atari/plot/font_freetype.h | 101 +-
atari/plot/font_internal.c | 4703 ++++++++++++++++----------------
atari/plot/font_internal.h | 63 +-
atari/plot/font_vdi.c | 7 +-
atari/plot/font_vdi.h | 45 +-
atari/plot/fontplot.h | 18 +
atari/plot/plot.c | 2 +-
atari/redrawslots.c | 184 +-
atari/redrawslots.h | 62 +-
atari/rootwin.c | 39 +-
atari/rootwin.h | 124 +-
atari/save.h | 32 +-
atari/schedule.c | 23 +-
atari/search.c | 125 +-
atari/settings.c | 25 +-
atari/settings.h | 20 +-
atari/statusbar.c | 4 +-
atari/statusbar.h | 75 +-
atari/toolbar.c | 754 +++--
atari/toolbar.h | 44 +-
atari/treeview.c | 5 +-
atari/treeview.h | 78 +-
atari/verify_ssl.c | 6 +-
atari/verify_ssl.h | 48 +-
beos/bitmap.cpp | 6 +-
beos/fetch_rsrc.cpp | 15 +-
beos/font.cpp | 4 +-
beos/gui.cpp | 38 +-
beos/plotters.cpp | 4 +-
beos/scaffolding.cpp | 12 +-
beos/schedule.cpp | 15 +-
beos/throbber.cpp | 11 +-
beos/window.cpp | 18 +-
cocoa/DownloadWindowController.m | 3 +-
cocoa/NetsurfApp.m | 4 +-
cocoa/apple_image.h | 3 +
cocoa/apple_image.m | 201 +-
cocoa/bitmap.h | 2 +
cocoa/bitmap.m | 30 +-
cocoa/fetch.m | 10 +-
cocoa/plotter.m | 4 +-
content/content.c | 33 +-
content/fetch.c | 72 +-
content/fetch.h | 25 +-
content/fetchers/curl.c | 59 +-
content/fetchers/data.c | 11 +-
content/fetchers/resource.c | 199 +-
content/fs_backing_store.c | 239 +-
content/hlcache.c | 34 +-
content/llcache.c | 188 +-
content/urldb.c | 45 +-
css/css.c | 12 +-
css/hints.c | 240 +-
css/hints.h | 7 +-
css/select.c | 14 +-
desktop/browser.c | 40 +-
desktop/browser_history.c | 8 +-
desktop/cookie_manager.c | 11 +-
desktop/font_haru.c | 13 +-
desktop/frames.c | 4 +-
desktop/global_history.c | 27 +-
desktop/gui_factory.c | 16 +
desktop/gui_fetch.h | 31 +-
desktop/hotlist.c | 24 +-
desktop/knockout.c | 8 +-
desktop/mouse.c | 16 +-
desktop/netsurf.c | 41 +-
desktop/netsurf.h | 3 +-
desktop/print.c | 4 +-
desktop/save_complete.c | 8 +-
desktop/save_pdf.c | 38 +-
desktop/save_text.c | 6 +-
desktop/scrollbar.c | 2 +-
desktop/searchweb.c | 14 +-
desktop/sslcert_viewer.c | 8 +-
desktop/textarea.c | 28 +-
desktop/tree.c | 2 +-
desktop/treeview.c | 14 +-
framebuffer/bitmap.c | 10 +-
framebuffer/clipboard.c | 4 +-
framebuffer/fbtk/event.c | 4 +-
framebuffer/fbtk/fbtk.c | 23 +-
framebuffer/fbtk/scroll.c | 4 +-
framebuffer/fetch.c | 2 +-
framebuffer/font_freetype.c | 14 +-
framebuffer/framebuffer.c | 14 +-
framebuffer/gui.c | 44 +-
framebuffer/misc.c | 2 +-
framebuffer/schedule.c | 19 +-
gtk/Makefile.defaults | 11 +
gtk/Makefile.target | 102 +-
gtk/compat.c | 37 +
gtk/compat.h | 25 +
gtk/completion.c | 140 +-
gtk/completion.h | 30 +-
gtk/cookies.c | 116 +-
gtk/cookies.h | 9 +-
gtk/download.c | 27 +-
gtk/download.h | 11 +-
gtk/fetch.c | 31 +-
gtk/font_pango.c | 8 +-
gtk/gdk.c | 2 +-
gtk/gui.c | 418 ++-
gtk/gui.h | 26 -
gtk/history.c | 133 +-
gtk/history.h | 5 +-
gtk/hotlist.c | 84 +-
gtk/hotlist.h | 6 +-
gtk/login.c | 23 +-
desktop/version.c => gtk/login.h | 19 +-
gtk/plotters.c | 4 +-
gtk/preferences.c | 196 +-
gtk/print.c | 21 +-
gtk/res/gtkdefault.css | 21 -
gtk/res/messages.gresource.xml | 10 +
gtk/res/netsurf.gresource.xml | 69 +
gtk/res/nl/credits.html | 1 +
gtk/res/nl/licence.html | 1 +
gtk/res/nl/welcome.html | 1 +
gtk/resources.c | 593 ++++
gtk/resources.h | 109 +
gtk/scaffolding.c | 371 +--
gtk/schedule.c | 9 +-
gtk/ssl_cert.c | 18 +-
gtk/tabs.c | 4 +-
gtk/theme.c | 2 +-
gtk/throbber.c | 88 +-
gtk/throbber.h | 2 +-
gtk/toolbar.c | 77 +-
gtk/treeview.c | 17 +-
gtk/viewdata.c | 46 +-
gtk/window.c | 117 +-
image/bmp.c | 9 +-
image/gif.c | 8 +-
image/ico.c | 10 +-
image/image.c | 4 +-
image/image_cache.c | 93 +-
image/jpeg.c | 4 +-
image/nssprite.c | 4 +-
image/png.c | 25 +-
image/rsvg.c | 12 +-
javascript/jsapi.c | 4 +-
javascript/jsapi.h | 4 +-
javascript/jsapi/console.bnd | 2 +-
javascript/jsapi/htmldocument.bnd | 2 +-
javascript/jsapi/window.bnd | 2 +-
monkey/browser.c | 2 +-
monkey/dispatch.c | 2 +-
monkey/filetype.c | 2 +-
monkey/main.c | 10 +-
monkey/poll.c | 10 +-
monkey/schedule.c | 17 +-
render/box.c | 32 +-
render/box_construct.c | 2 +-
render/box_normalise.c | 24 +-
render/box_textarea.c | 21 +-
render/form.c | 128 +-
render/html.c | 42 +-
render/html_css.c | 37 +-
render/html_css_fetcher.c | 9 +-
render/html_interaction.c | 2 +-
render/html_object.c | 14 +-
render/html_script.c | 47 +-
render/imagemap.c | 21 +-
render/layout.c | 113 +-
render/table.c | 11 +-
render/textplain.c | 4 +-
resources/FatMessages | 277 +-
riscos/401login.c | 5 +-
riscos/bitmap.c | 26 +-
riscos/buffer.c | 18 +-
riscos/configure.c | 28 +-
riscos/configure/con_home.c | 1 +
riscos/configure/con_image.c | 4 +-
riscos/configure/con_language.c | 4 +-
riscos/configure/con_theme.c | 22 +-
riscos/content-handlers/artworks.c | 30 +-
riscos/content-handlers/draw.c | 6 +-
riscos/content-handlers/sprite.c | 3 +-
riscos/cookies.c | 2 +-
riscos/dialog.c | 49 +-
riscos/download.c | 128 +-
riscos/filetype.c | 36 +-
riscos/font.c | 67 +-
riscos/global_history.c | 2 +-
riscos/gui.c | 118 +-
riscos/gui/button_bar.c | 22 +-
riscos/gui/progress_bar.c | 17 +-
riscos/gui/status_bar.c | 53 +-
riscos/gui/throbber.c | 11 +-
riscos/gui/url_bar.c | 45 +-
riscos/help.c | 18 +-
riscos/history.c | 44 +-
riscos/hotlist.c | 4 +-
riscos/iconbar.c | 5 +-
riscos/image.c | 14 +-
riscos/menus.c | 31 +-
riscos/message.c | 6 +-
riscos/mouse.c | 5 +-
riscos/plotters.c | 70 +-
riscos/print.c | 65 +-
riscos/query.c | 19 +-
riscos/save.c | 85 +-
riscos/save_draw.c | 11 +-
riscos/schedule.c | 2 +-
riscos/sslcert.c | 33 +-
riscos/textarea.c | 113 +-
riscos/textselection.c | 39 +-
riscos/theme.c | 38 +-
riscos/theme_install.c | 5 +-
riscos/toolbar.c | 40 +-
riscos/treeview.c | 71 +-
riscos/ucstables.c | 6 +-
riscos/uri.c | 4 +-
riscos/url_complete.c | 61 +-
riscos/url_protocol.c | 17 +-
riscos/wimp.c | 115 +-
riscos/wimp_event.c | 55 +-
riscos/window.c | 163 +-
test/Makefile | 124 +-
test/bloom.c | 199 ++
test/llcache.c | 1 -
monkey/bitmap.h => test/log.c | 38 +-
test/nsoption.c | 6 +-
test/nsurl.c | 1286 +++++++--
test/urldbtest.c | 31 +-
utils/bloom.c | 61 +-
utils/container.c | 56 +-
utils/filename.c | 25 +-
utils/genpubsuffix.pl | 378 +++
utils/hashtable.c | 8 +-
utils/idna.c | 22 +-
utils/log.c | 86 +-
utils/log.h | 17 +-
utils/messages.c | 137 +-
utils/messages.h | 21 +-
utils/nsoption.c | 8 +-
utils/nsurl.c | 74 +-
utils/nsurl.h | 12 +-
utils/ring.h | 14 +-
utils/useragent.c | 2 +-
utils/utf8.c | 4 +-
utils/utils.c | 2 +-
windows/Makefile.target | 2 +-
windows/about.c | 8 +-
windows/bitmap.c | 29 +-
windows/download.c | 7 +-
windows/drawable.c | 22 +-
{atari => windows}/file.c | 114 +-
monkey/bitmap.h => windows/file.h | 13 +-
windows/filetype.c | 2 +-
windows/findfile.c | 4 +-
windows/gui.c | 266 +-
windows/gui.h | 1 -
windows/localhistory.c | 12 +-
windows/main.c | 12 +-
windows/plot.c | 62 +-
windows/prefs.c | 2 +-
windows/schedule.c | 27 +-
windows/windbg.h | 2 +-
windows/window.c | 79 +-
321 files changed, 12143 insertions(+), 9773 deletions(-)
create mode 100644 amiga/resources/blankspace.png
mode change 100755 => 100644 atari/bitmap.c
mode change 100755 => 100644 atari/bitmap.h
mode change 100755 => 100644 atari/clipboard.h
mode change 100755 => 100644 atari/download.c
mode change 100755 => 100644 atari/download.h
mode change 100755 => 100644 atari/filetype.c
mode change 100755 => 100644 atari/findfile.c
mode change 100755 => 100644 atari/findfile.h
mode change 100755 => 100644 atari/font.c
mode change 100755 => 100644 atari/font.h
mode change 100755 => 100644 atari/gui.h
mode change 100755 => 100644 atari/login.c
mode change 100755 => 100644 atari/login.h
mode change 100755 => 100644 atari/misc.c
mode change 100755 => 100644 atari/misc.h
mode change 100755 => 100644 atari/options.h
mode change 100755 => 100644 atari/plot/eddi.h
mode change 100755 => 100644 atari/plot/eddi.s
mode change 100755 => 100644 atari/plot/font_freetype.c
mode change 100755 => 100644 atari/plot/font_freetype.h
mode change 100755 => 100644 atari/plot/font_vdi.c
mode change 100755 => 100644 atari/plot/font_vdi.h
mode change 100755 => 100644 atari/plot/plot.c
mode change 100755 => 100644 atari/plot/plot.h
mode change 100755 => 100644 atari/rootwin.c
mode change 100755 => 100644 atari/rootwin.h
mode change 100755 => 100644 atari/schedule.c
mode change 100755 => 100644 atari/schedule.h
mode change 100755 => 100644 atari/statusbar.c
mode change 100755 => 100644 atari/statusbar.h
mode change 100755 => 100644 atari/verify_ssl.c
mode change 100755 => 100644 atari/verify_ssl.h
copy desktop/version.c => gtk/login.h (75%)
delete mode 100644 gtk/res/gtkdefault.css
create mode 100644 gtk/res/messages.gresource.xml
create mode 100644 gtk/res/netsurf.gresource.xml
create mode 120000 gtk/res/nl/credits.html
create mode 120000 gtk/res/nl/licence.html
create mode 120000 gtk/res/nl/welcome.html
create mode 100644 gtk/resources.c
create mode 100644 gtk/resources.h
create mode 100644 test/bloom.c
copy monkey/bitmap.h => test/log.c (52%)
create mode 100644 test/testament.h
create mode 100644 utils/genpubsuffix.pl
copy {atari => windows}/file.c (74%)
copy monkey/bitmap.h => windows/file.h (80%)
diff --git a/!NetSurf/Resources/CSS,f79 b/!NetSurf/Resources/CSS,f79
index 9ee7388..3892aff 100644
--- a/!NetSurf/Resources/CSS,f79
+++ b/!NetSurf/Resources/CSS,f79
@@ -116,29 +116,30 @@ form { display: block; }
input, button { background-color: #fff; color: #000; text-align: left;
font-family: sans-serif; width: auto; height: auto; overflow: hidden;
- border: 2px solid #333; padding: 1px 2px; line-height: 1.33; }
+ border: 1px solid #444; padding: 2px 3px; line-height: 1.33;
+ margin: 1px; }
input[readonly] { background-color: #ddd; color: #333; }
input[type=button], input[type=reset], input[type=submit], button {
background-color: #d9d9d9; color: #000; text-align: center;
- border: medium outset #d9d9d9; padding: 1px 0.5em; }
+ border: 2px outset #d9d9d9; padding: 1px 0.5em; }
input[type=image] { background-color: transparent; color: #000;
border: none; padding: 0 2px; }
input[type=checkbox], input[type=radio] { background-color: transparent;
border: none; padding: 0 0.1em; }
input[type=file] { background-color: #d9d9d9; color: #000; font-style: italic;
- border: medium inset #d9d9d9; padding: 1px 2px; }
+ border: 2px inset #d9d9d9; padding: 1px 2px; }
input[align=left] { float: left; }
input[align=right] { float: right; }
select { background-color: #d9d9d9; color: #000; text-align: left;
font-family: sans-serif; width: auto; height: auto; overflow: hidden;
- margin: 1px; border: medium inset #d9d9d9; padding: 1px 3px 1px 2px;
- white-space: nowrap; }
-select:after { content: "\25bc"; border-left: 4px ridge #d9d9d9; }
+ border: medium inset #d9d9d9; padding: 1px 3px 1px 2px;
+ white-space: nowrap; margin: 1px; }
+select:after { content: "\25bc"; border-left: 2px ridge #d9d9d9; }
textarea { background-color: #fff; color: #000; text-align: left;
font-family: monospace; width: auto; height: auto; overflow: scroll;
- margin: 1px; border: 2px solid #333; padding: 0 2px; }
+ margin: 1px; border: 1px solid #333; padding: 1px 3px; }
textarea[readonly] { background-color: #ddd; color: #333; }
fieldset { display: block; border: thin solid #888; margin: 1.12em 0; }
diff --git a/!NetSurf/Resources/nl/welcome.html,faf b/!NetSurf/Resources/nl/welcome.html,faf
index 31b24ad..f35260b 100644
--- a/!NetSurf/Resources/nl/welcome.html,faf
+++ b/!NetSurf/Resources/nl/welcome.html,faf
@@ -3,7 +3,7 @@
<head>
<title>Welkom bij NetSurf</title>
<style type="text/css">html,body{margin:0;padding:0;}body{color:#000;background:#fff;font-family:sans-serif;margin:0 auto;}a:link{text-decoration:underline;color:#00f;}a:visited{text-decoration:underline;color:#60a;}a:hover{text-decoration:none;}a:active{text-decoration:underline;color:#f00;}.banner{margin:0;padding:0;background:#94adff;text-align:left;}.banner img{border:none;color:#000;height:86px;width:308px;display:block;}.onlycontent{margin:0 1em;}.nslinks{display:table;width:100%;margin:0;border-spacing:0;padding:0;background:#ccd8ff;font-size:88%;}.nslinks li{display:table-cell;text-align:center;padding:0.2em 0.3em 0.3em;vertical-align:middle;}.nslinks li+li{border-left:2px solid #b1c3ff;}.version{padding:0;margin:1.2em auto 0;width:90%;color:#444;font-size:160%;}.intro{width: 90%;margin:1em auto;color:#666;}.websearch{margin:1.5em auto;padding:1.2em 0.3em;background:#d8e2ff;border:2px solid #c5d3ff;width:80%;text-align:center;}input[type=text]{border:2px solid #b6c7ff;background:#f9faff;color:#000;margin:2px;}input[type=submit]{border:2px outset #cedaff;color:#000;background:#cedaff;margin:2px;}.links{display:table;width:80%;margin:0 auto 3em;font-size:94%;}.links p{display:table-cell;}.links ul{padding-left:0.8em;margin-top:-1em;}.links ul+ul{padding-left:1em;}.footer{font-style:italic;color:#666;text-align:right;}.footer p{margin-top:1.5em;padding-top:0.4em;border-top:2px solid #94adff;}</style>
-<link rel="icon" type="image_png" href="http://www.netsurf-browser.org/webimages/favicon_png">
+<link rel="icon" type="image/png" href="http://www.netsurf-browser.org/webimages/favicon.png">
</head>
<body>
diff --git a/Docs/BUILDING-GTK b/Docs/BUILDING-GTK
index dab2bef..4ac0fc8 100644
--- a/Docs/BUILDING-GTK
+++ b/Docs/BUILDING-GTK
@@ -168,12 +168,14 @@
Building and executing NetSurf
--------------------------------
- First of all, you should examine the contents of Makefile.defaults
- and enable and disable relevant features as you see fit by creating
- a Makefile.config file. Some of these options can be automatically
- detected and used, and where this is the case they are set to such.
- Others cannot be automatically detected from the Makefile, so you
- will either need to install the dependencies, or set them to NO.
+ First of all, you should examine the options in Makefile.defaults
+ and gtk/Makefile.defaults and enable and disable relevant features
+ as you see fit by editing a Makefile.config file.
+
+ Some of these options can be automatically detected and used, and
+ where this is the case they are set to such. Others cannot be
+ automatically detected from the Makefile, so you will either need to
+ install the dependencies, or set them to NO.
You should then obtain NetSurf's dependencies, keeping in mind which options
you have enabled in the configuration file. See the next section for
@@ -197,6 +199,38 @@
sets up some environment variables which enable NetSurf to find its
resources.
+ Builtin resources
+-------------------
+
+ There are numerous resources that accompany NetSurf, such as the
+ image files for icons, cursors and the ui builder files that
+ construct the browsers interface.
+
+ Some of these resources can be compiled into the browser executable
+ removing the need to install these resources separately. The GLib
+ library on which GTK is based provides this functionality to
+ NetSurf.
+
+ Up until GLib version 2.32 only the GDK pixbuf could be integrated
+ in this way and is controlled with the NETSURF_USE_INLINE_PIXBUF
+ variable (set in makefile.config).
+
+ Glib version 2.32 and later integrated support for any file to be a
+ resource while depreciating the old inline pixbuf interface. NetSurf
+ gtk executables can integrate many resources using this interface,
+ configuration is controlled with the NETSURF_USE_GRESOURCE variable.
+
+ Loading from file is the fallback if a resource has not been
+ compiled in, because of this if both of these features are
+ unavailable (or disabled) NetSurf will automatically fall back to
+ loading all its resources from files.
+
+ The resource initialisation within the browser ensures it can access
+ all the resources at start time, however it does not verify the
+ resources are valid so failures could still occur subsequently. This
+ is especially true for file based resources as they can become
+ inaccessible after initialisation.
+
Note for packagers
====================
diff --git a/Makefile b/Makefile
index 107e61c..ff36456 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,8 @@
# make docs
#
+.PHONY: all
+
all: all-program
# Determine host type
@@ -778,7 +780,7 @@ $(eval $(foreach SOURCE,$(filter %.m,$(SOURCES)), \
#$(eval $(foreach SOURCE,$(filter %.s,$(SOURCES)), \
# $(call dependency_generate_s,$(SOURCE),$(subst /,_,$(SOURCE:.s=.d)),$(subst /,_,$(SOURCE:.s=.o)))))
-ifneq ($(MAKECMDGOALS),clean)
+ifeq ($(filter $(MAKECMDGOALS),clean test coverage),)
-include $(sort $(addprefix $(DEPROOT)/,$(DEPFILES)))
-include $(D_JSAPI_BINDING)
endif
@@ -797,14 +799,54 @@ $(eval $(foreach SOURCE,$(filter %.m,$(SOURCES)), \
$(eval $(foreach SOURCE,$(filter %.s,$(SOURCES)), \
$(call compile_target_s,$(SOURCE),$(subst /,_,$(SOURCE:.s=.o)),$(subst /,_,$(SOURCE:.s=.d)))))
-.PHONY: all clean docs install package-$(TARGET) package install-$(TARGET)
+# ----------------------------------------------------------------------------
+# Test setup
+# ----------------------------------------------------------------------------
+
+include test/Makefile
+
+
+# ----------------------------------------------------------------------------
+# Clean setup
+# ----------------------------------------------------------------------------
+
+.PHONY: clean
clean: $(CLEANS)
-# Target builds a distribution package
+
+# ----------------------------------------------------------------------------
+# build distribution package
+# ----------------------------------------------------------------------------
+
+.PHONY: package-$(TARGET) package
+
package: all-program package-$(TARGET)
+# ----------------------------------------------------------------------------
+# local install on the host system
+# ----------------------------------------------------------------------------
+
+.PHONY: install install-$(TARGET)
+
+install: all-program install-$(TARGET)
+
+
+# ----------------------------------------------------------------------------
+# Documentation build
+# ----------------------------------------------------------------------------
+
+.PHONY: docs
+
+docs:
+ doxygen Docs/Doxyfile
+
+
+# ----------------------------------------------------------------------------
+# Transifex message processing
+# ----------------------------------------------------------------------------
+
.PHONY: messages-split-tfx messages-fetch-tfx messages-import-tfx
# split fat messages into properties files suitable for uploading to transifex
@@ -819,8 +861,3 @@ messages-fetch-tfx:
messages-import-tfx: messages-fetch-tfx
for tfxlang in $(FAT_LANGUAGES);do perl ./utils/import-messages.pl -l $${tfxlang} -p any -f transifex -o resources/FatMessages -i resources/FatMessages -I Messages.any.$${tfxlang}.tfx ; $(RM) Messages.any.$${tfxlang}.tfx; done
-# Target installs executable on the host system
-install: all-program install-$(TARGET)
-
-docs:
- doxygen Docs/Doxyfile
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 3b386d3..45f35f0 100644
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -147,7 +147,7 @@ void ami_arexx_execute(char *script)
if(lock = Lock(script, ACCESS_READ)) {
DevNameFromLock(lock, full_script_path, 1024, DN_FULLPATH);
- LOG(("Executing script: %s", full_script_path));
+ LOG("Executing script: %s", full_script_path);
IDoMethod(arexx_obj, AM_EXECUTE, full_script_path, NULL, NULL, NULL, NULL, NULL);
UnLock(lock);
}
diff --git a/amiga/bitmap.c b/amiga/bitmap.c
index c2fd2e7..23f3a45 100644
--- a/amiga/bitmap.c
+++ b/amiga/bitmap.c
@@ -121,12 +121,16 @@ bool amiga_bitmap_save(void *bitmap, const char *path, unsigned flags)
int err = 0;
Object *dto = NULL;
- if ((flags & AMI_BITMAP_FORCE_OVERWRITE) == 0) {
- if(!ami_download_check_overwrite(path, NULL, 0)) return false;
- }
-
if((dto = ami_datatype_object_from_bitmap(bitmap)))
{
+ if (flags & AMI_BITMAP_SCALE_ICON) {
+ IDoMethod(dto, PDTM_SCALE, 16, 16, 0);
+
+ if((DoDTMethod(dto, 0, 0, DTM_PROCLAYOUT, 0, 1)) == 0) {
+ return false;
+ }
+ }
+
err = SaveDTObjectA(dto, NULL, NULL, path, DTWM_IFF, FALSE, NULL);
DisposeDTObject(dto);
}
diff --git a/amiga/bitmap.h b/amiga/bitmap.h
index 63969ec..f270871 100755
--- a/amiga/bitmap.h
+++ b/amiga/bitmap.h
@@ -25,7 +25,7 @@
#include <libraries/Picasso96.h>
#define AMI_BITMAP_FORMAT RGBFB_R8G8B8A8
-#define AMI_BITMAP_FORCE_OVERWRITE 0xFF
+#define AMI_BITMAP_SCALE_ICON 0xFF
struct gui_bitmap_table *amiga_bitmap_table;
diff --git a/amiga/dist/NetSurf.guide b/amiga/dist/NetSurf.guide
index 2ea772e..aecdb18 100755
--- a/amiga/dist/NetSurf.guide
+++ b/amiga/dist/NetSurf.guide
@@ -153,6 +153,8 @@ Additional fall-back fonts can be provided since NetSurf 3.0. These need to go i
NB: Since NetSurf 3.0, NetSurf will scan the provided Unicode fonts, and the rest of the system fonts, on first startup. Setting font_unicode_only:1 will prevent fonts not in the preferred Unicode fonts list from being scanned or used as fallback fonts. If the system fonts or NetSurf's fallback fonts list changes, this cache will need to be re-generated. This can be forced by deleting the font glyph cache (which defaults to Users/user/FontGlyphCache).
+Since NetSurf 3.4, Unicode glyphs above 0xFFFF are supported. These are mainly used for Emoji. The option to specify a fallback font for this range is font_surrogate - there is no scanning of system fonts. If @{"Symbola" rxs "address netsurf 'open http://users.teilar.gr/~g1951d/'"} font is installed it will be selected automatically.
+
@{b}Font sizes@{ub}
The default and minimum font sizes can also be set.
diff --git a/amiga/drag.c b/amiga/drag.c
index 924deed..7aef426 100644
--- a/amiga/drag.c
+++ b/amiga/drag.c
@@ -183,7 +183,7 @@ void ami_drag_save(struct Window *win)
break;
default:
- LOG(("Unsupported drag save operation %ld",drag_save));
+ LOG("Unsupported drag save operation %ld", drag_save);
break;
}
diff --git a/amiga/dt_anim.c b/amiga/dt_anim.c
index 723bd13..d6f1f36 100644
--- a/amiga/dt_anim.c
+++ b/amiga/dt_anim.c
@@ -160,7 +160,7 @@ nserror amiga_dt_anim_create(const content_handler *handler,
bool amiga_dt_anim_convert(struct content *c)
{
- LOG(("amiga_dt_anim_convert"));
+ LOG("amiga_dt_anim_convert");
amiga_dt_anim_content *plugin = (amiga_dt_anim_content *) c;
union content_msg_data msg_data;
@@ -244,7 +244,7 @@ void amiga_dt_anim_destroy(struct content *c)
{
amiga_dt_anim_content *plugin = (amiga_dt_anim_content *) c;
- LOG(("amiga_dt_anim_destroy"));
+ LOG("amiga_dt_anim_destroy");
if (plugin->bitmap != NULL)
amiga_bitmap_destroy(plugin->bitmap);
@@ -261,7 +261,7 @@ bool amiga_dt_anim_redraw(struct content *c,
amiga_dt_anim_content *plugin = (amiga_dt_anim_content *) c;
bitmap_flags_t flags = BITMAPF_NONE;
- LOG(("amiga_dt_anim_redraw"));
+ LOG("amiga_dt_anim_redraw");
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -285,20 +285,20 @@ bool amiga_dt_anim_redraw(struct content *c,
void amiga_dt_anim_open(struct content *c, struct browser_window *bw,
struct content *page, struct object_params *params)
{
- LOG(("amiga_dt_anim_open"));
+ LOG("amiga_dt_anim_open");
return;
}
void amiga_dt_anim_close(struct content *c)
{
- LOG(("amiga_dt_anim_close"));
+ LOG("amiga_dt_anim_close");
return;
}
void amiga_dt_anim_reformat(struct content *c, int width, int height)
{
- LOG(("amiga_dt_anim_reformat"));
+ LOG("amiga_dt_anim_reformat");
return;
}
@@ -307,7 +307,7 @@ nserror amiga_dt_anim_clone(const struct content *old, struct content **newc)
amiga_dt_anim_content *plugin;
nserror error;
- LOG(("amiga_dt_anim_clone"));
+ LOG("amiga_dt_anim_clone");
plugin = calloc(1, sizeof(amiga_dt_anim_content));
if (plugin == NULL)
diff --git a/amiga/dt_picture.c b/amiga/dt_picture.c
index b5c3ba5..b3dbb34 100644
--- a/amiga/dt_picture.c
+++ b/amiga/dt_picture.c
@@ -172,7 +172,7 @@ static char *amiga_dt_picture_datatype(struct content *c)
static struct bitmap *amiga_dt_picture_cache_convert(struct content *c)
{
- LOG(("amiga_dt_picture_cache_convert"));
+ LOG("amiga_dt_picture_cache_convert");
union content_msg_data msg_data;
UBYTE *bm_buffer;
@@ -208,7 +208,7 @@ static struct bitmap *amiga_dt_picture_cache_convert(struct content *c)
bool amiga_dt_picture_convert(struct content *c)
{
- LOG(("amiga_dt_picture_convert"));
+ LOG("amiga_dt_picture_convert");
int width, height;
char *title;
@@ -254,7 +254,7 @@ nserror amiga_dt_picture_clone(const struct content *old, struct content **newc)
struct content *adt;
nserror error;
- LOG(("amiga_dt_picture_clone"));
+ LOG("amiga_dt_picture_clone");
adt = calloc(1, sizeof(struct content));
if (adt == NULL)
diff --git a/amiga/dt_sound.c b/amiga/dt_sound.c
index 2823178..6c49f09 100644
--- a/amiga/dt_sound.c
+++ b/amiga/dt_sound.c
@@ -72,7 +72,7 @@ static const content_handler amiga_dt_sound_content_handler = {
static void amiga_dt_sound_play(Object *dto)
{
- LOG(("Playing..."));
+ LOG("Playing...");
IDoMethod(dto, DTM_TRIGGER, NULL, STM_PLAY, NULL);
}
@@ -122,7 +122,7 @@ nserror amiga_dt_sound_create(const content_handler *handler,
amiga_dt_sound_content *plugin;
nserror error;
- LOG(("amiga_dt_sound_create"));
+ LOG("amiga_dt_sound_create");
plugin = calloc(1, sizeof(amiga_dt_sound_content));
if (plugin == NULL)
@@ -142,7 +142,7 @@ nserror amiga_dt_sound_create(const content_handler *handler,
bool amiga_dt_sound_convert(struct content *c)
{
- LOG(("amiga_dt_sound_convert"));
+ LOG("amiga_dt_sound_convert");
amiga_dt_sound_content *plugin = (amiga_dt_sound_content *) c;
int width = 50, height = 50;
@@ -176,7 +176,7 @@ void amiga_dt_sound_destroy(struct content *c)
{
amiga_dt_sound_content *plugin = (amiga_dt_sound_content *) c;
- LOG(("amiga_dt_sound_destroy"));
+ LOG("amiga_dt_sound_destroy");
DisposeDTObject(plugin->dto);
@@ -194,7 +194,7 @@ bool amiga_dt_sound_redraw(struct content *c,
.stroke_width = 1,
};
- LOG(("amiga_dt_sound_redraw"));
+ LOG("amiga_dt_sound_redraw");
/* this should be some sort of play/stop control */
@@ -215,7 +215,7 @@ void amiga_dt_sound_open(struct content *c, struct browser_window *bw,
amiga_dt_sound_content *plugin = (amiga_dt_sound_content *) c;
struct object_param *param;
- LOG(("amiga_dt_sound_open"));
+ LOG("amiga_dt_sound_open");
plugin->immediate = false;
@@ -223,7 +223,7 @@ void amiga_dt_sound_open(struct content *c, struct browser_window *bw,
{
do
{
- LOG(("%s = %s", param->name, param->value));
+ LOG("%s = %s", param->name, param->value);
if((strcmp(param->name, "autoplay") == 0) &&
(strcmp(param->value, "true") == 0)) plugin->immediate = true;
if((strcmp(param->name, "autoStart") == 0) &&
@@ -244,7 +244,7 @@ nserror amiga_dt_sound_clone(const struct content *old, struct content **newc)
amiga_dt_sound_content *plugin;
nserror error;
- LOG(("amiga_dt_sound_clone"));
+ LOG("amiga_dt_sound_clone");
plugin = calloc(1, sizeof(amiga_dt_sound_content));
if (plugin == NULL)
diff --git a/amiga/file.c b/amiga/file.c
index 307fbfc..ae9e3d0 100644
--- a/amiga/file.c
+++ b/amiga/file.c
@@ -218,9 +218,36 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
{
char *fname = AllocVecTagList(1024, NULL);
char *initial_fname = NULL;
+ char *fname_with_ext = NULL;
+ bool strip_ext = true;
if(object) {
- nsurl_nice(hlcache_handle_get_url(object), &initial_fname, true);
+ if(type == AMINS_SAVE_SOURCE) strip_ext = false;
+ nsurl_nice(hlcache_handle_get_url(object), &initial_fname, strip_ext);
+ }
+
+ if(initial_fname != NULL) {
+ fname_with_ext = AllocVecTagList(strlen(initial_fname) + 5, NULL); /* 5 = .ext\0 */
+
+ strcpy(fname_with_ext, initial_fname);
+
+ switch(type)
+ {
+ case AMINS_SAVE_TEXT:
+ case AMINS_SAVE_SELECTION:
+ strcat(fname_with_ext, ".txt");
+ break;
+ case AMINS_SAVE_IFF:
+ strcat(fname_with_ext, ".iff");
+ break;
+ case AMINS_SAVE_PDF:
+ strcat(fname_with_ext, ".pdf");
+ break;
+ default:
+ break;
+ }
+
+ if(initial_fname) free(initial_fname);
}
if(AslRequestTags(savereq,
@@ -228,7 +255,7 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
ASLFR_SleepWindow, TRUE,
ASLFR_TitleText, messages_get("NetSurf"),
ASLFR_Screen, scrn,
- ASLFR_InitialFile, initial_fname ? initial_fname : "",
+ ASLFR_InitialFile, fname_with_ext ? fname_with_ext : "",
TAG_DONE))
{
strlcpy(fname, savereq->fr_Drawer, 1024);
@@ -238,7 +265,7 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
}
if(fname) FreeVec(fname);
- if(initial_fname) free(initial_fname);
+ if(fname_with_ext) FreeVec(fname_with_ext);
}
void ami_file_req_init(void)
diff --git a/amiga/filetype.c b/amiga/filetype.c
index aa3e296..4419d71 100644
--- a/amiga/filetype.c
+++ b/amiga/filetype.c
@@ -176,7 +176,7 @@ nserror ami_mime_init(const char *mimefile)
struct nsObject *node;
struct ami_mime_entry *mimeentry;
- LOG(("mimetypes file: %s", mimefile));
+ LOG("mimetypes file: %s", mimefile);
if(ami_mime_list == NULL)
ami_mime_list = NewObjList();
@@ -635,10 +635,6 @@ void ami_mime_dump(void)
struct ami_mime_entry *mimeentry;
while((mimeentry = ami_mime_entry_locate(NULL, AMI_MIME_MIMETYPE, &node))) {
- LOG(("%s DT=\"%s\" TYPE=\"%s\" CMD=\"%s\"",
- mimeentry->mimetype ? lwc_string_data(mimeentry->mimetype) : "",
- mimeentry->datatype ? lwc_string_data(mimeentry->datatype) : "",
- mimeentry->filetype ? lwc_string_data(mimeentry->filetype) : "",
- mimeentry->plugincmd ? lwc_string_data(mimeentry->plugincmd) : ""));
+ LOG("%s DT=\"%s\" TYPE=\"%s\" CMD=\"%s\"", mimeentry->mimetype ? lwc_string_data(mimeentry->mimetype) : "", mimeentry->datatype ? lwc_string_data(mimeentry->datatype) : "", mimeentry->filetype ? lwc_string_data(mimeentry->filetype) : "", mimeentry->plugincmd ? lwc_string_data(mimeentry->plugincmd) : "");
};
}
diff --git a/amiga/font.c b/amiga/font.c
index 32f12f2..c39b002 100644
--- a/amiga/font.c
+++ b/amiga/font.c
@@ -162,6 +162,24 @@ static void ami_font_cleanup(struct MinList *ami_font_list);
static inline ULONG ami_font_unicode_width(const char *string, ULONG length,
const plot_font_style_t *fstyle, ULONG x, ULONG y, bool aa);
+static inline int amiga_nsfont_utf16_char_length(const uint16 *char1)
+{
+ if (__builtin_expect(((*char1 < 0xD800) || (0xDBFF < *char1)), 1)) {
+ return 1;
+ } else {
+ return 2;
+ }
+}
+
+static inline uint32 amiga_nsfont_decode_surrogate(const uint16 *char1)
+{
+ if(__builtin_expect((amiga_nsfont_utf16_char_length(char1) == 2), 0)) {
+ return ((uint32)char1[0] << 10) + char1[1] - 0x35FDC00;
+ } else {
+ return (uint32)*char1;
+ }
+}
+
static inline bool amiga_nsfont_width(const plot_font_style_t *fstyle,
const char *string, size_t length,
int *width)
@@ -206,11 +224,7 @@ static inline bool amiga_nsfont_position_in_string(const plot_font_style_t *fsty
*actual_x = 0;
while (utf8_pos < length) {
- if ((*utf16 < 0xD800) || (0xDBFF < *utf16))
- utf16charlen = 1;
- else
- utf16charlen = 2;
-
+ utf16charlen = amiga_nsfont_utf16_char_length(utf16);
utf16next = &utf16[utf16charlen];
tempx = ami_font_width_glyph(ofont, utf16, utf16next, emwidth);
@@ -361,14 +375,14 @@ static struct ami_font_node *ami_font_open(const char *font)
return nodedata;
}
- LOG(("Font cache miss: %s", font));
+ LOG("Font cache miss: %s", font);
nodedata = AllocVecTagList(sizeof(struct ami_font_node), NULL);
nodedata->font = OpenOutlineFont(font, &ami_diskfontlib_list, OFF_OPEN);
if(!nodedata->font)
{
- LOG(("Requested font not found: %s", font));
+ LOG("Requested font not found: %s", font);
warn_user("CompError", font);
FreeVec(nodedata);
return NULL;
@@ -376,21 +390,21 @@ static struct ami_font_node *ami_font_open(const char *font)
nodedata->bold = (char *)GetTagData(OT_BName, 0, nodedata->font->olf_OTagList);
if(nodedata->bold)
- LOG(("Bold font defined for %s is %s", font, nodedata->bold));
+ LOG("Bold font defined for %s is %s", font, nodedata->bold);
else
- LOG(("Warning: No designed bold font defined for %s", font));
+ LOG("Warning: No designed bold font defined for %s", font);
nodedata->italic = (char *)GetTagData(OT_IName, 0, nodedata->font->olf_OTagList);
if(nodedata->italic)
- LOG(("Italic font defined for %s is %s", font, nodedata->italic));
+ LOG("Italic font defined for %s is %s", font, nodedata->italic);
else
- LOG(("Warning: No designed italic font defined for %s", font));
+ LOG("Warning: No designed italic font defined for %s", font);
nodedata->bolditalic = (char *)GetTagData(OT_BIName, 0, nodedata->font->olf_OTagList);
if(nodedata->bolditalic)
- LOG(("Bold-italic font defined for %s is %s", font, nodedata->bolditalic));
+ LOG("Bold-italic font defined for %s is %s", font, nodedata->bolditalic);
else
- LOG(("Warning: No designed bold-italic font defined for %s", font));
+ LOG("Warning: No designed bold-italic font defined for %s", font);
GetSysTime(&nodedata->lastused);
@@ -447,7 +461,12 @@ static struct OutlineFont *ami_open_outline_font(const plot_font_style_t *fstyle
break;
case NSA_UNICODE_FONT:
default:
- fontname = (char *)ami_font_scan_lookup(codepoint, glypharray);
+ if(__builtin_expect((amiga_nsfont_utf16_char_length(codepoint) == 2), 0)) {
+ /* Multi-byte character */
+ fontname = nsoption_charp(font_surrogate);
+ } else {
+ fontname = (char *)ami_font_scan_lookup(codepoint, glypharray);
+ }
if(fontname == NULL) return NULL;
break;
}
@@ -559,10 +578,12 @@ static inline int32 ami_font_plot_glyph(struct OutlineFont *ofont, struct RastPo
FIXED kern = 0;
ULONG glyphmaptag;
ULONG template_type;
+ uint32 long_char_1 = 0, long_char_2 = 0;
#ifndef __amigaos4__
struct BulletBase *BulletBase = ofont->BulletBase;
#endif
+#ifndef __amigaos4__
if (__builtin_expect(((*char1 >= 0xD800) && (*char1 <= 0xDBFF)), 0)) {
/* We don't support UTF-16 surrogates yet, so just return. */
return 0;
@@ -572,6 +593,7 @@ static inline int32 ami_font_plot_glyph(struct OutlineFont *ofont, struct RastPo
/* Don't attempt to kern a UTF-16 surrogate */
*char2 = 0;
}
+#endif
if(aa == true) {
#ifdef __amigaos4__
@@ -585,9 +607,13 @@ static inline int32 ami_font_plot_glyph(struct OutlineFont *ofont, struct RastPo
#endif
}
+ long_char_1 = amiga_nsfont_decode_surrogate(char1);
+ long_char_2 = amiga_nsfont_decode_surrogate(char2);
+ /**\todo use OT_GlyphCode_32 so we get an error for old font engines */
+
if(ESetInfo(AMI_OFONT_ENGINE,
- OT_GlyphCode, *char1,
- OT_GlyphCode2, *char2,
+ OT_GlyphCode, long_char_1,
+ OT_GlyphCode2, long_char_2,
TAG_END) == OTERR_Success)
{
if(EObtainInfo(AMI_OFONT_ENGINE,
@@ -650,10 +676,12 @@ static inline int32 ami_font_width_glyph(struct OutlineFont *ofont,
FIXED char1w = 0;
struct GlyphWidthEntry *gwnode;
bool skip_c2 = false;
+ uint32 long_char_1 = 0;
#ifndef __amigaos4__
struct BulletBase *BulletBase = ofont->BulletBase;
#endif
+#ifndef __amigaos4__
if (__builtin_expect(((*char1 >= 0xD800) && (*char1 <= 0xDBFF)), 0)) {
/* We don't support UTF-16 surrogates yet, so just return. */
return 0;
@@ -663,12 +691,16 @@ static inline int32 ami_font_width_glyph(struct OutlineFont *ofont,
/* Don't attempt to kern a UTF-16 surrogate */
skip_c2 = true;
}
+#endif
if (*char2 < 0x0020) skip_c2 = true;
+ long_char_1 = amiga_nsfont_decode_surrogate(char1);
+ /**\todo use OT_GlyphCode_32 so we get an error for old font engines */
+
if(ESetInfo(AMI_OFONT_ENGINE,
- OT_GlyphCode, *char1,
- OT_GlyphCode2, *char1,
+ OT_GlyphCode, long_char_1,
+ OT_GlyphCode2, long_char_1,
TAG_END) == OTERR_Success)
{
if(EObtainInfo(AMI_OFONT_ENGINE,
@@ -746,11 +778,7 @@ ULONG ami_font_unicode_text(struct RastPort *rp, const char *string, ULONG lengt
while(*utf16 != 0)
{
- if ((*utf16 < 0xD800) || (0xDBFF < *utf16))
- utf16charlen = 1;
- else
- utf16charlen = 2;
-
+ utf16charlen = amiga_nsfont_utf16_char_length(utf16);
utf16next = &utf16[utf16charlen];
if(fstyle->flags & FONTF_SMALLCAPS)
@@ -811,11 +839,7 @@ static inline ULONG ami_font_unicode_width(const char *string, ULONG length,
while(*utf16 != 0)
{
- if ((*utf16 < 0xD800) || (0xDBFF < *utf16))
- utf16charlen = 1;
- else
- utf16charlen = 2;
-
+ utf16charlen = amiga_nsfont_utf16_char_length(utf16);
utf16next = &utf16[utf16charlen];
if(fstyle->flags & FONTF_SMALLCAPS)
@@ -883,7 +907,7 @@ void ami_init_fonts(void)
void ami_close_fonts(void)
{
- LOG(("Cleaning up font cache"));
+ LOG("Cleaning up font cache");
FreeObjList(ami_font_list);
ami_font_list = NULL;
ami_font_finiscanner();
@@ -915,8 +939,7 @@ static void ami_font_cleanup(struct MinList *ami_font_list)
SubTime(&curtime, &fnode->lastused);
if(curtime.Seconds > 300)
{
- LOG(("Freeing %s not used for %d seconds",
- node->dtz_Node.ln_Name, curtime.Seconds));
+ LOG("Freeing %s not used for %ld seconds", node->dtz_Node.ln_Name, curtime.Seconds);
DelObject(node);
}
} while((node=nnode));
@@ -933,7 +956,7 @@ void ami_font_setdevicedpi(int id)
ULONG xdpi = nsoption_int(screen_ydpi);
if(nsoption_bool(use_diskfont) == true) {
- LOG(("WARNING: Using diskfont.library for text. Forcing DPI to 72."));
+ LOG("WARNING: Using diskfont.library for text. Forcing DPI to 72.");
nsoption_int(screen_ydpi) = 72;
}
@@ -959,8 +982,7 @@ void ami_font_setdevicedpi(int id)
xdpi = (yres * ydpi) / xres;
- LOG(("XDPI = %ld, YDPI = %ld (DisplayInfo resolution %ld x %ld, corrected %ld x %ld)",
- xdpi, ydpi, dinfo.Resolution.x, dinfo.Resolution.y, xres, yres));
+ LOG("XDPI = %ld, YDPI = %ld (DisplayInfo resolution %d x %d, corrected %d x %d)", xdpi, ydpi, dinfo.Resolution.x, dinfo.Resolution.y, xres, yres);
}
}
}
diff --git a/amiga/font_bitmap.c b/amiga/font_bitmap.c
index 8f142ae..90277d6 100644
--- a/amiga/font_bitmap.c
+++ b/amiga/font_bitmap.c
@@ -84,7 +84,7 @@ static struct TextFont *ami_font_bm_open(struct RastPort *rp, const plot_font_st
if((font = ASPrintf("%s.font", fontname))) {
tattr.ta_Name = font;
tattr.ta_YSize = fstyle->size / FONT_SIZE_SCALE;
- LOG(("font: %s/%d", tattr.ta_Name, tattr.ta_YSize));
+ LOG("font: %s/%d", tattr.ta_Name, tattr.ta_YSize);
if((bmfont = OpenDiskFont(&tattr))) {
SetRPAttrs(rp, RPTAG_Font, bmfont, TAG_DONE);
}
diff --git a/amiga/font_scan.c b/amiga/font_scan.c
index 95eacaa..4f4b774 100644
--- a/amiga/font_scan.c
+++ b/amiga/font_scan.c
@@ -254,7 +254,12 @@ static ULONG ami_font_scan_font(const char *fontname, lwc_string **glypharray)
}
#ifdef __amigaos4__
if(EObtainInfo(AMI_OFONT_ENGINE, OT_UnicodeRanges, &unicoderanges, TAG_END) == 0) {
- if(unicoderanges & UCR_SURROGATES) LOG(("%s supports UTF-16 surrogates", fontname));
+ if(unicoderanges & UCR_SURROGATES) {
+ LOG("%s supports UTF-16 surrogates", fontname);
+ if (nsoption_charp(font_surrogate) == NULL) {
+ nsoption_set_charp(font_surrogate, (char *)strdup(fontname));
+ }
+ }
EReleaseInfo(AMI_OFONT_ENGINE,
OT_UnicodeRanges, unicoderanges,
TAG_END);
@@ -287,10 +292,10 @@ static ULONG ami_font_scan_fonts(struct MinList *list,
do {
nnode = (struct nsObject *)GetSucc((struct Node *)node);
ami_font_scan_gui_update(win, node->dtz_Node.ln_Name, font_num, total);
- LOG(("Scanning %s", node->dtz_Node.ln_Name));
+ LOG("Scanning %s", node->dtz_Node.ln_Name);
found = ami_font_scan_font(node->dtz_Node.ln_Name, glypharray);
total += found;
- LOG(("Found %ld new glyphs (total = %ld)", found, total));
+ LOG("Found %ld new glyphs (total = %ld)", found, total);
font_num++;
} while((node = nnode));
@@ -339,7 +344,7 @@ static ULONG ami_font_scan_list(struct MinList *list)
if(node) {
node->dtz_Node.ln_Name = strdup(af[i].af_Attr.ta_Name);
found++;
- LOG(("Added %s", af[i].af_Attr.ta_Name));
+ LOG("Added %s", af[i].af_Attr.ta_Name);
}
}
}
@@ -377,7 +382,7 @@ static ULONG ami_font_scan_load(const char *filename, lwc_string **glypharray)
rargs = AllocDosObjectTags(DOS_RDARGS, TAG_DONE);
if((fh = FOpen(filename, MODE_OLDFILE, 0))) {
- LOG(("Loading font glyph cache from %s", filename));
+ LOG("Loading font glyph cache from %s", filename);
while(FGets(fh, (STRPTR)&buffer, 256) != 0)
{
@@ -418,7 +423,7 @@ void ami_font_scan_save(const char *filename, lwc_string **glypharray)
BPTR fh = 0;
if((fh = FOpen(filename, MODE_NEWFILE, 0))) {
- LOG(("Writing font glyph cache to %s", filename));
+ LOG("Writing font glyph cache to %s", filename);
FPrintf(fh, "; This file is auto-generated. To re-create the cache, delete this file.\n");
FPrintf(fh, "; This file is parsed using ReadArgs() with the following template:\n");
FPrintf(fh, "; CODE/A,FONT/A\n;\n");
@@ -498,7 +503,7 @@ void ami_font_scan_init(const char *filename, bool force_scan, bool save,
if(nsoption_bool(font_unicode_only) == false)
entries += ami_font_scan_list(list);
- LOG(("Found %ld fonts", entries));
+ LOG("Found %ld fonts", entries);
win = ami_font_scan_gui_open(entries);
found = ami_font_scan_fonts(list, win, glypharray);
@@ -511,6 +516,6 @@ void ami_font_scan_init(const char *filename, bool force_scan, bool save,
}
}
- LOG(("Initialised with %ld glyphs", found));
+ LOG("Initialised with %ld glyphs", found);
}
diff --git a/amiga/fs_backing_store.c b/amiga/fs_backing_store.c
index b6bd54c..9e7672e 100644
--- a/amiga/fs_backing_store.c
+++ b/amiga/fs_backing_store.c
@@ -310,7 +310,7 @@ static nserror ami_backing_store_finalise(void)
nserror error = ami_backing_store_send_reply(AMI_BSM_FINALISE, NULL, tempmsgport);
if(error != NSERROR_OK) return error;
- LOG(("Waiting for backing store process to exit..."));
+ LOG("Waiting for backing store process to exit...");
WaitPort(tempmsgport);
@@ -355,7 +355,7 @@ ami_backing_store_initialise(const struct llcache_store_parameters *parameters)
return NSERROR_NOMEM;
}
- LOG(("Waiting for backing store process to start up..."));
+ LOG("Waiting for backing store process to start up...");
WaitPort(tempmsgport);
@@ -365,7 +365,7 @@ ami_backing_store_initialise(const struct llcache_store_parameters *parameters)
ReplyMsg((struct Message *)msg);
FreeSysObject(ASOT_PORT, tempmsgport);
- LOG(("Backing store process started. Error code: %d", error));
+ LOG("Backing store process started. Error code: %d", error);
return error;
}
diff --git a/amiga/gui.c b/amiga/gui.c
index 41ecd33..b7f3285 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -304,7 +304,7 @@ bool ami_gui_map_filename(char **remapped, const char *path, const char *file, c
}
if(found == false) *remapped = strdup(file);
- else LOG(("Remapped %s to %s in path %s using %s", file, *remapped, path, map));
+ else LOG("Remapped %s to %s in path %s using %s", file, *remapped, path, map);
free(mapfile);
@@ -321,7 +321,7 @@ static bool ami_gui_check_resource(char *fullpath, const char *file)
ami_gui_map_filename(&remapped, fullpath, file, "Resource.map");
netsurf_mkpath(&fullpath, &fullpath_len, 2, fullpath, remapped);
- LOG(("Checking for %s", fullpath));
+ LOG("Checking for %s", fullpath);
lock = Lock(fullpath, ACCESS_READ);
if(lock)
@@ -330,7 +330,7 @@ static bool ami_gui_check_resource(char *fullpath, const char *file)
found = true;
}
- if(found) LOG(("Found %s", fullpath));
+ if(found) LOG("Found %s", fullpath);
free(remapped);
return found;
@@ -604,13 +604,13 @@ static nserror ami_set_options(struct nsoption_s *defaults)
BPTR lock = 0;
/* Search for some likely candidates */
- if((lock = Lock("FONTS:Code2000.font", ACCESS_READ)))
+ if((lock = Lock("FONTS:Code2000.otag", ACCESS_READ)))
{
UnLock(lock);
nsoption_set_charp(font_unicode,
(char *)strdup("Code2000"));
}
- else if((lock = Lock("FONTS:Bitstream Cyberbit.font", ACCESS_READ)))
+ else if((lock = Lock("FONTS:Bitstream Cyberbit.otag", ACCESS_READ)))
{
UnLock(lock);
nsoption_set_charp(font_unicode,
@@ -618,6 +618,19 @@ static nserror ami_set_options(struct nsoption_s *defaults)
}
}
+ if (nsoption_charp(font_surrogate) == NULL) {
+ BPTR lock = 0;
+ /* Search for some likely candidates -
+ * Ideally we should pick a font during the scan process which announces it
+ * contains UCR_SURROGATES, but nothing appears to have the tag.
+ */
+ if((lock = Lock("FONTS:Symbola.otag", ACCESS_READ))) {
+ UnLock(lock);
+ nsoption_set_charp(font_surrogate,
+ (char *)strdup("Symbola"));
+ }
+ }
+
if(popupmenu_lib_ok == FALSE)
nsoption_set_bool(context_menu, false);
@@ -727,7 +740,7 @@ static void ami_openscreen(void)
}
if(screen_signal == -1) screen_signal = AllocSignal(-1);
- LOG(("Screen signal %d", screen_signal));
+ LOG("Screen signal %d", screen_signal);
scrn = OpenScreenTags(NULL,
SA_DisplayID, id,
SA_Title, ami_gui_get_screen_title(),
@@ -800,12 +813,12 @@ static void ami_gui_commandline(int *argc, char **argv)
if((args = ReadArgs(template, rarray, NULL))) {
if(rarray[A_URL]) {
- LOG(("URL %s specified on command line", rarray[A_URL]));
+ LOG("URL %s specified on command line", rarray[A_URL]);
temp_homepage_url = ami_to_utf8_easy((char *)rarray[A_URL]);
}
if(rarray[A_FORCE]) {
- LOG(("FORCE specified on command line"));
+ LOG("FORCE specified on command line");
cli_force = true;
}
@@ -823,7 +836,7 @@ static void ami_gui_commandline(int *argc, char **argv)
char **p = (char **)rarray[A_NSOPTS];
do {
- LOG(("Arg [%d] assigned to NSOPTS/M by ReadArgs: %s", new_argc, *p));
+ LOG("Arg [%d] assigned to NSOPTS/M by ReadArgs: %s", new_argc, *p);
new_argc++;
p++;
} while(*p != NULL);
@@ -844,7 +857,7 @@ static void ami_gui_commandline(int *argc, char **argv)
FreeArgs(args);
} else {
- LOG(("ReadArgs failed to parse command line"));
+ LOG("ReadArgs failed to parse command line");
}
}
@@ -2731,7 +2744,7 @@ static void ami_handle_applib(void)
{
struct ApplicationCustomMsg *applibcustmsg =
(struct ApplicationCustomMsg *)applibmsg;
- LOG(("Ringhio BackMsg received: %s", applibcustmsg->customMsg));
+ LOG("Ringhio BackMsg received: %s", applibcustmsg->customMsg);
OpenWorkbenchObjectA(applibcustmsg->customMsg, NULL);
}
break;
@@ -2765,7 +2778,7 @@ void ami_get_msg(void)
NULL, (unsigned int *)&signalmask) != -1) {
signal = signalmask;
} else {
- LOG(("waitselect() returned error"));
+ LOG("waitselect() returned error");
/* \todo Fix Ctrl-C handling.
* WaitSelect() from bsdsocket.library returns -1 if the task was
* signalled with a Ctrl-C. waitselect() from newlib.library does not.
@@ -2975,12 +2988,12 @@ static void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL d
/* If this is our own screen, wait for visitor windows to close */
if(screen_signal != -1) {
ULONG scrnsig = 1 << screen_signal;
- LOG(("Waiting for visitor windows to close... (signal)"));
+ LOG("Waiting for visitor windows to close... (signal)");
Wait(scrnsig);
}
while (CloseScreen(scrn) == FALSE) {
- LOG(("Waiting for visitor windows to close... (polling)"));
+ LOG("Waiting for visitor windows to close... (polling)");
Delay(50);
}
@@ -3024,19 +3037,19 @@ static void gui_quit(void)
ami_close_fonts();
ami_help_free();
- LOG(("Closing screen"));
+ LOG("Closing screen");
ami_gui_close_screen(scrn, locked_screen, FALSE);
if(nsscreentitle) FreeVec(nsscreentitle);
- LOG(("Freeing menu items"));
+ LOG("Freeing menu items");
ami_context_menu_free();
ami_menu_free_glyphs();
- LOG(("Freeing mouse pointers"));
+ LOG("Freeing mouse pointers");
ami_mouse_pointers_free();
- LOG(("Freeing clipboard"));
+ LOG("Freeing clipboard");
ami_clipboard_free();
- LOG(("Removing scheduler process"));
+ LOG("Removing scheduler process");
ami_scheduler_process_delete();
FreeSysObject(ASOT_PORT, appport);
@@ -3063,7 +3076,7 @@ char *ami_gui_get_cache_favicon_name(nsurl *url, bool only_if_avail)
BPTR lock = 0;
if ((filename = ASPrintf("%s/%x", current_user_faviconcache, nsurl_hash(url)))) {
- LOG(("favicon cache location: %s", filename));
+ LOG("favicon cache location: %s", filename);
if (only_if_avail == true) {
if((lock = Lock(filename, ACCESS_READ))) {
@@ -3082,7 +3095,7 @@ static void ami_gui_cache_favicon(nsurl *url, struct bitmap *favicon)
STRPTR filename = NULL;
if ((filename = ami_gui_get_cache_favicon_name(url, false))) {
- if(favicon) amiga_bitmap_save(favicon, filename, AMI_BITMAP_FORCE_OVERWRITE);
+ if(favicon) amiga_bitmap_save(favicon, filename, AMI_BITMAP_SCALE_ICON);
FreeVec(filename);
}
}
@@ -3710,7 +3723,7 @@ HOOKF(void, ami_scroller_hook, Object *, object, struct IntuiMessage *)
break;
default:
- LOG(("IDCMP hook unhandled event: %d\n", msg->Class));
+ LOG("IDCMP hook unhandled event: %d\n", msg->Class);
break;
}
// ReplyMsg((struct Message *)msg);
@@ -3999,7 +4012,7 @@ gui_window_create(struct browser_window *bw,
BitMapEnd;
}
- LOG(("Creating window object"));
+ LOG("Creating window object");
g->shared->objects[OID_MAIN] = WindowObj,
WA_ScreenTitle, ami_gui_get_screen_title(),
@@ -4266,11 +4279,11 @@ gui_window_create(struct browser_window *bw,
EndWindow;
}
- LOG(("Opening window"));
+ LOG("Opening window");
g->shared->win = (struct Window *)RA_OpenWindow(g->shared->objects[OID_MAIN]);
- LOG(("Window opened, adding border gadgets"));
+ LOG("Window opened, adding border gadgets");
if(!g->shared->win)
{
@@ -4609,7 +4622,7 @@ static void ami_gui_window_update_box_deferred(struct gui_window *g, bool draw)
if(draw == true) {
ami_set_pointer(g->shared, GUI_POINTER_WAIT, false);
} else {
- LOG(("Ignoring deferred box redraw queue"));
+ LOG("Ignoring deferred box redraw queue");
}
node = (struct nsObject *)GetHead((struct List *)g->deferred_rects);
@@ -4653,7 +4666,7 @@ struct nsObject *nnode;
(new_rect->y0 <= rect->y0) &&
(new_rect->x1 >= rect->x1) &&
(new_rect->y1 >= rect->y1)) {
- LOG(("Removing queued redraw that is a subset of new box redraw"));
+ LOG("Removing queued redraw that is a subset of new box redraw");
DelObject(node);
/* Don't return - we might find more */
}
@@ -4674,7 +4687,7 @@ static void gui_window_update_box(struct gui_window *g, const struct rect *rect)
nsobj = AddObject(g->deferred_rects, AMINS_RECT);
nsobj->objstruct = deferred_rect;
} else {
- LOG(("Ignoring duplicate or subset of queued box redraw"));
+ LOG("Ignoring duplicate or subset of queued box redraw");
}
ami_schedule_redraw(g->shared, false);
}
@@ -5243,7 +5256,7 @@ Object *ami_gui_splash_open(void)
LayoutEnd,
EndWindow;
- LOG(("Attempting to open splash window..."));
+ LOG("Attempting to open splash window...");
win = RA_OpenWindow(win_obj);
GetAttrs(bm_obj, IA_Top, &top,
@@ -5307,14 +5320,14 @@ void ami_gui_splash_close(Object *win_obj)
{
if(win_obj == NULL) return;
- LOG(("Closing splash window"));
+ LOG("Closing splash window");
DisposeObject(win_obj);
}
static void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl,
struct form_control *gadget)
{
- LOG(("File open dialog request for %p/%p", g, gadget));
+ LOG("File open dialog request for %p/%p", g, gadget);
if(AslRequestTags(filereq,
ASLFR_Window, g->shared->win,
@@ -5445,8 +5458,7 @@ int main(int argc, char** argv)
popupmenu_lib_ok = FALSE;
#ifdef __amigaos4__
if((PopupMenuBase = OpenLibrary("popupmenu.library", 53))) {
- LOG(("popupmenu.library v%d.%d",
- PopupMenuBase->lib_Version, PopupMenuBase->lib_Revision));
+ LOG("popupmenu.library v%d.%d", PopupMenuBase->lib_Version, PopupMenuBase->lib_Revision);
if(LIB_IS_AT_LEAST((struct Library *)PopupMenuBase, 53, 11))
popupmenu_lib_ok = TRUE;
CloseLibrary(PopupMenuBase);
@@ -5464,7 +5476,7 @@ int main(int argc, char** argv)
user = GetVar("user", temp, 1024, GVF_GLOBAL_ONLY);
current_user = ASPrintf("%s", (user == -1) ? "Default" : temp);
- LOG(("User: %s", current_user));
+ LOG("User: %s", current_user);
current_user_dir = ASPrintf("PROGDIR:Users/%s", current_user);
if((lock = CreateDirTree(current_user_dir)))
@@ -5500,7 +5512,9 @@ int main(int argc, char** argv)
return RETURN_FAIL;
}
- ret = netsurf_init(messages, current_user_cache);
+ ret = messages_add_from_file(messages);
+
+ ret = netsurf_init(current_user_cache);
if (ret != NSERROR_OK) {
ami_misc_fatal_error("NetSurf failed to initialise");
return RETURN_FAIL;
diff --git a/amiga/libs.c b/amiga/libs.c
index 903c0f7..c20147a 100644
--- a/amiga/libs.c
+++ b/amiga/libs.c
@@ -54,14 +54,14 @@
#ifdef __amigaos4__
#define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \
- LOG(("Opening %s v%d", LIB, LIBVER)); \
+ LOG("Opening %s v%d", LIB, LIBVER); \
if((PREFIX##Base = (struct PREFIX##Base *)OpenLibrary(LIB, LIBVER))) { \
I##PREFIX = (struct PREFIX##IFace *)GetInterface((struct Library *)PREFIX##Base, INTERFACE, INTVER, NULL); \
if(I##PREFIX == NULL) { \
- LOG(("Failed to get %s interface v%d of %s", INTERFACE, INTVER, LIB)); \
+ LOG("Failed to get %s interface v%d of %s", INTERFACE, INTVER, LIB); \
} \
} else { \
- LOG(("Failed to open %s v%d", LIB, LIBVER)); \
+ LOG("Failed to open %s v%d", LIB, LIBVER); \
if(FAIL == true) { \
STRPTR error = ASPrintf("Unable to open %s v%d (fatal error)", LIB, LIBVER); \
ami_misc_fatal_error(error); \
@@ -79,13 +79,13 @@
struct PREFIX##IFace *I##PREFIX;
#define AMINS_CLASS_OPEN(CLASS, CLASSVER, PREFIX, CLASSGET, NEEDINTERFACE) \
- LOG(("Opening %s v%d", CLASS, CLASSVER)); \
+ LOG("Opening %s v%d", CLASS, CLASSVER); \
if((PREFIX##Base = OpenClass(CLASS, CLASSVER, &PREFIX##Class))) { \
if(NEEDINTERFACE == true) { \
- LOG((" + interface")); \
+ LOG(" + interface"); \
I##PREFIX = (struct PREFIX##IFace *)GetInterface((struct Library *)PREFIX##Base, "main", 1, NULL); \
if(I##PREFIX == NULL) { \
- LOG(("Failed to get main interface v1 of %s", CLASS)); \
+ LOG("Failed to get main interface v1 of %s", CLASS); \
} \
} \
} \
@@ -107,10 +107,10 @@
#else
#define AMINS_LIB_OPEN(LIB, LIBVER, PREFIX, INTERFACE, INTVER, FAIL) \
- LOG(("Opening %s v%d", LIB, LIBVER)); \
+ LOG("Opening %s v%d", LIB, LIBVER); \
if((PREFIX##Base = (struct PREFIX##Base *)OpenLibrary(LIB, LIBVER))) { \
} else { \
- LOG(("Failed to open %s v%d", LIB, LIBVER)); \
+ LOG("Failed to open %s v%d", LIB, LIBVER); \
if(FAIL == true) { \
STRPTR error = ASPrintf("Unable to open %s v%d (fatal error)", LIB, LIBVER); \
ami_misc_fatal_error(error); \
@@ -126,7 +126,7 @@
struct PREFIX##Base *PREFIX##Base;
#define AMINS_CLASS_OPEN(CLASS, CLASSVER, PREFIX, CLASSGET, NEEDINTERFACE) \
- LOG(("Opening %s v%d", CLASS, CLASSVER)); \
+ LOG("Opening %s v%d", CLASS, CLASSVER); \
if((PREFIX##Base = OpenLibrary(CLASS, CLASSVER))) { \
PREFIX##Class = CLASSGET##_GetClass(); \
} \
diff --git a/amiga/login.c b/amiga/login.c
index 655a4b1..4cf9ba8 100755
--- a/amiga/login.c
+++ b/amiga/login.c
@@ -19,6 +19,7 @@
#include "amiga/os3support.h"
#include <assert.h>
+#include <stdlib.h>
#include <proto/exec.h>
#include <proto/intuition.h>
diff --git a/amiga/menu.c b/amiga/menu.c
index 5ed1e3a..f4b35f0 100644
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -77,6 +77,7 @@
menu. Defaults to FALSE. */
/**/
+#define NSA_SPACE "blankspace.png"
enum {
NSA_GLYPH_SUBMENU,
@@ -546,7 +547,7 @@ void ami_free_menulabs(struct gui_window_2 *gwin)
}
static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
- const char *label, char key, char *icon, void *func, void *hookdata)
+ const char *label, char key, const char *icon, void *func, void *hookdata)
{
char menu_icon[1024];
@@ -570,8 +571,12 @@ static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type,
if(hookdata) gwin->menu_hook[num].h_Data = hookdata;
if(icon) {
- if(ami_locate_resource(menu_icon, icon) == true)
+ if(ami_locate_resource(menu_icon, icon) == true) {
gwin->menuicon[num] = (char *)strdup(menu_icon);
+ } else {
+ /* If the requested icon can't be found, put blank space in instead */
+ gwin->menuicon[num] = (char *)strdup(NSA_SPACE);
+ }
}
}
@@ -589,14 +594,14 @@ static void ami_init_menulabs(struct gui_window_2 *gwin)
}
ami_menu_alloc_item(gwin, M_PROJECT, NM_TITLE, "Project", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_NEWWIN, NM_ITEM, "NewWindowNS", 'N', NULL,
+ ami_menu_alloc_item(gwin, M_NEWWIN, NM_ITEM, "NewWindowNS", 'N', "TBImages:list_app",
ami_menu_item_project_newwin, NULL);
- ami_menu_alloc_item(gwin, M_NEWTAB, NM_ITEM, "NewTab", 'T', NULL,
+ ami_menu_alloc_item(gwin, M_NEWTAB, NM_ITEM, "NewTab", 'T', "TBImages:list_add",
ami_menu_item_project_newtab, NULL);
ami_menu_alloc_item(gwin, M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_OPEN, NM_ITEM, "OpenFile", 'O', NULL,
+ ami_menu_alloc_item(gwin, M_OPEN, NM_ITEM, "OpenFile", 'O', "TBImages:list_folder_misc",
ami_menu_item_project_open, NULL);
- ami_menu_alloc_item(gwin, M_SAVEAS, NM_ITEM, "SaveAsNS", 0, NULL, NULL, NULL);
+ ami_menu_alloc_item(gwin, M_SAVEAS, NM_ITEM, "SaveAsNS", 0, "TBImages:list_saveas", NULL, NULL);
ami_menu_alloc_item(gwin, M_SAVESRC, NM_SUB, "Source", 'S', NULL,
ami_menu_item_project_save, (void *)AMINS_SAVE_SOURCE);
ami_menu_alloc_item(gwin, M_SAVETXT, NM_SUB, "TextNS", 0, NULL,
@@ -610,60 +615,58 @@ static void ami_init_menulabs(struct gui_window_2 *gwin)
ami_menu_alloc_item(gwin, M_SAVEIFF, NM_SUB, "IFF", 0, NULL,
ami_menu_item_project_save, (void *)AMINS_SAVE_IFF);
ami_menu_alloc_item(gwin, M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_PRINT, NM_ITEM, "PrintNS", 'P', NULL,
+ ami_menu_alloc_item(gwin, M_PRINT, NM_ITEM, "PrintNS", 'P', "TBImages:list_print",
ami_menu_item_project_print, NULL);
ami_menu_alloc_item(gwin, M_BAR_P3, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_CLOSETAB, NM_ITEM, "CloseTab", 'K', NULL,
+ ami_menu_alloc_item(gwin, M_CLOSETAB, NM_ITEM, "CloseTab", 'K', "TBImages:list_remove",
ami_menu_item_project_closetab, NULL);
- ami_menu_alloc_item(gwin, M_CLOSEWIN, NM_ITEM, "CloseWindow", 0, NULL,
+ ami_menu_alloc_item(gwin, M_CLOSEWIN, NM_ITEM, "CloseWindow", 0, "TBImages:list_cancel",
ami_menu_item_project_closewin, NULL);
ami_menu_alloc_item(gwin, M_BAR_P4, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_ABOUT, NM_ITEM, "About", '?', NULL,
+ ami_menu_alloc_item(gwin, M_ABOUT, NM_ITEM, "About", '?', "TBImages:list_info",
ami_menu_item_project_about, NULL);
ami_menu_alloc_item(gwin, M_BAR_P5, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_QUIT, NM_ITEM, "Quit", 'Q', NULL,
+ ami_menu_alloc_item(gwin, M_QUIT, NM_ITEM, "Quit", 'Q', "TBImages:list_warning",
ami_menu_item_project_quit, NULL);
ami_menu_alloc_item(gwin, M_EDIT, NM_TITLE, "Edit", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_CUT, NM_ITEM, "CutNS", 'X', NULL,
+ ami_menu_alloc_item(gwin, M_CUT, NM_ITEM, "CutNS", 'X', "TBImages:list_cut",
ami_menu_item_edit_cut, NULL);
- ami_menu_alloc_item(gwin, M_COPY, NM_ITEM, "CopyNS", 'C', NULL,
+ ami_menu_alloc_item(gwin, M_COPY, NM_ITEM, "CopyNS", 'C', "TBImages:list_copy",
ami_menu_item_edit_copy, NULL);
- ami_menu_alloc_item(gwin, M_PASTE, NM_ITEM, "PasteNS", 'V', NULL,
+ ami_menu_alloc_item(gwin, M_PASTE, NM_ITEM, "PasteNS", 'V', "TBImages:list_paste",
ami_menu_item_edit_paste, NULL);
ami_menu_alloc_item(gwin, M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_SELALL, NM_ITEM, "SelectAllNS", 'A', NULL,
+ ami_menu_alloc_item(gwin, M_SELALL, NM_ITEM, "SelectAllNS", 'A', NSA_SPACE,
ami_menu_item_edit_selectall, NULL);
- ami_menu_alloc_item(gwin, M_CLEAR, NM_ITEM, "ClearNS", 0, NULL,
+ ami_menu_alloc_item(gwin, M_CLEAR, NM_ITEM, "ClearNS", 0, NSA_SPACE,
ami_menu_item_edit_clearsel, NULL);
ami_menu_alloc_item(gwin, M_BAR_E2, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_UNDO, NM_ITEM, "Undo", 'Z', NULL,
+ ami_menu_alloc_item(gwin, M_UNDO, NM_ITEM, "Undo", 'Z', "TBImages:list_undo",
ami_menu_item_edit_undo, NULL);
- ami_menu_alloc_item(gwin, M_REDO, NM_ITEM, "Redo", 'Y', NULL,
+ ami_menu_alloc_item(gwin, M_REDO, NM_ITEM, "Redo", 'Y', "TBImages:list_redo",
ami_menu_item_edit_redo, NULL);
ami_menu_alloc_item(gwin, M_BROWSER, NM_TITLE, "Browser", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_FIND, NM_ITEM, "FindTextNS", 'F', NULL,
+ ami_menu_alloc_item(gwin, M_FIND, NM_ITEM, "FindTextNS", 'F', "TBImages:list_search",
ami_menu_item_browser_find, NULL);
ami_menu_alloc_item(gwin, M_BAR_B1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_HISTLOCL, NM_ITEM, "HistLocalNS", 0, NULL,
+ ami_menu_alloc_item(gwin, M_HISTLOCL, NM_ITEM, "HistLocalNS", 0, "TBImages:list_history",
ami_menu_item_browser_localhistory, NULL);
- ami_menu_alloc_item(gwin, M_HISTGLBL, NM_ITEM, "HistGlobalNS", 0, NULL,
+ ami_menu_alloc_item(gwin, M_HISTGLBL, NM_ITEM, "HistGlobalNS", 0, "TBImages:list_history",
ami_menu_item_browser_globalhistory, NULL);
ami_menu_alloc_item(gwin, M_BAR_B2, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_COOKIES, NM_ITEM, "ShowCookiesNS", 0, NULL,
+ ami_menu_alloc_item(gwin, M_COOKIES, NM_ITEM, "ShowCookiesNS", 0, "TBImages:list_internet",
ami_menu_item_browser_cookies, NULL);
ami_menu_alloc_item(gwin, M_BAR_B3, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_SCALE, NM_ITEM, "ScaleNS", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_SCALEDEC, NM_SUB, "ScaleDec", '-', NULL,
+ ami_menu_alloc_item(gwin, M_SCALE, NM_ITEM, "ScaleNS", 0, NSA_SPACE, NULL, NULL);
+ ami_menu_alloc_item(gwin, M_SCALEDEC, NM_SUB, "ScaleDec", '-', "TBImages:list_zoom_out",
ami_menu_item_browser_scale_decrease, NULL);
- ami_menu_alloc_item(gwin, M_SCALENRM, NM_SUB, "ScaleNorm", '=', NULL,
+ ami_menu_alloc_item(gwin, M_SCALENRM, NM_SUB, "ScaleNorm", '=', "TBImages:list_zoom_100",
ami_menu_item_browser_scale_normal, NULL);
- ami_menu_alloc_item(gwin, M_SCALEDEC, NM_SUB, "ScaleDec", '-', NULL,
- ami_menu_item_browser_scale_decrease, NULL);
- ami_menu_alloc_item(gwin, M_SCALEINC, NM_SUB, "ScaleInc", '+', NULL,
+ ami_menu_alloc_item(gwin, M_SCALEINC, NM_SUB, "ScaleInc", '+', "TBImages:list_zoom_in",
ami_menu_item_browser_scale_increase, NULL);
- ami_menu_alloc_item(gwin, M_IMAGES, NM_ITEM, "Images", 0, NULL, NULL, NULL);
+ ami_menu_alloc_item(gwin, M_IMAGES, NM_ITEM, "Images", 0, "TBImages:list_image", NULL, NULL);
ami_menu_alloc_item(gwin, M_IMGFORE, NM_SUB, "ForeImg", 0, NULL,
ami_menu_item_browser_foreimg, NULL);
ami_menu_alloc_item(gwin, M_IMGBACK, NM_SUB, "BackImg", 0, NULL,
@@ -673,27 +676,27 @@ static void ami_init_menulabs(struct gui_window_2 *gwin)
ami_menu_item_browser_enablejs, NULL);
#endif
ami_menu_alloc_item(gwin, M_BAR_B4, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_REDRAW, NM_ITEM, "Redraw", 0, NULL,
+ ami_menu_alloc_item(gwin, M_REDRAW, NM_ITEM, "Redraw", 0, "TBImages:list_wand",
ami_menu_item_browser_redraw, NULL);
ami_menu_alloc_item(gwin, M_HOTLIST, NM_TITLE, "Hotlist", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_HLADD, NM_ITEM, "HotlistAdd", 'B', NULL,
+ ami_menu_alloc_item(gwin, M_HLADD, NM_ITEM, "HotlistAdd", 'B', "TBImages:list_favouriteadd",
ami_menu_item_hotlist_add, NULL);
- ami_menu_alloc_item(gwin, M_HLSHOW, NM_ITEM,"HotlistShowNS",'H', NULL,
+ ami_menu_alloc_item(gwin, M_HLSHOW, NM_ITEM,"HotlistShowNS",'H', "TBImages:list_favourite",
ami_menu_item_hotlist_show, NULL);
ami_menu_alloc_item(gwin, M_BAR_H1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
ami_menu_alloc_item(gwin, M_PREFS, NM_TITLE, "Settings", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_PREDIT, NM_ITEM, "SettingsEdit", 0, NULL,
+ ami_menu_alloc_item(gwin, M_PREDIT, NM_ITEM, "SettingsEdit", 0, "TBImages:list_prefs",
ami_menu_item_settings_edit, NULL);
ami_menu_alloc_item(gwin, M_BAR_S1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",0, NULL,
+ ami_menu_alloc_item(gwin, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",0, "TBImages:list_hold",
ami_menu_item_settings_snapshot, NULL);
- ami_menu_alloc_item(gwin, M_PRSAVE, NM_ITEM, "SettingsSave", 0, NULL,
+ ami_menu_alloc_item(gwin, M_PRSAVE, NM_ITEM, "SettingsSave", 0, "TBImages:list_use",
ami_menu_item_settings_save, NULL);
ami_menu_alloc_item(gwin, M_AREXX, NM_TITLE, "ARexx", 0, NULL, NULL, NULL);
- ami_menu_alloc_item(gwin, M_AREXXEX, NM_ITEM, "ARexxExecute",'E', NULL,
+ ami_menu_alloc_item(gwin, M_AREXXEX, NM_ITEM, "ARexxExecute",'E', "TBImages:list_arexx",
ami_menu_item_arexx_execute, NULL);
ami_menu_alloc_item(gwin, M_BAR_A1, NM_ITEM, NM_BARLABEL, 0, NULL, NULL, NULL);
gwin->menutype[AMI_MENU_AREXX_MAX] = NM_END;
@@ -779,6 +782,14 @@ static int ami_menu_calc_item_width(struct gui_window_2 *gwin, int j, struct Ras
item_size += menu_glyph_width[NSA_GLYPH_AMIGAKEY];
/**TODO: take account of the size of other imagery too
*/
+ } else {
+ /* assume worst case - it doesn't really matter if we make menus wider */
+ item_size += TextLength(rp, "M", 1);
+ item_size += menu_glyph_width[NSA_GLYPH_AMIGAKEY];
+ }
+
+ if(gwin->menuicon[j]) {
+ item_size += 16;
}
return item_size;
@@ -788,7 +799,7 @@ static int ami_menu_calc_item_width(struct gui_window_2 *gwin, int j, struct Ras
static struct gui_window_2 *ami_menu_layout(struct gui_window_2 *gwin)
{
int i, j;
- int txtlen = 0, subtxtlen = 0;
+ int txtlen = 0;
int left_posn;
struct RastPort *rp = &scrn->RastPort;
struct DrawInfo *dri = GetScreenDrawInfo(scrn);
@@ -815,14 +826,14 @@ static struct gui_window_2 *ami_menu_layout(struct gui_window_2 *gwin)
} while((gwin->menutype[j] != NM_TITLE) && (gwin->menutype[j] != 0));
}
#ifdef __amigaos4__
- if(LIB_IS_AT_LEAST((struct Library *)GadToolsBase, 53, 6)) {
- /* GadTools 53.6+ only. For now we will only create the menu
+ if(LIB_IS_AT_LEAST((struct Library *)GadToolsBase, 53, 7)) {
+ /* GadTools 53.7+ only. For now we will only create the menu
using label.image if there's a bitmap associated with the item. */
if((gwin->menuicon[i] != NULL) && (gwin->menulab[i] != NM_BARLABEL)) {
int icon_width = 0;
- Object *blank_space = NULL;
Object *submenuarrow = NULL;
Object *icon = BitMapObj,
+ IA_Scalable, TRUE,
BITMAP_Screen, scrn,
BITMAP_SourceFile, gwin->menuicon[i],
BITMAP_Masking, TRUE,
@@ -836,9 +847,7 @@ static struct gui_window_2 *ami_menu_layout(struct gui_window_2 *gwin)
GetAttr(IA_Width, icon, (ULONG *)&icon_width);
- if(gwin->menutype[i] == NM_SUB) {
- left_posn = subtxtlen;
- } else {
+ if(gwin->menutype[i] != NM_SUB) {
left_posn = txtlen;
}
@@ -854,32 +863,8 @@ static struct gui_window_2 *ami_menu_layout(struct gui_window_2 *gwin)
SYSIA_DrawInfo, dri,
IA_Left, left_posn,
TAG_DONE);
-
- j = i + 1;
- subtxtlen = 0;
- do {
- if(gwin->menulab[j] != NM_BARLABEL) {
- if(gwin->menutype[j] == NM_SUB) {
- int item_size = ami_menu_calc_item_width(gwin, j, rp);
- if(item_size > subtxtlen) {
- subtxtlen = item_size;
- }
- }
- }
- j++;
- } while((gwin->menutype[j] == NM_SUB));
}
- /**TODO: Checkmark/MX images and keyboard shortcuts
- */
-
- if(gwin->menutype[i] == NM_SUB) {
- blank_space = NewObject(NULL, "fillrectclass",
- IA_Height, 0,
- IA_Width, left_posn + icon_width,
- TAG_DONE);
- }
-
gwin->menuobj[i] = LabelObj,
LABEL_MenuMode, TRUE,
LABEL_DrawInfo, dri,
@@ -888,8 +873,6 @@ static struct gui_window_2 *ami_menu_layout(struct gui_window_2 *gwin)
LABEL_Text, " ",
LABEL_Text, gwin->menulab[i],
LABEL_DisposeImage, TRUE,
- LABEL_Image, blank_space,
- LABEL_DisposeImage, TRUE,
LABEL_Image, submenuarrow,
LabelEnd;
@@ -997,7 +980,7 @@ void ami_menu_arexx_scan(struct gui_window_2 *gwin)
else
menu_lab = ead->ed_Name;
- ami_menu_alloc_item(gwin, item, NM_ITEM, menu_lab, 0, NULL,
+ ami_menu_alloc_item(gwin, item, NM_ITEM, menu_lab, 0, NSA_SPACE,
ami_menu_item_arexx_entries, (void *)strdup(ead->ed_Name));
item++;
diff --git a/amiga/misc.c b/amiga/misc.c
index 8503826..141994a 100755
--- a/amiga/misc.c
+++ b/amiga/misc.c
@@ -51,7 +51,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
{
LONG ret = 0;
- LOG(("%s", message));
+ LOG("%s", message);
#ifdef __amigaos4__
ret = TimedDosRequesterTags(
TDR_TitleString, messages_get("NetSurf"),
diff --git a/amiga/options.h b/amiga/options.h
index b942420..a98b1e8 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -60,6 +60,7 @@ NSOPTION_BOOL(startup_no_window, false)
NSOPTION_BOOL(close_no_quit, false)
NSOPTION_BOOL(hide_docky_icon, false)
NSOPTION_STRING(font_unicode, NULL)
+NSOPTION_STRING(font_surrogate, NULL)
NSOPTION_STRING(font_unicode_file, NULL)
NSOPTION_BOOL(font_unicode_only, false)
NSOPTION_BOOL(font_antialiasing, true)
diff --git a/amiga/os3support.c b/amiga/os3support.c
index 2435785..cea466c 100644
--- a/amiga/os3support.c
+++ b/amiga/os3support.c
@@ -67,7 +67,7 @@ struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG fl
/*\todo we should be opening the .font file too and checking
* for the magic bytes to indicate this is an outline font.
*/
- LOG(("Unable to open %s", otagpath));
+ LOG("Unable to open %s", otagpath);
FreeVec(otagpath);
return NULL;
}
@@ -75,7 +75,7 @@ struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG fl
size = GetFileSize(fh);
buffer = (struct TagItem *)AllocVec(size, MEMF_ANY);
if(buffer == NULL) {
- LOG(("Unable to allocate memory"));
+ LOG("Unable to allocate memory");
Close(fh);
FreeVec(otagpath);
return NULL;
@@ -87,7 +87,7 @@ struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG fl
/* The first tag is supposed to be OT_FileIdent and should equal 'size' */
struct TagItem *tag = (struct TagItem *)buffer;
if((tag->ti_Tag != OT_FileIdent) || (tag->ti_Data != (ULONG)size)) {
- LOG(("Invalid OTAG file"));
+ LOG("Invalid OTAG file");
FreeVec(buffer);
FreeVec(otagpath);
return NULL;
@@ -102,10 +102,10 @@ struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG fl
/* Find OT_Engine and open the font engine */
if(ti = FindTagItem(OT_Engine, buffer)) {
- LOG(("Using font engine %s", ti->ti_Data));
+ LOG("Using font engine %s", ti->ti_Data);
fname = ASPrintf("%s.library", ti->ti_Data);
} else {
- LOG(("Cannot find OT_Engine tag"));
+ LOG("Cannot find OT_Engine tag");
FreeVec(buffer);
FreeVec(otagpath);
return NULL;
@@ -114,7 +114,7 @@ struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG fl
BulletBase = OpenLibrary(fname, 0L);
if(BulletBase == NULL) {
- LOG(("Unable to open %s", fname));
+ LOG("Unable to open %s", fname);
FreeVec(buffer);
FreeVec(fname);
FreeVec(otagpath);
diff --git a/amiga/plotters.c b/amiga/plotters.c
index fa5f661..202d1b8 100644
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -99,7 +99,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height)
struct BitMap *friend = NULL;
depth = GetBitMapAttr(scrn->RastPort.BitMap, BMA_DEPTH);
- LOG(("Screen depth = %d", depth));
+ LOG("Screen depth = %d", depth);
if(depth < 16) {
palette_mapped = true;
@@ -207,7 +207,7 @@ static ULONG ami_plot_obtain_pen(struct MinList *shared_pens, ULONG colr)
(colr & 0x00ff0000) << 8,
NULL);
- if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", colr));
+ if(pen == -1) LOG("WARNING: Cannot allocate pen for ABGR:%lx", colr);
if(shared_pens != NULL) {
if((node = (struct ami_plot_pen *)AllocVecTagList(sizeof(struct ami_plot_pen), NULL))) {
@@ -280,7 +280,7 @@ void ami_plot_clear_bbox(struct RastPort *rp, struct IBox *bbox)
static bool ami_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *style)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_rectangle()"));
+ LOG("[ami_plotter] Entered ami_rectangle()");
#endif
if (style->fill_type != PLOT_OP_TYPE_NONE) {
@@ -325,7 +325,7 @@ static bool ami_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *st
static bool ami_line(int x0, int y0, int x1, int y1, const plot_style_t *style)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_line()"));
+ LOG("[ami_plotter] Entered ami_line()");
#endif
glob->rp->PenWidth = style->stroke_width;
@@ -360,21 +360,21 @@ static bool ami_line(int x0, int y0, int x1, int y1, const plot_style_t *style)
static bool ami_polygon(const int *p, unsigned int n, const plot_style_t *style)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_polygon()"));
+ LOG("[ami_plotter] Entered ami_polygon()");
#endif
ami_plot_setapen(glob->rp, style->fill_colour);
if(AreaMove(glob->rp,p[0],p[1]) == -1)
- LOG(("AreaMove: vector list full"));
+ LOG("AreaMove: vector list full");
for(uint32 k = 1; k < n; k++) {
if(AreaDraw(glob->rp,p[k*2],p[(k*2)+1]) == -1)
- LOG(("AreaDraw: vector list full"));
+ LOG("AreaDraw: vector list full");
}
if(AreaEnd(glob->rp) == -1)
- LOG(("AreaEnd: error"));
+ LOG("AreaEnd: error");
return true;
}
@@ -383,7 +383,7 @@ static bool ami_polygon(const int *p, unsigned int n, const plot_style_t *style)
static bool ami_clip(const struct rect *clip)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_clip()"));
+ LOG("[ami_plotter] Entered ami_clip()");
#endif
struct Region *reg = NULL;
@@ -411,7 +411,7 @@ static bool ami_text(int x, int y, const char *text, size_t length,
const plot_font_style_t *fstyle)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_text()"));
+ LOG("[ami_plotter] Entered ami_text()");
#endif
bool aa = true;
@@ -428,7 +428,7 @@ static bool ami_text(int x, int y, const char *text, size_t length,
static bool ami_disc(int x, int y, int radius, const plot_style_t *style)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_disc()"));
+ LOG("[ami_plotter] Entered ami_disc()");
#endif
if (style->fill_type != PLOT_OP_TYPE_NONE) {
@@ -473,7 +473,7 @@ static void ami_arc_gfxlib(int x, int y, int radius, int angle1, int angle2)
static bool ami_arc(int x, int y, int radius, int angle1, int angle2, const plot_style_t *style)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_arc()"));
+ LOG("[ami_plotter] Entered ami_arc()");
#endif
if (angle2 < angle1) angle2 += 360;
@@ -487,7 +487,7 @@ static bool ami_arc(int x, int y, int radius, int angle1, int angle2, const plot
static bool ami_bitmap(int x, int y, int width, int height, struct bitmap *bitmap)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_bitmap()"));
+ LOG("[ami_plotter] Entered ami_bitmap()");
#endif
struct BitMap *tbm;
@@ -504,7 +504,7 @@ static bool ami_bitmap(int x, int y, int width, int height, struct bitmap *bitma
if(!tbm) return true;
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] ami_bitmap() got native bitmap"));
+ LOG("[ami_plotter] ami_bitmap() got native bitmap");
#endif
#ifdef __amigaos4__
@@ -577,7 +577,7 @@ static bool ami_bitmap_tile(int x, int y, int width, int height,
bitmap_flags_t flags)
{
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_bitmap_tile()"));
+ LOG("[ami_plotter] Entered ami_bitmap_tile()");
#endif
int xf,yf,xm,ym,oy,ox;
@@ -776,14 +776,14 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
struct bez_point start_p = {0, 0}, cur_p = {0, 0}, p_a, p_b, p_c, p_r;
#ifdef AMI_PLOTTER_DEBUG
- LOG(("[ami_plotter] Entered ami_path()"));
+ LOG("[ami_plotter] Entered ami_path()");
#endif
if (n == 0)
return true;
if (p[0] != PLOTTER_PATH_MOVE) {
- LOG(("Path does not start with move"));
+ LOG("Path does not start with move");
return false;
}
@@ -804,7 +804,7 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
if (p[i] == PLOTTER_PATH_MOVE) {
if (fill != NS_TRANSPARENT) {
if(AreaMove(glob->rp, p[i+1], p[i+2]) == -1)
- LOG(("AreaMove: vector list full"));
+ LOG("AreaMove: vector list full");
} else {
Move(glob->rp, p[i+1], p[i+2]);
}
@@ -817,7 +817,7 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
} else if (p[i] == PLOTTER_PATH_CLOSE) {
if (fill != NS_TRANSPARENT) {
if(AreaEnd(glob->rp) == -1)
- LOG(("AreaEnd: error"));
+ LOG("AreaEnd: error");
} else {
Draw(glob->rp, start_p.x, start_p.y);
}
@@ -825,7 +825,7 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
} else if (p[i] == PLOTTER_PATH_LINE) {
if (fill != NS_TRANSPARENT) {
if(AreaDraw(glob->rp, p[i+1], p[i+2]) == -1)
- LOG(("AreaDraw: vector list full"));
+ LOG("AreaDraw: vector list full");
} else {
Draw(glob->rp, p[i+1], p[i+2]);
}
@@ -844,7 +844,7 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
ami_bezier(&cur_p, &p_a, &p_b, &p_c, t, &p_r);
if (fill != NS_TRANSPARENT) {
if(AreaDraw(glob->rp, p_r.x, p_r.y) == -1)
- LOG(("AreaDraw: vector list full"));
+ LOG("AreaDraw: vector list full");
} else {
Draw(glob->rp, p_r.x, p_r.y);
}
@@ -853,7 +853,7 @@ static bool ami_path(const float *p, unsigned int n, colour fill, float width,
cur_p.y = p_c.y;
i += 7;
} else {
- LOG(("bad path command %f", p[i]));
+ LOG("bad path command %f", p[i]);
/* End path for safety if using Area commands */
if (fill != NS_TRANSPARENT) {
AreaEnd(glob->rp);
diff --git a/amiga/plugin_hack.c b/amiga/plugin_hack.c
index 23f4d34..ad4bfaa 100644
--- a/amiga/plugin_hack.c
+++ b/amiga/plugin_hack.c
@@ -79,7 +79,7 @@ nserror amiga_plugin_hack_init(void)
if(node)
{
- LOG(("plugin_hack registered %s",lwc_string_data(type)));
+ LOG("plugin_hack registered %s", lwc_string_data(type));
error = content_factory_register_handler(
lwc_string_data(type),
@@ -120,7 +120,7 @@ nserror amiga_plugin_hack_create(const content_handler *handler,
bool amiga_plugin_hack_convert(struct content *c)
{
- LOG(("amiga_plugin_hack_convert"));
+ LOG("amiga_plugin_hack_convert");
content_set_ready(c);
content_set_done(c);
@@ -134,7 +134,7 @@ void amiga_plugin_hack_destroy(struct content *c)
{
amiga_plugin_hack_content *plugin = (amiga_plugin_hack_content *) c;
- LOG(("amiga_plugin_hack_destroy %p", plugin));
+ LOG("amiga_plugin_hack_destroy %p", plugin);
return;
}
@@ -150,7 +150,7 @@ bool amiga_plugin_hack_redraw(struct content *c,
.stroke_width = 1,
};
- LOG(("amiga_plugin_hack_redraw"));
+ LOG("amiga_plugin_hack_redraw");
ctx->plot->rectangle(data->x, data->y, data->x + data->width,
data->y + data->height, &pstyle);
@@ -173,7 +173,7 @@ bool amiga_plugin_hack_redraw(struct content *c,
void amiga_plugin_hack_open(struct content *c, struct browser_window *bw,
struct content *page, struct object_params *params)
{
- LOG(("amiga_plugin_hack_open %s", nsurl_access(content_get_url(c))));
+ LOG("amiga_plugin_hack_open %s", nsurl_access(content_get_url(c)));
if(c)
{
@@ -187,13 +187,13 @@ void amiga_plugin_hack_open(struct content *c, struct browser_window *bw,
void amiga_plugin_hack_close(struct content *c)
{
- LOG(("amiga_plugin_hack_close"));
+ LOG("amiga_plugin_hack_close");
return;
}
void amiga_plugin_hack_reformat(struct content *c, int width, int height)
{
- LOG(("amiga_plugin_hack_reformat"));
+ LOG("amiga_plugin_hack_reformat");
c->width = width;
c->height = height;
@@ -206,7 +206,7 @@ nserror amiga_plugin_hack_clone(const struct content *old, struct content **newc
amiga_plugin_hack_content *plugin;
nserror error;
- LOG(("amiga_plugin_hack_clone"));
+ LOG("amiga_plugin_hack_clone");
plugin = calloc(1, sizeof(amiga_plugin_hack_content));
if (plugin == NULL)
@@ -253,7 +253,7 @@ void amiga_plugin_hack_execute(struct hlcache_handle *c)
if(full_cmd)
{
#ifdef __amigaos4__
- LOG(("Attempting to execute %s", full_cmd));
+ LOG("Attempting to execute %s", full_cmd);
in = Open("NIL:", MODE_OLDFILE);
out = Open("NIL:", MODE_NEWFILE);
diff --git a/amiga/resources/blankspace.png b/amiga/resources/blankspace.png
new file mode 100644
index 0000000..1f1e672
Binary files /dev/null and b/amiga/resources/blankspace.png differ
diff --git a/amiga/schedule.c b/amiga/schedule.c
index 494b8b0..cb53d2f 100755
--- a/amiga/schedule.c
+++ b/amiga/schedule.c
@@ -456,7 +456,7 @@ void ami_schedule_handle(struct MsgPort *nsmsgport)
#endif
}
-#ifdef NSA_NO_SYNC
+#ifdef AMIGA_NS_ASYNC
static int32 ami_scheduler_process(STRPTR args, int32 length, APTR execbase)
{
struct Process *proc = (struct Process *)FindTask(NULL);
@@ -554,7 +554,7 @@ nserror ami_scheduler_process_create(struct MsgPort *nsmsgport)
return NSERROR_NOMEM;
}
- LOG(("Waiting for scheduler process to start up..."));
+ LOG("Waiting for scheduler process to start up...");
WaitPort(nsmsgport);
struct ami_schedule_message *asmsg = (struct ami_schedule_message *)GetMsg(nsmsgport);
@@ -564,7 +564,7 @@ nserror ami_scheduler_process_create(struct MsgPort *nsmsgport)
ReplyMsg((struct Message *)asmsg);
}
#endif
- LOG(("Scheduler started"));
+ LOG("Scheduler started");
return NSERROR_OK;
}
diff --git a/amiga/theme.c b/amiga/theme.c
index 4d6107a..0b77dc5 100644
--- a/amiga/theme.c
+++ b/amiga/theme.c
@@ -152,7 +152,7 @@ void ami_theme_init(void)
if(lock)
{
UnLock(lock);
- messages_load(themefile);
+ messages_add_from_file(themefile);
}
}
diff --git a/atari/about.h b/atari/about.h
index db18250..dff6eae 100644
--- a/atari/about.h
+++ b/atari/about.h
@@ -16,10 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef NS_ATARI_ABOUT_H_INCLUDED
-#define NS_ATARI_ABOUT_H_INCLUDED
+#ifndef NS_ATARI_ABOUT_H_INCLUDED
+#define NS_ATARI_ABOUT_H_INCLUDED
-void atari_about_show(void);
-
-
-#endif // NS_ATARI_ABOUT_H_INCLUDED
+void atari_about_show(void);
+
+#endif // NS_ATARI_ABOUT_H_INCLUDED
diff --git a/atari/bitmap.c b/atari/bitmap.c
old mode 100755
new mode 100644
index 431d97d..a159a66
--- a/atari/bitmap.c
+++ b/atari/bitmap.c
@@ -81,8 +81,7 @@ static void *atari_bitmap_create_ex( int w, int h, short bpp, int rowstride, uns
{
struct bitmap * bitmap;
- LOG(("width %d (rowstride: %d, bpp: %d), height %d, state %u",w, rowstride,
- bpp, h, state ));
+ LOG("width %d (rowstride: %d, bpp: %d), height %d, state %u", w, rowstride, bpp, h, state);
if( rowstride == 0) {
rowstride = bpp * w;
@@ -108,10 +107,10 @@ static void *atari_bitmap_create_ex( int w, int h, short bpp, int rowstride, uns
} else {
free(bitmap);
bitmap=NULL;
- LOG(("Out of memory!"));
+ LOG("Out of memory!");
}
}
- LOG(("bitmap %p", bitmap));
+ LOG("bitmap %p", bitmap);
return bitmap;
}
@@ -195,7 +194,7 @@ static unsigned char *bitmap_get_buffer(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return NULL;
}
@@ -219,7 +218,7 @@ size_t atari_bitmap_get_rowstride(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return 0;
}
return bm->rowstride;
@@ -232,7 +231,7 @@ void atari_bitmap_destroy(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return;
}
@@ -273,11 +272,11 @@ static void bitmap_set_opaque(void *bitmap, bool opaque)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return;
}
- LOG(("setting bitmap %p to %s", bm, opaque?"opaque":"transparent"));
+ LOG("setting bitmap %p to %s", bm, opaque ? "opaque" : "transparent");
bm->opaque = opaque;
}
@@ -294,7 +293,7 @@ static bool bitmap_test_opaque(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return false;
}
@@ -306,11 +305,11 @@ static bool bitmap_test_opaque(void *bitmap)
while (tst-- > 0) {
if (bm->pixdata[(tst << 2) + 3] != 0xff) {
- LOG(("bitmap %p has transparency",bm));
+ LOG("bitmap %p has transparency", bm);
return false;
}
}
- LOG(("bitmap %p is opaque", bm));
+ LOG("bitmap %p is opaque", bm);
return true;
}
@@ -321,7 +320,7 @@ bool atari_bitmap_get_opaque(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return false;
}
@@ -335,7 +334,7 @@ int atari_bitmap_get_width(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return 0;
}
@@ -349,7 +348,7 @@ int atari_bitmap_get_height(void *bitmap)
struct bitmap *bm = bitmap;
if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
+ LOG("NULL bitmap!");
return 0;
}
return(bm->height);
diff --git a/atari/bitmap.h b/atari/bitmap.h
old mode 100755
new mode 100644
diff --git a/atari/certview.c b/atari/certview.c
index 15d57c2..d649c02 100644
--- a/atari/certview.c
+++ b/atari/certview.c
@@ -1,297 +1,296 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <ctype.h>
-#include <string.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "utils/nsoption.h"
-#include "utils/log.h"
-#include "utils/messages.h"
-#include "utils/utils.h"
-#include "content/urldb.h"
-#include "content/hlcache.h"
-#include "desktop/sslcert_viewer.h"
-#include "desktop/core_window.h"
-
-#include "atari/gui.h"
-#include "atari/misc.h"
-#include "atari/treeview.h"
-#include "atari/certview.h"
-#include "atari/findfile.h"
-#include "atari/gemtk/gemtk.h"
-#include "atari/res/netsurf.rsh"
-
-extern GRECT desk_area;
-
-
-/* Setup Atari Treeview Callbacks: */
-static nserror atari_sslcert_viewer_init_phase2(struct core_window *cw,
- struct core_window_callback_table * default_callbacks);
-static void atari_sslcert_viewer_finish(struct core_window *cw);
-static void atari_sslcert_viewer_keypress(struct core_window *cw,
- uint32_t ucs4);
-static void atari_sslcert_viewer_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y);
-static void atari_sslcert_viewer_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx);
-static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
-
-static struct atari_treeview_callbacks atari_sslcert_viewer_treeview_callbacks = {
- .init_phase2 = atari_sslcert_viewer_init_phase2,
- .finish = atari_sslcert_viewer_finish,
- .draw = atari_sslcert_viewer_draw,
- .keypress = atari_sslcert_viewer_keypress,
- .mouse_action = atari_sslcert_viewer_mouse_action,
- .gemtk_user_func = handle_event
-};
-
-/* static functions */
-static void atari_sslcert_viewer_destroy(struct atari_sslcert_viewer_s * cvwin);
-
-
-static nserror atari_sslcert_viewer_init_phase2(struct core_window *cw,
- struct core_window_callback_table *cb_t)
-{
- struct atari_sslcert_viewer_s *cvwin;
- struct sslcert_session_data *ssl_d;
-
- cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
-
- assert(cvwin);
-
- ssl_d = cvwin->ssl_session_data;
-
- assert(ssl_d);
-
- LOG((""));
-
- return(sslcert_viewer_init(cb_t, cw, ssl_d));
-}
-
-static void atari_sslcert_viewer_finish(struct core_window *cw)
-{
- struct atari_sslcert_viewer_s *cvwin;
-
- assert(cw);
-
- cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
-
- /* This will also free the session data: */
- sslcert_viewer_fini(cvwin->ssl_session_data);
-
- LOG((""));
-}
-
-static void atari_sslcert_viewer_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx)
-{
- struct atari_sslcert_viewer_s *cvwin;
-
- assert(cw);
-
- cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
-
- assert(cvwin);
-
- sslcert_viewer_redraw(cvwin->ssl_session_data, x, y, clip, ctx);
-}
-
-static void atari_sslcert_viewer_keypress(struct core_window *cw, uint32_t ucs4)
-{
- struct atari_sslcert_viewer_s *cvwin;
-
- assert(cw);
-
- cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
-
- LOG(("ucs4: %lu\n", ucs4));
- sslcert_viewer_keypress(cvwin->ssl_session_data, ucs4);
-}
-
-static void atari_sslcert_viewer_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y)
-{
- struct atari_sslcert_viewer_s *cvwin;
-
- assert(cw);
-
- cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
-
- sslcert_viewer_mouse_action(cvwin->ssl_session_data, mouse, x, y);
-}
-
-
-static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
-{
- struct core_window *tv=NULL;
- GRECT tb_area;
- GUIWIN * gemtk_win;
- struct atari_sslcert_viewer_s *cvwin = NULL;
- short retval = 0;
- OBJECT *toolbar;
-
- LOG((""));
-
- if(ev_out->emo_events & MU_MESAG){
- switch (msg[0]) {
-
- case WM_TOOLBAR:
- toolbar = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
- LOG(("CERTVIEWER WM_TOOLBAR"));
- tv = (struct core_window*) gemtk_wm_get_user_data(win);
- assert(tv);
- cvwin = (struct atari_sslcert_viewer_s *)
- atari_treeview_get_user_data(tv);
- switch (msg[4]) {
-
- case TOOLBAR_SSL_CERT_TRUSTED:
-
- if (toolbar[msg[4]].ob_state & OS_SELECTED) {
-
- } else {
-
- }
- break;
- }
-
-
- gemtk_win = atari_treeview_get_gemtk_window(tv);
- assert(gemtk_win);
- //gemtk_obj_get_tree(TOOLBAR_HOTLIST)[msg[4]].ob_state &= ~OS_SELECTED;
- atari_treeview_get_grect(tv, TREEVIEW_AREA_TOOLBAR, &tb_area);
- evnt_timer(150);
- gemtk_wm_exec_redraw(gemtk_win, &tb_area);
- retval = 1;
- break;
-
- case WM_CLOSED:
- // TODO set perrmissions
- toolbar = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
- tv = (struct core_window*) gemtk_wm_get_user_data(win);
- assert(tv);
- cvwin = (struct atari_sslcert_viewer_s *)
- atari_treeview_get_user_data(tv);
- if (toolbar[TOOLBAR_SSL_CERT_TRUSTED].ob_state & OS_SELECTED) {
- sslcert_viewer_accept(cvwin->ssl_session_data);
- } else {
- sslcert_viewer_reject(cvwin->ssl_session_data);
- }
- atari_sslcert_viewer_destroy(cvwin);
- retval = 1;
- break;
-
- default: break;
- }
- }
-
- return(retval);
-}
-
-static void atari_sslcert_viewer_init(struct atari_sslcert_viewer_s * cvwin,
- struct sslcert_session_data *ssl_d)
-{
- assert(cvwin->init == false);
- assert(cvwin->window == NULL);
- assert(cvwin->tv == NULL);
-
- int flags = ATARI_TREEVIEW_WIDGETS;
- short handle = -1;
- OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
- assert( tree );
-
- handle = wind_create(flags, 0, 0, desk_area.g_w, desk_area.g_h);
- cvwin->window = gemtk_wm_add(handle,
- GEMTK_WM_FLAG_DEFAULTS, NULL);
- if (cvwin->window == NULL ) {
- gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
- "Failed to allocate Treeview:\nCertviewer");
- return;
- }
- wind_set_str(handle, WF_NAME, (char*)"SSL Certificate");
- gemtk_wm_set_toolbar(cvwin->window, tree, 0, 0);
- gemtk_wm_unlink(cvwin->window);
-
- cvwin->ssl_session_data = ssl_d;
- cvwin->tv = atari_treeview_create(cvwin->window,
- &atari_sslcert_viewer_treeview_callbacks,
- cvwin, flags);
-
- if (cvwin->tv == NULL) {
- /* handle it properly, clean up previous allocs */
- LOG(("Failed to allocate treeview"));
- return;
- }
-
- cvwin->init = true;
-}
-
-/*
-* documented in certview.h
-*/
-void atari_sslcert_viewer_open(struct sslcert_session_data *ssl_d)
-{
- struct atari_sslcert_viewer_s * cvwin;
-
- cvwin = calloc(1, sizeof(struct atari_sslcert_viewer_s));
-
- assert(cvwin);
-
- atari_sslcert_viewer_init(cvwin, ssl_d);
-
- if (atari_treeview_is_open(cvwin->tv) == false) {
-
- GRECT pos;
- pos.g_x = desk_area.g_w - desk_area.g_w / 4;
- pos.g_y = desk_area.g_y;
- pos.g_w = desk_area.g_w / 4;
- pos.g_h = desk_area.g_h;
-
- atari_treeview_open(cvwin->tv, &pos);
- } else {
- wind_set(gemtk_wm_get_handle(cvwin->window), WF_TOP, 1, 0,
- 0, 0);
- }
-}
-
-
-static void atari_sslcert_viewer_destroy(struct atari_sslcert_viewer_s * cvwin)
-{
- assert(cvwin);
- assert(cvwin->init);
- assert(cvwin->window);
-
- LOG((""));
-
- if (atari_treeview_is_open(cvwin->tv))
- atari_treeview_close(cvwin->tv);
- wind_delete(gemtk_wm_get_handle(cvwin->window));
- gemtk_wm_remove(cvwin->window);
- cvwin->window = NULL;
- atari_treeview_delete(cvwin->tv);
- free(cvwin);
- LOG(("done"));
-}
-
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ctype.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "utils/nsoption.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+#include "content/urldb.h"
+#include "content/hlcache.h"
+#include "desktop/sslcert_viewer.h"
+#include "desktop/core_window.h"
+
+#include "atari/gui.h"
+#include "atari/misc.h"
+#include "atari/treeview.h"
+#include "atari/certview.h"
+#include "atari/findfile.h"
+#include "atari/gemtk/gemtk.h"
+#include "atari/res/netsurf.rsh"
+
+extern GRECT desk_area;
+
+
+/* Setup Atari Treeview Callbacks: */
+static nserror atari_sslcert_viewer_init_phase2(struct core_window *cw,
+ struct core_window_callback_table * default_callbacks);
+static void atari_sslcert_viewer_finish(struct core_window *cw);
+static void atari_sslcert_viewer_keypress(struct core_window *cw,
+ uint32_t ucs4);
+static void atari_sslcert_viewer_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y);
+static void atari_sslcert_viewer_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
+
+static struct atari_treeview_callbacks atari_sslcert_viewer_treeview_callbacks = {
+ .init_phase2 = atari_sslcert_viewer_init_phase2,
+ .finish = atari_sslcert_viewer_finish,
+ .draw = atari_sslcert_viewer_draw,
+ .keypress = atari_sslcert_viewer_keypress,
+ .mouse_action = atari_sslcert_viewer_mouse_action,
+ .gemtk_user_func = handle_event
+};
+
+/* static functions */
+static void atari_sslcert_viewer_destroy(struct atari_sslcert_viewer_s * cvwin);
+
+
+static nserror atari_sslcert_viewer_init_phase2(struct core_window *cw,
+ struct core_window_callback_table *cb_t)
+{
+ struct atari_sslcert_viewer_s *cvwin;
+ struct sslcert_session_data *ssl_d;
+
+ cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
+
+ assert(cvwin);
+
+ ssl_d = cvwin->ssl_session_data;
+
+ assert(ssl_d);
+
+ LOG("");
+
+ return(sslcert_viewer_init(cb_t, cw, ssl_d));
+}
+
+static void atari_sslcert_viewer_finish(struct core_window *cw)
+{
+ struct atari_sslcert_viewer_s *cvwin;
+
+ assert(cw);
+
+ cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
+
+ /* This will also free the session data: */
+ sslcert_viewer_fini(cvwin->ssl_session_data);
+
+ LOG("");
+}
+
+static void atari_sslcert_viewer_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ struct atari_sslcert_viewer_s *cvwin;
+
+ assert(cw);
+
+ cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
+
+ assert(cvwin);
+
+ sslcert_viewer_redraw(cvwin->ssl_session_data, x, y, clip, ctx);
+}
+
+static void atari_sslcert_viewer_keypress(struct core_window *cw, uint32_t ucs4)
+{
+ struct atari_sslcert_viewer_s *cvwin;
+
+ assert(cw);
+
+ cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
+
+ LOG("ucs4: %lu\n", ucs4);
+ sslcert_viewer_keypress(cvwin->ssl_session_data, ucs4);
+}
+
+static void atari_sslcert_viewer_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y)
+{
+ struct atari_sslcert_viewer_s *cvwin;
+
+ assert(cw);
+
+ cvwin = (struct atari_sslcert_viewer_s *)atari_treeview_get_user_data(cw);
+
+ sslcert_viewer_mouse_action(cvwin->ssl_session_data, mouse, x, y);
+}
+
+
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
+{
+ struct core_window *tv=NULL;
+ GRECT tb_area;
+ GUIWIN * gemtk_win;
+ struct atari_sslcert_viewer_s *cvwin = NULL;
+ short retval = 0;
+ OBJECT *toolbar;
+
+ LOG("");
+
+ if(ev_out->emo_events & MU_MESAG){
+ switch (msg[0]) {
+
+ case WM_TOOLBAR:
+ toolbar = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
+ LOG("CERTVIEWER WM_TOOLBAR");
+ tv = (struct core_window*) gemtk_wm_get_user_data(win);
+ assert(tv);
+ cvwin = (struct atari_sslcert_viewer_s *)
+ atari_treeview_get_user_data(tv);
+ switch (msg[4]) {
+
+ case TOOLBAR_SSL_CERT_TRUSTED:
+
+ if (toolbar[msg[4]].ob_state & OS_SELECTED) {
+
+ } else {
+
+ }
+ break;
+ }
+
+
+ gemtk_win = atari_treeview_get_gemtk_window(tv);
+ assert(gemtk_win);
+ //gemtk_obj_get_tree(TOOLBAR_HOTLIST)[msg[4]].ob_state &= ~OS_SELECTED;
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_TOOLBAR, &tb_area);
+ evnt_timer(150);
+ gemtk_wm_exec_redraw(gemtk_win, &tb_area);
+ retval = 1;
+ break;
+
+ case WM_CLOSED:
+ // TODO set perrmissions
+ toolbar = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
+ tv = (struct core_window*) gemtk_wm_get_user_data(win);
+ assert(tv);
+ cvwin = (struct atari_sslcert_viewer_s *)
+ atari_treeview_get_user_data(tv);
+ if (toolbar[TOOLBAR_SSL_CERT_TRUSTED].ob_state & OS_SELECTED) {
+ sslcert_viewer_accept(cvwin->ssl_session_data);
+ } else {
+ sslcert_viewer_reject(cvwin->ssl_session_data);
+ }
+ atari_sslcert_viewer_destroy(cvwin);
+ retval = 1;
+ break;
+
+ default: break;
+ }
+ }
+
+ return(retval);
+}
+
+static void atari_sslcert_viewer_init(struct atari_sslcert_viewer_s * cvwin,
+ struct sslcert_session_data *ssl_d)
+{
+ assert(cvwin->init == false);
+ assert(cvwin->window == NULL);
+ assert(cvwin->tv == NULL);
+
+ int flags = ATARI_TREEVIEW_WIDGETS;
+ short handle = -1;
+ OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_SSL_CERT);
+ assert( tree );
+
+ handle = wind_create(flags, 0, 0, desk_area.g_w, desk_area.g_h);
+ cvwin->window = gemtk_wm_add(handle,
+ GEMTK_WM_FLAG_DEFAULTS, NULL);
+ if (cvwin->window == NULL ) {
+ gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
+ "Failed to allocate Treeview:\nCertviewer");
+ return;
+ }
+ wind_set_str(handle, WF_NAME, (char*)"SSL Certificate");
+ gemtk_wm_set_toolbar(cvwin->window, tree, 0, 0);
+ gemtk_wm_unlink(cvwin->window);
+
+ cvwin->ssl_session_data = ssl_d;
+ cvwin->tv = atari_treeview_create(cvwin->window,
+ &atari_sslcert_viewer_treeview_callbacks,
+ cvwin, flags);
+
+ if (cvwin->tv == NULL) {
+ /* handle it properly, clean up previous allocs */
+ LOG("Failed to allocate treeview");
+ return;
+ }
+
+ cvwin->init = true;
+}
+
+/*
+ * documented in certview.h
+ */
+void atari_sslcert_viewer_open(struct sslcert_session_data *ssl_d)
+{
+ struct atari_sslcert_viewer_s * cvwin;
+
+ cvwin = calloc(1, sizeof(struct atari_sslcert_viewer_s));
+
+ assert(cvwin);
+
+ atari_sslcert_viewer_init(cvwin, ssl_d);
+
+ if (atari_treeview_is_open(cvwin->tv) == false) {
+
+ GRECT pos;
+ pos.g_x = desk_area.g_w - desk_area.g_w / 4;
+ pos.g_y = desk_area.g_y;
+ pos.g_w = desk_area.g_w / 4;
+ pos.g_h = desk_area.g_h;
+
+ atari_treeview_open(cvwin->tv, &pos);
+ } else {
+ wind_set(gemtk_wm_get_handle(cvwin->window), WF_TOP, 1, 0,
+ 0, 0);
+ }
+}
+
+
+static void atari_sslcert_viewer_destroy(struct atari_sslcert_viewer_s * cvwin)
+{
+ assert(cvwin);
+ assert(cvwin->init);
+ assert(cvwin->window);
+
+ LOG("");
+
+ if (atari_treeview_is_open(cvwin->tv))
+ atari_treeview_close(cvwin->tv);
+ wind_delete(gemtk_wm_get_handle(cvwin->window));
+ gemtk_wm_remove(cvwin->window);
+ cvwin->window = NULL;
+ atari_treeview_delete(cvwin->tv);
+ free(cvwin);
+ LOG("done");
+}
diff --git a/atari/certview.h b/atari/certview.h
index fc30074..ff15d80 100644
--- a/atari/certview.h
+++ b/atari/certview.h
@@ -16,7 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CERTVIEW_H_INCLUDED
+#ifndef CERTVIEW_H_INCLUDED
#define CERTVIEW_H_INCLUDED
#include <inttypes.h>
@@ -28,24 +28,24 @@
#include "utils/nsoption.h"
#include "utils/log.h"
#include "desktop/sslcert_viewer.h"
-
+
struct core_window;
-struct atari_sslcert_viewer_s {
- GUIWIN * window;
+struct atari_sslcert_viewer_s {
+ GUIWIN * window;
//struct atari_treeview_window *tv;/*< The hotlist treeview handle. */
struct core_window *tv;
- struct sslcert_session_data *ssl_session_data;
- bool init;
-};
+ struct sslcert_session_data *ssl_session_data;
+ bool init;
+};
/**
* Initializes and opens an certificate inspector window
* \param ssl_d ssl session data created by sslcert_viewer_create_session_data
*
* The window takes ownership of the session data and free's the memory on exit.
- */
+ */
void atari_sslcert_viewer_open(struct sslcert_session_data *ssl_d);
-#endif // CERTVIEW_H_INCLUDED
+#endif // CERTVIEW_H_INCLUDED
diff --git a/atari/clipboard.c b/atari/clipboard.c
index e07e9d8..3464e4b 100644
--- a/atari/clipboard.c
+++ b/atari/clipboard.c
@@ -1,88 +1,88 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Module Description:
- *
- *
- *
- */
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <mint/osbind.h>
-#include <cflib.h>
-#include "atari/clipboard.h"
-#include "atari/gemtk/gemtk.h"
-
-
-static int filesize(char * path)
-{
- FILE *f;
- int fs;
-
- f = fopen( path, "r+b");
- if(!f)
- return(-1);
-
- fseek(f, 0L, SEEK_END);
- fs = ftell(f);
- fclose(f);
-
- return(fs);
-}
-
-int scrap_txt_write(char *str)
-{
- scrap_wtxt(str);
-
-
- // Send SC_CHANGED message:
- gemtk_send_msg(SC_CHANGED, 0, 2, 0, 0, 0, 0);
-
- return(0);
-
-}
-
-char *scrap_txt_read(void)
-{
- char * buf = NULL;
- char path[80];
-
- if (get_scrapdir (path))
- {
- int len;
- strcat (path, "scrap.txt");
- len = filesize(path);
- if(len > 0){
- int file;
- if ((file = (int) Fopen (path, 0)) >= 0)
- {
- buf = malloc(len);
- if(buf){
- len = Fread (file, len, buf);
- Fclose (file);
- buf[len] = '\0';
- return buf;
- }
- }
- }
- }
- return buf;
-}
-
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Module Description:
+ *
+ *
+ *
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+#include <mint/osbind.h>
+#include <cflib.h>
+#include "atari/clipboard.h"
+#include "atari/gemtk/gemtk.h"
+
+
+static int filesize(char * path)
+{
+ FILE *f;
+ int fs;
+
+ f = fopen( path, "r+b");
+ if(!f)
+ return(-1);
+
+ fseek(f, 0L, SEEK_END);
+ fs = ftell(f);
+ fclose(f);
+
+ return(fs);
+}
+
+int scrap_txt_write(char *str)
+{
+ scrap_wtxt(str);
+
+
+ // Send SC_CHANGED message:
+ gemtk_send_msg(SC_CHANGED, 0, 2, 0, 0, 0, 0);
+
+ return(0);
+
+}
+
+char *scrap_txt_read(void)
+{
+ char * buf = NULL;
+ char path[80];
+
+ if (get_scrapdir (path))
+ {
+ int len;
+ strcat (path, "scrap.txt");
+ len = filesize(path);
+ if(len > 0){
+ int file;
+ if ((file = (int) Fopen (path, 0)) >= 0)
+ {
+ buf = malloc(len);
+ if(buf){
+ len = Fread (file, len, buf);
+ Fclose (file);
+ buf[len] = '\0';
+ return buf;
+ }
+ }
+ }
+ }
+ return buf;
+}
+
diff --git a/atari/clipboard.h b/atari/clipboard.h
old mode 100755
new mode 100644
index f35161e..aeecc9a
--- a/atari/clipboard.h
+++ b/atari/clipboard.h
@@ -1,25 +1,25 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_CLIPBOARD_H
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_CLIPBOARD_H
#define NS_ATARI_CLIPBOARD_H
-
-int scrap_txt_write(char *str);
-char *scrap_txt_read(void);
-
+
+int scrap_txt_write(char *str);
+char *scrap_txt_read(void);
+
#endif
diff --git a/atari/cookies.c b/atari/cookies.c
index 579c23d..4578f38 100644
--- a/atari/cookies.c
+++ b/atari/cookies.c
@@ -74,13 +74,13 @@ static struct atari_treeview_callbacks atari_cookie_manager_treeview_callbacks =
static nserror atari_cookie_manager_init_phase2(struct core_window *cw,
struct core_window_callback_table *cb_t)
{
- LOG((""));
+ LOG("");
return(cookie_manager_init(cb_t, cw));
}
static void atari_cookie_manager_finish(struct core_window *cw)
{
- LOG((""));
+ LOG("");
cookie_manager_fini();
}
@@ -93,7 +93,7 @@ static void atari_cookie_manager_draw(struct core_window *cw, int x,
static void atari_cookie_manager_keypress(struct core_window *cw, uint32_t ucs4)
{
- LOG(("ucs4: %lu\n", ucs4));
+ LOG("ucs4: %lu\n", ucs4);
cookie_manager_keypress(ucs4);
}
@@ -110,13 +110,13 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
{
short retval = 0;
- LOG((""));
+ LOG("");
if(ev_out->emo_events & MU_MESAG){
switch (msg[0]) {
case WM_TOOLBAR:
- LOG(("WM_TOOLBAR"));
+ LOG("WM_TOOLBAR");
break;
case WM_CLOSED:
@@ -160,7 +160,7 @@ void atari_cookie_manager_init(void)
if (atari_cookie_manager.tv == NULL) {
/* handle it properly, clean up previous allocs */
- LOG(("Failed to allocate treeview"));
+ LOG("Failed to allocate treeview");
return;
}
@@ -170,6 +170,7 @@ void atari_cookie_manager_init(void)
}
atari_cookie_manager.init = true;
}
+
void atari_cookie_manager_open(void)
{
assert(atari_cookie_manager.init);
@@ -210,7 +211,7 @@ void atari_cookie_manager_destroy(void)
atari_treeview_delete(atari_cookie_manager.tv);
atari_cookie_manager.init = false;
}
- LOG(("done"));
+ LOG("done");
}
diff --git a/atari/cookies.h b/atari/cookies.h
index fc95f65..3649c8c 100644
--- a/atari/cookies.h
+++ b/atari/cookies.h
@@ -1,19 +1,19 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NS_ATARI_COOKIE_MANAGER_H
@@ -21,18 +21,18 @@
struct core_window;
-struct atari_cookie_manager_s {
- GUIWIN * window;
+struct atari_cookie_manager_s {
+ GUIWIN * window;
//struct atari_treeview_window * tv;/*< The hotlist treeview handle. */
- struct core_window *tv;
- bool init;
-};
-
-extern struct atari_cookie_manager_s atari_cookie_manager;
-
-void atari_cookie_manager_init(void);
-void atari_cookie_manager_open(void);
-void atari_cookie_manager_close(void);
+ struct core_window *tv;
+ bool init;
+};
+
+extern struct atari_cookie_manager_s atari_cookie_manager;
+
+void atari_cookie_manager_init(void);
+void atari_cookie_manager_open(void);
+void atari_cookie_manager_close(void);
void atari_cookie_manager_destroy(void);
void atari_cookie_manager_redraw(void);
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index 4dc1701..7106fab 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -302,7 +302,7 @@ void context_popup(struct gui_window * gw, short x, short y)
/* the GEMDOS cmdline contains the length of the commandline
in the first byte: */
cmdline[0] = (unsigned char)strlen(tempfile);
- LOG(("Creating temporay source file: %s\n", tempfile));
+ LOG("Creating temporay source file: %s\n", tempfile);
fp_tmpfile = fopen(tempfile, "w");
if (fp_tmpfile != NULL){
fwrite(data, size, 1, fp_tmpfile);
@@ -320,7 +320,7 @@ void context_popup(struct gui_window * gw, short x, short y)
}
} else {
- LOG(("Invalid content!"));
+ LOG("Invalid content!");
}
} else {
form_alert(0, "[1][Set option \"atari_editor\".][OK]");
diff --git a/atari/ctxmenu.h b/atari/ctxmenu.h
index 079860d..73a9663 100644
--- a/atari/ctxmenu.h
+++ b/atari/ctxmenu.h
@@ -1,24 +1,24 @@
-/*
- * Copyright 2012 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2012 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CTXMENU_H_INCLUDED
-#define CTXMENU_H_INCLUDED
-
-void context_popup( struct gui_window * gw, short x, short y );
-
-#endif // CTXMENU_H_INCLUDED
+#ifndef CTXMENU_H_INCLUDED
+#define CTXMENU_H_INCLUDED
+
+void context_popup( struct gui_window * gw, short x, short y );
+
+#endif // CTXMENU_H_INCLUDED
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index 91a1d99..c2994ce 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -132,7 +132,7 @@ struct s_menu_item_evnt menu_evnt_tbl[] =
{T_EDIT, MAINMENU_M_FIND, menu_find, {0,NK_F4,0}, NULL},
{T_VIEW, MAINMENU_M_RELOAD, menu_reload, {0,NK_F5,0}, NULL},
{T_VIEW, MAINMENU_INC_SCALE, menu_inc_scale, {'+',0,K_CTRL}, NULL},
- {T_VIEW, MAINMENU_DEC_SCALE, menu_dec_scale, {'-',0,K_CTRL}, NULL},
+ {T_VIEW, MAINMENU_DEC_SCALE, menu_dec_scale, {'-',0,K_CTRL}, NULL},
{T_VIEW, MAINMENU_M_TOOLBARS, menu_toolbars, {0,NK_F1,K_CTRL}, NULL},
{T_VIEW, MAINMENU_M_SAVEWIN, menu_savewin, {0,0,0}, NULL},
{T_VIEW, MAINMENU_M_DEBUG_RENDER, menu_debug_render, {0,0,0}, NULL},
@@ -155,46 +155,46 @@ struct s_menu_item_evnt menu_evnt_tbl[] =
/*
-static void __CDECL evnt_menu(WINDOW * win, short buff[8])
-{
- int title = buff[3];
- INT16 x,y;
- char *str;
- struct gui_window * gw = window_list;
- int i=0;
-
- deskmenu_dispatch_item(buff[3], buff[4]);
-}
+ static void __CDECL evnt_menu(WINDOW * win, short buff[8])
+ {
+ int title = buff[3];
+ INT16 x,y;
+ char *str;
+ struct gui_window * gw = window_list;
+ int i=0;
+
+ deskmenu_dispatch_item(buff[3], buff[4]);
+ }
*/
/*
- Menu item event handlers:
+ Menu item event handlers:
*/
static void __CDECL menu_about(short item, short title, void *data)
{
/*
- nsurl *url;
- nserror error;
- char buf[PATH_MAX];
-
- LOG(("%s", __FUNCTION__));
- strcpy((char*)&buf, "file://");
- strncat((char*)&buf, (char*)"./doc/README.TXT",
- PATH_MAX - (strlen("file://")+1) );
-
- error = nsurl_create(buf, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- }
+ nsurl *url;
+ nserror error;
+ char buf[PATH_MAX];
+
+ LOG("%s", __FUNCTION__);
+ strcpy((char*)&buf, "file://");
+ strncat((char*)&buf, (char*)"./doc/README.TXT",
+ PATH_MAX - (strlen("file://")+1) );
+
+ error = nsurl_create(buf, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BW_CREATE_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
*/
atari_about_show();
}
@@ -205,7 +205,7 @@ static void __CDECL menu_new_win(short item, short title, void *data)
nserror error;
const char *addr;
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
@@ -233,7 +233,7 @@ static void __CDECL menu_open_url(short item, short title, void *data)
{
struct gui_window * gw;
struct browser_window * bw ;
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
gw = input_window;
if( gw == NULL ) {
@@ -248,7 +248,7 @@ static void __CDECL menu_open_url(short item, short title, void *data)
static void __CDECL menu_open_file(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
const char * filename = file_select(messages_get("OpenFile"), "");
if( filename != NULL ){
@@ -277,7 +277,7 @@ static void __CDECL menu_open_file(short item, short title, void *data)
static void __CDECL menu_close_win(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
gui_window_destroy( input_window );
@@ -285,7 +285,7 @@ static void __CDECL menu_close_win(short item, short title, void *data)
static void __CDECL menu_save_page(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
static bool init = true;
bool is_folder=false;
const char * path;
@@ -307,7 +307,7 @@ static void __CDECL menu_save_page(short item, short title, void *data)
if( path != NULL ){
save_complete(browser_window_get_content(
- input_window->browser->bw), path, NULL);
+ input_window->browser->bw), path, NULL);
}
}
@@ -316,7 +316,7 @@ static void __CDECL menu_quit(short item, short title, void *data)
{
short buff[8];
memset( &buff, 0, sizeof(short)*8 );
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
gemtk_wm_send_msg(NULL, AP_TERM, 0, 0, 0, 0);
}
@@ -328,21 +328,21 @@ static void __CDECL menu_cut(short item, short title, void *data)
static void __CDECL menu_copy(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window != NULL )
browser_window_key_press( input_window->browser->bw, NS_KEY_COPY_SELECTION);
}
static void __CDECL menu_paste(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window != NULL )
browser_window_key_press( input_window->browser->bw, NS_KEY_PASTE);
}
static void __CDECL menu_find(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if (input_window != NULL) {
if (input_window->search) {
window_close_search(input_window->root);
@@ -355,17 +355,17 @@ static void __CDECL menu_find(short item, short title, void *data)
static void __CDECL menu_choices(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
open_settings();
}
static void __CDECL menu_stop(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
- assert(input_window && input_window->root);
+ assert(input_window && input_window->root);
toolbar_stop_click(input_window->root->toolbar);
}
@@ -375,7 +375,7 @@ static void __CDECL menu_reload(short item, short title, void *data)
if(input_window == NULL)
return;
toolbar_reload_click(input_window->root->toolbar);
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
}
@@ -385,8 +385,8 @@ static void __CDECL menu_inc_scale(short item, short title, void *data)
return;
browser_window_set_scale(input_window->browser->bw,
- browser_window_get_scale(input_window->browser->bw) + 0.25,
- true);
+ browser_window_get_scale(input_window->browser->bw) + 0.25,
+ true);
}
@@ -396,8 +396,8 @@ static void __CDECL menu_dec_scale(short item, short title, void *data)
return;
browser_window_set_scale(input_window->browser->bw,
- browser_window_get_scale(input_window->browser->bw) - 0.25,
- true);
+ browser_window_get_scale(input_window->browser->bw) - 0.25,
+ true);
}
@@ -405,7 +405,7 @@ static void __CDECL menu_dec_scale(short item, short title, void *data)
static void __CDECL menu_toolbars(short item, short title, void *data)
{
static int state = 0;
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window != null && input_window->root->toolbar != null ){
state = !state;
// TODO: implement toolbar hide
@@ -415,11 +415,11 @@ static void __CDECL menu_toolbars(short item, short title, void *data)
static void __CDECL menu_savewin(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if (input_window && input_window->browser) {
GRECT rect;
wind_get_grect(gemtk_wm_get_handle(input_window->root->win), WF_CURRXYWH,
- &rect);
+ &rect);
option_window_width = rect.g_w;
option_window_height = rect.g_h;
option_window_x = rect.g_x;
@@ -435,17 +435,17 @@ static void __CDECL menu_savewin(short item, short title, void *data)
static void __CDECL menu_debug_render(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
html_redraw_debug = !html_redraw_debug;
if( input_window != NULL ) {
if ( input_window->browser != NULL
- && input_window->browser->bw != NULL) {
+ && input_window->browser->bw != NULL) {
GRECT rect;
window_get_grect(input_window->root, BROWSER_AREA_CONTENT, &rect);
browser_window_reformat(input_window->browser->bw, false,
- rect.g_w, rect.g_h );
+ rect.g_w, rect.g_h );
menu_icheck(h_gem_menu, MAINMENU_M_DEBUG_RENDER,
- (html_redraw_debug) ? 1 : 0);
+ (html_redraw_debug) ? 1 : 0);
}
}
}
@@ -454,19 +454,19 @@ static void __CDECL menu_fg_images(short item, short title, void *data)
{
nsoption_set_bool(foreground_images, !nsoption_bool(foreground_images));
menu_icheck(h_gem_menu, MAINMENU_M_FG_IMAGES,
- (nsoption_bool(foreground_images)) ? 1 : 0);
+ (nsoption_bool(foreground_images)) ? 1 : 0);
}
static void __CDECL menu_bg_images(short item, short title, void *data)
{
nsoption_set_bool(background_images, !nsoption_bool(background_images));
menu_icheck(h_gem_menu, MAINMENU_M_BG_IMAGES,
- (nsoption_bool(background_images)) ? 1 : 0);
+ (nsoption_bool(background_images)) ? 1 : 0);
}
static void __CDECL menu_back(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
toolbar_back_click(input_window->root->toolbar);
@@ -474,7 +474,7 @@ static void __CDECL menu_back(short item, short title, void *data)
static void __CDECL menu_forward(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
toolbar_forward_click(input_window->root->toolbar);
@@ -482,7 +482,7 @@ static void __CDECL menu_forward(short item, short title, void *data)
static void __CDECL menu_home(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
toolbar_home_click(input_window->root->toolbar);
@@ -490,76 +490,76 @@ static void __CDECL menu_home(short item, short title, void *data)
static void __CDECL menu_lhistory(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if( input_window == NULL )
return;
}
static void __CDECL menu_ghistory(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
atari_global_history_open();
}
static void __CDECL menu_add_bookmark(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
if (input_window) {
if( browser_window_has_content(input_window->browser->bw) ){
atari_hotlist_add_page(
nsurl_access(browser_window_get_url(input_window->browser->bw)),
NULL
- );
+ );
}
}
}
static void __CDECL menu_bookmarks(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
atari_hotlist_open();
}
static void __CDECL menu_cookies(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
atari_cookie_manager_open();
}
static void __CDECL menu_vlog(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
verbose_log = !verbose_log;
menu_icheck(h_gem_menu, MAINMENU_M_VLOG, (verbose_log) ? 1 : 0);
}
static void __CDECL menu_help_content(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ LOG("%s", __FUNCTION__);
}
/*
- Public deskmenu interface:
+ Public deskmenu interface:
*/
/*
- Parse encoded menu key shortcut
-
- The format is:
-
- "[" - marks start of the shortcut
- "@,^,<" - If the keyshortcut is only valid
- with modifier keys, one of these characters must directly
- follow the start mark.
- Meaning:
- @ -> Alternate
- ^ -> Control
- "#" - keycode or ascii character.
- The value is handled as keycode if the character value
- is <= 28 ( Atari chracter table )
- or if it is interpreted as function key string.
- (strings: F1 - F10)
+ Parse encoded menu key shortcut
+
+ The format is:
+
+ "[" - marks start of the shortcut
+ "@,^,<" - If the keyshortcut is only valid
+ with modifier keys, one of these characters must directly
+ follow the start mark.
+ Meaning:
+ @ -> Alternate
+ ^ -> Control
+ "#" - keycode or ascii character.
+ The value is handled as keycode if the character value
+ is <= 28 ( Atari chracter table )
+ or if it is interpreted as function key string.
+ (strings: F1 - F10)
*/
static void register_menu_str( struct s_menu_item_evnt * mi )
@@ -575,17 +575,17 @@ static void register_menu_str( struct s_menu_item_evnt * mi )
i = l = strlen(str);
while (i > 2) {
- if ((strncmp(" ", &str[i], 2) == 0) && (strlen(&str[i]) > 2)) {
- // "Standard" Keyboard Shortcut Element found:
- LOG(("Standard Keyboard Shortcut: \"%s\"\n", &str[i]));
- x = i+2;
- is_std_shortcut = true;
- break;
- }
+ if ((strncmp(" ", &str[i], 2) == 0) && (strlen(&str[i]) > 2)) {
+ // "Standard" Keyboard Shortcut Element found:
+ LOG("Standard Keyboard Shortcut: \"%s\"\n", &str[i]);
+ x = i+2;
+ is_std_shortcut = true;
+ break;
+ }
if( str[i] == '['){
- LOG(("Keyboard Shortcut: \"%s\"\n", &str[i]));
- // "Custom" Keyboard Shortcut Element found (identified by [):
+ LOG("Keyboard Shortcut: \"%s\"\n", &str[i]);
+ // "Custom" Keyboard Shortcut Element found (identified by [):
x = i;
break;
}
@@ -595,20 +595,20 @@ static void register_menu_str( struct s_menu_item_evnt * mi )
// Parse keyboard shortcut value:
if( x > -1 ){
- if (is_std_shortcut == false) {
- // create a new menu string to hide the "[" mark:
- mi->menustr = malloc( l+1 );
- strcpy(mi->menustr, str);
- mi->menustr[x]=' ';
- x++;
- }
+ if (is_std_shortcut == false) {
+ // create a new menu string to hide the "[" mark:
+ mi->menustr = malloc( l+1 );
+ strcpy(mi->menustr, str);
+ mi->menustr[x]=' ';
+ x++;
+ }
- // find & register modifiers:
+ // find & register modifiers:
if (str[x] == '@') {
accel->mod = K_ALT;
if (is_std_shortcut == false) {
- // only modify menu items when it is malloc'd:
- mi->menustr[x] = 0x07;
+ // only modify menu items when it is malloc'd:
+ mi->menustr[x] = 0x07;
}
x++;
}
@@ -617,24 +617,24 @@ static void register_menu_str( struct s_menu_item_evnt * mi )
x++;
}
else if (str[x] == 0x01) { // the arrow up chracter (atari-st encoding)
- accel->mod = K_LSHIFT;
- x++;
+ accel->mod = K_LSHIFT;
+ x++;
}
- // find keycodes / chracters:
+ // find keycodes / chracters:
if( str[x] <= 28 ){
// parse symbol
switch( str[x] ){
- case 0x03:
- accel->keycode = NK_RIGHT;
+ case 0x03:
+ accel->keycode = NK_RIGHT;
break;
- case 0x04:
- accel->keycode = NK_LEFT;
+ case 0x04:
+ accel->keycode = NK_LEFT;
break;
- case 0x1B:
- accel->keycode = NK_ESC;
+ case 0x1B:
+ accel->keycode = NK_ESC;
break;
- default:
+ default:
break;
}
} else {
@@ -646,28 +646,26 @@ static void register_menu_str( struct s_menu_item_evnt * mi )
}
}
else if (strncmp(&str[x], "Home", 4) == 0) {
- accel->keycode = NK_CLRHOME;
+ accel->keycode = NK_CLRHOME;
}
else if (strncmp(&str[x], "Undo", 4) == 0) {
- accel->keycode = NK_UNDO;
+ accel->keycode = NK_UNDO;
}
else if (strncmp(&str[x], "Help", 4) == 0) {
- accel->keycode = NK_HELP;
+ accel->keycode = NK_HELP;
}
else {
accel->ascii = str[x];
}
}
- LOG(("Registered keyboard shortcut for \"%s\" => mod: %d, "
- "keycode: %d, ascii: %c\n", str, accel->mod, accel->keycode,
- accel->ascii));
+ LOG("Registered keyboard shortcut for \"%s\" => mod: %d, ""keycode: %d, ascii: %c\n", str, accel->mod, accel->keycode, accel->ascii);
}
}
/**
-* Setup & display an desktop menu.
-*/
+ * Setup & display an desktop menu.
+ */
void deskmenu_init(void)
{
@@ -682,15 +680,15 @@ void deskmenu_init(void)
/* parse and update menu items: */
i = 0;
while (menu_evnt_tbl[i].rid != -1) {
- if(menu_evnt_tbl[i].rid > 0 && menu_evnt_tbl[i].title > 0){
- register_menu_str( &menu_evnt_tbl[i] );
- /* Update menu string if not null: */
- if( menu_evnt_tbl[i].menustr != NULL ){
- menu_text(h_gem_menu, menu_evnt_tbl[i].rid,
- menu_evnt_tbl[i].menustr);
- }
- }
- i++;
+ if(menu_evnt_tbl[i].rid > 0 && menu_evnt_tbl[i].title > 0){
+ register_menu_str( &menu_evnt_tbl[i] );
+ /* Update menu string if not null: */
+ if( menu_evnt_tbl[i].menustr != NULL ){
+ menu_text(h_gem_menu, menu_evnt_tbl[i].rid,
+ menu_evnt_tbl[i].menustr);
+ }
+ }
+ i++;
}
deskmenu_update();
/* Redraw menu: */
@@ -698,8 +696,8 @@ void deskmenu_init(void)
}
/**
-* Uninstall the desktop menu
-*/
+ * Uninstall the desktop menu
+ */
void deskmenu_destroy(void)
{
int i;
@@ -717,37 +715,37 @@ void deskmenu_destroy(void)
}
/**
-* Return the deskmenu AES OBJECT tree
-*/
+ * Return the deskmenu AES OBJECT tree
+ */
OBJECT * deskmenu_get_obj_tree(void)
{
return(h_gem_menu);
}
/**
-* Handle an menu item event
-*/
+ * Handle an menu item event
+ */
int deskmenu_dispatch_item(short title, short item)
{
int i=0;
int retval = 0;
OBJECT * menu_root = deskmenu_get_obj_tree();
- menu_tnormal(menu_root, item, 1);
+ menu_tnormal(menu_root, item, 1);
menu_tnormal(menu_root, title, 1);
menu_bar(menu_root, 1);
// legacy code, is this sensible?:
/*
- while( gw ) {
- window_set_focus( gw, WIDGET_NONE, NULL );
- gw = gw->next;
- }
+ while( gw ) {
+ window_set_focus( gw, WIDGET_NONE, NULL );
+ gw = gw->next;
+ }
*/
while (menu_evnt_tbl[i].rid != -1) {
- if (menu_evnt_tbl[i].rid == item) {
+ if (menu_evnt_tbl[i].rid == item) {
if (menu_evnt_tbl[i].menu_func != NULL) {
menu_evnt_tbl[i].menu_func(item, title, NULL);
}
@@ -760,33 +758,33 @@ int deskmenu_dispatch_item(short title, short item)
}
/**
-* Handle an keypress (check for accelerator)
-*/
+ * Handle an keypress (check for accelerator)
+ */
int deskmenu_dispatch_keypress(unsigned short kcode, unsigned short kstate,
- unsigned short nkc)
+ unsigned short nkc)
{
char sascii;
bool done = 0;
int i = 0;
- sascii = gemtk_keybd2ascii(kcode, 0);
- if(sascii >= 'a' && sascii <= 'z'){
- sascii = gemtk_keybd2ascii(kcode, K_LSHIFT);
- }
+ sascii = gemtk_keybd2ascii(kcode, 0);
+ if(sascii >= 'a' && sascii <= 'z'){
+ sascii = gemtk_keybd2ascii(kcode, K_LSHIFT);
+ }
/* Iterate through the menu function table: */
while( menu_evnt_tbl[i].rid != -1 && done == false) {
if( kstate == menu_evnt_tbl[i].accel.mod
- && menu_evnt_tbl[i].accel.ascii != 0) {
+ && menu_evnt_tbl[i].accel.ascii != 0) {
if( menu_evnt_tbl[i].accel.ascii == sascii) {
- if (menu_evnt_tbl[i].title > 0 && menu_evnt_tbl[i].rid > 0) {
- deskmenu_dispatch_item(menu_evnt_tbl[i].title,
- menu_evnt_tbl[i].rid);
- }
- else {
- /* Keyboard shortcut not displayed within menu: */
- menu_evnt_tbl[i].menu_func(0, 0, NULL);
- }
+ if (menu_evnt_tbl[i].title > 0 && menu_evnt_tbl[i].rid > 0) {
+ deskmenu_dispatch_item(menu_evnt_tbl[i].title,
+ menu_evnt_tbl[i].rid);
+ }
+ else {
+ /* Keyboard shortcut not displayed within menu: */
+ menu_evnt_tbl[i].menu_func(0, 0, NULL);
+ }
done = true;
break;
}
@@ -794,17 +792,17 @@ int deskmenu_dispatch_keypress(unsigned short kcode, unsigned short kstate,
/* the accel code hides in the keycode: */
if( menu_evnt_tbl[i].accel.keycode != 0) {
if( menu_evnt_tbl[i].accel.keycode == (nkc & 0xFF) &&
- kstate == menu_evnt_tbl[i].accel.mod) {
- if (menu_evnt_tbl[i].title > 0 && menu_evnt_tbl[i].rid > 0) {
- deskmenu_dispatch_item(menu_evnt_tbl[i].title,
- menu_evnt_tbl[i].rid);
- }
- else {
- /* Keyboard shortcut not displayed within menu: */
- menu_evnt_tbl[i].menu_func(0, 0, NULL);
- }
- done = true;
- break;
+ kstate == menu_evnt_tbl[i].accel.mod) {
+ if (menu_evnt_tbl[i].title > 0 && menu_evnt_tbl[i].rid > 0) {
+ deskmenu_dispatch_item(menu_evnt_tbl[i].title,
+ menu_evnt_tbl[i].rid);
+ }
+ else {
+ /* Keyboard shortcut not displayed within menu: */
+ menu_evnt_tbl[i].menu_func(0, 0, NULL);
+ }
+ done = true;
+ break;
}
}
}
@@ -814,15 +812,14 @@ int deskmenu_dispatch_keypress(unsigned short kcode, unsigned short kstate,
}
/**
-* Refresh the desk menu, reflecting netsurf current state.
-*/
+ * Refresh the desk menu, reflecting netsurf current state.
+ */
void deskmenu_update(void)
{
menu_icheck(h_gem_menu, MAINMENU_M_DEBUG_RENDER, (html_redraw_debug) ? 1 : 0);
menu_icheck(h_gem_menu, MAINMENU_M_FG_IMAGES,
- (nsoption_bool(foreground_images)) ? 1 : 0);
+ (nsoption_bool(foreground_images)) ? 1 : 0);
menu_icheck(h_gem_menu, MAINMENU_M_BG_IMAGES,
- (nsoption_bool(background_images)) ? 1 : 0);
- menu_icheck(h_gem_menu, MAINMENU_M_VLOG, ((verbose_log == true) ? 1 : 0));
+ (nsoption_bool(background_images)) ? 1 : 0);
+ menu_icheck(h_gem_menu, MAINMENU_M_VLOG, ((verbose_log == true) ? 1 : 0));
}
-
diff --git a/atari/deskmenu.h b/atari/deskmenu.h
index 6ab00dc..d1b157a 100644
--- a/atari/deskmenu.h
+++ b/atari/deskmenu.h
@@ -1,12 +1,11 @@
-#ifndef DESKMENU_H_INCLUDED
+#ifndef DESKMENU_H_INCLUDED
#define DESKMENU_H_INCLUDED
void deskmenu_init(void);
void deskmenu_destroy(void);
-int deskmenu_dispatch_item(short title, short item);
-int deskmenu_dispatch_keypress(unsigned short kcode, unsigned short kstate,
- unsigned short nkc);
+int deskmenu_dispatch_item(short title, short item);
+int deskmenu_dispatch_keypress(unsigned short kcode, unsigned short kstate, unsigned short nkc);
OBJECT * deskmenu_get_obj_tree(void);
void deskmenu_update( void );
-
-#endif // DESKMENU_H_INCLUDED
+
+#endif // DESKMENU_H_INCLUDED
diff --git a/atari/download.c b/atari/download.c
old mode 100755
new mode 100644
index 7445a83..ce56d66
--- a/atari/download.c
+++ b/atari/download.c
@@ -197,7 +197,7 @@ static void gui_download_window_destroy( struct gui_download_window * gdw)
{
- LOG((""));
+ LOG("");
if (gdw->status == NSATARI_DOWNLOAD_WORKING) {
download_context_abort(gdw->ctx);
}
@@ -255,7 +255,7 @@ gui_download_window_create(download_context *ctx, struct gui_window *parent)
char alert[200];
- LOG(("Creating download window for gui window: %p", parent));
+ LOG("Creating download window for gui window: %p", parent);
/* TODO: Implement real form and use messages file strings! */
@@ -332,9 +332,7 @@ gui_download_window_create(download_context *ctx, struct gui_window *parent)
gemtk_wm_set_toolbar_redraw_func(gdw->guiwin, toolbar_redraw_cb);
strncpy((char*)&gdw->lbl_file, filename, MAX_SLEN_LBL_FILE-1);
- LOG(("created download: %s (total size: %d)",
- gdw->destination, gdw->size_total
- ));
+ LOG("created download: %s (total size: %d)", gdw->destination, gdw->size_total);
GRECT work, curr;
work.g_x = 0;
@@ -362,7 +360,7 @@ static nserror gui_download_window_data(struct gui_download_window *dw,
uint32_t tnow = clck / (CLOCKS_PER_SEC>>3);
uint32_t sdiff = (clck / (CLOCKS_PER_SEC)) - dw->start;
- LOG((""));
+ LOG("");
if(dw->abort == true){
dw->status = NSATARI_DOWNLOAD_CANCELED;
@@ -410,7 +408,7 @@ static nserror gui_download_window_data(struct gui_download_window *dw,
static void gui_download_window_error(struct gui_download_window *dw,
const char *error_msg)
{
- LOG(("%s", error_msg));
+ LOG("%s", error_msg);
strncpy((char*)&dw->lbl_file, error_msg, MAX_SLEN_LBL_FILE-1);
dw->status = NSATARI_DOWNLOAD_ERROR;
gemtk_wm_exec_redraw(dw->guiwin, NULL);
@@ -420,7 +418,7 @@ static void gui_download_window_error(struct gui_download_window *dw,
static void gui_download_window_done(struct gui_download_window *dw)
{
- LOG((""));
+ LOG("");
// TODO: change abort to close
dw->status = NSATARI_DOWNLOAD_COMPLETE;
diff --git a/atari/download.h b/atari/download.h
old mode 100755
new mode 100644
index 82f89c0..a5be325
--- a/atari/download.h
+++ b/atari/download.h
@@ -1,63 +1,63 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_DOWNLOAD_H
-#define NS_ATARI_DOWNLOAD_H
-
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_DOWNLOAD_H
+#define NS_ATARI_DOWNLOAD_H
+
extern struct gui_download_table *atari_download_table;
-#define MAX_SLEN_LBL_DONE 64
-#define MAX_SLEN_LBL_PERCENT 5
-#define MAX_SLEN_LBL_SPEED 13
+#define MAX_SLEN_LBL_DONE 64
+#define MAX_SLEN_LBL_PERCENT 5
+#define MAX_SLEN_LBL_SPEED 13
#define MAX_SLEN_LBL_FILE 256
-#define MAX_SLEN_BT_ABORT 5
-
-#define DOWNLOAD_BAR_MAX 300
-
-typedef enum {
- NSATARI_DOWNLOAD_NONE,
- NSATARI_DOWNLOAD_WORKING,
- NSATARI_DOWNLOAD_ERROR,
- NSATARI_DOWNLOAD_COMPLETE,
- NSATARI_DOWNLOAD_CANCELED
-} nsatari_download_status;
-
-struct gui_download_window {
- struct download_context *ctx;
- struct gui_window * parent;
+#define MAX_SLEN_BT_ABORT 5
+
+#define DOWNLOAD_BAR_MAX 300
+
+typedef enum {
+ NSATARI_DOWNLOAD_NONE,
+ NSATARI_DOWNLOAD_WORKING,
+ NSATARI_DOWNLOAD_ERROR,
+ NSATARI_DOWNLOAD_COMPLETE,
+ NSATARI_DOWNLOAD_CANCELED
+} nsatari_download_status;
+
+struct gui_download_window {
+ struct download_context *ctx;
+ struct gui_window * parent;
GUIWIN *guiwin;
short aes_handle;
- OBJECT *tree;
- nsatari_download_status status;
- char *destination;
- FILE * fd;
- char lbl_done[MAX_SLEN_LBL_DONE];
- char lbl_percent[MAX_SLEN_LBL_PERCENT];
- char lbl_speed[MAX_SLEN_LBL_SPEED];
- char lbl_file[MAX_SLEN_LBL_FILE];
- uint32_t start;
- uint32_t lastrdw;
- uint32_t size_total;
- uint32_t size_downloaded;
- char * fbuf;
- size_t fbufsize;
+ OBJECT *tree;
+ nsatari_download_status status;
+ char *destination;
+ FILE * fd;
+ char lbl_done[MAX_SLEN_LBL_DONE];
+ char lbl_percent[MAX_SLEN_LBL_PERCENT];
+ char lbl_speed[MAX_SLEN_LBL_SPEED];
+ char lbl_file[MAX_SLEN_LBL_FILE];
+ uint32_t start;
+ uint32_t lastrdw;
+ uint32_t size_total;
+ uint32_t size_downloaded;
+ char * fbuf;
+ size_t fbufsize;
bool abort;
- bool close_on_finish;
-};
-
-#endif
+ bool close_on_finish;
+};
+
+#endif
diff --git a/atari/encoding.c b/atari/encoding.c
index 8afcbb6..9a16cbd 100644
--- a/atari/encoding.c
+++ b/atari/encoding.c
@@ -1,19 +1,19 @@
-/*
- * Copyright 2012 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2012 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
@@ -23,52 +23,53 @@
#include "atari/encoding.h"
-
+
/* TODO: this need a rework..., encoding to atari st doesn|t always work.
-( gui_add_to_clipboard...) */
-nserror utf8_to_local_encoding(const char *string,
- size_t len,
- char **result)
-{
- nserror r;
- r = utf8_to_enc(string, "ATARIST", len, result);
- if(r != NSERROR_OK) {
- r = utf8_to_enc(string, "UTF-8", len, result);
- assert( r == NSERROR_OK );
- }
- return r;
-}
+( gui_add_to_clipboard...) */
+nserror utf8_to_local_encoding(const char *string,
+ size_t len,
+ char **result)
+{
+ nserror r;
+ r = utf8_to_enc(string, "ATARIST", len, result);
+ if (r != NSERROR_OK) {
+ r = utf8_to_enc(string, "UTF-8", len, result);
+ assert( r == NSERROR_OK );
+ }
+ return r;
+}
nserror utf8_from_local_encoding(const char *string, size_t len, char **result)
-{
- return utf8_from_enc(string, "ATARIST", len, result, NULL);
-}
-
-
-/* borrowed from highwire project: */
-static const uint16_t Atari_to_Unicode[] = {
- /* .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F */
- /* 7F */ 0x0394,
- /* 8. */ 0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7,0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5,
- /* 9. */ 0x00C9,0x00E6,0x00C6,0x00F4,0x00F6,0x00F2,0x00FB,0x00F9,0x00FF,0x00D6,0x00DC,0x00A2,0x00A3,0x00A5,0x00DF,0x0192,
- /* A. */ 0x00E1,0x00ED,0x00F3,0x00FA,0x00F1,0x00D1,0x00AA,0x00BA,0x00BF,0x2310,0x00AC,0x00BD,0x00BC,0x00A1,0x00AB,0x00BB,
- /* B. */ 0x00C3,0x00F5,0x00D8,0x00F8,0x0153,0x0152,0x00C0,0x00C3,0x00D5,0x00A8,0x00B4,0x2020,0x00B6,0x00A9,0x00AE,0x2122,
- /* C. */ 0x0133,0x0132,0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,0x05D8,0x05D9,0x05DB,0x05DC,0x05DE,0x05E0,
- /* D. */ 0x05E1,0x05E2,0x05E4,0x05E6,0x05E7,0x05E8,0x05E9,0x05EA,0x05DF,0x05DA,0x05DD,0x05E3,0x05E5,0x00A7,0x2038,0x221E,
- /* E. */ 0x03B1,0x03B2,0x0393,0x03C0,0x03A3,0x03C3,0x00B5,0x03C4,0x03A6,0x0398,0x03A9,0x03B4,0x222E,0x03C6,0x2208,0x2229,
- /* F. */ 0x2261,0x00B1,0x2265,0x2264,0x2320,0x2321,0x00F7,0x2248,0x00B0,0x2022,0x00B7,0x221A,0x207F,0x00B2,0x00B3,0x00AF
-};
-#define BEG_Atari_to_Unicode 0x7F
-
-int atari_to_ucs4(unsigned char atari)
-{
- uint32_t ucs4 = 0xfffd;
- if ( atari >= BEG_Atari_to_Unicode && atari <= 0xFE )
- ucs4 = (int)Atari_to_Unicode[(short)atari - BEG_Atari_to_Unicode];
- else
- ucs4 = (int)atari;
- return( ucs4 );
+{
+ return utf8_from_enc(string, "ATARIST", len, result, NULL);
+}
+
+
+/* borrowed from highwire project: */
+static const uint16_t Atari_to_Unicode[] = {
+ /* .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F */
+ /* 7F */ 0x0394,
+ /* 8. */ 0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7,0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5,
+ /* 9. */ 0x00C9,0x00E6,0x00C6,0x00F4,0x00F6,0x00F2,0x00FB,0x00F9,0x00FF,0x00D6,0x00DC,0x00A2,0x00A3,0x00A5,0x00DF,0x0192,
+ /* A. */ 0x00E1,0x00ED,0x00F3,0x00FA,0x00F1,0x00D1,0x00AA,0x00BA,0x00BF,0x2310,0x00AC,0x00BD,0x00BC,0x00A1,0x00AB,0x00BB,
+ /* B. */ 0x00C3,0x00F5,0x00D8,0x00F8,0x0153,0x0152,0x00C0,0x00C3,0x00D5,0x00A8,0x00B4,0x2020,0x00B6,0x00A9,0x00AE,0x2122,
+ /* C. */ 0x0133,0x0132,0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,0x05D8,0x05D9,0x05DB,0x05DC,0x05DE,0x05E0,
+ /* D. */ 0x05E1,0x05E2,0x05E4,0x05E6,0x05E7,0x05E8,0x05E9,0x05EA,0x05DF,0x05DA,0x05DD,0x05E3,0x05E5,0x00A7,0x2038,0x221E,
+ /* E. */ 0x03B1,0x03B2,0x0393,0x03C0,0x03A3,0x03C3,0x00B5,0x03C4,0x03A6,0x0398,0x03A9,0x03B4,0x222E,0x03C6,0x2208,0x2229,
+ /* F. */ 0x2261,0x00B1,0x2265,0x2264,0x2320,0x2321,0x00F7,0x2248,0x00B0,0x2022,0x00B7,0x221A,0x207F,0x00B2,0x00B3,0x00AF
+};
+#define BEG_Atari_to_Unicode 0x7F
+
+int atari_to_ucs4(unsigned char atari)
+{
+ uint32_t ucs4 = 0xfffd;
+ if ( atari >= BEG_Atari_to_Unicode && atari <= 0xFE ) {
+ ucs4 = (int)Atari_to_Unicode[(short)atari - BEG_Atari_to_Unicode];
+ } else {
+ ucs4 = (int)atari;
+ }
+ return( ucs4 );
}
diff --git a/atari/file.h b/atari/file.h
index 4428f2e..b368567 100644
--- a/atari/file.h
+++ b/atari/file.h
@@ -16,12 +16,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef FILE_C_INCLUDED
+#ifndef FILE_C_INCLUDED
#define FILE_C_INCLUDED
#include "utils/file.h"
-struct gui_file_table *atari_file_table;
-
-
-#endif // FILE_C_INCLUDED
+struct gui_file_table *atari_file_table;
+
+
+#endif /* FILE_C_INCLUDED */
diff --git a/atari/filetype.c b/atari/filetype.c
old mode 100755
new mode 100644
index 4e8c334..1cce6fc
--- a/atari/filetype.c
+++ b/atari/filetype.c
@@ -37,7 +37,7 @@ const char *fetch_filetype(const char *unix_path)
char * res = (char*)"text/html";
l = strlen(unix_path);
- LOG(("unix path: %s", unix_path));
+ LOG("unix path: %s", unix_path);
/* This line is added for devlopment versions running from the root dir: */
if( strchr( unix_path, (int)'.' ) ){
@@ -86,6 +86,6 @@ const char *fetch_filetype(const char *unix_path)
}
}
- LOG(("mime type: %s", res ));
+ LOG("mime type: %s", res);
return( res );
}
diff --git a/atari/findfile.c b/atari/findfile.c
old mode 100755
new mode 100644
index 60b3ed5..89f858c
--- a/atari/findfile.c
+++ b/atari/findfile.c
@@ -37,7 +37,7 @@ char * local_file_to_url( const char * filename )
#define BACKSLASH 0x5C
char * url;
- LOG(("in: %s", filename));
+ LOG("in: %s", filename);
if( strlen(filename) <= 2){
return( NULL );
@@ -61,7 +61,7 @@ char * local_file_to_url( const char * filename )
free(fname_local);
- LOG(("out: %s", url));
+ LOG("out: %s", url);
return( url );
#undef BACKSLASH
@@ -87,10 +87,10 @@ char * atari_find_resource(char *buf, const char *filename, const char *def)
{
char *cdir = NULL;
char t[PATH_MAX];
- LOG(("%s (def: %s)", filename, def ));
+ LOG("%s (def: %s)", filename, def);
strcpy(t, NETSURF_GEM_RESPATH);
strcat(t, filename);
- LOG(("checking %s", (char*)&t));
+ LOG("checking %s", (char *)&t);
if (gemdos_realpath(t, buf) != NULL) {
if (access(buf, R_OK) == 0) {
return buf;
@@ -98,7 +98,7 @@ char * atari_find_resource(char *buf, const char *filename, const char *def)
}
strcpy(t, "./");
strcat(t, filename);
- LOG(("checking %s", (char*)&t));
+ LOG("checking %s", (char *)&t);
if (gemdos_realpath(t, buf) != NULL) {
if (access(buf, R_OK) == 0) {
return buf;
@@ -110,7 +110,7 @@ char * atari_find_resource(char *buf, const char *filename, const char *def)
strcpy(t, cdir);
strcat(t, "/.netsurf/");
strcat(t, filename);
- LOG(("checking %s", (char*)&t));
+ LOG("checking %s", (char *)&t);
if (gemdos_realpath(t, buf) != NULL) {
if (access(buf, R_OK) == 0)
return buf;
@@ -122,19 +122,19 @@ char * atari_find_resource(char *buf, const char *filename, const char *def)
if (gemdos_realpath(cdir, buf) != NULL) {
strcat(buf, "/");
strcat(buf, filename);
- LOG(("checking %s", (char*)&t));
+ LOG("checking %s", (char *)&t);
if (access(buf, R_OK) == 0)
return buf;
}
}
if (def[0] == '~') {
snprintf(t, PATH_MAX, "%s%s", getenv("HOME"), def + 1);
- LOG(("checking %s", (char*)&t));
+ LOG("checking %s", (char *)&t);
if (gemdos_realpath(t, buf) == NULL) {
strcpy(buf, t);
}
} else {
- LOG(("checking %s", (char*)def));
+ LOG("checking %s", (char *)def);
if (gemdos_realpath(def, buf) == NULL) {
strcpy(buf, def);
}
diff --git a/atari/findfile.h b/atari/findfile.h
old mode 100755
new mode 100644
index 9a6f784..9cda2a0
--- a/atari/findfile.h
+++ b/atari/findfile.h
@@ -23,5 +23,4 @@
extern char *atari_find_resource(char *buf, const char *filename, const char *def);
char *local_file_to_url(const char *filename);
-
#endif /* NETSURF_ATARI_FINDFILE_H */
diff --git a/atari/font.c b/atari/font.c
old mode 100755
new mode 100644
index 6b3cc6f..729986c
--- a/atari/font.c
+++ b/atari/font.c
@@ -1,60 +1,42 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <inttypes.h>
-#include <assert.h>
-/*
- * Copyright 2012 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdbool.h>
-
-#include "desktop/font.h"
-#include "utils/utf8.h"
-#include "utils/log.h"
-#include "utils/nsoption.h"
-#include "desktop/mouse.h"
-#include "desktop/plotters.h"
-
-#include "atari/gui.h"
-#include "atari/plot/fontplot.h"
-#include "atari/plot/plot.h"
-#include "atari/findfile.h"
-#include "atari/font.h"
-
-extern FONT_PLOTTER fplotter;
-
-static bool atari_font_position_in_string(const plot_font_style_t * fstyle,const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x )
+#include <inttypes.h>
+#include <assert.h>
+#include <stdbool.h>
+
+#include "desktop/font.h"
+#include "utils/utf8.h"
+#include "utils/log.h"
+#include "utils/nsoption.h"
+#include "desktop/mouse.h"
+#include "desktop/plotters.h"
+
+#include "atari/gui.h"
+#include "atari/plot/fontplot.h"
+#include "atari/plot/plot.h"
+#include "atari/findfile.h"
+#include "atari/font.h"
+
+extern FONT_PLOTTER fplotter;
+
+static bool atari_font_position_in_string(const plot_font_style_t * fstyle,const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x )
{
float scale = plot_get_scale();
@@ -64,13 +46,13 @@ static bool atari_font_position_in_string(const plot_font_style_t * fstyle,const
fplotter->pixel_pos(fplotter, &newstyle, string, length, x, char_offset, actual_x);
} else {
fplotter->pixel_pos(fplotter, fstyle, string, length, x, char_offset, actual_x);
- }
-
- return( true );
-}
-
-static bool atari_font_split( const plot_font_style_t * fstyle, const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x )
+ }
+
+ return( true );
+}
+
+static bool atari_font_split( const plot_font_style_t * fstyle, const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x )
{
float scale = plot_get_scale();
@@ -83,13 +65,13 @@ static bool atari_font_split( const plot_font_style_t * fstyle, const char *stri
fplotter->str_split(fplotter, fstyle, string, length, x, char_offset,
actual_x);
}
-
-
- return( true );
-}
-
-static bool atari_font_width( const plot_font_style_t *fstyle, const char * str,
- size_t length, int * width )
+
+
+ return( true );
+}
+
+static bool atari_font_width( const plot_font_style_t *fstyle, const char * str,
+ size_t length, int * width )
{
float scale = plot_get_scale();
@@ -100,15 +82,14 @@ static bool atari_font_width( const plot_font_style_t *fstyle, const char * str,
} else {
fplotter->str_width(fplotter, fstyle, str, length, width);
}
-
-
- return( true );
-}
-
-const struct font_functions nsfont = {
- atari_font_width,
- atari_font_position_in_string,
- atari_font_split
-};
-
-
+
+
+ return( true );
+}
+
+const struct font_functions nsfont = {
+ atari_font_width,
+ atari_font_position_in_string,
+ atari_font_split
+};
+
diff --git a/atari/font.h b/atari/font.h
old mode 100755
new mode 100644
index 2717497..065a35a
--- a/atari/font.h
+++ b/atari/font.h
@@ -1,25 +1,24 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_FONT_H
-#define NS_ATARI_FONT_H
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_FONT_H
+#define NS_ATARI_FONT_H
+
+
+#endif /* NETSURF_FB_FONT_H */
-
-
-#endif /* NETSURF_FB_FONT_H */
-
diff --git a/atari/gui.c b/atari/gui.c
index daf342a..265ae5a 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -150,11 +150,11 @@ static void atari_poll(void)
evnt_multi_fast(&aes_event_in, aes_msg_out, &aes_event_out);
if(gemtk_wm_dispatch_event(&aes_event_in, &aes_event_out, aes_msg_out) == 0) {
if( (aes_event_out.emo_events & MU_MESAG) != 0 ) {
- LOG(("WM: %d\n", aes_msg_out[0]));
+ LOG("WM: %d\n", aes_msg_out[0]);
switch(aes_msg_out[0]) {
case MN_SELECTED:
- LOG(("Menu Item: %d\n",aes_msg_out[4]));
+ LOG("Menu Item: %d\n", aes_msg_out[4]);
deskmenu_dispatch_item(aes_msg_out[3], aes_msg_out[4]);
break;
@@ -206,15 +206,13 @@ gui_window_create(struct browser_window *bw,
gui_window_create_flags flags)
{
struct gui_window *gw=NULL;
- LOG(( "gw: %p, BW: %p, existing %p, flags: %d\n" , gw, bw, existing,
- (int)flags
- ));
+ LOG("gw: %p, BW: %p, existing %p, flags: %d\n", gw, bw, existing, (int)flags);
gw = calloc(1, sizeof(struct gui_window));
if (gw == NULL)
return NULL;
- LOG(("new window: %p, bw: %p\n", gw, bw));
+ LOG("new window: %p, bw: %p\n", gw, bw);
window_create(gw, bw, existing, WIDGET_STATUSBAR|WIDGET_TOOLBAR|WIDGET_RESIZE\
|WIDGET_SCROLL);
if (gw->root->win) {
@@ -266,7 +264,7 @@ void gui_window_destroy(struct gui_window *gw)
if (gw == NULL)
return;
- LOG(("%s\n", __FUNCTION__ ));
+ LOG("%s\n", __FUNCTION__);
if (input_window == gw) {
gui_set_input_gui_window(NULL);
@@ -445,7 +443,7 @@ static void gui_window_set_scroll(struct gui_window *w, int sx, int sy)
|| (!browser_window_has_content(w->browser->bw)))
return;
- LOG(("scroll (gui_window: %p) %d, %d\n", w, sx, sy));
+ LOG("scroll (gui_window: %p) %d, %d\n", w, sx, sy);
window_scroll_by(w->root, sx, sy);
return;
@@ -772,7 +770,7 @@ static void gui_401login_open(nsurl *url, const char *realm,
char * out = NULL;
bres = login_form_do( url, (char*)realm, &out);
if (bres) {
- LOG(("url: %s, realm: %s, auth: %s\n", url, realm, out ));
+ LOG("url: %s, realm: %s, auth: %s\n", url, realm, out);
urldb_set_auth_details(url, realm, out);
}
if (out != NULL) {
@@ -790,7 +788,7 @@ gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
void *cbpw)
{
struct sslcert_session_data *data;
- LOG((""));
+ LOG("");
// TODO: localize string
int b = form_alert(1, "[2][SSL Verify failed, continue?][Continue|Abort|Details...]");
@@ -813,7 +811,7 @@ gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs,
void gui_set_input_gui_window(struct gui_window *gw)
{
- LOG(("Setting input window from: %p to %p\n", input_window, gw));
+ LOG("Setting input window from: %p to %p\n", input_window, gw);
input_window = gw;
}
@@ -824,7 +822,7 @@ struct gui_window * gui_get_input_window(void)
static void gui_quit(void)
{
- LOG((""));
+ LOG("");
struct gui_window * gw = window_list;
struct gui_window * tmp = window_list;
@@ -856,9 +854,9 @@ static void gui_quit(void)
rsrc_free();
- LOG(("Shutting down plotter"));
+ LOG("Shutting down plotter");
plot_finalise();
- LOG(("done"));
+ LOG("done");
}
/**
@@ -870,7 +868,7 @@ process_cmdline(int argc, char** argv)
int opt;
bool set_default_dimensions = true;
- LOG(("argc %d, argv %p", argc, argv));
+ LOG("argc %d, argv %p", argc, argv);
if ((nsoption_int(window_width) != 0) && (nsoption_int(window_height) != 0)) {
@@ -963,7 +961,7 @@ static nserror set_defaults(struct nsoption_s *defaults)
/* Set defaults for absent option strings */
nsoption_setnull_charp(cookie_file, strdup("cookies"));
if (nsoption_charp(cookie_file) == NULL) {
- LOG(("Failed initialising string options"));
+ LOG("Failed initialising string options");
return NSERROR_BAD_PARAMETER;
}
return NSERROR_OK;
@@ -980,7 +978,7 @@ static void gui_init(int argc, char** argv)
OBJECT * cursors;
atari_find_resource(buf, "netsurf.rsc", "./res/netsurf.rsc");
- LOG(("Using RSC file: %s ", (char*)&buf));
+ LOG("Using RSC file: %s ", (char *)&buf);
if (rsrc_load(buf)==0) {
char msg[1024];
@@ -1016,15 +1014,15 @@ static void gui_init(int argc, char** argv)
create_cursor(MFORM_EX_FLAG_USERFORM, CURSOR_HELP,
cursors, &gem_cursors.help);
- LOG(("Enabling core select menu"));
+ LOG("Enabling core select menu");
nsoption_set_bool(core_select_menu, true);
- LOG(("Loading url.db from: %s", nsoption_charp(url_file) ));
+ LOG("Loading url.db from: %s", nsoption_charp(url_file));
if( strlen(nsoption_charp(url_file)) ) {
urldb_load(nsoption_charp(url_file));
}
- LOG(("Loading cookies from: %s", nsoption_charp(cookie_file) ));
+ LOG("Loading cookies from: %s", nsoption_charp(cookie_file));
if( strlen(nsoption_charp(cookie_file)) ) {
urldb_load_cookies(nsoption_charp(cookie_file));
}
@@ -1032,10 +1030,10 @@ static void gui_init(int argc, char** argv)
if (process_cmdline(argc,argv) != true)
die("unable to process command line.\n");
- LOG(("Initializing NKC..."));
+ LOG("Initializing NKC...");
nkc_init();
- LOG(("Initializing plotters..."));
+ LOG("Initializing plotters...");
plot_init(nsoption_charp(atari_font_driver));
aes_event_in.emi_m1leave = MO_LEAVE;
@@ -1171,19 +1169,21 @@ int main(int argc, char** argv)
nsoption_read(options, NULL);
nsoption_commandline(&argc, argv, NULL);
+ ret = messages_add_from_file(messages);
+
/* common initialisation */
- LOG(("Initialising core..."));
- ret = netsurf_init(messages, store);
+ LOG("Initialising core...");
+ ret = netsurf_init(store);
if (ret != NSERROR_OK) {
die("NetSurf failed to initialise");
}
- LOG(("Initializing GUI..."));
+ LOG("Initializing GUI...");
gui_init(argc, argv);
graf_mouse( ARROW , NULL);
- LOG(("Creating initial browser window..."));
+ LOG("Creating initial browser window...");
addr = option_homepage_url;
if (strncmp(addr, "file://", 7) && strncmp(addr, "http://", 7)) {
if (stat(addr, &stat_buf) == 0) {
@@ -1205,7 +1205,7 @@ int main(int argc, char** argv)
if (ret != NSERROR_OK) {
warn_user(messages_get_errorcode(ret), 0);
} else {
- LOG(("Entering Atari event mainloop..."));
+ LOG("Entering Atari event mainloop...");
while (!atari_quit) {
atari_poll();
}
@@ -1219,7 +1219,7 @@ int main(int argc, char** argv)
fclose(stdout);
fclose(stderr);
#endif
- LOG(("exit_gem"));
+ LOG("exit_gem");
exit_gem();
return 0;
diff --git a/atari/gui.h b/atari/gui.h
old mode 100755
new mode 100644
diff --git a/atari/history.c b/atari/history.c
index 329328a..f048b0b 100644
--- a/atari/history.c
+++ b/atari/history.c
@@ -16,8 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
@@ -50,16 +48,16 @@ struct atari_global_history_s atari_global_history;
/* Setup Atari Treeview Callbacks: */
static nserror atari_global_history_init_phase2(struct core_window *cw,
- struct core_window_callback_table * default_callbacks);
+ struct core_window_callback_table * default_callbacks);
static void atari_global_history_finish(struct core_window *cw);
static void atari_global_history_keypress(struct core_window *cw,
- uint32_t ucs4);
+ uint32_t ucs4);
static void atari_global_history_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y);
+ browser_mouse_state mouse,
+ int x, int y);
static void atari_global_history_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx);
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
static struct atari_treeview_callbacks atari_global_history_treeview_callbacks = {
@@ -72,36 +70,36 @@ static struct atari_treeview_callbacks atari_global_history_treeview_callbacks =
};
static nserror atari_global_history_init_phase2(struct core_window *cw,
- struct core_window_callback_table *cb_t)
+ struct core_window_callback_table *cb_t)
{
- LOG((""));
+ LOG("");
return(global_history_init(cb_t, cw));
}
static void atari_global_history_finish(struct core_window *cw)
{
- LOG((""));
+ LOG("");
global_history_fini();
}
static void atari_global_history_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx)
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
{
global_history_redraw(x, y, clip, ctx);
}
static void atari_global_history_keypress(struct core_window *cw, uint32_t ucs4)
{
- LOG(("ucs4: %lu\n", ucs4));
+ LOG("ucs4: %lu\n", ucs4);
global_history_keypress(ucs4);
}
static void atari_global_history_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y)
+ browser_mouse_state mouse,
+ int x, int y)
{
- LOG(("x: %d, y: %d\n", x, y));
+ LOG("x: %d, y: %d\n", x, y);
global_history_mouse_action(mouse, x, y);
@@ -113,16 +111,16 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
{
short retval = 0;
- LOG((""));
+ LOG("");
- if(ev_out->emo_events & MU_MESAG){
+ if (ev_out->emo_events & MU_MESAG) {
switch (msg[0]) {
- case WM_CLOSED:
- atari_global_history_close();
- retval = 1;
+ case WM_CLOSED:
+ atari_global_history_close();
+ retval = 1;
break;
- default: break;
+ default: break;
}
}
@@ -134,9 +132,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
void atari_global_history_init(void)
{
if (atari_global_history.init == false) {
-
-
- if( atari_global_history.window == NULL ){
+ if( atari_global_history.window == NULL ) {
int flags = ATARI_TREEVIEW_WIDGETS;
short handle = -1;
OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_HISTORY);
@@ -146,7 +142,7 @@ void atari_global_history_init(void)
atari_global_history.window = gemtk_wm_add(handle, GEMTK_WM_FLAG_DEFAULTS, NULL);
if( atari_global_history.window == NULL ) {
gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
- "Failed to allocate History");
+ "Failed to allocate History");
return;
}
wind_set_str(handle, WF_NAME, (char*)messages_get("History"));
@@ -154,18 +150,15 @@ void atari_global_history_init(void)
gemtk_wm_unlink(atari_global_history.window);
atari_global_history.tv = atari_treeview_create(
- atari_global_history.window,
- &atari_global_history_treeview_callbacks,
- NULL, flags);
+ atari_global_history.window,
+ &atari_global_history_treeview_callbacks,
+ NULL, flags);
if (atari_global_history.tv == NULL) {
/* handle it properly, clean up previous allocs */
- LOG(("Failed to allocate treeview"));
+ LOG("Failed to allocate treeview");
return;
}
-
- } else {
-
}
}
atari_global_history.init = true;
@@ -181,11 +174,11 @@ void atari_global_history_open(void)
if (atari_treeview_is_open(atari_global_history.tv) == false) {
- GRECT pos;
- pos.g_x = desk_area.g_w - desk_area.g_w / 4;
- pos.g_y = desk_area.g_y;
- pos.g_w = desk_area.g_w / 4;
- pos.g_h = desk_area.g_h;
+ GRECT pos;
+ pos.g_x = desk_area.g_w - desk_area.g_w / 4;
+ pos.g_y = desk_area.g_y;
+ pos.g_w = desk_area.g_w / 4;
+ pos.g_h = desk_area.g_h;
atari_treeview_open(atari_global_history.tv, &pos);
} else {
@@ -201,10 +194,11 @@ void atari_global_history_close(void)
void atari_global_history_destroy(void)
{
- if( atari_global_history.init == false) {
+ if ( atari_global_history.init == false) {
return;
}
- if( atari_global_history.window != NULL ) {
+
+ if ( atari_global_history.window != NULL ) {
if (atari_treeview_is_open(atari_global_history.tv))
atari_global_history_close();
wind_delete(gemtk_wm_get_handle(atari_global_history.window));
@@ -213,7 +207,7 @@ void atari_global_history_destroy(void)
atari_treeview_delete(atari_global_history.tv);
atari_global_history.init = false;
}
- LOG(("done"));
+ LOG("done");
}
void atari_global_history_redraw(void)
diff --git a/atari/history.h b/atari/history.h
index 919407c..06a5d32 100644
--- a/atari/history.h
+++ b/atari/history.h
@@ -1,19 +1,19 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NS_ATARI_HISTORY_H
@@ -21,18 +21,18 @@
struct core_window;
-struct atari_global_history_s {
- GUIWIN * window;
- //struct atari_treeview_window * tv;/*< The hotlist treeview handle. */
- struct core_window *tv;
- bool init;
-};
-
-extern struct atari_global_history_s atari_global_history;
-
-void atari_global_history_init(void);
-void atari_global_history_open(void);
-void atari_global_history_close(void);
+struct atari_global_history_s {
+ GUIWIN * window;
+ //struct atari_treeview_window * tv; /*< The hotlist treeview handle. */
+ struct core_window *tv;
+ bool init;
+};
+
+extern struct atari_global_history_s atari_global_history;
+
+void atari_global_history_init(void);
+void atari_global_history_open(void);
+void atari_global_history_close(void);
void atari_global_history_destroy(void);
void atari_global_history_redraw(void);
diff --git a/atari/hotlist.c b/atari/hotlist.c
index d314fcb..2654911 100644
--- a/atari/hotlist.c
+++ b/atari/hotlist.c
@@ -16,7 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
@@ -49,16 +48,16 @@ struct atari_hotlist hl;
/* Setup Atari Treeview Callbacks: */
static nserror atari_hotlist_init_phase2(struct core_window *cw,
- struct core_window_callback_table * default_callbacks);
+ struct core_window_callback_table * default_callbacks);
static void atari_hotlist_finish(struct core_window *cw);
static void atari_hotlist_keypress(struct core_window *cw,
- uint32_t ucs4);
+ uint32_t ucs4);
static void atari_hotlist_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y);
+ browser_mouse_state mouse,
+ int x, int y);
static void atari_hotlist_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx);
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
static struct atari_treeview_callbacks atari_hotlist_treeview_callbacks = {
@@ -71,21 +70,21 @@ static struct atari_treeview_callbacks atari_hotlist_treeview_callbacks = {
};
static nserror atari_hotlist_init_phase2(struct core_window *cw,
- struct core_window_callback_table *cb_t)
+ struct core_window_callback_table *cb_t)
{
- LOG((""));
+ LOG("");
return(hotlist_init(cb_t, cw, hl.path));
}
static void atari_hotlist_finish(struct core_window *cw)
{
- LOG((""));
+ LOG("");
hotlist_fini(hl.path);
}
static void atari_hotlist_draw(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx)
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
{
hotlist_redraw(x, y, clip, ctx);
}
@@ -94,7 +93,7 @@ static void atari_hotlist_keypress(struct core_window *cw, uint32_t ucs4)
{
GUIWIN *gemtk_win;
GRECT area;
- LOG(("ucs4: %lu\n", ucs4));
+ LOG("ucs4: %lu\n", ucs4);
hotlist_keypress(ucs4);
gemtk_win = atari_treeview_get_gemtk_window(cw);
atari_treeview_get_grect(cw, TREEVIEW_AREA_CONTENT, &area);
@@ -102,10 +101,10 @@ static void atari_hotlist_keypress(struct core_window *cw, uint32_t ucs4)
}
static void atari_hotlist_mouse_action(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y)
+ browser_mouse_state mouse,
+ int x, int y)
{
- LOG(("x: %d, y: %d\n", x, y));
+ LOG("x: %d, y: %d\n", x, y);
hotlist_mouse_action(mouse, x, y);
}
@@ -124,64 +123,64 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
GRECT tb_area;
GUIWIN * gemtk_win;
- LOG((""));
+ LOG("");
tv = (struct atari_treeview_window*) gemtk_wm_get_user_data(win);
cw = (struct core_window *)tv;
- if(ev_out->emo_events & MU_MESAG){
+ if (ev_out->emo_events & MU_MESAG) {
switch (msg[0]) {
- case WM_TOOLBAR:
- LOG(("WM_TOOLBAR"));
-
- toolbar = gemtk_obj_get_tree(TOOLBAR_HOTLIST);
-
- assert(toolbar);
- assert(tv);
-
- switch (msg[4]) {
- case TOOLBAR_HOTLIST_CREATE_FOLDER:
- hotlist_add_folder(NULL, 0, 0);
- break;
-
- case TOOLBAR_HOTLIST_ADD:
- gw = gui_get_input_window();
- if(gw && gw->browser){
- cur_url = gui_window_get_url(gw);
- cur_title = gui_window_get_title(gw);
- // TODO: read language string.
- cur_title = (cur_title ? cur_title : (char*)"New bookmark");
- } else {
- cur_url = (char*)"http://www";
- }
- atari_hotlist_add_page(cur_url, cur_title);
- break;
-
- case TOOLBAR_HOTLIST_DELETE:
- hotlist_keypress(NS_KEY_DELETE_LEFT);
- break;
-
- case TOOLBAR_HOTLIST_EDIT:
- hotlist_edit_selection();
- break;
+ case WM_TOOLBAR:
+ LOG("WM_TOOLBAR");
+
+ toolbar = gemtk_obj_get_tree(TOOLBAR_HOTLIST);
+
+ assert(toolbar);
+ assert(tv);
+
+ switch (msg[4]) {
+ case TOOLBAR_HOTLIST_CREATE_FOLDER:
+ hotlist_add_folder(NULL, 0, 0);
+ break;
+
+ case TOOLBAR_HOTLIST_ADD:
+ gw = gui_get_input_window();
+ if(gw && gw->browser){
+ cur_url = gui_window_get_url(gw);
+ cur_title = gui_window_get_title(gw);
+ // TODO: read language string.
+ cur_title = (cur_title ? cur_title : (char*)"New bookmark");
+ } else {
+ cur_url = (char*)"http://www";
}
+ atari_hotlist_add_page(cur_url, cur_title);
+ break;
+
+ case TOOLBAR_HOTLIST_DELETE:
+ hotlist_keypress(NS_KEY_DELETE_LEFT);
+ break;
- gemtk_win = atari_treeview_get_gemtk_window(cw);
- assert(gemtk_win);
- toolbar[msg[4]].ob_state &= ~OS_SELECTED;
- atari_treeview_get_grect(cw, TREEVIEW_AREA_TOOLBAR, &tb_area);
- evnt_timer(150);
- gemtk_wm_exec_redraw(gemtk_win, &tb_area);
- retval = 1;
+ case TOOLBAR_HOTLIST_EDIT:
+ hotlist_edit_selection();
+ break;
+ }
+
+ gemtk_win = atari_treeview_get_gemtk_window(cw);
+ assert(gemtk_win);
+ toolbar[msg[4]].ob_state &= ~OS_SELECTED;
+ atari_treeview_get_grect(cw, TREEVIEW_AREA_TOOLBAR, &tb_area);
+ evnt_timer(150);
+ gemtk_wm_exec_redraw(gemtk_win, &tb_area);
+ retval = 1;
break;
- case WM_CLOSED:
- atari_hotlist_close();
- retval = 1;
+ case WM_CLOSED:
+ atari_hotlist_close();
+ retval = 1;
break;
- default: break;
+ default: break;
}
}
@@ -199,7 +198,7 @@ void atari_hotlist_init(void)
strncpy( (char*)&hl.path, nsoption_charp(hotlist_file), PATH_MAX-1 );
}
- LOG(("Hotlist: %s", (char*)&hl.path ));
+ LOG("Hotlist: %s", (char *)&hl.path);
if( hl.window == NULL ){
int flags = ATARI_TREEVIEW_WIDGETS;
@@ -211,7 +210,7 @@ void atari_hotlist_init(void)
hl.window = gemtk_wm_add(handle, GEMTK_WM_FLAG_DEFAULTS, NULL);
if( hl.window == NULL ) {
gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
- "Failed to allocate Hotlist");
+ "Failed to allocate Hotlist");
return;
}
wind_set_str(handle, WF_NAME, (char*)messages_get("Hotlist"));
@@ -220,11 +219,11 @@ void atari_hotlist_init(void)
tree_hotlist_path = (const char*)&hl.path;
hl.tv = atari_treeview_create(hl.window, &atari_hotlist_treeview_callbacks,
- NULL, flags);
+ NULL, flags);
if (hl.tv == NULL) {
/* handle it properly, clean up previous allocs */
- LOG(("Failed to allocate treeview"));
+ LOG("Failed to allocate treeview");
return;
}
@@ -244,11 +243,11 @@ void atari_hotlist_open(void)
if (atari_treeview_is_open(hl.tv) == false) {
- GRECT pos;
- pos.g_x = desk_area.g_w - desk_area.g_w / 4;
- pos.g_y = desk_area.g_y;
- pos.g_w = desk_area.g_w / 4;
- pos.g_h = desk_area.g_h;
+ GRECT pos;
+ pos.g_x = desk_area.g_w - desk_area.g_w / 4;
+ pos.g_y = desk_area.g_y;
+ pos.g_w = desk_area.g_w / 4;
+ pos.g_h = desk_area.g_h;
atari_treeview_open(hl.tv, &pos);
} else {
@@ -276,7 +275,7 @@ void atari_hotlist_destroy(void)
atari_treeview_delete(hl.tv);
hl.init = false;
}
- LOG(("done"));
+ LOG("done");
}
void atari_hotlist_redraw(void)
@@ -298,20 +297,19 @@ void atari_hotlist_add_page( const char * url, const char * title )
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
- if (hotlist_has_url(nsurl)) {
- LOG(("URL already added as Bookmark"));
- nsurl_unref(nsurl);
- return;
- }
+ if (hotlist_has_url(nsurl)) {
+ LOG("URL already added as Bookmark");
+ nsurl_unref(nsurl);
+ return;
+ }
/* doesn't look nice:
- if( hl.tv->click.x >= 0 && hl.tv->click.y >= 0 ){
- hotlist_add_entry( nsurl, title, true, hl.tv->click.y );
- } else {
+ if( hl.tv->click.x >= 0 && hl.tv->click.y >= 0 ){
+ hotlist_add_entry( nsurl, title, true, hl.tv->click.y );
+ } else {
- }*/
+ }*/
//hotlist_add_url(nsurl);
hotlist_add_entry(nsurl, title, 0, 0);
nsurl_unref(nsurl);
}
-
diff --git a/atari/hotlist.h b/atari/hotlist.h
index 52598f2..1598782 100644
--- a/atari/hotlist.h
+++ b/atari/hotlist.h
@@ -1,52 +1,52 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_HOTLIST_H
-#define NS_ATARI_HOTLIST_H
-
-#include <stdbool.h>
-
-#include "desktop/tree.h"
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_HOTLIST_H
+#define NS_ATARI_HOTLIST_H
+
+#include <stdbool.h>
+
+#include "desktop/tree.h"
#include "atari/gemtk/gemtk.h"
-#include "atari/treeview.h"
+#include "atari/treeview.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
+/* The hotlist window, toolbar and treeview data. */
-/* The hotlist window, toolbar and treeview data. */
-
-struct atari_hotlist {
- GUIWIN * window;
+struct atari_hotlist {
+ GUIWIN * window;
//ATARI_TREEVIEW_PTR tv;/*< The hotlist treeview handle. */
- struct core_window *tv;
- bool init;
- char path[PATH_MAX];
-};
-
-extern struct atari_hotlist hl;
-
-void atari_hotlist_init( void );
-void atari_hotlist_open( void );
-void atari_hotlist_close( void );
-void atari_hotlist_destroy( void );
-void atari_hotlist_add_page( const char * url, const char * title );
-void atari_hotlist_redraw( void );
-
-
+ struct core_window *tv;
+ bool init;
+ char path[PATH_MAX];
+};
+
+extern struct atari_hotlist hl;
+
+void atari_hotlist_init( void );
+void atari_hotlist_open( void );
+void atari_hotlist_close( void );
+void atari_hotlist_destroy( void );
+void atari_hotlist_add_page( const char * url, const char * title );
+void atari_hotlist_redraw( void );
+
+
#endif
diff --git a/atari/login.c b/atari/login.c
old mode 100755
new mode 100644
diff --git a/atari/login.h b/atari/login.h
old mode 100755
new mode 100644
index 345f91d..b61808c
--- a/atari/login.h
+++ b/atari/login.h
@@ -1,26 +1,26 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_LOGIN_H_INCLUDED
-#define NS_LOGIN_H_INCLUDED
-
-#include "utils/nsurl.h"
-
-bool login_form_do( nsurl * host, char * realm, char **cbpw );
-
-#endif
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_LOGIN_H_INCLUDED
+#define NS_LOGIN_H_INCLUDED
+
+#include "utils/nsurl.h"
+
+bool login_form_do( nsurl * host, char * realm, char **cbpw );
+
+#endif
diff --git a/atari/misc.c b/atari/misc.c
old mode 100755
new mode 100644
diff --git a/atari/misc.h b/atari/misc.h
old mode 100755
new mode 100644
diff --git a/atari/options.h b/atari/options.h
old mode 100755
new mode 100644
diff --git a/atari/osspec.c b/atari/osspec.c
index 82e757a..adf8375 100644
--- a/atari/osspec.c
+++ b/atari/osspec.c
@@ -40,7 +40,7 @@ NS_ATARI_SYSINFO atari_sysinfo;
void init_os_info(void)
{
int16_t out[4];
- unsigned long cookie_FSMC = 0;
+ unsigned long cookie_FSMC = 0;
atari_sysinfo.gemdos_version = Sversion();
@@ -97,17 +97,16 @@ int tos_getcookie(long tag, long * value)
/*
- a fixed version of realpath() which returns valid
- paths for TOS which have no U: drive
+ a fixed version of realpath() which returns valid
+ paths for TOS which have no U: drive
*/
-char * gemdos_realpath(const char * path, char * rpath)
+char *gemdos_realpath(const char * path, char * rpath)
{
char work[PATH_MAX+1];
char * r;
-
if (rpath == NULL) {
return (NULL);
}
@@ -118,16 +117,14 @@ char * gemdos_realpath(const char * path, char * rpath)
return(rpath);
}
- LOG(("realpath in: %s\n", path));
+ LOG("realpath in: %s\n", path);
r = realpath(path, work);
if (r != NULL) {
unx2dos((const char *)r, rpath);
- LOG(("realpath out: %s\n", rpath));
+ LOG("realpath out: %s\n", rpath);
return(rpath);
- }
- else {
- LOG(("realpath out: NULL!\n"));
+ } else {
+ LOG("realpath out: NULL!\n");
}
return (NULL);
}
-
diff --git a/atari/osspec.h b/atari/osspec.h
index 29f87cc..0c8d4cf 100644
--- a/atari/osspec.h
+++ b/atari/osspec.h
@@ -1,44 +1,45 @@
-/*
- * Copyright 2011 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_OSSPEC_H
+/*
+ * Copyright 2011 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_OSSPEC_H
#define NS_ATARI_OSSPEC_H
-typedef struct {
- long c;
- long v;
-} COOKIE;
-
-typedef struct {
- unsigned short gemdos_version;
- unsigned short gdos_FSMC;
- unsigned short systype;
- unsigned short small_sfont_pxh;
- unsigned short medium_sfont_pxh;
- unsigned short large_sfont_pxh;
- bool sfont_monospaced;
- short aes_max_win_title_len;
-} NS_ATARI_SYSINFO;
-
-extern NS_ATARI_SYSINFO atari_sysinfo;
-
-void init_os_info(void);
-void fix_path(char * path);
+typedef struct {
+ long c;
+ long v;
+} COOKIE;
+
+typedef struct {
+ unsigned short gemdos_version;
+ unsigned short gdos_FSMC;
+ unsigned short systype;
+ unsigned short small_sfont_pxh;
+ unsigned short medium_sfont_pxh;
+ unsigned short large_sfont_pxh;
+ bool sfont_monospaced;
+ short aes_max_win_title_len;
+} NS_ATARI_SYSINFO;
+
+extern NS_ATARI_SYSINFO atari_sysinfo;
+
+void init_os_info(void);
+void fix_path(char * path);
char * gemdos_realpath(const char * path, char * rpath);
-int tos_getcookie( long tag, long * value );
+int tos_getcookie( long tag, long * value );
+
#endif
diff --git a/atari/plot/eddi.h b/atari/plot/eddi.h
old mode 100755
new mode 100644
diff --git a/atari/plot/eddi.s b/atari/plot/eddi.s
old mode 100755
new mode 100644
diff --git a/atari/plot/font_freetype.c b/atari/plot/font_freetype.c
old mode 100755
new mode 100644
index 6b22ba8..a77aff8
--- a/atari/plot/font_freetype.c
+++ b/atari/plot/font_freetype.c
@@ -112,89 +112,89 @@ int ft_load_type;
/* cache manager faceID data to create freetype faceid on demand */
typedef struct ftc_faceid_s {
- char *fontfile; /* path to font */
- int index; /* index of font */
- int cidx; /* character map index for unicode */
+ char *fontfile; /* path to font */
+ int index; /* index of font */
+ int cidx; /* character map index for unicode */
} ftc_faceid_t;
-static int dtor( FONT_PLOTTER self );
-static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle,
- const char * str, size_t length, int * width );
-static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,
- const char *string, size_t length,int x,
- size_t *char_offset, int *actual_x );
-static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,
- const char *string, size_t length,int x,
- size_t *char_offset, int *actual_x );
-static int text( FONT_PLOTTER self, int x, int y, const char *text,
- size_t length, const plot_font_style_t *fstyle );
-
-static void draw_glyph8(FONT_PLOTTER self, GRECT *clip, GRECT * loc,
- uint8_t * pixdata, int pitch, uint32_t colour);
-static void draw_glyph1(FONT_PLOTTER self, GRECT * clip, GRECT * loc,
- uint8_t * pixdata, int pitch, uint32_t colour);
-
-static ftc_faceid_t *font_faces[FONT_FACE_COUNT];
-static MFDB tmp;
-static int tmp_mfdb_size;
-static bool init = false;
-static struct bitmap * fontbmp;
-static size_t fontbmp_stride;
-static int fontbmp_allocated_height;
-static int fontbmp_allocated_width;
-
-
-
-/* map cache manager handle to face id */
-static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Pointer request_data, FT_Face *face )
-{
- FT_Error error;
- ftc_faceid_t *ft_face = (ftc_faceid_t *)face_id;
- int cidx;
-
- error = FT_New_Face(library, ft_face->fontfile, ft_face->index, face);
- if (error) {
- LOG(("Could not find font (code %d)\n", error));
- } else {
- error = FT_Select_Charmap(*face, FT_ENCODING_UNICODE);
- if (error) {
- LOG(("Could not select charmap (code %d)\n", error));
- } else {
- for (cidx = 0; cidx < (*face)->num_charmaps; cidx++) {
- if ((*face)->charmap == (*face)->charmaps[cidx]) {
- ft_face->cidx = cidx;
- break;
- }
- }
- }
- }
- LOG(("Loaded face from %s\n", ft_face->fontfile));
- return error;
-}
-
-/* create new framebuffer face and cause it to be loaded to check its ok */
-static ftc_faceid_t *
-ft_new_face(const char *option, const char *resname, const char *fontfile)
-{
- ftc_faceid_t *newf;
- FT_Error error;
- FT_Face aface;
- char buf[PATH_MAX];
-
- newf = calloc(1, sizeof(ftc_faceid_t));
- if (option != NULL) {
- newf->fontfile = strdup(option);
- } else {
- atari_find_resource(buf, resname, fontfile);
- newf->fontfile = strdup(buf);
- }
- error = FTC_Manager_LookupFace(ft_cmanager, (FTC_FaceID)newf, &aface);
- if (error) {
- LOG(("Could not find font face %s (code %d)\n", fontfile, error));
- free(newf);
- newf = font_faces[FONT_FACE_DEFAULT]; /* use default */
- }
- return newf;
+static int dtor( FONT_PLOTTER self );
+static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle,
+ const char * str, size_t length, int * width );
+static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,
+ const char *string, size_t length,int x,
+ size_t *char_offset, int *actual_x );
+static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,
+ const char *string, size_t length,int x,
+ size_t *char_offset, int *actual_x );
+static int text( FONT_PLOTTER self, int x, int y, const char *text,
+ size_t length, const plot_font_style_t *fstyle );
+
+static void draw_glyph8(FONT_PLOTTER self, GRECT *clip, GRECT * loc,
+ uint8_t * pixdata, int pitch, uint32_t colour);
+static void draw_glyph1(FONT_PLOTTER self, GRECT * clip, GRECT * loc,
+ uint8_t * pixdata, int pitch, uint32_t colour);
+
+static ftc_faceid_t *font_faces[FONT_FACE_COUNT];
+static MFDB tmp;
+static int tmp_mfdb_size;
+static bool init = false;
+static struct bitmap * fontbmp;
+static size_t fontbmp_stride;
+static int fontbmp_allocated_height;
+static int fontbmp_allocated_width;
+
+
+
+/* map cache manager handle to face id */
+static FT_Error ft_face_requester(FTC_FaceID face_id, FT_Library library, FT_Pointer request_data, FT_Face *face )
+{
+ FT_Error error;
+ ftc_faceid_t *ft_face = (ftc_faceid_t *)face_id;
+ int cidx;
+
+ error = FT_New_Face(library, ft_face->fontfile, ft_face->index, face);
+ if (error) {
+ LOG("Could not find font (code %d)\n", error);
+ } else {
+ error = FT_Select_Charmap(*face, FT_ENCODING_UNICODE);
+ if (error) {
+ LOG("Could not select charmap (code %d)\n", error);
+ } else {
+ for (cidx = 0; cidx < (*face)->num_charmaps; cidx++) {
+ if ((*face)->charmap == (*face)->charmaps[cidx]) {
+ ft_face->cidx = cidx;
+ break;
+ }
+ }
+ }
+ }
+ LOG("Loaded face from %s\n", ft_face->fontfile);
+ return error;
+}
+
+/* create new framebuffer face and cause it to be loaded to check its ok */
+static ftc_faceid_t *
+ft_new_face(const char *option, const char *resname, const char *fontfile)
+{
+ ftc_faceid_t *newf;
+ FT_Error error;
+ FT_Face aface;
+ char buf[PATH_MAX];
+
+ newf = calloc(1, sizeof(ftc_faceid_t));
+ if (option != NULL) {
+ newf->fontfile = strdup(option);
+ } else {
+ atari_find_resource(buf, resname, fontfile);
+ newf->fontfile = strdup(buf);
+ }
+ error = FTC_Manager_LookupFace(ft_cmanager, (FTC_FaceID)newf, &aface);
+ if (error) {
+ LOG("Could not find font face %s (code %d)\n", fontfile, error);
+ free(newf);
+ newf = font_faces[FONT_FACE_DEFAULT]; /* use default */
+ }
+ return newf;
}
static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
@@ -255,460 +255,460 @@ static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
/* TODO: because browser_get_dpi() is to large, calculate that value */
/* by VDI values. */
srec->x_res = srec->y_res = 72; // browser_get_dpi();
-}
-
-static FT_Glyph ft_getglyph(const plot_font_style_t *fstyle, uint32_t ucs4)
-{
- FT_UInt glyph_index;
- FTC_ScalerRec srec;
- FT_Glyph glyph;
- FT_Error error;
- ftc_faceid_t *ft_face;
-
- ft_fill_scalar(fstyle, &srec);
- ft_face = (ftc_faceid_t *)srec.face_id;
- glyph_index = FTC_CMapCache_Lookup(ft_cmap_cache, srec.face_id, ft_face->cidx, ucs4);
- error = FTC_ImageCache_LookupScaler(ft_image_cache,
- &srec,
- FT_LOAD_RENDER |
- FT_LOAD_FORCE_AUTOHINT |
- ft_load_type,
- glyph_index,
- &glyph,
- NULL);
- return glyph;
-}
-
-
-/* initialise font handling */
-static bool ft_font_init(void)
-{
- FT_Error error;
- FT_ULong max_cache_size;
+}
+
+static FT_Glyph ft_getglyph(const plot_font_style_t *fstyle, uint32_t ucs4)
+{
+ FT_UInt glyph_index;
+ FTC_ScalerRec srec;
+ FT_Glyph glyph;
+ FT_Error error;
+ ftc_faceid_t *ft_face;
+
+ ft_fill_scalar(fstyle, &srec);
+ ft_face = (ftc_faceid_t *)srec.face_id;
+ glyph_index = FTC_CMapCache_Lookup(ft_cmap_cache, srec.face_id, ft_face->cidx, ucs4);
+ error = FTC_ImageCache_LookupScaler(ft_image_cache,
+ &srec,
+ FT_LOAD_RENDER |
+ FT_LOAD_FORCE_AUTOHINT |
+ ft_load_type,
+ glyph_index,
+ &glyph,
+ NULL);
+ return glyph;
+}
+
+
+/* initialise font handling */
+static bool ft_font_init(void)
+{
+ FT_Error error;
+ FT_ULong max_cache_size;
FT_UInt max_faces = 6;
int i;
-
- /* freetype library initialise */
- error = FT_Init_FreeType( &library );
- if (error) {
- LOG(("Freetype could not initialised (code %d)\n", error));
- return false;
- }
+
+ /* freetype library initialise */
+ error = FT_Init_FreeType( &library );
+ if (error) {
+ LOG("Freetype could not initialised (code %d)\n", error);
+ return false;
+ }
/* set the Glyph cache size up */
max_cache_size = CACHE_SIZE * 1024;
if (max_cache_size < CACHE_MIN_SIZE) {
max_cache_size = CACHE_MIN_SIZE;
- }
-
- /* cache manager initialise */
- error = FTC_Manager_New(library,
- max_faces,
- 0,
- max_cache_size,
- ft_face_requester,
- NULL,
- &ft_cmanager);
- if (error) {
- LOG(("Freetype could not initialise cache manager (code %d)\n", error));
- FT_Done_FreeType(library);
- return false;
- }
-
- error = FTC_CMapCache_New(ft_cmanager, &ft_cmap_cache);
- error = FTC_ImageCache_New(ft_cmanager, &ft_image_cache);
+ }
+
+ /* cache manager initialise */
+ error = FTC_Manager_New(library,
+ max_faces,
+ 0,
+ max_cache_size,
+ ft_face_requester,
+ NULL,
+ &ft_cmanager);
+ if (error) {
+ LOG("Freetype could not initialise cache manager (code %d)\n", error);
+ FT_Done_FreeType(library);
+ return false;
+ }
+
+ error = FTC_CMapCache_New(ft_cmanager, &ft_cmap_cache);
+ error = FTC_ImageCache_New(ft_cmanager, &ft_image_cache);
/* Optain font faces */
- /* Default font, Sans Serif */
- font_faces[FONT_FACE_SANS_SERIF] = NULL;
- font_faces[FONT_FACE_SANS_SERIF] = ft_new_face(
- nsoption_charp(font_face_sans_serif),
- FONT_RESOURCE_PATH "ss.ttf",
- FONT_PKG_PATH FONT_FILE_SANS
- );
- if (font_faces[FONT_FACE_SANS_SERIF] == NULL) {
- LOG(("Could not find default font (code %d)\n", error));
- FTC_Manager_Done(ft_cmanager);
- FT_Done_FreeType(library);
- return false;
- }
-
- /* Sans Serif Bold*/
- font_faces[FONT_FACE_SANS_SERIF_BOLD] =
- ft_new_face(nsoption_charp(font_face_sans_serif_bold),
- FONT_RESOURCE_PATH "ssb.ttf",
- FONT_PKG_PATH FONT_FILE_SANS_BOLD);
-
- /* Sans Serif Italic */
- font_faces[FONT_FACE_SANS_SERIF_ITALIC] =
- ft_new_face(nsoption_charp(font_face_sans_serif_italic),
- FONT_RESOURCE_PATH "ssi.ttf",
- FONT_PKG_PATH FONT_FILE_SANS_OBLIQUE);
-
- /* Sans Serif Italic Bold */
- font_faces[FONT_FACE_SANS_SERIF_ITALIC_BOLD] =
- ft_new_face(nsoption_charp(font_face_sans_serif_italic_bold),
- FONT_RESOURCE_PATH "ssib.ttf",
- FONT_PKG_PATH FONT_FILE_SANS_BOLD_OBLIQUE);
-
- /* Monospaced */
- font_faces[FONT_FACE_MONOSPACE] =
- ft_new_face(nsoption_charp(font_face_monospace),
- FONT_RESOURCE_PATH "mono.ttf",
- FONT_PKG_PATH FONT_FILE_MONO);
-
- /* Mospaced Bold */
- font_faces[FONT_FACE_MONOSPACE_BOLD] =
- ft_new_face(nsoption_charp(font_face_monospace_bold),
- FONT_RESOURCE_PATH "monob.ttf",
- FONT_PKG_PATH FONT_FILE_MONO_BOLD);
-
- /* Serif */
- font_faces[FONT_FACE_SERIF] =
- ft_new_face(nsoption_charp(font_face_serif),
- FONT_RESOURCE_PATH "s.ttf",
- FONT_PKG_PATH FONT_FILE_SERIF);
-
- /* Serif Bold */
- font_faces[FONT_FACE_SERIF_BOLD] =
- ft_new_face(nsoption_charp(font_face_serif_bold),
- FONT_RESOURCE_PATH "sb.ttf",
- FONT_PKG_PATH FONT_FILE_SERIF_BOLD);
-
- /* Cursive */
- font_faces[FONT_FACE_CURSIVE] =
- ft_new_face(nsoption_charp(font_face_cursive),
- FONT_RESOURCE_PATH "cursive.ttf",
- FONT_PKG_PATH FONT_FILE_OBLIQUE);
-
- /* Fantasy */
- font_faces[FONT_FACE_FANTASY] =
- ft_new_face(nsoption_charp(font_face_fantasy),
- FONT_RESOURCE_PATH "fantasy.ttf",
- FONT_PKG_PATH FONT_FILE_FANTASY);
+ /* Default font, Sans Serif */
+ font_faces[FONT_FACE_SANS_SERIF] = NULL;
+ font_faces[FONT_FACE_SANS_SERIF] = ft_new_face(
+ nsoption_charp(font_face_sans_serif),
+ FONT_RESOURCE_PATH "ss.ttf",
+ FONT_PKG_PATH FONT_FILE_SANS
+ );
+ if (font_faces[FONT_FACE_SANS_SERIF] == NULL) {
+ LOG("Could not find default font (code %d)\n", error);
+ FTC_Manager_Done(ft_cmanager);
+ FT_Done_FreeType(library);
+ return false;
+ }
+
+ /* Sans Serif Bold*/
+ font_faces[FONT_FACE_SANS_SERIF_BOLD] =
+ ft_new_face(nsoption_charp(font_face_sans_serif_bold),
+ FONT_RESOURCE_PATH "ssb.ttf",
+ FONT_PKG_PATH FONT_FILE_SANS_BOLD);
+
+ /* Sans Serif Italic */
+ font_faces[FONT_FACE_SANS_SERIF_ITALIC] =
+ ft_new_face(nsoption_charp(font_face_sans_serif_italic),
+ FONT_RESOURCE_PATH "ssi.ttf",
+ FONT_PKG_PATH FONT_FILE_SANS_OBLIQUE);
+
+ /* Sans Serif Italic Bold */
+ font_faces[FONT_FACE_SANS_SERIF_ITALIC_BOLD] =
+ ft_new_face(nsoption_charp(font_face_sans_serif_italic_bold),
+ FONT_RESOURCE_PATH "ssib.ttf",
+ FONT_PKG_PATH FONT_FILE_SANS_BOLD_OBLIQUE);
+
+ /* Monospaced */
+ font_faces[FONT_FACE_MONOSPACE] =
+ ft_new_face(nsoption_charp(font_face_monospace),
+ FONT_RESOURCE_PATH "mono.ttf",
+ FONT_PKG_PATH FONT_FILE_MONO);
+
+ /* Mospaced Bold */
+ font_faces[FONT_FACE_MONOSPACE_BOLD] =
+ ft_new_face(nsoption_charp(font_face_monospace_bold),
+ FONT_RESOURCE_PATH "monob.ttf",
+ FONT_PKG_PATH FONT_FILE_MONO_BOLD);
+
+ /* Serif */
+ font_faces[FONT_FACE_SERIF] =
+ ft_new_face(nsoption_charp(font_face_serif),
+ FONT_RESOURCE_PATH "s.ttf",
+ FONT_PKG_PATH FONT_FILE_SERIF);
+
+ /* Serif Bold */
+ font_faces[FONT_FACE_SERIF_BOLD] =
+ ft_new_face(nsoption_charp(font_face_serif_bold),
+ FONT_RESOURCE_PATH "sb.ttf",
+ FONT_PKG_PATH FONT_FILE_SERIF_BOLD);
+
+ /* Cursive */
+ font_faces[FONT_FACE_CURSIVE] =
+ ft_new_face(nsoption_charp(font_face_cursive),
+ FONT_RESOURCE_PATH "cursive.ttf",
+ FONT_PKG_PATH FONT_FILE_OBLIQUE);
+
+ /* Fantasy */
+ font_faces[FONT_FACE_FANTASY] =
+ ft_new_face(nsoption_charp(font_face_fantasy),
+ FONT_RESOURCE_PATH "fantasy.ttf",
+ FONT_PKG_PATH FONT_FILE_FANTASY);
for (i=1; i<FONT_FACE_COUNT; i++) {
if (font_faces[i] == NULL){
font_faces[i] = font_faces[FONT_FACE_SANS_SERIF];
}
}
-
- return true;
-}
-
-
-static bool ft_font_finalise(void)
-{
- FTC_Manager_Done(ft_cmanager );
- FT_Done_FreeType(library);
- return true;
-}
-
-static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle,
- const char *string, size_t length,
- int *width)
-{
- uint32_t ucs4;
- size_t nxtchr = 0;
- FT_Glyph glyph;
-
- *width = 0;
- while (nxtchr < length) {
- ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
- nxtchr = utf8_next(string, length, nxtchr);
-
- glyph = ft_getglyph(fstyle, ucs4);
- if (glyph == NULL)
- continue;
- *width += glyph->advance.x >> 16;
- }
- return(1);
-}
-
-
-static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,
- const char *string, size_t length,
- int x, size_t *char_offset, int *actual_x)
-{
- uint32_t ucs4;
- size_t nxtchr = 0;
- int last_space_x = 0;
- int last_space_idx = 0;
- FT_Glyph glyph;
-
- *actual_x = 0;
- while (nxtchr < length) {
- ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
- glyph = ft_getglyph(fstyle, ucs4);
- if (glyph == NULL)
- continue;
- if (ucs4 == 0x20) {
- last_space_x = *actual_x;
- last_space_idx = nxtchr;
- }
- *actual_x += glyph->advance.x >> 16;
- if (*actual_x > x && last_space_idx != 0) {
- /* string has exceeded available width and we've
- * found a space; return previous space */
- *actual_x = last_space_x;
- *char_offset = last_space_idx;
- return true;
- }
- nxtchr = utf8_next(string, length, nxtchr);
- }
- *char_offset = nxtchr;
- return (1);
-}
-
-
-static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,
- const char *string, size_t length,
- int x, size_t *char_offset, int *actual_x)
-{
- uint32_t ucs4;
- size_t nxtchr = 0;
- FT_Glyph glyph;
- int prev_x = 0;
-
- *actual_x = 0;
- while (nxtchr < length) {
- ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
- glyph = ft_getglyph(fstyle, ucs4);
- if (glyph == NULL)
- continue;
- *actual_x += glyph->advance.x >> 16;
- if (*actual_x > x)
- break;
-
- prev_x = *actual_x;
- nxtchr = utf8_next(string, length, nxtchr);
- }
-
- /* choose nearest of previous and last x */
- if (abs(*actual_x - x) > abs(prev_x - x))
- *actual_x = prev_x;
- *char_offset = nxtchr;
- return ( 1 );
-}
-
-
-static void draw_glyph8(FONT_PLOTTER self, GRECT * clip, GRECT * loc, uint8_t * pixdata, int pitch, uint32_t colour)
-{
- uint32_t * linebuf;
- uint32_t fontpix;
- int xloop,yloop,xoff,yoff;
- int x,y,w,h;
-
- x = loc->g_x;
- y = loc->g_y;
- w = loc->g_w;
- h = loc->g_h;
-
- if( !rc_intersect( clip, loc ) ){
- return;
- }
-
- xoff = loc->g_x - x;
- yoff = loc->g_y - y;
-
- assert( loc->g_h <= h );
- assert( loc->g_w <= w );
-
- h = loc->g_h;
- w = loc->g_w;
-
- assert( h <= fontbmp_allocated_height );
- assert( w <= fontbmp_allocated_width );
-
- fontbmp->height = h;
- fontbmp->width = w;
- for( yloop = 0; yloop < MIN(fontbmp_allocated_height, h); yloop++) {
- linebuf = (uint32_t *)(fontbmp->pixdata + (fontbmp_stride * yloop));
- for(xloop = 0; xloop < MIN(fontbmp_allocated_width, w); xloop++){
- fontpix = (uint32_t)(pixdata[(( yoff + yloop ) * pitch) + xloop + xoff]);
- linebuf[xloop] = (uint32_t)(colour | fontpix);
- }
- }
- plot_blit_bitmap(fontbmp, loc->g_x, loc->g_y, 0, BITMAPF_MONOGLYPH);
-}
-
-static void draw_glyph1(FONT_PLOTTER self, GRECT * clip, GRECT * loc, uint8_t * pixdata, int pitch, uint32_t colour)
-{
- int xloop,yloop,xoff,yoff;
- int x,y,w,h;
- uint8_t bitm;
- const uint8_t *fntd;
-
- x = loc->g_x;
- y = loc->g_y;
- w = loc->g_w;
- h = loc->g_h;
-
- if( !rc_intersect( clip, loc ) ){
- return;
- }
-
- xoff = loc->g_x - x;
- yoff = loc->g_y - y;
-
- if (h > loc->g_h)
- h = loc->g_h;
-
- if (w > loc->g_w)
- w = loc->g_w;
-
- int stride = MFDB_STRIDE( w );
- if( tmp.fd_addr == NULL || tmp_mfdb_size < MFDB_SIZE( 1, stride, h) ){
- tmp_mfdb_size = init_mfdb( 1, w, h, MFDB_FLAG_STAND | MFDB_FLAG_ZEROMEM, &tmp );
- } else {
- void * buf = tmp.fd_addr;
- int size = init_mfdb( 1, w, h, MFDB_FLAG_STAND | MFDB_FLAG_NOALLOC, &tmp );
- tmp.fd_addr = buf;
- memset( tmp.fd_addr, 0, size );
- }
- short * buf;
- for( yloop = 0; yloop < h; yloop++) {
- fntd = pixdata + (pitch * (yloop+yoff))+(xoff>>3);
- buf = tmp.fd_addr;
- buf += (tmp.fd_wdwidth*yloop);
- for ( xloop = 0, bitm = (1<<(7-(xoff%8))); xloop < w; xloop++, bitm=(bitm>>1) ) {
- if( (*fntd & bitm) != 0 ){
- short whichbit = (1<<(15-(xloop%16)));
- buf[xloop>>4] = ((buf[xloop>>4])|(whichbit));
- }
- if( bitm == 1 ) {
- fntd++;
- bitm = 128;
- }
- }
- }
-#ifdef WITH_8BPP_SUPPORT
- if( app.nplanes > 8 ){
-#endif
- plot_blit_mfdb(loc, &tmp, OFFSET_CUSTOM_COLOR, PLOT_FLAG_TRANS );
-#ifdef WITH_8BPP_SUPPORT
- } else {
- plot_blit_mfdb(loc, &tmp, colour, PLOT_FLAG_TRANS );
- }
-#endif
-
-}
-
-static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length,
- const plot_font_style_t *fstyle )
-{
- uint32_t ucs4;
- size_t nxtchr = 0;
- FT_Glyph glyph;
- FT_BitmapGlyph bglyph;
- GRECT loc, clip;
- uint32_t c = fstyle->foreground ;
- struct rect clipping;
- /* in -> BGR */
- /* out -> ARGB */
- if( !(self->flags & FONTPLOT_FLAG_MONOGLYPH) ){
- c = ABGR_TO_RGB(c);
- } else {
-#ifdef WITH_8BPP_SUPPORT
- if( app.nplanes > 8 ){
-#endif
+
+ return true;
+}
+
+
+static bool ft_font_finalise(void)
+{
+ FTC_Manager_Done(ft_cmanager );
+ FT_Done_FreeType(library);
+ return true;
+}
+
+static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle,
+ const char *string, size_t length,
+ int *width)
+{
+ uint32_t ucs4;
+ size_t nxtchr = 0;
+ FT_Glyph glyph;
+
+ *width = 0;
+ while (nxtchr < length) {
+ ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
+ nxtchr = utf8_next(string, length, nxtchr);
+
+ glyph = ft_getglyph(fstyle, ucs4);
+ if (glyph == NULL)
+ continue;
+ *width += glyph->advance.x >> 16;
+ }
+ return(1);
+}
+
+
+static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,
+ const char *string, size_t length,
+ int x, size_t *char_offset, int *actual_x)
+{
+ uint32_t ucs4;
+ size_t nxtchr = 0;
+ int last_space_x = 0;
+ int last_space_idx = 0;
+ FT_Glyph glyph;
+
+ *actual_x = 0;
+ while (nxtchr < length) {
+ ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
+ glyph = ft_getglyph(fstyle, ucs4);
+ if (glyph == NULL)
+ continue;
+ if (ucs4 == 0x20) {
+ last_space_x = *actual_x;
+ last_space_idx = nxtchr;
+ }
+ *actual_x += glyph->advance.x >> 16;
+ if (*actual_x > x && last_space_idx != 0) {
+ /* string has exceeded available width and we've
+ * found a space; return previous space */
+ *actual_x = last_space_x;
+ *char_offset = last_space_idx;
+ return true;
+ }
+ nxtchr = utf8_next(string, length, nxtchr);
+ }
+ *char_offset = nxtchr;
+ return (1);
+}
+
+
+static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,
+ const char *string, size_t length,
+ int x, size_t *char_offset, int *actual_x)
+{
+ uint32_t ucs4;
+ size_t nxtchr = 0;
+ FT_Glyph glyph;
+ int prev_x = 0;
+
+ *actual_x = 0;
+ while (nxtchr < length) {
+ ucs4 = utf8_to_ucs4(string + nxtchr, length - nxtchr);
+ glyph = ft_getglyph(fstyle, ucs4);
+ if (glyph == NULL)
+ continue;
+ *actual_x += glyph->advance.x >> 16;
+ if (*actual_x > x)
+ break;
+
+ prev_x = *actual_x;
+ nxtchr = utf8_next(string, length, nxtchr);
+ }
+
+ /* choose nearest of previous and last x */
+ if (abs(*actual_x - x) > abs(prev_x - x))
+ *actual_x = prev_x;
+ *char_offset = nxtchr;
+ return ( 1 );
+}
+
+
+static void draw_glyph8(FONT_PLOTTER self, GRECT * clip, GRECT * loc, uint8_t * pixdata, int pitch, uint32_t colour)
+{
+ uint32_t * linebuf;
+ uint32_t fontpix;
+ int xloop,yloop,xoff,yoff;
+ int x,y,w,h;
+
+ x = loc->g_x;
+ y = loc->g_y;
+ w = loc->g_w;
+ h = loc->g_h;
+
+ if( !rc_intersect( clip, loc ) ){
+ return;
+ }
+
+ xoff = loc->g_x - x;
+ yoff = loc->g_y - y;
+
+ assert( loc->g_h <= h );
+ assert( loc->g_w <= w );
+
+ h = loc->g_h;
+ w = loc->g_w;
+
+ assert( h <= fontbmp_allocated_height );
+ assert( w <= fontbmp_allocated_width );
+
+ fontbmp->height = h;
+ fontbmp->width = w;
+ for( yloop = 0; yloop < MIN(fontbmp_allocated_height, h); yloop++) {
+ linebuf = (uint32_t *)(fontbmp->pixdata + (fontbmp_stride * yloop));
+ for(xloop = 0; xloop < MIN(fontbmp_allocated_width, w); xloop++){
+ fontpix = (uint32_t)(pixdata[(( yoff + yloop ) * pitch) + xloop + xoff]);
+ linebuf[xloop] = (uint32_t)(colour | fontpix);
+ }
+ }
+ plot_blit_bitmap(fontbmp, loc->g_x, loc->g_y, 0, BITMAPF_MONOGLYPH);
+}
+
+static void draw_glyph1(FONT_PLOTTER self, GRECT * clip, GRECT * loc, uint8_t * pixdata, int pitch, uint32_t colour)
+{
+ int xloop,yloop,xoff,yoff;
+ int x,y,w,h;
+ uint8_t bitm;
+ const uint8_t *fntd;
+
+ x = loc->g_x;
+ y = loc->g_y;
+ w = loc->g_w;
+ h = loc->g_h;
+
+ if( !rc_intersect( clip, loc ) ){
+ return;
+ }
+
+ xoff = loc->g_x - x;
+ yoff = loc->g_y - y;
+
+ if (h > loc->g_h)
+ h = loc->g_h;
+
+ if (w > loc->g_w)
+ w = loc->g_w;
+
+ int stride = MFDB_STRIDE( w );
+ if( tmp.fd_addr == NULL || tmp_mfdb_size < MFDB_SIZE( 1, stride, h) ){
+ tmp_mfdb_size = init_mfdb( 1, w, h, MFDB_FLAG_STAND | MFDB_FLAG_ZEROMEM, &tmp );
+ } else {
+ void * buf = tmp.fd_addr;
+ int size = init_mfdb( 1, w, h, MFDB_FLAG_STAND | MFDB_FLAG_NOALLOC, &tmp );
+ tmp.fd_addr = buf;
+ memset( tmp.fd_addr, 0, size );
+ }
+ short * buf;
+ for( yloop = 0; yloop < h; yloop++) {
+ fntd = pixdata + (pitch * (yloop+yoff))+(xoff>>3);
+ buf = tmp.fd_addr;
+ buf += (tmp.fd_wdwidth*yloop);
+ for ( xloop = 0, bitm = (1<<(7-(xoff%8))); xloop < w; xloop++, bitm=(bitm>>1) ) {
+ if( (*fntd & bitm) != 0 ){
+ short whichbit = (1<<(15-(xloop%16)));
+ buf[xloop>>4] = ((buf[xloop>>4])|(whichbit));
+ }
+ if( bitm == 1 ) {
+ fntd++;
+ bitm = 128;
+ }
+ }
+ }
+#ifdef WITH_8BPP_SUPPORT
+ if( app.nplanes > 8 ){
+#endif
+ plot_blit_mfdb(loc, &tmp, OFFSET_CUSTOM_COLOR, PLOT_FLAG_TRANS );
+#ifdef WITH_8BPP_SUPPORT
+ } else {
+ plot_blit_mfdb(loc, &tmp, colour, PLOT_FLAG_TRANS );
+ }
+#endif
+
+}
+
+static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length,
+ const plot_font_style_t *fstyle )
+{
+ uint32_t ucs4;
+ size_t nxtchr = 0;
+ FT_Glyph glyph;
+ FT_BitmapGlyph bglyph;
+ GRECT loc, clip;
+ uint32_t c = fstyle->foreground ;
+ struct rect clipping;
+ /* in -> BGR */
+ /* out -> ARGB */
+ if( !(self->flags & FONTPLOT_FLAG_MONOGLYPH) ){
+ c = ABGR_TO_RGB(c);
+ } else {
+#ifdef WITH_8BPP_SUPPORT
+ if( app.nplanes > 8 ){
+#endif
RGB1000 out; /* struct with RGB shorts */
- rgb_to_vdi1000( (unsigned char*)&c, &out);
+ rgb_to_vdi1000( (unsigned char*)&c, &out);
vs_color(atari_plot_vdi_handle, OFFSET_CUSTOM_COLOR,
- (short*)&out);
-#ifdef WITH_8BPP_SUPPORT
- } else {
- c = RGB_TO_VDI(c);
- }
-#endif
- }
-
- plot_get_clip(&clipping);
- clip.g_x = clipping.x0;
- clip.g_y = clipping.y0;
- clip.g_w = (clipping.x1 - clipping.x0)+1;
- clip.g_h = (clipping.y1 - clipping.y0)+1;
-
- fontbmp = atari_bitmap_realloc( clip.g_w, clip.g_h,
- 4, clip.g_w << 2,
- BITMAP_GROW, fontbmp );
- fontbmp_stride = atari_bitmap_get_rowstride(fontbmp);
- fontbmp_allocated_height = clip.g_h;
- fontbmp_allocated_width = clip.g_w;
-
- while (nxtchr < length) {
- ucs4 = utf8_to_ucs4(text + nxtchr, length - nxtchr);
- nxtchr = utf8_next(text, length, nxtchr);
-
- glyph = ft_getglyph(fstyle, ucs4);
- if (glyph == NULL){
- continue;
- }
-
- if (glyph->format == FT_GLYPH_FORMAT_BITMAP) {
- bglyph = (FT_BitmapGlyph)glyph;
- loc.g_x = x + bglyph->left;
- loc.g_y = y - bglyph->top;
- loc.g_w = bglyph->bitmap.width;
- loc.g_h = bglyph->bitmap.rows;
-
- if( loc.g_w > 0) {
- self->draw_glyph( self,
- &clip, &loc,
- bglyph->bitmap.buffer,
- bglyph->bitmap.pitch,
- c
- );
- }
- }
- x += glyph->advance.x >> 16;
- }
- return( 0 );
-}
-
-
-int ctor_font_plotter_freetype( FONT_PLOTTER self )
-{
- self->dtor = dtor;
- self->str_width = str_width;
- self->str_split = str_split;
- self->pixel_pos = pixel_pos;
- self->text = text;
-
- /* set the default render mode */
- if( (self->flags & FONTPLOT_FLAG_MONOGLYPH) != 0 ){
- ft_load_type = FT_LOAD_MONOCHROME;
- self->draw_glyph = draw_glyph1;
- }
- else{
- ft_load_type = 0;
- self->draw_glyph = draw_glyph8;
- }
-
- LOG(("%s: %s\n", (char*)__FILE__, __FUNCTION__));
- if( !init ) {
- ft_font_init();
- fontbmp = atari_bitmap_create(48, 48, 0);
- fontbmp->opaque = false;
- init = true;
- }
-
- return( 1 );
-}
-
-static int dtor( FONT_PLOTTER self )
-{
- ft_font_finalise();
- if( fontbmp != NULL ) {
- atari_bitmap_destroy( fontbmp );
- fontbmp = NULL;
- }
- if( tmp.fd_addr != NULL ){
- free( tmp.fd_addr );
- }
- return( 1 );
-}
-
-#endif
+ (short*)&out);
+#ifdef WITH_8BPP_SUPPORT
+ } else {
+ c = RGB_TO_VDI(c);
+ }
+#endif
+ }
+
+ plot_get_clip(&clipping);
+ clip.g_x = clipping.x0;
+ clip.g_y = clipping.y0;
+ clip.g_w = (clipping.x1 - clipping.x0)+1;
+ clip.g_h = (clipping.y1 - clipping.y0)+1;
+
+ fontbmp = atari_bitmap_realloc( clip.g_w, clip.g_h,
+ 4, clip.g_w << 2,
+ BITMAP_GROW, fontbmp );
+ fontbmp_stride = atari_bitmap_get_rowstride(fontbmp);
+ fontbmp_allocated_height = clip.g_h;
+ fontbmp_allocated_width = clip.g_w;
+
+ while (nxtchr < length) {
+ ucs4 = utf8_to_ucs4(text + nxtchr, length - nxtchr);
+ nxtchr = utf8_next(text, length, nxtchr);
+
+ glyph = ft_getglyph(fstyle, ucs4);
+ if (glyph == NULL){
+ continue;
+ }
+
+ if (glyph->format == FT_GLYPH_FORMAT_BITMAP) {
+ bglyph = (FT_BitmapGlyph)glyph;
+ loc.g_x = x + bglyph->left;
+ loc.g_y = y - bglyph->top;
+ loc.g_w = bglyph->bitmap.width;
+ loc.g_h = bglyph->bitmap.rows;
+
+ if( loc.g_w > 0) {
+ self->draw_glyph( self,
+ &clip, &loc,
+ bglyph->bitmap.buffer,
+ bglyph->bitmap.pitch,
+ c
+ );
+ }
+ }
+ x += glyph->advance.x >> 16;
+ }
+ return( 0 );
+}
+
+
+int ctor_font_plotter_freetype( FONT_PLOTTER self )
+{
+ self->dtor = dtor;
+ self->str_width = str_width;
+ self->str_split = str_split;
+ self->pixel_pos = pixel_pos;
+ self->text = text;
+
+ /* set the default render mode */
+ if( (self->flags & FONTPLOT_FLAG_MONOGLYPH) != 0 ){
+ ft_load_type = FT_LOAD_MONOCHROME;
+ self->draw_glyph = draw_glyph1;
+ }
+ else{
+ ft_load_type = 0;
+ self->draw_glyph = draw_glyph8;
+ }
+
+ LOG("%s: %s\n", (char *)__FILE__, __FUNCTION__);
+ if( !init ) {
+ ft_font_init();
+ fontbmp = atari_bitmap_create(48, 48, 0);
+ fontbmp->opaque = false;
+ init = true;
+ }
+
+ return( 1 );
+}
+
+static int dtor( FONT_PLOTTER self )
+{
+ ft_font_finalise();
+ if( fontbmp != NULL ) {
+ atari_bitmap_destroy( fontbmp );
+ fontbmp = NULL;
+ }
+ if( tmp.fd_addr != NULL ){
+ free( tmp.fd_addr );
+ }
+ return( 1 );
+}
+
+#endif
diff --git a/atari/plot/font_freetype.h b/atari/plot/font_freetype.h
old mode 100755
new mode 100644
index 1e64ebc..58a5372
--- a/atari/plot/font_freetype.h
+++ b/atari/plot/font_freetype.h
@@ -1,51 +1,52 @@
-/*
- * Copyright 2011 Ole Loots <ole(a)monochrom.net>
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef FONT_PLOTTER_FREETYPE
-#define FONT_PLOTTER_FREETYPE
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include "utils/utf8.h"
-
-/* defines for accesing the faces */
-#define FONT_FACE_DEFAULT 0
-
-#define FONT_FACE_SANS_SERIF 0
-#define FONT_FACE_SANS_SERIF_BOLD 1
-#define FONT_FACE_SANS_SERIF_ITALIC 2
-#define FONT_FACE_SANS_SERIF_ITALIC_BOLD 3
-#define FONT_FACE_MONOSPACE 4
-#define FONT_FACE_MONOSPACE_BOLD 5
-#define FONT_FACE_SERIF 6
-#define FONT_FACE_SERIF_BOLD 7
-#define FONT_FACE_CURSIVE 8
-#define FONT_FACE_FANTASY 9
-
-#define FONT_FACE_COUNT 10
-
-struct font_desc {
- const char *name;
- int width, height;
- const char *encoding;
-};
-
-/* extern int ft_load_type; */
-
-int ctor_font_plotter_freetype( FONT_PLOTTER self );
+/*
+ * Copyright 2011 Ole Loots <ole(a)monochrom.net>
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FONT_PLOTTER_FREETYPE
+#define FONT_PLOTTER_FREETYPE
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+#include "utils/utf8.h"
+
+/* defines for accesing the faces */
+#define FONT_FACE_DEFAULT 0
+
+#define FONT_FACE_SANS_SERIF 0
+#define FONT_FACE_SANS_SERIF_BOLD 1
+#define FONT_FACE_SANS_SERIF_ITALIC 2
+#define FONT_FACE_SANS_SERIF_ITALIC_BOLD 3
+#define FONT_FACE_MONOSPACE 4
+#define FONT_FACE_MONOSPACE_BOLD 5
+#define FONT_FACE_SERIF 6
+#define FONT_FACE_SERIF_BOLD 7
+#define FONT_FACE_CURSIVE 8
+#define FONT_FACE_FANTASY 9
+
+#define FONT_FACE_COUNT 10
+
+struct font_desc {
+ const char *name;
+ int width, height;
+ const char *encoding;
+};
+
+/* extern int ft_load_type; */
+
+int ctor_font_plotter_freetype( FONT_PLOTTER self );
+
#endif
diff --git a/atari/plot/font_internal.c b/atari/plot/font_internal.c
index bfe0def..1578b39 100644
--- a/atari/plot/font_internal.c
+++ b/atari/plot/font_internal.c
@@ -1,22 +1,22 @@
-/*
- * Copyright 2008 Vincent Sanders <vince(a)simtec.co.uk>
- * Copyright 2011 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
+/*
+ * Copyright 2008 Vincent Sanders <vince(a)simtec.co.uk>
+ * Copyright 2011 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifdef WITH_INTERNAL_FONT_DRIVER
#include <unistd.h>
@@ -29,238 +29,238 @@
#include "atari/gui.h"
#include "atari/bitmap.h"
#include "atari/plot/plot.h"
-#include "atari/plot/fontplot.h"
-#include "atari/plot/font_internal.h"
-
+#include "atari/plot/fontplot.h"
+#include "atari/plot/font_internal.h"
+
extern unsigned long atari_plot_flags;
-extern int atari_plot_vdi_handle;
-
-static int dtor( FONT_PLOTTER self );
-static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str, size_t length, int * width );
-static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x );
-static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x );
-static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length, const plot_font_style_t *fstyle );
-
-static bool init = false;
-static int vdih;
-static struct bitmap * fontbmp;
-extern struct s_vdi_sysinfo vdi_sysinfo;
-
-const struct fb_font_desc font_regular;
-const struct fb_font_desc font_italic;
-const struct fb_font_desc font_bold;
-const struct fb_font_desc font_italic_bold;
-
-static MFDB tmp;
-static int tmp_mfdb_size;
-
-#define FONTDATAMAX 4096
-
-static const struct fb_font_desc*
-fb_get_font(const plot_font_style_t *fstyle)
-{
- if (fstyle->weight >= 700) {
- if ((fstyle->flags & FONTF_ITALIC) ||
- (fstyle->flags & FONTF_OBLIQUE)) {
- return &font_italic_bold;
- } else {
- return &font_bold;
- }
- } else {
- if ((fstyle->flags & FONTF_ITALIC) ||
- (fstyle->flags & FONTF_OBLIQUE)) {
- return &font_italic;
- } else {
- return &font_regular;
- }
- }
-}
-
-static nserror utf8_to_font_encoding(const struct fb_font_desc* font,
- const char *string,
- size_t len,
- char **result)
-{
- return utf8_to_enc(string, font->encoding, len, result);
-
-}
-
-int ctor_font_plotter_internal( FONT_PLOTTER self )
-{
- self->dtor = dtor;
- self->str_width = str_width;
- self->str_split = str_split;
- self->pixel_pos = pixel_pos;
- self->text = text;
- LOG(("%s: %s\n", (char*)__FILE__, __FUNCTION__));
- if( !init ) {
- vdih = self->vdi_handle;
- fontbmp = atari_bitmap_create(48, 48, 0);
- fontbmp->opaque = false;
- }
- init = true;
- return( 1 );
-}
-
-static int dtor( FONT_PLOTTER self )
-{
- if( tmp.fd_addr != NULL ){
- free( tmp.fd_addr );
- }
- return( 1 );
-}
-
-static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str,
- size_t length, int * width )
-{
- const struct fb_font_desc* fb_font = fb_get_font(fstyle);
- *width = fb_font->width * utf8_bounded_length(str, length);
- return( 1 );
-}
-
-static int str_split( FONT_PLOTTER self, const plot_font_style_t * fstyle, const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x )
-{
- const struct fb_font_desc* fb_font = fb_get_font(fstyle);
- int c_off = *char_offset = x / fb_font->width;
- if (*char_offset > length) {
- *char_offset = length;
- } else {
- while (*char_offset > 0) {
- if (string[*char_offset] == ' ')
- break;
- (*char_offset)--;
- }
- if (*char_offset == 0) {
- *char_offset = c_off;
- while (*char_offset < length &&
- string[*char_offset] != ' ') {
- (*char_offset)++;
- }
- }
- }
- *actual_x = *char_offset * fb_font->width;
- return( 1 );
-}
-
-static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t * fstyle,const char *string,
- size_t length,int x, size_t *char_offset, int *actual_x )
-{
- const struct fb_font_desc* fb_font = fb_get_font(fstyle);
- *char_offset = x / fb_font->width;
- if (*char_offset > length)
- *char_offset = length;
- *actual_x = *char_offset * fb_font->width;
- return( 1 );
-}
-
-static void draw_glyph1(FONT_PLOTTER self, GRECT *inloc, uint8_t *chrp, int pitch, uint32_t colour )
-{
- size_t bmpstride;
- GRECT clip;
- uint32_t * fontdata;
- int xloop,yloop;
- int stride = pitch / 8;
- uint32_t * linebuf;
- GRECT loc = *inloc;
-
- fontbmp = atari_bitmap_realloc( loc.g_w, loc.g_h, fontbmp->bpp, loc.g_w * fontbmp->bpp, BITMAP_GROW, fontbmp );
- bmpstride = atari_bitmap_get_rowstride(fontbmp);
- for( yloop = 0; yloop < loc.g_h; yloop++) {
- uint32_t pixmask = 1 ;
- linebuf = (uint32_t *)(fontbmp->pixdata + (bmpstride * yloop));
- fontdata = (uint32_t*)(chrp + (stride*yloop));
- for(xloop = loc.g_w-1; xloop>=0; xloop--){
- linebuf[xloop] = ((pixmask & *fontdata) == 0) ? 0 : colour;
- pixmask = (pixmask << 1);
- }
- }
- plot_blit_bitmap(fontbmp, loc.g_x, loc.g_y, 0, BITMAPF_MONOGLYPH );
-}
-
-static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length,
- const plot_font_style_t *fstyle )
-{
- const struct fb_font_desc* fb_font = fb_get_font(fstyle);
- const uint32_t *chrp;
- char *buffer = NULL;
- int chr;
- int blen;
- GRECT loc;
- uint32_t c;
-
- utf8_to_font_encoding(fb_font, text, length, &buffer);
- if (buffer == NULL)
- return 1;
-
- /* y is given to the fonts baseline we need it to the fonts top */
- y-=((fb_font->height * 75)/100);
-
- /* needed? */
- y+=1; /* the coord is the bottom-left of the pixels offset by 1 to make
- * it work since fb coords are the top-left of pixels
- */
- blen = strlen(buffer);
- if ( blen < 1 ) {
- return( 1 );
- }
-
- if(atari_plot_flags & PLOT_FLAG_OFFSCREEN ){
- /* when the plotter is an offscreen plotter the call to
- bitmap() isn't that expensive. Draw an 8 bit bitmap into the
- offscreen buffer.
- */
- c = fstyle->foreground;
- /* in -> BGR */
- /* out -> ARGB */
- c = (ABGR_TO_RGB(c) | 0xFF);
- loc.g_y = y;
- loc.g_x = x;
- loc.g_w = fb_font->width;
- loc.g_h = fb_font->height;
- for (chr = 0; chr < blen; chr++) {
- loc.g_x = x;
- chrp = fb_font->data + ((unsigned char)buffer[chr] * fb_font->height);
- draw_glyph1(self, &loc, (uint8_t *)chrp, 32, c);
- x+=fb_font->width;
- }
- } else {
- /* render the whole string into an monochrom mfdb */
- /* and plot that to reduce overhead */
- loc.g_x = x;
- loc.g_y = y;
- loc.g_w = blen * fb_font->width;
- assert( loc.g_w > 0 );
- loc.g_h = fb_font->height;
- int stride = MFDB_STRIDE( loc.g_w );
- if( tmp.fd_addr == NULL || tmp_mfdb_size < MFDB_SIZE( 1, stride, loc.g_h) ){
- tmp_mfdb_size = init_mfdb( 1, loc.g_w, loc.g_h+1, MFDB_FLAG_STAND | MFDB_FLAG_ZEROMEM, &tmp );
- } else {
- void * buf = tmp.fd_addr;
- int size = init_mfdb( 1, loc.g_w, loc.g_h+1, MFDB_FLAG_STAND | MFDB_FLAG_NOALLOC, &tmp );
- tmp.fd_addr = buf;
- memset( tmp.fd_addr, 0, size );
- }
- short ypos;
- int rowsize = tmp.fd_wdwidth << 1;
- char * d;
- uint32_t * pp;
- for (chr = 0; chr < blen; chr++) {
- pp = (uint32_t*)fb_font->data + ((unsigned char)buffer[chr] * fb_font->height);
- d = ((uint8_t*)tmp.fd_addr) + chr;
- for( ypos=0; ypos<loc.g_h; ypos++){
- *d = (unsigned char)*pp++;
- d += rowsize;
- }
+extern int atari_plot_vdi_handle;
+
+static int dtor( FONT_PLOTTER self );
+static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str, size_t length, int * width );
+static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x );
+static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x );
+static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length, const plot_font_style_t *fstyle );
+
+static bool init = false;
+static int vdih;
+static struct bitmap * fontbmp;
+extern struct s_vdi_sysinfo vdi_sysinfo;
+
+const struct fb_font_desc font_regular;
+const struct fb_font_desc font_italic;
+const struct fb_font_desc font_bold;
+const struct fb_font_desc font_italic_bold;
+
+static MFDB tmp;
+static int tmp_mfdb_size;
+
+#define FONTDATAMAX 4096
+
+static const struct fb_font_desc*
+fb_get_font(const plot_font_style_t *fstyle)
+{
+ if (fstyle->weight >= 700) {
+ if ((fstyle->flags & FONTF_ITALIC) ||
+ (fstyle->flags & FONTF_OBLIQUE)) {
+ return &font_italic_bold;
+ } else {
+ return &font_bold;
+ }
+ } else {
+ if ((fstyle->flags & FONTF_ITALIC) ||
+ (fstyle->flags & FONTF_OBLIQUE)) {
+ return &font_italic;
+ } else {
+ return &font_regular;
+ }
+ }
+}
+
+static nserror utf8_to_font_encoding(const struct fb_font_desc* font,
+ const char *string,
+ size_t len,
+ char **result)
+{
+ return utf8_to_enc(string, font->encoding, len, result);
+
+}
+
+int ctor_font_plotter_internal( FONT_PLOTTER self )
+{
+ self->dtor = dtor;
+ self->str_width = str_width;
+ self->str_split = str_split;
+ self->pixel_pos = pixel_pos;
+ self->text = text;
+ LOG("%s: %s\n", (char *)__FILE__, __FUNCTION__);
+ if( !init ) {
+ vdih = self->vdi_handle;
+ fontbmp = atari_bitmap_create(48, 48, 0);
+ fontbmp->opaque = false;
+ }
+ init = true;
+ return( 1 );
+}
+
+static int dtor( FONT_PLOTTER self )
+{
+ if( tmp.fd_addr != NULL ){
+ free( tmp.fd_addr );
+ }
+ return( 1 );
+}
+
+static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str,
+ size_t length, int * width )
+{
+ const struct fb_font_desc* fb_font = fb_get_font(fstyle);
+ *width = fb_font->width * utf8_bounded_length(str, length);
+ return( 1 );
+}
+
+static int str_split( FONT_PLOTTER self, const plot_font_style_t * fstyle, const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x )
+{
+ const struct fb_font_desc* fb_font = fb_get_font(fstyle);
+ int c_off = *char_offset = x / fb_font->width;
+ if (*char_offset > length) {
+ *char_offset = length;
+ } else {
+ while (*char_offset > 0) {
+ if (string[*char_offset] == ' ')
+ break;
+ (*char_offset)--;
+ }
+ if (*char_offset == 0) {
+ *char_offset = c_off;
+ while (*char_offset < length &&
+ string[*char_offset] != ' ') {
+ (*char_offset)++;
+ }
+ }
+ }
+ *actual_x = *char_offset * fb_font->width;
+ return( 1 );
+}
+
+static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t * fstyle,const char *string,
+ size_t length,int x, size_t *char_offset, int *actual_x )
+{
+ const struct fb_font_desc* fb_font = fb_get_font(fstyle);
+ *char_offset = x / fb_font->width;
+ if (*char_offset > length)
+ *char_offset = length;
+ *actual_x = *char_offset * fb_font->width;
+ return( 1 );
+}
+
+static void draw_glyph1(FONT_PLOTTER self, GRECT *inloc, uint8_t *chrp, int pitch, uint32_t colour )
+{
+ size_t bmpstride;
+ GRECT clip;
+ uint32_t * fontdata;
+ int xloop,yloop;
+ int stride = pitch / 8;
+ uint32_t * linebuf;
+ GRECT loc = *inloc;
+
+ fontbmp = atari_bitmap_realloc( loc.g_w, loc.g_h, fontbmp->bpp, loc.g_w * fontbmp->bpp, BITMAP_GROW, fontbmp );
+ bmpstride = atari_bitmap_get_rowstride(fontbmp);
+ for( yloop = 0; yloop < loc.g_h; yloop++) {
+ uint32_t pixmask = 1 ;
+ linebuf = (uint32_t *)(fontbmp->pixdata + (bmpstride * yloop));
+ fontdata = (uint32_t*)(chrp + (stride*yloop));
+ for(xloop = loc.g_w-1; xloop>=0; xloop--){
+ linebuf[xloop] = ((pixmask & *fontdata) == 0) ? 0 : colour;
+ pixmask = (pixmask << 1);
+ }
+ }
+ plot_blit_bitmap(fontbmp, loc.g_x, loc.g_y, 0, BITMAPF_MONOGLYPH );
+}
+
+static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t length,
+ const plot_font_style_t *fstyle )
+{
+ const struct fb_font_desc* fb_font = fb_get_font(fstyle);
+ const uint32_t *chrp;
+ char *buffer = NULL;
+ int chr;
+ int blen;
+ GRECT loc;
+ uint32_t c;
+
+ utf8_to_font_encoding(fb_font, text, length, &buffer);
+ if (buffer == NULL)
+ return 1;
+
+ /* y is given to the fonts baseline we need it to the fonts top */
+ y-=((fb_font->height * 75)/100);
+
+ /* needed? */
+ y+=1; /* the coord is the bottom-left of the pixels offset by 1 to make
+ * it work since fb coords are the top-left of pixels
+ */
+ blen = strlen(buffer);
+ if ( blen < 1 ) {
+ return( 1 );
+ }
+
+ if(atari_plot_flags & PLOT_FLAG_OFFSCREEN ){
+ /* when the plotter is an offscreen plotter the call to
+ bitmap() isn't that expensive. Draw an 8 bit bitmap into the
+ offscreen buffer.
+ */
+ c = fstyle->foreground;
+ /* in -> BGR */
+ /* out -> ARGB */
+ c = (ABGR_TO_RGB(c) | 0xFF);
+ loc.g_y = y;
+ loc.g_x = x;
+ loc.g_w = fb_font->width;
+ loc.g_h = fb_font->height;
+ for (chr = 0; chr < blen; chr++) {
+ loc.g_x = x;
+ chrp = fb_font->data + ((unsigned char)buffer[chr] * fb_font->height);
+ draw_glyph1(self, &loc, (uint8_t *)chrp, 32, c);
+ x+=fb_font->width;
+ }
+ } else {
+ /* render the whole string into an monochrom mfdb */
+ /* and plot that to reduce overhead */
+ loc.g_x = x;
+ loc.g_y = y;
+ loc.g_w = blen * fb_font->width;
+ assert( loc.g_w > 0 );
+ loc.g_h = fb_font->height;
+ int stride = MFDB_STRIDE( loc.g_w );
+ if( tmp.fd_addr == NULL || tmp_mfdb_size < MFDB_SIZE( 1, stride, loc.g_h) ){
+ tmp_mfdb_size = init_mfdb( 1, loc.g_w, loc.g_h+1, MFDB_FLAG_STAND | MFDB_FLAG_ZEROMEM, &tmp );
+ } else {
+ void * buf = tmp.fd_addr;
+ int size = init_mfdb( 1, loc.g_w, loc.g_h+1, MFDB_FLAG_STAND | MFDB_FLAG_NOALLOC, &tmp );
+ tmp.fd_addr = buf;
+ memset( tmp.fd_addr, 0, size );
+ }
+ short ypos;
+ int rowsize = tmp.fd_wdwidth << 1;
+ char * d;
+ uint32_t * pp;
+ for (chr = 0; chr < blen; chr++) {
+ pp = (uint32_t*)fb_font->data + ((unsigned char)buffer[chr] * fb_font->height);
+ d = ((uint8_t*)tmp.fd_addr) + chr;
+ for( ypos=0; ypos<loc.g_h; ypos++){
+ *d = (unsigned char)*pp++;
+ d += rowsize;
+ }
}
#ifdef WITH_8BPP_SUPPORT
if( app.nplanes > 8 ){
-#endif
+#endif
//unsigned short out[4];
- RGB1000 out;
+ RGB1000 out;
//rgb_to_vdi1000( (unsigned char*)&fstyle->foreground, (unsigned short*)&out );
out.blue = 0;
out.green = 1000;
@@ -269,2116 +269,2117 @@ static int text( FONT_PLOTTER self, int x, int y, const char *text, size_t leng
vq_color(atari_plot_vdi_handle, OFFSET_CUSTOM_COLOR, 1, (short *)&out);
//printf("r:%d,g:%d,b:%d", out.red, out.green, out.blue);
//vsl_color(atari_plot_vdi_handle, OFFSET_CUSTOM_COLOR);
- //vsf_color(atari_plot_vdi_handle, OFFSET_CUSTOM_COLOR);
+ //vsf_color(atari_plot_vdi_handle, OFFSET_CUSTOM_COLOR);
plot_blit_mfdb(&loc, &tmp, OFFSET_CUSTOM_COLOR, PLOT_FLAG_TRANS);
#ifdef WITH_8BPP_SUPPORT
} else {
unsigned char c = RGB_TO_VDI(fstyle->foreground);
plot_blit_mfdb(&loc, &tmp, c, PLOT_FLAG_TRANS );
}
-#endif
- }
-
- free(buffer);
- return( 1 );
-}
-
-/* ------------------*/
-/* Fontdata */
-/* ------------------*/
-
-static const uint32_t fontdata_bold[FONTDATAMAX] = {
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x6C, 0x6C, 0xFE, 0xFE, 0xFE, 0x6C, 0x6C,
- 0xFE, 0xFE, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x7C, 0xFE, 0xF6, 0xF0, 0xF8, 0x7C,
- 0x3E, 0x1E, 0xDE, 0xFE, 0x7C, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE6, 0xEE, 0x1C,
- 0x38, 0x70, 0xEE, 0xCE, 0x0E, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0xF8, 0xF8, 0xF8, 0xF8, 0x76, 0xFE,
- 0xFE, 0xEC, 0xEE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x0C, 0x1C, 0x38, 0x38, 0x70, 0x70, 0x70,
- 0x70, 0x70, 0x38, 0x38, 0x1C, 0x0C, 0x06, 0x00,
- 0x60, 0x30, 0x38, 0x1C, 0x1C, 0x0E, 0x0E, 0x0E,
- 0x0E, 0x0E, 0x1C, 0x1C, 0x38, 0x30, 0x60, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x54, 0xFE, 0x7C, 0x38,
- 0x7C, 0xFE, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0xFE,
- 0xFE, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x78, 0x70, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
- 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x1E, 0x3C,
- 0x78, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x38, 0x78, 0x78, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x7E, 0xFC,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x3C, 0x3C,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0C, 0x1C, 0x3C, 0x7C, 0x6C, 0xEC,
- 0xFE, 0xFE, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xFC, 0xFE, 0x0E,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFC, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0x0E, 0x0E, 0x1C, 0x1C, 0x1C,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0x7E,
- 0x0E, 0x0E, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
- 0x00, 0x18, 0x38, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70,
- 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00,
- 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x60, 0x70, 0x38, 0x1C, 0x0E,
- 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x3E, 0x7C,
- 0x70, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
- 0xEC, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xFC, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xE0, 0xE0, 0xE0,
- 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xF8, 0xFC, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xF8, 0xF8,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xF8, 0xF8,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xE0, 0xE0, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
- 0x0E, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xE0, 0xE6, 0xEE, 0xFE, 0xFC, 0xF8, 0xF0,
- 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
- 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xFE, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0xCE, 0xEE, 0xEE, 0xFE, 0xFE, 0xFE, 0xFE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE,
- 0xFC, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xFE, 0xFE, 0xFE, 0x7E, 0x06, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xE0, 0xFC, 0x7E,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x38,
- 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0x0E, 0x0E, 0x1C, 0x38, 0x38,
- 0x70, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x3E, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x3E, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xF0, 0x78,
- 0x3C, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
- 0x00, 0x00, 0x00, 0x30, 0x38, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
- 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x7E, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x70, 0xF8, 0xF8,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x7E, 0x7C,
- 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x38, 0x00, 0x78, 0x78, 0x38,
- 0x38, 0x38, 0x38, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x3C, 0x3C, 0x1C,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x7C, 0x78,
- 0x00, 0xE0, 0xE0, 0xE0, 0xE6, 0xEE, 0xFE, 0xFC,
- 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
- 0x00, 0x78, 0x78, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xFE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x0F, 0x0F,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xFE, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xE0,
- 0xFC, 0x7E, 0x0E, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x30, 0x70, 0x70, 0xFC, 0xFC, 0x70,
- 0x70, 0x70, 0x70, 0x7E, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
- 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
- 0x7C, 0x7C, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x0E, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x1E,
- 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3E, 0x38, 0x38, 0x38, 0xF0, 0xF0,
- 0x38, 0x38, 0x38, 0x3E, 0x1E, 0x00, 0x00, 0x00,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0xF0, 0xF8, 0x38, 0x38, 0x38, 0x1E, 0x1E,
- 0x38, 0x38, 0x38, 0xF8, 0xF0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x66, 0xFE, 0xFE, 0xCC, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
- 0x00, 0x38, 0x7C, 0xEE, 0xE0, 0xFC, 0xE0, 0xF8,
- 0xE0, 0xE0, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x38, 0x18, 0x30, 0x00,
- 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x70, 0xF8, 0xF8,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0xF0, 0xE0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xEE, 0xEE, 0x66, 0xCC, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x38, 0xFE,
- 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
- 0x00, 0x7C, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
- 0x38, 0x70, 0xE0, 0xDB, 0x1B, 0x00, 0x00, 0x00,
- 0xEE, 0x7C, 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xFC,
- 0x7E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
- 0x38, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00,
- 0x00, 0x7F, 0xFF, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF,
- 0xEE, 0xEE, 0xEE, 0xFF, 0x7F, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0xEE, 0x7C, 0x00, 0xFE, 0xFE, 0x0E, 0x1E, 0x3C,
- 0x78, 0xF0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x36, 0x6C, 0x6C, 0x6C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x36, 0x36, 0x36, 0x6C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7B, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF1, 0xFB, 0x5F, 0x55, 0x51, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0x7C, 0x38, 0x00, 0x7E, 0xFE, 0xE0,
- 0xFC, 0x7E, 0x0E, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x38,
- 0x1C, 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFA,
- 0xDE, 0xDE, 0xFC, 0xFE, 0x6E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0x7C, 0x38, 0x00, 0xFE, 0xFE, 0x1E,
- 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0xFE, 0xD6,
- 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
- 0x00, 0x3C, 0x7E, 0x76, 0x70, 0xFC, 0xFC, 0xFC,
- 0x70, 0x76, 0xFE, 0xFE, 0xDC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0x7C, 0xFE,
- 0xFE, 0xFE, 0xFE, 0x7C, 0xEE, 0xEE, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0xFE,
- 0x38, 0xFE, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7C, 0x7C, 0x70, 0x3C, 0x7E, 0x66,
- 0x7E, 0x3C, 0x0E, 0x3E, 0x3E, 0x3C, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0xC3, 0x99, 0xBD, 0xA5, 0xA1,
- 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0xFC,
- 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
- 0x7C, 0xF8, 0xF8, 0x7C, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x06, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0xC3, 0xB9, 0xBD, 0xA5, 0xB9,
- 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x78, 0xFC, 0xCC, 0xFC, 0x78, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x38, 0xFE, 0xFE, 0xFE, 0x38,
- 0x38, 0x00, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x78, 0xF0, 0xC0,
- 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x30, 0x18, 0xF8,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xC0,
- 0x00, 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B,
- 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0xE0, 0x60, 0x60, 0x60, 0xF0,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0xF8, 0x88, 0xF8, 0x70, 0x00, 0xF8,
- 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
- 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0xE0, 0x62, 0x66, 0xFE, 0x1C,
- 0x38, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
- 0x00, 0x00, 0x60, 0xE0, 0x62, 0x66, 0xFE, 0x1C,
- 0x38, 0x70, 0xFC, 0xC6, 0x0C, 0x18, 0x1E, 0x00,
- 0x00, 0x00, 0xE0, 0x30, 0x62, 0x36, 0xEE, 0x1C,
- 0x3A, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
- 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x1C, 0x1C,
- 0x7C, 0xF8, 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00,
- 0x00, 0xE0, 0x70, 0x00, 0x10, 0x38, 0x7C, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x10, 0x38, 0x7C, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0xC6, 0x10, 0x38, 0x7C, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0x10, 0x38, 0x7C, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0x10, 0x38, 0x7C, 0xEE, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x38, 0x38, 0x7C, 0xEE, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x3F, 0x7F, 0xFE, 0xEE, 0xFF, 0xFF,
- 0xFE, 0xEE, 0xEF, 0xEF, 0xEF, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xE0, 0xE0, 0xE0,
- 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x0E, 0x6E, 0x7C,
- 0x00, 0x70, 0x38, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x38, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xEE, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0xEE, 0xEE, 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xF8,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0x38, 0x00, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x38, 0x00, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x38, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0xEE, 0xEE, 0x00, 0x38, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF8, 0xFC, 0xEE, 0xEE, 0xEE, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0xEE, 0xEE, 0xEE, 0xF6,
- 0xFE, 0xDE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0x38, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x38, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xEE, 0x7C,
- 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x7A, 0xFC, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x70, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
- 0x7C, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xC0, 0x00,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
- 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0x7E, 0x1A,
- 0x7E, 0xFE, 0xD8, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE,
- 0xEE, 0xE0, 0xEE, 0xFE, 0x7C, 0x1C, 0x7E, 0x7C,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x7C, 0xFE, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x38, 0x38, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0xEC, 0x7C, 0xF8, 0xFC, 0x7E, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xFE, 0xDC, 0x00, 0xFC, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xE0, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0xFE,
- 0xFE, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x7C, 0xFE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0xE0, 0x70, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x70, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
- 0x00, 0x00, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
-};
-
-const struct fb_font_desc font_bold = {
- .name = "NetSurf Bold",
- .width = 8,
- .height = 16,
- .encoding = "CP1252",
- .data = fontdata_bold,
-};
-
-
-static const uint32_t fontdata_italic[FONTDATAMAX] = {
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x36, 0x36, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1B, 0x1B, 0x1B, 0x7F, 0x7F, 0x36, 0x36,
- 0xFF, 0xFF, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x3E, 0x7F, 0x6B, 0x68, 0x78, 0x3C,
- 0x1E, 0x16, 0xD6, 0xFE, 0x7C, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
- 0x38, 0x70, 0xE6, 0xC6, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x36, 0x36, 0x3C, 0x39, 0x7F,
- 0x6E, 0xCC, 0xCC, 0xFE, 0x7A, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x0E, 0x1C, 0x38, 0x30, 0x60, 0x60, 0xC0,
- 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x70, 0x30, 0x00,
- 0x18, 0x1C, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x0C, 0x0C, 0x18, 0x38, 0x70, 0xE0, 0xC0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x1C, 0x7F,
- 0xFE, 0x38, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E,
- 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x38, 0x70, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
- 0x38, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x67, 0x6E, 0x76,
- 0xE6, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x0E, 0x1E, 0x3C, 0x0C, 0x0C, 0x18,
- 0x18, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x03, 0x07, 0x1E, 0x7C,
- 0x60, 0xC0, 0xC0, 0xFC, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x03, 0x06, 0x1E, 0x1E,
- 0x06, 0x06, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1E, 0x36, 0x7F,
- 0x7F, 0x0C, 0x0C, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x1F, 0x30, 0x30, 0x7C, 0x7E, 0x06,
- 0x06, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x0F, 0x1F, 0x38, 0x30, 0x60, 0x7C, 0x7E,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3F, 0x7F, 0x63, 0x03, 0x06, 0x06, 0x0C,
- 0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x33, 0x1E, 0x7C,
- 0x66, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x63, 0x63, 0x7E, 0x3E,
- 0x06, 0x0C, 0x1C, 0xF8, 0xF0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
- 0x00, 0x00, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0x70,
- 0x70, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, 0x00, 0x00,
- 0x7C, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x0E,
- 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x03, 0x07, 0x0E,
- 0x1C, 0x18, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x63, 0x6F, 0x6B, 0x6B,
- 0xCF, 0xCE, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x66, 0x7E, 0x7E,
- 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x3F, 0x33, 0x63, 0x63, 0x7E, 0x7C,
- 0x66, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x60,
- 0x60, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x3F, 0x33, 0x63, 0x63, 0x63, 0x63,
- 0xC3, 0xC6, 0xCE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x60, 0x7C, 0x7C,
- 0x60, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x60, 0x7C, 0x7C,
- 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x6E,
- 0x6E, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x33, 0x63, 0x66, 0x7E, 0x7E,
- 0xC6, 0xC6, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x3F, 0x3F, 0x0C, 0x0C, 0x18, 0x18, 0x18,
- 0x18, 0x30, 0x30, 0xFC, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06,
- 0x06, 0x0C, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x30, 0x30, 0x33, 0x36, 0x7C, 0x78, 0x70,
- 0x78, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60,
- 0x60, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x3F, 0x3F, 0x7F, 0x6B, 0x66,
- 0x66, 0xC6, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x3B, 0x3B, 0x7B, 0x7E, 0x6E,
- 0x6E, 0xCE, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x63, 0x66, 0x66,
- 0xC6, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x3F, 0x33, 0x33, 0x67, 0x7E, 0x7C,
- 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x63, 0x66, 0x66,
- 0xC6, 0xF6, 0xDC, 0xF8, 0x7C, 0x0C, 0x00, 0x00,
- 0x00, 0x3E, 0x3F, 0x33, 0x33, 0x63, 0x7E, 0x7C,
- 0x6E, 0xC6, 0xC6, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x60, 0x60, 0x7C, 0x3E,
- 0x06, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x18, 0x18, 0x30, 0x30, 0x30,
- 0x30, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x66, 0x66,
- 0x66, 0xC6, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x63, 0x66,
- 0x66, 0x6C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x63, 0x6B,
- 0x6B, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x38,
- 0x7C, 0xEE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x3C, 0x18,
- 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x03, 0x07, 0x0E, 0x0C, 0x18,
- 0x38, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0F, 0x0F, 0x0C, 0x0C, 0x18, 0x18, 0x18,
- 0x18, 0x30, 0x30, 0x3E, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x70,
- 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x1F, 0x03, 0x03, 0x06, 0x06, 0x06,
- 0x06, 0x0C, 0x0C, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0E, 0x1F, 0x3B, 0x63, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00,
- 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x06,
- 0x7E, 0xFC, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x18, 0x30, 0x30, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
- 0xC0, 0xC0, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x03, 0x03, 0x06, 0x3E, 0x7E, 0x66,
- 0xC6, 0xCC, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
- 0xFE, 0xFC, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0F, 0x0C, 0x18, 0x7E, 0x7E, 0x30,
- 0x30, 0x30, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xFC, 0xF8,
- 0x00, 0x00, 0x30, 0x30, 0x30, 0x6E, 0x7F, 0x73,
- 0x63, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x06, 0x00, 0x1C, 0x3C, 0x0C,
- 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x03, 0x00, 0x0E, 0x1E, 0x06,
- 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xF0,
- 0x00, 0x30, 0x30, 0x30, 0x33, 0x67, 0x6E, 0x7C,
- 0x7C, 0xDC, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x0E, 0x06, 0x06, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x7F, 0x7F,
- 0x6B, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x7E, 0x76,
- 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
- 0x66, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3F, 0x33,
- 0x63, 0x66, 0x66, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x0C, 0x0E, 0x0E,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x70,
- 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x60,
- 0x7C, 0x3E, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x3F, 0x3F, 0x18,
- 0x18, 0x30, 0x30, 0x3E, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x66,
- 0x66, 0x66, 0xCC, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66,
- 0xCC, 0xCC, 0xF8, 0x70, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63,
- 0x6B, 0xDE, 0xFE, 0xFE, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x77,
- 0x3E, 0x7C, 0xEE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xFC, 0xF8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x07,
- 0x1E, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0E, 0x0C, 0x0C, 0x18, 0x70, 0x70,
- 0x18, 0x18, 0x30, 0x38, 0x1C, 0x00, 0x00, 0x00,
- 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C,
- 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x00,
- 0x00, 0x38, 0x1C, 0x0C, 0x18, 0x18, 0x0E, 0x0E,
- 0x18, 0x30, 0x30, 0x70, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
- 0x00, 0x06, 0x0F, 0x1B, 0x18, 0x7E, 0x30, 0x7C,
- 0x60, 0x60, 0x6C, 0x3C, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x10, 0x20, 0x00,
- 0x00, 0x07, 0x0F, 0x0C, 0x18, 0x7E, 0x7E, 0x30,
- 0x30, 0x30, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x66, 0x66, 0x44, 0x88, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x06, 0x1F, 0x3F, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x06, 0x1F, 0x3F, 0x0C, 0x3F,
- 0x3F, 0x18, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
- 0x00, 0x3E, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x06,
- 0x0C, 0x30, 0x60, 0xDB, 0x9B, 0x00, 0x00, 0x00,
- 0x63, 0x3E, 0x00, 0x1E, 0x3F, 0x33, 0x60, 0x7C,
- 0x3E, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E,
- 0x1C, 0x30, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x3F, 0x33, 0x33, 0x66, 0x67, 0x67,
- 0x66, 0xCC, 0xCC, 0xFF, 0x7F, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x63, 0x3E, 0x00, 0x7F, 0x7F, 0x03, 0x07, 0x0E,
- 0x18, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x04, 0x08, 0x10, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x04, 0x08, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x09, 0x12, 0x1B, 0x36, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x09, 0x12, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x3F,
- 0x3F, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x19, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xFB, 0xFF, 0x55, 0xA2, 0xA2, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x36, 0x1C, 0x00, 0x3F, 0x7F, 0x60,
- 0x7C, 0x3E, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
- 0x0E, 0x0C, 0x1C, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x7F, 0x6D,
- 0x6F, 0xDE, 0xD8, 0xFE, 0x6E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x36, 0x1C, 0x00, 0x7F, 0x7F, 0x07,
- 0x1E, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x33, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x3C,
- 0x18, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00,
- 0x00, 0x00, 0x00, 0x04, 0x04, 0x3E, 0x7F, 0x6B,
- 0x68, 0xD0, 0xD6, 0xFE, 0x7C, 0x20, 0x20, 0x00,
- 0x00, 0x0F, 0x1F, 0x19, 0x18, 0x30, 0x7C, 0x7C,
- 0x30, 0x60, 0xE6, 0xFE, 0xDC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x19, 0x33, 0x1E, 0x3F,
- 0x33, 0x66, 0x7E, 0x3C, 0x66, 0xCC, 0x00, 0x00,
- 0x00, 0x00, 0x19, 0x19, 0x19, 0x1E, 0x0C, 0x3F,
- 0x0C, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x00,
- 0x00, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0E, 0x18, 0x18, 0x3C, 0x7E, 0x66,
- 0x7E, 0x3C, 0x18, 0x18, 0x70, 0xE0, 0x00, 0x00,
- 0x00, 0x00, 0x33, 0x66, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1F, 0x21, 0x21, 0x4D, 0x51, 0x51,
- 0x91, 0xA1, 0x9A, 0x82, 0x7C, 0x38, 0x00, 0x00,
- 0x00, 0x1C, 0x02, 0x1E, 0x22, 0x3C, 0x00, 0x7C,
- 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B,
- 0x36, 0xD8, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1E, 0x3E, 0x06, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1F, 0x21, 0x49, 0x55, 0x55, 0x59,
- 0x99, 0xA5, 0xA5, 0x82, 0x7E, 0x78, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x3F, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x06, 0x3F, 0x3F, 0x0C,
- 0x0C, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x3C, 0x3E, 0x06, 0x3C, 0x78, 0x60,
- 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x3C, 0x3E, 0x06, 0x18, 0x0C, 0x7C,
- 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33,
- 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0xC0, 0x80,
- 0x00, 0x00, 0x00, 0x3F, 0x6F, 0xDB, 0xDB, 0x7B,
- 0x1B, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x38, 0x18, 0x30, 0x30, 0x78,
- 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x1E, 0x22, 0x3C, 0x18, 0x00, 0x3C,
- 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
- 0x36, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x30, 0x10, 0x23, 0x76, 0x0C,
- 0x18, 0x64, 0xCC, 0x94, 0x3E, 0x08, 0x08, 0x00,
- 0x00, 0x00, 0x10, 0x30, 0x10, 0x23, 0x76, 0x0C,
- 0x18, 0x60, 0xDC, 0x82, 0x1C, 0x20, 0x3C, 0x00,
- 0x00, 0x00, 0x38, 0x04, 0x18, 0x0B, 0x76, 0x0C,
- 0x18, 0x64, 0xCC, 0x96, 0x3E, 0x08, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C,
- 0x3C, 0x70, 0xC0, 0xC6, 0xC6, 0xFC, 0x78, 0x00,
- 0x00, 0x18, 0x0C, 0x00, 0x04, 0x1C, 0x36, 0x63,
- 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x06, 0x00, 0x04, 0x1C, 0x36, 0x63,
- 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1B, 0x11, 0x04, 0x1C, 0x36, 0x63,
- 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x37, 0x00, 0x04, 0x1C, 0x36, 0x63,
- 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x1B, 0x1B, 0x04, 0x0E, 0x36, 0x63, 0x7F,
- 0x7F, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x11, 0x0E, 0x0E, 0x36, 0x63, 0x7F,
- 0x7F, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0F, 0x1F, 0x3B, 0x66, 0x7F, 0x7F,
- 0x66, 0xCC, 0xCC, 0xCF, 0xCF, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x60,
- 0x60, 0xC0, 0xC6, 0xFE, 0x7C, 0x1C, 0xCC, 0x78,
- 0x00, 0x0C, 0x06, 0x00, 0x3F, 0x7F, 0x60, 0x78,
- 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x06, 0x00, 0x3F, 0x7F, 0x60, 0x78,
- 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1B, 0x00, 0x3F, 0x7F, 0x60, 0x78,
- 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x1B, 0x1B, 0x00, 0x3F, 0x3F, 0x60, 0x60, 0x78,
- 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x06, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x06, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x09, 0x1F, 0x1F, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1B, 0x1B, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1E, 0x1F, 0x1B, 0x33, 0x33, 0x7B,
- 0x33, 0x66, 0x6E, 0x7C, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x37, 0x00, 0x31, 0x63, 0x73, 0x7B,
- 0x7F, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x06, 0x00, 0x3E, 0x7F, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x06, 0x00, 0x3E, 0x7F, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x37, 0x00, 0x3E, 0x7F, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x77, 0x3E,
- 0x1C, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x3E, 0x37, 0x6B, 0x6B, 0x6B, 0xD6,
- 0xD6, 0xD6, 0xEE, 0x7C, 0xB8, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x06, 0x00, 0x33, 0x33, 0x63, 0x66,
- 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0x06, 0x00, 0x33, 0x33, 0x63, 0x66,
- 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1B, 0x00, 0x33, 0x33, 0x63, 0x66,
- 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x1B, 0x1B, 0x00, 0x33, 0x33, 0x63, 0x63, 0x63,
- 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x0C, 0x00, 0x33, 0x33, 0x66, 0x6E,
- 0x7C, 0x38, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x1F, 0x3F, 0x33, 0x33,
- 0x3F, 0x7C, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1F, 0x1B, 0x1B, 0x33, 0x3F, 0x3E,
- 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0x80, 0x00,
- 0x00, 0x00, 0x0C, 0x06, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xCE, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1D, 0x37, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3F, 0x7F, 0x63,
- 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1B, 0x0E, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x3F, 0x0D,
- 0x1F, 0x7E, 0xD8, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F,
- 0x63, 0xC0, 0xC6, 0xFE, 0x7C, 0x30, 0xF8, 0xF0,
- 0x00, 0x00, 0x0C, 0x06, 0x00, 0x3E, 0x7F, 0x63,
- 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
- 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
- 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
- 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x06, 0x00, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x06, 0x00, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x0F, 0x19, 0x00, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x1B, 0x1F, 0x3E, 0x37, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x7E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x3F,
- 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F, 0x67,
- 0x6B, 0xD6, 0xE6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x0C, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0C, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x06, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xF8, 0xF0,
- 0x00, 0x00, 0x18, 0x18, 0x18, 0x3E, 0x3F, 0x33,
- 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0xC0, 0xC0,
- 0x00, 0x00, 0x00, 0x1B, 0x00, 0x63, 0x63, 0x63,
- 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xF8, 0xF0,
-};
-
-const struct fb_font_desc font_italic = {
- .name = "NetSurf Italic",
- .width = 8,
- .height = 16,
- .encoding = "CP1252",
- .data = fontdata_italic,
-};
-
-
-static const uint32_t fontdata_italic_bold[FONTDATAMAX] = {
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x1C, 0x1C, 0x1C,
- 0x1C, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x36, 0x36, 0x7F, 0x7F, 0x7F, 0x36, 0x6C,
- 0xFE, 0xFE, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x3E, 0x7F, 0x7B, 0x78, 0x7C, 0x7C,
- 0x3E, 0x1E, 0xDE, 0xFE, 0x7C, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x77, 0x0E,
- 0x3C, 0x70, 0xEE, 0xCE, 0x0E, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x7E, 0x7C, 0x7C, 0x3B, 0xFE,
- 0xFE, 0xEC, 0xEE, 0xFE, 0x74, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x06, 0x0E, 0x1C, 0x1C, 0x38, 0x38, 0x70,
- 0x70, 0x70, 0x38, 0x38, 0x1C, 0x0C, 0x06, 0x00,
- 0x60, 0x30, 0x38, 0x1C, 0x1C, 0x0E, 0x0E, 0x0E,
- 0x1C, 0x1C, 0x38, 0x38, 0x70, 0x60, 0xC0, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x2A, 0x7F, 0x3E, 0x18,
- 0x7C, 0xFE, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7E,
- 0x7E, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x78, 0x70, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
- 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x3C,
- 0x78, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x77, 0x77, 0x77, 0x77, 0xEE,
- 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x1C, 0x3C, 0x3C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x3E, 0x7C,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x1E, 0x3C,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0x76, 0xEC,
- 0xFE, 0xFE, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x7C, 0x7E, 0x0E,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x7C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x07, 0x07, 0x0E, 0x0E, 0x1C,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x7F, 0x3E, 0x7E,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7F, 0x3E,
- 0x0E, 0x0E, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
- 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
- 0x00, 0x18, 0x38, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x1C, 0x70,
- 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00,
- 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x30, 0x38, 0x1C, 0x0E, 0x0E,
- 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x1E, 0x7C,
- 0x70, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7F, 0xFE,
- 0xEC, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x70, 0x70, 0xE0,
- 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0x7E, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x70, 0x7C, 0xF8,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x70, 0x7C, 0xF8,
- 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x70, 0x70, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7E, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x0E,
- 0x0E, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0x70, 0x72, 0x77, 0x7F, 0x7E, 0xF8,
- 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xE0,
- 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x77, 0x7F, 0x7F, 0x7F, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x67, 0x77, 0x77, 0x7F, 0x7F, 0x7E, 0xFE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x77, 0xFE,
- 0xFC, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xFE, 0xFE, 0xFE, 0x7E, 0x06, 0x00, 0x00,
- 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x70, 0x7C, 0x3E,
- 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x3E, 0x1C, 0x38,
- 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x3E, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x7F, 0x07, 0x07, 0x0E, 0x1C, 0x38,
- 0x70, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x3E, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0x78, 0x38,
- 0x1C, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0x7E, 0x0E, 0x0E, 0x0E, 0x0E, 0x1C,
- 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x1C, 0x3E, 0x77, 0x63, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x1C, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0x70, 0x7C, 0x7E, 0x6E,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
- 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x07, 0x07, 0x3F, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
- 0xFE, 0xFC, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x3F, 0x38, 0x38, 0x70, 0x7C, 0x7C,
- 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x1C, 0xFC, 0xF8,
- 0x00, 0x00, 0x70, 0x70, 0x70, 0x7C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x1E, 0x3E, 0x1C,
- 0x1C, 0x38, 0x38, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x1E, 0x3E, 0x0E,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x38, 0x38, 0xF8, 0xF0,
- 0x00, 0x38, 0x38, 0x38, 0x3A, 0x7F, 0x7E, 0x7C,
- 0x70, 0xF8, 0xFC, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x3C, 0x1C, 0x1C, 0x38, 0x38, 0x38,
- 0x38, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0xE0, 0xE0, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x7C, 0x1C, 0x1E, 0x1E,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x7E, 0x70,
- 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3E, 0x70,
- 0x7C, 0x3E, 0x0E, 0x7C, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0x70, 0x7C, 0x7C, 0x70,
- 0xE0, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
- 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0x7E,
- 0x38, 0x7C, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xFE, 0x7E, 0x1C, 0x1C, 0xFC, 0xF8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7E, 0x1E,
- 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0F, 0x1F, 0x1C, 0x1C, 0x1C, 0x78, 0xF0,
- 0x38, 0x38, 0x38, 0x3E, 0x1E, 0x00, 0x00, 0x00,
- 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x78, 0x7C, 0x1C, 0x1C, 0x1C, 0x0F, 0x1E,
- 0x38, 0x38, 0x38, 0xF8, 0xF0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x66, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
- 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
- 0x00, 0x06, 0x1F, 0x3B, 0x70, 0xFE, 0x70, 0xF8,
- 0xE0, 0xE0, 0xEE, 0xFC, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x38, 0x30, 0x60, 0x00,
- 0x00, 0x1F, 0x3F, 0x38, 0x38, 0x70, 0x7C, 0x7C,
- 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xCC, 0x98, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x7F, 0x7F, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
- 0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x7F, 0x1C, 0xFE,
- 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
- 0x00, 0x3E, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x1C,
- 0x38, 0x70, 0xE0, 0xDB, 0x1B, 0x00, 0x00, 0x00,
- 0x77, 0x3E, 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x7C,
- 0x3E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x1C,
- 0x38, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00,
- 0x00, 0x3F, 0x7F, 0x77, 0x77, 0x77, 0x77, 0xEF,
- 0xEE, 0xEE, 0xEE, 0xFF, 0x7F, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x77, 0x3E, 0x00, 0x7F, 0x7F, 0x07, 0x0E, 0x1C,
- 0x38, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x36, 0x36, 0x36, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x36, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x79, 0x7F, 0x2F, 0x29, 0x29, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x3E, 0x1C, 0x00, 0x1F, 0x3E, 0x70,
- 0x7C, 0x3E, 0x0E, 0x7C, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x38,
- 0x1C, 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x7F, 0xFA,
- 0xDE, 0xDE, 0xFC, 0xFE, 0x6E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x3E, 0x1C, 0x00, 0x7F, 0x7E, 0x1E,
- 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x00, 0x77, 0x77, 0x77, 0x77, 0x3E,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x7F, 0xD6,
- 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
- 0x00, 0x1E, 0x3F, 0x3B, 0x38, 0x7E, 0x7E, 0xFC,
- 0x70, 0x76, 0xFE, 0xFE, 0xDC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x3E, 0xFE,
- 0xFE, 0xFE, 0xFE, 0x7C, 0xEE, 0xEE, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x77, 0x3E, 0x1C, 0xFE,
- 0x38, 0xFE, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x00,
- 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3E, 0x3E, 0x38, 0x1E, 0x3F, 0x66,
- 0x7E, 0x3C, 0x0E, 0x3E, 0x3E, 0x3C, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x61, 0x4D, 0x5D, 0x51, 0xA1,
- 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0xFC,
- 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
- 0x7C, 0xF8, 0xF8, 0x7C, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x03, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3F, 0x61, 0x59, 0x5D, 0x55, 0xB9,
- 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0x66, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x1C, 0x7F, 0x7F, 0x7F, 0x38,
- 0x38, 0x00, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x78, 0x7C, 0x0C, 0x3C, 0x78, 0xC0,
- 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x78, 0x7C, 0x0C, 0x18, 0x0C, 0xF8,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1C, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xC0,
- 0x00, 0x00, 0x00, 0x3F, 0x6D, 0x6D, 0x6D, 0x7A,
- 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x38,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0xF0,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0x44, 0x7C, 0x38, 0x00, 0xF8,
- 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
- 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x70, 0x31, 0x33, 0x7F, 0x1C,
- 0x38, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
- 0x00, 0x00, 0x30, 0x70, 0x31, 0x33, 0x7F, 0x1C,
- 0x38, 0x70, 0xFC, 0xC6, 0x0C, 0x18, 0x1E, 0x00,
- 0x00, 0x00, 0x70, 0x18, 0x31, 0x1B, 0x77, 0x1C,
- 0x3A, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
- 0x00, 0x00, 0x0E, 0x0E, 0x0E, 0x00, 0x0E, 0x1C,
- 0x7C, 0xF8, 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00,
- 0x00, 0x70, 0x38, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x0E, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x36, 0x63, 0x08, 0x1C, 0x3E, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x6E, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
- 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x08, 0x1C, 0x3E, 0x76, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x36, 0x1C, 0x1C, 0x3E, 0x76, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x77, 0x7F, 0xFF,
- 0xFE, 0xEE, 0xEF, 0xEF, 0xEF, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x70, 0x70, 0xE0,
- 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x0E, 0x6E, 0x7C,
- 0x00, 0x38, 0x1C, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x77, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x7F, 0x7F, 0x70, 0x70, 0xF8,
- 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x36, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x77, 0x77, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x7C, 0x7E, 0x77, 0x77, 0x76, 0xFE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x6E, 0x00, 0x77, 0x77, 0x76, 0xF6,
- 0xFE, 0xDE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x1C, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x77, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x6E, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x3E, 0x7F, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x76, 0x7C,
- 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x3D, 0x7E, 0x77, 0x77, 0x77, 0x7E, 0xFE,
- 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x38, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x77, 0x00, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
- 0x7C, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x70, 0x7E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
- 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xC0, 0x00,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x76, 0xDC, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
- 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x3A, 0x3F, 0x3F, 0x1A,
- 0x7E, 0xFE, 0xD8, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0xFE,
- 0xEE, 0xE0, 0xEE, 0xFE, 0x7C, 0x1C, 0x7E, 0x7C,
- 0x00, 0x00, 0x38, 0x1C, 0x00, 0x3E, 0x7F, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3E, 0x7F, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x3E, 0x7F, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x00, 0x3E, 0x7F, 0xEE,
- 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x00, 0x1C, 0x1C, 0x38,
- 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0x3E, 0x7C, 0x7E, 0x3F, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x7F, 0x6E, 0x00, 0x7E, 0x7F, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x3B, 0x7F, 0x6E, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x00, 0x3C, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0xFE,
- 0xFE, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x7E, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x70, 0x38, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1C, 0x38, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x77, 0x77, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
- 0x00, 0x00, 0x70, 0x70, 0x7E, 0x7F, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0,
- 0x00, 0x00, 0x77, 0x77, 0x00, 0x77, 0x76, 0xEE,
- 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
-};
-
-const struct fb_font_desc font_italic_bold = {
- .name = "NetSurf Italic Bold",
- .width = 8,
- .height = 16,
- .encoding = "CP1252",
- .data = fontdata_italic_bold,
-};
-
-
-static const uint32_t fontdata_regular[FONTDATAMAX] = {
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x6C, 0x6C, 0x6C, 0xFE, 0xFE, 0x6C, 0x6C,
- 0xFE, 0xFE, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x7C, 0xFE, 0xD6, 0xD0, 0xF0, 0x7C,
- 0x1E, 0x16, 0xD6, 0xFE, 0x7C, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
- 0x38, 0x70, 0xE6, 0xC6, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0xF8, 0xD8, 0xD8, 0xF8, 0x72, 0xFE,
- 0xDE, 0xCC, 0xCC, 0xFE, 0x7A, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x0E, 0x1C, 0x18, 0x38, 0x30, 0x30, 0x30,
- 0x30, 0x38, 0x18, 0x1C, 0x0E, 0x06, 0x00, 0x00,
- 0x60, 0x70, 0x38, 0x18, 0x1C, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x1C, 0x18, 0x38, 0x70, 0x60, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0x38, 0xFE,
- 0xFE, 0x38, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x7E,
- 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
- 0x38, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6,
- 0xE6, 0xE6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x3E, 0x7C,
- 0xE0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x3C, 0x3C,
- 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x0C, 0x1C, 0x3C, 0x7C, 0xEC, 0xFE,
- 0xFE, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0xFE,
- 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7C, 0xE0, 0xC0, 0xC0, 0xFC, 0xFE,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xC6, 0x0E, 0x0C, 0x1C, 0x18,
- 0x38, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0x7C, 0x7C,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0x7E,
- 0x06, 0x06, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
- 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
- 0x00, 0x18, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0x70,
- 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00,
- 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x70, 0x38, 0x1C, 0x0E, 0x0E,
- 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0x06, 0x1E, 0x3C,
- 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xCE, 0xDE, 0xD6, 0xD6,
- 0xDE, 0xCC, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0xFE,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFC, 0xFC,
- 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0,
- 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xF8, 0xFC, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xF8, 0xF8,
- 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xF8, 0xF8,
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xDE, 0xDE,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xFE,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x0C, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0xC0, 0xC6, 0xCE, 0xDC, 0xF8, 0xF0, 0xE0,
- 0xF0, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
- 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xEE, 0xFE, 0xFE, 0xFE, 0xD6,
- 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xE6, 0xE6, 0xF6, 0xF6, 0xDE,
- 0xDE, 0xCE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0xFC,
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xD6, 0xDE, 0xFE, 0x7C, 0x06, 0x00, 0x00,
- 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFC, 0xFC,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xFC, 0x7E,
- 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xEE,
- 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6,
- 0xD6, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C, 0x38, 0x38,
- 0x7C, 0xEE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C, 0x38,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0xFE, 0x0E, 0x0C, 0x1C, 0x18, 0x38,
- 0x30, 0x70, 0x60, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x3E, 0x3E, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x30, 0x30, 0x30, 0x3E, 0x3E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x70,
- 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0x7C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
- 0x0C, 0x0C, 0x0C, 0x7C, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
- 0x00, 0x00, 0x30, 0x30, 0x18, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x06,
- 0x7E, 0xFE, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x06, 0x06, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
- 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x1E, 0x3E, 0x30, 0x30, 0x30, 0x78, 0x78,
- 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0x7E, 0x7C,
- 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xDC, 0xFE, 0xE6,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x38, 0x18,
- 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x1C, 0x0C,
- 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x7C, 0x78,
- 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCE, 0xDC,
- 0xF8, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xFE,
- 0xD6, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xFE, 0xE6,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0x07, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xFE, 0xE0,
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC0,
- 0xFC, 0x7C, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x30, 0x30, 0x30, 0x7C, 0xFC, 0x30,
- 0x30, 0x30, 0x30, 0x3E, 0x1E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
- 0xD6, 0xD6, 0xFE, 0xFE, 0x6C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xEE,
- 0x7C, 0x7C, 0xEE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFE, 0xFC,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x0E,
- 0x3C, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0E, 0x1E, 0x18, 0x18, 0x18, 0x70, 0x70,
- 0x18, 0x18, 0x18, 0x1E, 0x0E, 0x00, 0x00, 0x00,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
- 0x00, 0x70, 0x78, 0x18, 0x18, 0x18, 0x0E, 0x0E,
- 0x18, 0x18, 0x18, 0x78, 0x70, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
- 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
- 0x00, 0x18, 0x3C, 0x66, 0x60, 0xFC, 0x60, 0xF8,
- 0x60, 0x60, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00,
- 0x00, 0x1E, 0x3E, 0x30, 0x30, 0x30, 0x78, 0x78,
- 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x60, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x66, 0x66, 0x22, 0x44, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x18, 0x7E,
- 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C,
- 0x18, 0x30, 0x60, 0xDB, 0x9B, 0x00, 0x00, 0x00,
- 0xC6, 0x7C, 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xFC,
- 0x7E, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1C,
- 0x38, 0x30, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00,
- 0x00, 0x7F, 0xFF, 0xCC, 0xCC, 0xCC, 0xCF, 0xCF,
- 0xCC, 0xCC, 0xCC, 0xFF, 0x7F, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0xC6, 0x7C, 0x00, 0xFE, 0xFE, 0x06, 0x0C, 0x18,
- 0x30, 0x60, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x20, 0x30, 0x30, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x24, 0x48, 0x6C, 0x6C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x36, 0x36, 0x12, 0x24, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x32, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF1, 0xFB, 0x5F, 0x55, 0x51, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0x6C, 0x38, 0x00, 0x7E, 0xFE, 0xC0,
- 0xFC, 0x7C, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38,
- 0x1C, 0x0C, 0x1C, 0x38, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xDA,
- 0xDE, 0xDE, 0xD8, 0xFE, 0x6E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
- 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0xC6, 0x6C, 0x38, 0x00, 0xFE, 0xFE, 0x0E,
- 0x3C, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C,
- 0x38, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0xFE, 0xD6,
- 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
- 0x00, 0x3C, 0x7E, 0x66, 0x60, 0x60, 0xF8, 0xF8,
- 0x60, 0x60, 0xE6, 0xFE, 0xDC, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x7E,
- 0x66, 0x66, 0x7E, 0x3C, 0x66, 0x66, 0x00, 0x00,
- 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E,
- 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
- 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7C, 0x60, 0x60, 0x3C, 0x7E, 0x66,
- 0x7E, 0x3C, 0x06, 0x06, 0x3E, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0xC3, 0x99, 0xBD, 0xA5, 0xA1,
- 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, 0xF8,
- 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36,
- 0x6C, 0xD8, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x7E, 0x7E, 0x06, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0xC3, 0xB9, 0xBD, 0xA5, 0xB9,
- 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x78, 0xFC, 0xCC, 0xFC, 0x78, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x7E, 0x18,
- 0x18, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x78, 0xF0, 0xC0,
- 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x30, 0x18, 0xF8,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66,
- 0x66, 0x66, 0x66, 0x7E, 0x7C, 0x60, 0x60, 0xC0,
- 0x00, 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B,
- 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
- 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0xE0, 0x60, 0x60, 0x60, 0xF0,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x70, 0xF8, 0x88, 0xF8, 0x70, 0x00, 0xF8,
- 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
- 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0xC0, 0x42, 0x46, 0xEC, 0x18,
- 0x30, 0x64, 0xCC, 0x94, 0x3E, 0x04, 0x04, 0x00,
- 0x00, 0x00, 0x40, 0xC0, 0x42, 0x46, 0xEC, 0x18,
- 0x30, 0x60, 0xDC, 0x82, 0x0C, 0x10, 0x1E, 0x00,
- 0x00, 0x00, 0xE0, 0x10, 0x62, 0x16, 0xEC, 0x18,
- 0x30, 0x64, 0xCC, 0x96, 0x3E, 0x04, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18,
- 0x78, 0xF0, 0xC0, 0xC6, 0xC6, 0xFE, 0x7C, 0x00,
- 0x00, 0x60, 0x30, 0x00, 0x10, 0x38, 0x6C, 0xC6,
- 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0x10, 0x38, 0x6C, 0xC6,
- 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x44, 0x10, 0x38, 0x6C, 0xC6,
- 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0x10, 0x38, 0x6C, 0xC6,
- 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x6C, 0x6C, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xFE,
- 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x38, 0x38, 0x6C, 0xC6, 0xFE,
- 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x1F, 0x3F, 0x7C, 0xEC, 0xCC, 0xFE, 0xFE,
- 0xCC, 0xCC, 0xCC, 0xCF, 0xCF, 0x00, 0x00, 0x00,
- 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0,
- 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x0E, 0x66, 0x3C,
- 0x00, 0x30, 0x18, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
- 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
- 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
- 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x6C, 0x6C, 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xF0,
- 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
- 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x24, 0x18, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x66, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x66, 0x66, 0xF6,
- 0x66, 0x66, 0x6E, 0x7C, 0x78, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0xC6, 0xC6, 0xE6, 0xF6,
- 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x30, 0x18, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x6C, 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xEE, 0x7C,
- 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x7E, 0xFE, 0xC6, 0xC6, 0xCE, 0xCE, 0xD6,
- 0xD6, 0xE6, 0xE6, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x30, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x7E,
- 0x3C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x60, 0x7C, 0x7E, 0x66, 0x66,
- 0x7E, 0x7C, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x3C, 0x7E, 0x66, 0x66, 0x66, 0x7E, 0x7C,
- 0x66, 0x66, 0x66, 0x7E, 0x7C, 0xE0, 0xC0, 0x00,
- 0x00, 0x00, 0x30, 0x18, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xCE, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x30, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x76, 0xDC, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x38, 0x6C, 0x38, 0x00, 0x7E, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0x1A,
- 0x3E, 0x7E, 0xD8, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE,
- 0xC6, 0xC0, 0xC6, 0xFE, 0x7C, 0x18, 0x7C, 0x78,
- 0x00, 0x00, 0x30, 0x18, 0x00, 0x7C, 0xFE, 0xC6,
- 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
- 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
- 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
- 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x3C, 0x66, 0x00, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x66, 0x66, 0x00, 0x18, 0x18, 0x18,
- 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x6C, 0x7C, 0xF8, 0xDC, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xFE, 0xDC, 0x00, 0xFC, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E,
- 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x7C, 0xFE, 0xCE,
- 0xD6, 0xD6, 0xE6, 0xFE, 0x7C, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFC, 0xF8,
- 0x00, 0x00, 0x60, 0x60, 0x60, 0x7C, 0x7E, 0x66,
- 0x66, 0x66, 0x66, 0x7E, 0x7C, 0x60, 0x60, 0x60,
- 0x00, 0x00, 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
- 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFE, 0xFC,
-};
-
-const struct fb_font_desc font_regular = {
- .name = "NetSurf Regular",
- .width = 8,
- .height = 16,
- .encoding = "CP1252",
- .data = fontdata_regular,
-};
+#endif
+ }
+
+ free(buffer);
+ return( 1 );
+}
+
+/* ------------------*/
+/* Fontdata */
+/* ------------------*/
+
+static const uint32_t fontdata_bold[FONTDATAMAX] = {
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6C, 0x6C, 0xFE, 0xFE, 0xFE, 0x6C, 0x6C,
+ 0xFE, 0xFE, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x7C, 0xFE, 0xF6, 0xF0, 0xF8, 0x7C,
+ 0x3E, 0x1E, 0xDE, 0xFE, 0x7C, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE6, 0xEE, 0x1C,
+ 0x38, 0x70, 0xEE, 0xCE, 0x0E, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xF8, 0xF8, 0xF8, 0xF8, 0x76, 0xFE,
+ 0xFE, 0xEC, 0xEE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x0C, 0x1C, 0x38, 0x38, 0x70, 0x70, 0x70,
+ 0x70, 0x70, 0x38, 0x38, 0x1C, 0x0C, 0x06, 0x00,
+ 0x60, 0x30, 0x38, 0x1C, 0x1C, 0x0E, 0x0E, 0x0E,
+ 0x0E, 0x0E, 0x1C, 0x1C, 0x38, 0x30, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x54, 0xFE, 0x7C, 0x38,
+ 0x7C, 0xFE, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0xFE,
+ 0xFE, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x78, 0x70, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
+ 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x1E, 0x3C,
+ 0x78, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x38, 0x78, 0x78, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x7E, 0xFC,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x3C, 0x3C,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0C, 0x1C, 0x3C, 0x7C, 0x6C, 0xEC,
+ 0xFE, 0xFE, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xFC, 0xFE, 0x0E,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFC, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0x0E, 0x0E, 0x1C, 0x1C, 0x1C,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0x7E,
+ 0x0E, 0x0E, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
+ 0x00, 0x18, 0x38, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70,
+ 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00,
+ 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x70, 0x38, 0x1C, 0x0E,
+ 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0x0E, 0x0E, 0x3E, 0x7C,
+ 0x70, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
+ 0xEC, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xFC, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xF8, 0xFC, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xF8, 0xF8,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xF8, 0xF8,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xE0, 0xE0, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
+ 0x0E, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xE0, 0xE6, 0xEE, 0xFE, 0xFC, 0xF8, 0xF0,
+ 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
+ 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xFE, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0xCE, 0xEE, 0xEE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFE,
+ 0xFC, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xFE, 0xFE, 0xFE, 0x7E, 0x06, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xE0, 0xFC, 0x7E,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x38,
+ 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0x0E, 0x0E, 0x1C, 0x38, 0x38,
+ 0x70, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x3E, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x3E, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xF0, 0x78,
+ 0x3C, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x38, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x7E, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x70, 0xF8, 0xF8,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x7E, 0x7C,
+ 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0x00, 0x78, 0x78, 0x38,
+ 0x38, 0x38, 0x38, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x3C, 0x3C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x7C, 0x78,
+ 0x00, 0xE0, 0xE0, 0xE0, 0xE6, 0xEE, 0xFE, 0xFC,
+ 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0x78, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x0F, 0x0F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xFE, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xE0,
+ 0xFC, 0x7E, 0x0E, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x30, 0x70, 0x70, 0xFC, 0xFC, 0x70,
+ 0x70, 0x70, 0x70, 0x7E, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
+ 0x7C, 0x7C, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0x0E, 0xFE, 0xFC,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x1E,
+ 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3E, 0x38, 0x38, 0x38, 0xF0, 0xF0,
+ 0x38, 0x38, 0x38, 0x3E, 0x1E, 0x00, 0x00, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
+ 0x00, 0xF0, 0xF8, 0x38, 0x38, 0x38, 0x1E, 0x1E,
+ 0x38, 0x38, 0x38, 0xF8, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0xFE, 0xFE, 0xCC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
+ 0x00, 0x38, 0x7C, 0xEE, 0xE0, 0xFC, 0xE0, 0xF8,
+ 0xE0, 0xE0, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x38, 0x18, 0x30, 0x00,
+ 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x70, 0xF8, 0xF8,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0xF0, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xEE, 0xEE, 0x66, 0xCC, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x38, 0xFE,
+ 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
+ 0x00, 0x7C, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
+ 0x38, 0x70, 0xE0, 0xDB, 0x1B, 0x00, 0x00, 0x00,
+ 0xEE, 0x7C, 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xFC,
+ 0x7E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
+ 0x38, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF,
+ 0xEE, 0xEE, 0xEE, 0xFF, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0xEE, 0x7C, 0x00, 0xFE, 0xFE, 0x0E, 0x1E, 0x3C,
+ 0x78, 0xF0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x6C, 0x6C, 0x6C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x36, 0x36, 0x6C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E,
+ 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7B, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF1, 0xFB, 0x5F, 0x55, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0x7C, 0x38, 0x00, 0x7E, 0xFE, 0xE0,
+ 0xFC, 0x7E, 0x0E, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x38,
+ 0x1C, 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFA,
+ 0xDE, 0xDE, 0xFC, 0xFE, 0x6E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0x7C, 0x38, 0x00, 0xFE, 0xFE, 0x1E,
+ 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0x7C,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0xFE, 0xD6,
+ 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
+ 0x00, 0x3C, 0x7E, 0x76, 0x70, 0xFC, 0xFC, 0xFC,
+ 0x70, 0x76, 0xFE, 0xFE, 0xDC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0x7C, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0x7C, 0xEE, 0xEE, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0xFE,
+ 0x38, 0xFE, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7C, 0x7C, 0x70, 0x3C, 0x7E, 0x66,
+ 0x7E, 0x3C, 0x0E, 0x3E, 0x3E, 0x3C, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0xC3, 0x99, 0xBD, 0xA5, 0xA1,
+ 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0xFC,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
+ 0x7C, 0xF8, 0xF8, 0x7C, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x06, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0xC3, 0xB9, 0xBD, 0xA5, 0xB9,
+ 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0xFC, 0xCC, 0xFC, 0x78, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0xFE, 0xFE, 0xFE, 0x38,
+ 0x38, 0x00, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x78, 0xF0, 0xC0,
+ 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x30, 0x18, 0xF8,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xC0,
+ 0x00, 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0xE0, 0x60, 0x60, 0x60, 0xF0,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xF8, 0x88, 0xF8, 0x70, 0x00, 0xF8,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
+ 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0xE0, 0x62, 0x66, 0xFE, 0x1C,
+ 0x38, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
+ 0x00, 0x00, 0x60, 0xE0, 0x62, 0x66, 0xFE, 0x1C,
+ 0x38, 0x70, 0xFC, 0xC6, 0x0C, 0x18, 0x1E, 0x00,
+ 0x00, 0x00, 0xE0, 0x30, 0x62, 0x36, 0xEE, 0x1C,
+ 0x3A, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
+ 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x1C, 0x1C,
+ 0x7C, 0xF8, 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00,
+ 0x00, 0xE0, 0x70, 0x00, 0x10, 0x38, 0x7C, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x10, 0x38, 0x7C, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0xC6, 0x10, 0x38, 0x7C, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0x10, 0x38, 0x7C, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0x10, 0x38, 0x7C, 0xEE, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x38, 0x38, 0x7C, 0xEE, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x3F, 0x7F, 0xFE, 0xEE, 0xFF, 0xFF,
+ 0xFE, 0xEE, 0xEF, 0xEF, 0xEF, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x0E, 0x6E, 0x7C,
+ 0x00, 0x70, 0x38, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x38, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xEE, 0x00, 0xFE, 0xFE, 0xE0, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0xEE, 0xEE, 0x00, 0xFE, 0xFE, 0xE0, 0xE0, 0xF8,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x38, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x38, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xEE, 0xEE, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0xFC, 0xEE, 0xEE, 0xEE, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0xEE, 0xEE, 0xEE, 0xF6,
+ 0xFE, 0xDE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x38, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x38, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xEE, 0x7C,
+ 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x7A, 0xFC, 0xEE, 0xEE, 0xEE, 0xFE, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x70, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE, 0xEE,
+ 0x7C, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xC0, 0x00,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xDC, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x38, 0x00, 0x7C, 0x7E, 0x0E,
+ 0x7E, 0xFE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0x7E, 0x1A,
+ 0x7E, 0xFE, 0xD8, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE,
+ 0xEE, 0xE0, 0xEE, 0xFE, 0x7C, 0x1C, 0x7E, 0x7C,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xEC, 0x7C, 0xF8, 0xFC, 0x7E, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xFE, 0xDC, 0x00, 0xFC, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xE0, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x70, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0xFE,
+ 0xFE, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x7C, 0xFE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0xE0, 0x70, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x70, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
+ 0x00, 0x00, 0xE0, 0xE0, 0xFC, 0xFE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0xEE, 0xEE, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
+};
+
+const struct fb_font_desc font_bold = {
+ .name = "NetSurf Bold",
+ .width = 8,
+ .height = 16,
+ .encoding = "CP1252",
+ .data = fontdata_bold,
+};
+
+
+static const uint32_t fontdata_italic[FONTDATAMAX] = {
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x36, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x1B, 0x7F, 0x7F, 0x36, 0x36,
+ 0xFF, 0xFF, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x3E, 0x7F, 0x6B, 0x68, 0x78, 0x3C,
+ 0x1E, 0x16, 0xD6, 0xFE, 0x7C, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
+ 0x38, 0x70, 0xE6, 0xC6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x36, 0x36, 0x3C, 0x39, 0x7F,
+ 0x6E, 0xCC, 0xCC, 0xFE, 0x7A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x0E, 0x1C, 0x38, 0x30, 0x60, 0x60, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x70, 0x30, 0x00,
+ 0x18, 0x1C, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x0C, 0x0C, 0x18, 0x38, 0x70, 0xE0, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x1C, 0x7F,
+ 0xFE, 0x38, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E,
+ 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x38, 0x70, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
+ 0x38, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x67, 0x6E, 0x76,
+ 0xE6, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x0E, 0x1E, 0x3C, 0x0C, 0x0C, 0x18,
+ 0x18, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x03, 0x07, 0x1E, 0x7C,
+ 0x60, 0xC0, 0xC0, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x03, 0x06, 0x1E, 0x1E,
+ 0x06, 0x06, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1E, 0x36, 0x7F,
+ 0x7F, 0x0C, 0x0C, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x1F, 0x30, 0x30, 0x7C, 0x7E, 0x06,
+ 0x06, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x1F, 0x38, 0x30, 0x60, 0x7C, 0x7E,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0x7F, 0x63, 0x03, 0x06, 0x06, 0x0C,
+ 0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x33, 0x1E, 0x7C,
+ 0x66, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x63, 0x63, 0x7E, 0x3E,
+ 0x06, 0x0C, 0x1C, 0xF8, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0x70,
+ 0x70, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7C, 0x00, 0x00,
+ 0x7C, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x0E,
+ 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x03, 0x07, 0x0E,
+ 0x1C, 0x18, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x63, 0x6F, 0x6B, 0x6B,
+ 0xCF, 0xCE, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x66, 0x7E, 0x7E,
+ 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x3F, 0x33, 0x63, 0x63, 0x7E, 0x7C,
+ 0x66, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x60,
+ 0x60, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x3F, 0x33, 0x63, 0x63, 0x63, 0x63,
+ 0xC3, 0xC6, 0xCE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x60, 0x7C, 0x7C,
+ 0x60, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x60, 0x7C, 0x7C,
+ 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x6E,
+ 0x6E, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x33, 0x63, 0x66, 0x7E, 0x7E,
+ 0xC6, 0xC6, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0x3F, 0x0C, 0x0C, 0x18, 0x18, 0x18,
+ 0x18, 0x30, 0x30, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06,
+ 0x06, 0x0C, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x33, 0x36, 0x7C, 0x78, 0x70,
+ 0x78, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60,
+ 0x60, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x3F, 0x3F, 0x7F, 0x6B, 0x66,
+ 0x66, 0xC6, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x3B, 0x3B, 0x7B, 0x7E, 0x6E,
+ 0x6E, 0xCE, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x63, 0x66, 0x66,
+ 0xC6, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x3F, 0x33, 0x33, 0x67, 0x7E, 0x7C,
+ 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x33, 0x63, 0x66, 0x66,
+ 0xC6, 0xF6, 0xDC, 0xF8, 0x7C, 0x0C, 0x00, 0x00,
+ 0x00, 0x3E, 0x3F, 0x33, 0x33, 0x63, 0x7E, 0x7C,
+ 0x6E, 0xC6, 0xC6, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x60, 0x60, 0x7C, 0x3E,
+ 0x06, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x18, 0x18, 0x30, 0x30, 0x30,
+ 0x30, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x66, 0x66,
+ 0x66, 0xC6, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x63, 0x66,
+ 0x66, 0x6C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x33, 0x33, 0x33, 0x63, 0x63, 0x6B,
+ 0x6B, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x63, 0x63, 0x63, 0x77, 0x3E, 0x1C, 0x38,
+ 0x7C, 0xEE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x3C, 0x18,
+ 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x03, 0x07, 0x0E, 0x0C, 0x18,
+ 0x38, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x0F, 0x0C, 0x0C, 0x18, 0x18, 0x18,
+ 0x18, 0x30, 0x30, 0x3E, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x70,
+ 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x1F, 0x03, 0x03, 0x06, 0x06, 0x06,
+ 0x06, 0x0C, 0x0C, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0E, 0x1F, 0x3B, 0x63, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00,
+ 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x06,
+ 0x7E, 0xFC, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x30, 0x30, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
+ 0xC0, 0xC0, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x03, 0x06, 0x3E, 0x7E, 0x66,
+ 0xC6, 0xCC, 0xCC, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
+ 0xFE, 0xFC, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x0F, 0x0C, 0x18, 0x7E, 0x7E, 0x30,
+ 0x30, 0x30, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xFC, 0xF8,
+ 0x00, 0x00, 0x30, 0x30, 0x30, 0x6E, 0x7F, 0x73,
+ 0x63, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x1C, 0x3C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x00, 0x0E, 0x1E, 0x06,
+ 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xF0,
+ 0x00, 0x30, 0x30, 0x30, 0x33, 0x67, 0x6E, 0x7C,
+ 0x7C, 0xDC, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x0E, 0x06, 0x06, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x7F, 0x7F,
+ 0x6B, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x7E, 0x76,
+ 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0x66,
+ 0x66, 0xCC, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3F, 0x33,
+ 0x63, 0x66, 0x66, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x0C, 0x0E, 0x0E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x70,
+ 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0x60,
+ 0x7C, 0x3E, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x3F, 0x3F, 0x18,
+ 0x18, 0x30, 0x30, 0x3E, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x66,
+ 0x66, 0x66, 0xCC, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66,
+ 0xCC, 0xCC, 0xF8, 0x70, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63,
+ 0x6B, 0xDE, 0xFE, 0xFE, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x77,
+ 0x3E, 0x7C, 0xEE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xFC, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x07,
+ 0x1E, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x0E, 0x0C, 0x0C, 0x18, 0x70, 0x70,
+ 0x18, 0x18, 0x30, 0x38, 0x1C, 0x00, 0x00, 0x00,
+ 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x0C,
+ 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x00,
+ 0x00, 0x38, 0x1C, 0x0C, 0x18, 0x18, 0x0E, 0x0E,
+ 0x18, 0x30, 0x30, 0x70, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
+ 0x00, 0x06, 0x0F, 0x1B, 0x18, 0x7E, 0x30, 0x7C,
+ 0x60, 0x60, 0x6C, 0x3C, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x10, 0x20, 0x00,
+ 0x00, 0x07, 0x0F, 0x0C, 0x18, 0x7E, 0x7E, 0x30,
+ 0x30, 0x30, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x66, 0x66, 0x44, 0x88, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x06, 0x1F, 0x3F, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x06, 0x1F, 0x3F, 0x0C, 0x3F,
+ 0x3F, 0x18, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
+ 0x00, 0x3E, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x06,
+ 0x0C, 0x30, 0x60, 0xDB, 0x9B, 0x00, 0x00, 0x00,
+ 0x63, 0x3E, 0x00, 0x1E, 0x3F, 0x33, 0x60, 0x7C,
+ 0x3E, 0x06, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E,
+ 0x1C, 0x30, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x3F, 0x33, 0x33, 0x66, 0x67, 0x67,
+ 0x66, 0xCC, 0xCC, 0xFF, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x63, 0x3E, 0x00, 0x7F, 0x7F, 0x03, 0x07, 0x0E,
+ 0x18, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x08, 0x10, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x04, 0x08, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x09, 0x12, 0x1B, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x09, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x3F,
+ 0x3F, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x19, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFB, 0xFF, 0x55, 0xA2, 0xA2, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x63, 0x36, 0x1C, 0x00, 0x3F, 0x7F, 0x60,
+ 0x7C, 0x3E, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
+ 0x0E, 0x0C, 0x1C, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x7F, 0x6D,
+ 0x6F, 0xDE, 0xD8, 0xFE, 0x6E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x63, 0x36, 0x1C, 0x00, 0x7F, 0x7F, 0x07,
+ 0x1E, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x3C,
+ 0x18, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x04, 0x3E, 0x7F, 0x6B,
+ 0x68, 0xD0, 0xD6, 0xFE, 0x7C, 0x20, 0x20, 0x00,
+ 0x00, 0x0F, 0x1F, 0x19, 0x18, 0x30, 0x7C, 0x7C,
+ 0x30, 0x60, 0xE6, 0xFE, 0xDC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x19, 0x33, 0x1E, 0x3F,
+ 0x33, 0x66, 0x7E, 0x3C, 0x66, 0xCC, 0x00, 0x00,
+ 0x00, 0x00, 0x19, 0x19, 0x19, 0x1E, 0x0C, 0x3F,
+ 0x0C, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x0C, 0x0C, 0x00,
+ 0x00, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x0E, 0x18, 0x18, 0x3C, 0x7E, 0x66,
+ 0x7E, 0x3C, 0x18, 0x18, 0x70, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x33, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1F, 0x21, 0x21, 0x4D, 0x51, 0x51,
+ 0x91, 0xA1, 0x9A, 0x82, 0x7C, 0x38, 0x00, 0x00,
+ 0x00, 0x1C, 0x02, 0x1E, 0x22, 0x3C, 0x00, 0x7C,
+ 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B,
+ 0x36, 0xD8, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1E, 0x3E, 0x06, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1F, 0x21, 0x49, 0x55, 0x55, 0x59,
+ 0x99, 0xA5, 0xA5, 0x82, 0x7E, 0x78, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x3F, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x3F, 0x3F, 0x0C,
+ 0x0C, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3C, 0x3E, 0x06, 0x3C, 0x78, 0x60,
+ 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3C, 0x3E, 0x06, 0x18, 0x0C, 0x7C,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33,
+ 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0xC0, 0x80,
+ 0x00, 0x00, 0x00, 0x3F, 0x6F, 0xDB, 0xDB, 0x7B,
+ 0x1B, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
+ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x18, 0x30, 0x30, 0x78,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x1E, 0x22, 0x3C, 0x18, 0x00, 0x3C,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
+ 0x36, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x10, 0x23, 0x76, 0x0C,
+ 0x18, 0x64, 0xCC, 0x94, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x10, 0x23, 0x76, 0x0C,
+ 0x18, 0x60, 0xDC, 0x82, 0x1C, 0x20, 0x3C, 0x00,
+ 0x00, 0x00, 0x38, 0x04, 0x18, 0x0B, 0x76, 0x0C,
+ 0x18, 0x64, 0xCC, 0x96, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0C, 0x0C,
+ 0x3C, 0x70, 0xC0, 0xC6, 0xC6, 0xFC, 0x78, 0x00,
+ 0x00, 0x18, 0x0C, 0x00, 0x04, 0x1C, 0x36, 0x63,
+ 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x06, 0x00, 0x04, 0x1C, 0x36, 0x63,
+ 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1B, 0x11, 0x04, 0x1C, 0x36, 0x63,
+ 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x37, 0x00, 0x04, 0x1C, 0x36, 0x63,
+ 0x7F, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x04, 0x0E, 0x36, 0x63, 0x7F,
+ 0x7F, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x11, 0x0E, 0x0E, 0x36, 0x63, 0x7F,
+ 0x7F, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x0F, 0x1F, 0x3B, 0x66, 0x7F, 0x7F,
+ 0x66, 0xCC, 0xCC, 0xCF, 0xCF, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x33, 0x30, 0x60, 0x60, 0x60,
+ 0x60, 0xC0, 0xC6, 0xFE, 0x7C, 0x1C, 0xCC, 0x78,
+ 0x00, 0x0C, 0x06, 0x00, 0x3F, 0x7F, 0x60, 0x78,
+ 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x06, 0x00, 0x3F, 0x7F, 0x60, 0x78,
+ 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1B, 0x00, 0x3F, 0x7F, 0x60, 0x78,
+ 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x1B, 0x1B, 0x00, 0x3F, 0x3F, 0x60, 0x60, 0x78,
+ 0x78, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x06, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x06, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x09, 0x1F, 0x1F, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x00, 0x1F, 0x1F, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1E, 0x1F, 0x1B, 0x33, 0x33, 0x7B,
+ 0x33, 0x66, 0x6E, 0x7C, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x37, 0x00, 0x31, 0x63, 0x73, 0x7B,
+ 0x7F, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x06, 0x00, 0x3E, 0x7F, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x06, 0x00, 0x3E, 0x7F, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x37, 0x00, 0x3E, 0x7F, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x77, 0x3E,
+ 0x1C, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x3E, 0x37, 0x6B, 0x6B, 0x6B, 0xD6,
+ 0xD6, 0xD6, 0xEE, 0x7C, 0xB8, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x06, 0x00, 0x33, 0x33, 0x63, 0x66,
+ 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x06, 0x00, 0x33, 0x33, 0x63, 0x66,
+ 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1B, 0x00, 0x33, 0x33, 0x63, 0x66,
+ 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x1B, 0x1B, 0x00, 0x33, 0x33, 0x63, 0x63, 0x63,
+ 0x66, 0xC6, 0xCE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x0C, 0x00, 0x33, 0x33, 0x66, 0x6E,
+ 0x7C, 0x38, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x1F, 0x3F, 0x33, 0x33,
+ 0x3F, 0x7C, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1F, 0x1B, 0x1B, 0x33, 0x3F, 0x3E,
+ 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0x80, 0x00,
+ 0x00, 0x00, 0x0C, 0x06, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xCE, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1D, 0x37, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3F, 0x7F, 0x63,
+ 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1B, 0x0E, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x3F, 0x0D,
+ 0x1F, 0x7E, 0xD8, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F,
+ 0x63, 0xC0, 0xC6, 0xFE, 0x7C, 0x30, 0xF8, 0xF0,
+ 0x00, 0x00, 0x0C, 0x06, 0x00, 0x3E, 0x7F, 0x63,
+ 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
+ 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
+ 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
+ 0x7F, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x06, 0x00, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x06, 0x00, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x0F, 0x19, 0x00, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1F, 0x3E, 0x37, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x7E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0C, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x3F, 0x37, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x3E, 0x7F, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x3F,
+ 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F, 0x67,
+ 0x6B, 0xD6, 0xE6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x0C, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0C, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0E, 0x1B, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x06, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xF8, 0xF0,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x3E, 0x3F, 0x33,
+ 0x33, 0x66, 0x66, 0x7E, 0x7C, 0xC0, 0xC0, 0xC0,
+ 0x00, 0x00, 0x00, 0x1B, 0x00, 0x63, 0x63, 0x63,
+ 0x63, 0xC6, 0xC6, 0xFE, 0x7E, 0x0C, 0xF8, 0xF0,
+};
+
+const struct fb_font_desc font_italic = {
+ .name = "NetSurf Italic",
+ .width = 8,
+ .height = 16,
+ .encoding = "CP1252",
+ .data = fontdata_italic,
+};
+
+
+static const uint32_t fontdata_italic_bold[FONTDATAMAX] = {
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x36, 0x36, 0x7F, 0x7F, 0x7F, 0x36, 0x6C,
+ 0xFE, 0xFE, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x3E, 0x7F, 0x7B, 0x78, 0x7C, 0x7C,
+ 0x3E, 0x1E, 0xDE, 0xFE, 0x7C, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x77, 0x0E,
+ 0x3C, 0x70, 0xEE, 0xCE, 0x0E, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x7E, 0x7C, 0x7C, 0x3B, 0xFE,
+ 0xFE, 0xEC, 0xEE, 0xFE, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x06, 0x0E, 0x1C, 0x1C, 0x38, 0x38, 0x70,
+ 0x70, 0x70, 0x38, 0x38, 0x1C, 0x0C, 0x06, 0x00,
+ 0x60, 0x30, 0x38, 0x1C, 0x1C, 0x0E, 0x0E, 0x0E,
+ 0x1C, 0x1C, 0x38, 0x38, 0x70, 0x60, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x2A, 0x7F, 0x3E, 0x18,
+ 0x7C, 0xFE, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7E,
+ 0x7E, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x78, 0x70, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
+ 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x3C,
+ 0x78, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x77, 0x77, 0x77, 0x77, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x1C, 0x3C, 0x3C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x3E, 0x7C,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x1E, 0x3C,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0x76, 0xEC,
+ 0xFE, 0xFE, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x7C, 0x7E, 0x0E,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7E, 0x70, 0x70, 0x7C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x07, 0x07, 0x0E, 0x0E, 0x1C,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x7F, 0x3E, 0x7E,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7F, 0x3E,
+ 0x0E, 0x0E, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
+ 0x00, 0x18, 0x38, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x1C, 0x70,
+ 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00,
+ 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x38, 0x1C, 0x0E, 0x0E,
+ 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x07, 0x07, 0x1E, 0x7C,
+ 0x70, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7F, 0xFE,
+ 0xEC, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x70, 0x70, 0xE0,
+ 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0x7E, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x70, 0x7C, 0xF8,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x70, 0x70, 0x70, 0x7C, 0xF8,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x70, 0x70, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7E, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x0E,
+ 0x0E, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x70, 0x72, 0x77, 0x7F, 0x7E, 0xF8,
+ 0xF8, 0xFC, 0xFE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x63, 0x77, 0x7F, 0x7F, 0x7F, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x67, 0x77, 0x77, 0x7F, 0x7F, 0x7E, 0xFE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xE6, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x77, 0xFE,
+ 0xFC, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xFE, 0xFE, 0xFE, 0x7E, 0x06, 0x00, 0x00,
+ 0x00, 0x7E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x70, 0x7C, 0x3E,
+ 0x0E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x3E, 0x1C, 0x38,
+ 0x7C, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x3E, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x07, 0x07, 0x0E, 0x1C, 0x38,
+ 0x70, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x3E, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x70, 0x78, 0x38,
+ 0x1C, 0x1E, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x7E, 0x0E, 0x0E, 0x0E, 0x0E, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x1C, 0x3E, 0x77, 0x63, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x1C, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0x70, 0x7C, 0x7E, 0x6E,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x07, 0x07, 0x07, 0x3F, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xFE, 0xFC, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x3F, 0x38, 0x38, 0x70, 0x7C, 0x7C,
+ 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x1C, 0xFC, 0xF8,
+ 0x00, 0x00, 0x70, 0x70, 0x70, 0x7C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x1E, 0x3E, 0x1C,
+ 0x1C, 0x38, 0x38, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x1E, 0x3E, 0x0E,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x38, 0x38, 0xF8, 0xF0,
+ 0x00, 0x38, 0x38, 0x38, 0x3A, 0x7F, 0x7E, 0x7C,
+ 0x70, 0xF8, 0xFC, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x3C, 0x1C, 0x1C, 0x38, 0x38, 0x38,
+ 0x38, 0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0xE0, 0xE0, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x7C, 0x1C, 0x1E, 0x1E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x7E, 0x70,
+ 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3E, 0x70,
+ 0x7C, 0x3E, 0x0E, 0x7C, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0x70, 0x7C, 0x7C, 0x70,
+ 0xE0, 0xE0, 0xE0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
+ 0xFE, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0x7E,
+ 0x38, 0x7C, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xFE, 0x7E, 0x1C, 0x1C, 0xFC, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7E, 0x1E,
+ 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x1F, 0x1C, 0x1C, 0x1C, 0x78, 0xF0,
+ 0x38, 0x38, 0x38, 0x3E, 0x1E, 0x00, 0x00, 0x00,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
+ 0x00, 0x78, 0x7C, 0x1C, 0x1C, 0x1C, 0x0F, 0x1E,
+ 0x38, 0x38, 0x38, 0xF8, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x66, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x00, 0x77, 0x55, 0x55, 0x55, 0x77,
+ 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
+ 0x00, 0x06, 0x1F, 0x3B, 0x70, 0xFE, 0x70, 0xF8,
+ 0xE0, 0xE0, 0xEE, 0xFC, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x38, 0x30, 0x60, 0x00,
+ 0x00, 0x1F, 0x3F, 0x38, 0x38, 0x70, 0x7C, 0x7C,
+ 0x70, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xCC, 0x98, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x7F, 0x7F, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
+ 0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x7F, 0x1C, 0xFE,
+ 0xFE, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00,
+ 0x00, 0x3E, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x1C,
+ 0x38, 0x70, 0xE0, 0xDB, 0x1B, 0x00, 0x00, 0x00,
+ 0x77, 0x3E, 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x7C,
+ 0x3E, 0x0E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x1C,
+ 0x38, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00,
+ 0x00, 0x3F, 0x7F, 0x77, 0x77, 0x77, 0x77, 0xEF,
+ 0xEE, 0xEE, 0xEE, 0xFF, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x77, 0x3E, 0x00, 0x7F, 0x7F, 0x07, 0x0E, 0x1C,
+ 0x38, 0x70, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x36, 0x36, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x7E,
+ 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x79, 0x7F, 0x2F, 0x29, 0x29, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x3E, 0x1C, 0x00, 0x1F, 0x3E, 0x70,
+ 0x7C, 0x3E, 0x0E, 0x7C, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x38,
+ 0x1C, 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x7F, 0xFA,
+ 0xDE, 0xDE, 0xFC, 0xFE, 0x6E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x3E, 0x1C, 0x00, 0x7F, 0x7E, 0x1E,
+ 0x3C, 0x78, 0xF0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x00, 0x77, 0x77, 0x77, 0x77, 0x3E,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x7F, 0xD6,
+ 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
+ 0x00, 0x1E, 0x3F, 0x3B, 0x38, 0x7E, 0x7E, 0xFC,
+ 0x70, 0x76, 0xFE, 0xFE, 0xDC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x3E, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0x7C, 0xEE, 0xEE, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x77, 0x3E, 0x1C, 0xFE,
+ 0x38, 0xFE, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x00,
+ 0x00, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3E, 0x3E, 0x38, 0x1E, 0x3F, 0x66,
+ 0x7E, 0x3C, 0x0E, 0x3E, 0x3E, 0x3C, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x61, 0x4D, 0x5D, 0x51, 0xA1,
+ 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0xFC,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
+ 0x7C, 0xF8, 0xF8, 0x7C, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x03, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3F, 0x61, 0x59, 0x5D, 0x55, 0xB9,
+ 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0x66, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x1C, 0x7F, 0x7F, 0x7F, 0x38,
+ 0x38, 0x00, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x7C, 0x0C, 0x3C, 0x78, 0xC0,
+ 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x7C, 0x0C, 0x18, 0x0C, 0xF8,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1C, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0xC0,
+ 0x00, 0x00, 0x00, 0x3F, 0x6D, 0x6D, 0x6D, 0x7A,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x38,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0xF0,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0x44, 0x7C, 0x38, 0x00, 0xF8,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
+ 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x70, 0x31, 0x33, 0x7F, 0x1C,
+ 0x38, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
+ 0x00, 0x00, 0x30, 0x70, 0x31, 0x33, 0x7F, 0x1C,
+ 0x38, 0x70, 0xFC, 0xC6, 0x0C, 0x18, 0x1E, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x31, 0x1B, 0x77, 0x1C,
+ 0x3A, 0x76, 0xEE, 0xD6, 0x3E, 0x3E, 0x06, 0x00,
+ 0x00, 0x00, 0x0E, 0x0E, 0x0E, 0x00, 0x0E, 0x1C,
+ 0x7C, 0xF8, 0xE0, 0xEE, 0xEE, 0xFE, 0x7C, 0x00,
+ 0x00, 0x70, 0x38, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x0E, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x36, 0x63, 0x08, 0x1C, 0x3E, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x6E, 0x00, 0x08, 0x1C, 0x3E, 0xEE,
+ 0xFE, 0xFE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x08, 0x1C, 0x3E, 0x76, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x36, 0x1C, 0x1C, 0x3E, 0x76, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0x77, 0x7F, 0xFF,
+ 0xFE, 0xEE, 0xEF, 0xEF, 0xEF, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x70, 0x70, 0x70, 0xE0,
+ 0xE0, 0xE0, 0xEE, 0xFE, 0x7C, 0x0E, 0x6E, 0x7C,
+ 0x00, 0x38, 0x1C, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x77, 0x00, 0x7F, 0x7F, 0x70, 0xE0,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x77, 0x77, 0x00, 0x7F, 0x7F, 0x70, 0x70, 0xF8,
+ 0xF8, 0xE0, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x36, 0x1C, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x77, 0x77, 0x00, 0x1C, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7C, 0x7E, 0x77, 0x77, 0x76, 0xFE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x6E, 0x00, 0x77, 0x77, 0x76, 0xF6,
+ 0xFE, 0xDE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x1C, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x77, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x6E, 0x00, 0x3E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x77, 0x77, 0x00, 0x3E, 0x7F, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x76, 0x7C,
+ 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x3D, 0x7E, 0x77, 0x77, 0x77, 0x7E, 0xFE,
+ 0xFE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x38, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x77, 0x00, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x77, 0x76, 0xEE,
+ 0x7C, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x70, 0x7E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xFE, 0xFC, 0xE0, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x7F, 0x77, 0x77, 0x77, 0x7E, 0xFC,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xC0, 0x00,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x7C, 0xEE, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xDC, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xEE, 0xEE, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x38, 0x00, 0x3C, 0x3E, 0x0E,
+ 0x3E, 0x7E, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3A, 0x3F, 0x3F, 0x1A,
+ 0x7E, 0xFE, 0xD8, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0xFE,
+ 0xEE, 0xE0, 0xEE, 0xFE, 0x7C, 0x1C, 0x7E, 0x7C,
+ 0x00, 0x00, 0x38, 0x1C, 0x00, 0x3E, 0x7F, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3E, 0x7F, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x3E, 0x7F, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x00, 0x3E, 0x7F, 0xEE,
+ 0xFE, 0xFE, 0xE0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x1C, 0x00, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x00, 0x1C, 0x1C, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0x3E, 0x7C, 0x7E, 0x3F, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x7F, 0x6E, 0x00, 0x7E, 0x7F, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x3B, 0x7F, 0x6E, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x00, 0x3C, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0xFE,
+ 0xFE, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x7E, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x38, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x38, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x3E, 0x77, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x77, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
+ 0x00, 0x00, 0x70, 0x70, 0x7E, 0x7F, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xFE, 0xFC, 0xE0, 0xE0,
+ 0x00, 0x00, 0x77, 0x77, 0x00, 0x77, 0x76, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xFE, 0x7E, 0x0E, 0xFE, 0xFC,
+};
+
+const struct fb_font_desc font_italic_bold = {
+ .name = "NetSurf Italic Bold",
+ .width = 8,
+ .height = 16,
+ .encoding = "CP1252",
+ .data = fontdata_italic_bold,
+};
+
+
+static const uint32_t fontdata_regular[FONTDATAMAX] = {
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAC, 0xA4, 0xA4, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xA2, 0xA4, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xA2, 0xAC, 0xA2, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEA, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAE, 0xA2, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE6, 0xA8, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA2, 0xA4, 0xA4, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xAA, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xAA, 0xAE, 0xA2, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAA, 0xAE, 0xAA, 0xEA, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xAA, 0xAC, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xE4, 0xAA, 0xA8, 0xAA, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEC, 0xAA, 0xAA, 0xAA, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0xA8, 0xAC, 0xA8, 0xE8, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4A, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCC, 0x44, 0x44, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xC2, 0x44, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xC2, 0x4C, 0x42, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4A, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4E, 0x42, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x46, 0xC8, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC2, 0x44, 0x44, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x4A, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xCA, 0x4E, 0x42, 0xE2, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCA, 0x4E, 0x4A, 0xEA, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xCA, 0x4C, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x44, 0xCA, 0x48, 0x4A, 0xE4, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4C, 0xCA, 0x4A, 0x4A, 0xEC, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xEE, 0x00, 0xFE,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0x4E, 0xC8, 0x4C, 0x48, 0xE8, 0x00, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6C, 0x6C, 0x6C, 0xFE, 0xFE, 0x6C, 0x6C,
+ 0xFE, 0xFE, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x7C, 0xFE, 0xD6, 0xD0, 0xF0, 0x7C,
+ 0x1E, 0x16, 0xD6, 0xFE, 0x7C, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xCE, 0x1C,
+ 0x38, 0x70, 0xE6, 0xC6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xF8, 0xD8, 0xD8, 0xF8, 0x72, 0xFE,
+ 0xDE, 0xCC, 0xCC, 0xFE, 0x7A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x0E, 0x1C, 0x18, 0x38, 0x30, 0x30, 0x30,
+ 0x30, 0x38, 0x18, 0x1C, 0x0E, 0x06, 0x00, 0x00,
+ 0x60, 0x70, 0x38, 0x18, 0x1C, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x1C, 0x18, 0x38, 0x70, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0x38, 0xFE,
+ 0xFE, 0x38, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x7E,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x1C,
+ 0x38, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6,
+ 0xE6, 0xE6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x3E, 0x7C,
+ 0xE0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x3C, 0x3C,
+ 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0C, 0x1C, 0x3C, 0x7C, 0xEC, 0xFE,
+ 0xFE, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0xFE,
+ 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7C, 0xE0, 0xC0, 0xC0, 0xFC, 0xFE,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xC6, 0x0E, 0x0C, 0x1C, 0x18,
+ 0x38, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0x7C, 0x7C,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0x7E,
+ 0x06, 0x06, 0x0E, 0x7C, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x18, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0x70,
+ 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00,
+ 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x70, 0x38, 0x1C, 0x0E, 0x0E,
+ 0x1C, 0x38, 0x70, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0x06, 0x1E, 0x3C,
+ 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xCE, 0xDE, 0xD6, 0xD6,
+ 0xDE, 0xCC, 0xC0, 0xFC, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0xFE,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFC, 0xFC,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xF8, 0xFC, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFC, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xF8, 0xF8,
+ 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xF8, 0xF8,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xDE, 0xDE,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xFE,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x0C, 0xCC, 0xFC, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0xC6, 0xCE, 0xDC, 0xF8, 0xF0, 0xE0,
+ 0xF0, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xEE, 0xFE, 0xFE, 0xFE, 0xD6,
+ 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xE6, 0xE6, 0xF6, 0xF6, 0xDE,
+ 0xDE, 0xCE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFE, 0xFC,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xD6, 0xDE, 0xFE, 0x7C, 0x06, 0x00, 0x00,
+ 0x00, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xFC, 0xFC,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xFC, 0x7E,
+ 0x06, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xEE,
+ 0x6C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6,
+ 0xD6, 0xFE, 0xFE, 0xEE, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C, 0x38, 0x38,
+ 0x7C, 0xEE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C, 0x38,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0xFE, 0x0E, 0x0C, 0x1C, 0x18, 0x38,
+ 0x30, 0x70, 0x60, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x3E, 0x3E, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x3E, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x70,
+ 0x38, 0x1C, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0x7C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x0C, 0x0C, 0x7C, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x18, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x06,
+ 0x7E, 0xFE, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x06, 0x06, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x3E, 0x30, 0x30, 0x30, 0x78, 0x78,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0x7E, 0x7C,
+ 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xDC, 0xFE, 0xE6,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x38, 0x18,
+ 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x1C, 0x0C,
+ 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x7C, 0x78,
+ 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCE, 0xDC,
+ 0xF8, 0xF8, 0xDC, 0xCE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xFE,
+ 0xD6, 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xFE, 0xE6,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0x07, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xFE, 0xE0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0xC0,
+ 0xFC, 0x7C, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x30, 0x30, 0x30, 0x7C, 0xFC, 0x30,
+ 0x30, 0x30, 0x30, 0x3E, 0x1E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xEE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xD6, 0xD6, 0xFE, 0xFE, 0x6C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xEE,
+ 0x7C, 0x7C, 0xEE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFE, 0xFC,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x0E,
+ 0x3C, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0E, 0x1E, 0x18, 0x18, 0x18, 0x70, 0x70,
+ 0x18, 0x18, 0x18, 0x1E, 0x0E, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x70, 0x78, 0x18, 0x18, 0x18, 0x0E, 0x0E,
+ 0x18, 0x18, 0x18, 0x78, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFE, 0x00, 0xEE, 0xAA, 0xAA, 0xAA, 0xEE,
+ 0x00, 0xEE, 0x28, 0x4C, 0x48, 0x48, 0x00, 0xFE,
+ 0x00, 0x18, 0x3C, 0x66, 0x60, 0xFC, 0x60, 0xF8,
+ 0x60, 0x60, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00,
+ 0x00, 0x1E, 0x3E, 0x30, 0x30, 0x30, 0x78, 0x78,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x66, 0x66, 0x22, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x7E, 0x7E, 0x18, 0x7E,
+ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C,
+ 0x18, 0x30, 0x60, 0xDB, 0x9B, 0x00, 0x00, 0x00,
+ 0xC6, 0x7C, 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xFC,
+ 0x7E, 0x06, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1C,
+ 0x38, 0x30, 0x38, 0x1C, 0x0C, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xCC, 0xCC, 0xCC, 0xCF, 0xCF,
+ 0xCC, 0xCC, 0xCC, 0xFF, 0x7F, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0xC6, 0x7C, 0x00, 0xFE, 0xFE, 0x06, 0x0C, 0x18,
+ 0x30, 0x60, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x20, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x48, 0x6C, 0x6C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x36, 0x12, 0x24, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7E,
+ 0x7E, 0x7E, 0x7E, 0x3C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x32, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF1, 0xFB, 0x5F, 0x55, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0x6C, 0x38, 0x00, 0x7E, 0xFE, 0xC0,
+ 0xFC, 0x7C, 0x06, 0xFE, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38,
+ 0x1C, 0x0C, 0x1C, 0x38, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xDA,
+ 0xDE, 0xDE, 0xD8, 0xFE, 0x6E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x38, 0x6C, 0x54, 0xF6, 0xEE,
+ 0x6C, 0x7C, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0xC6, 0x6C, 0x38, 0x00, 0xFE, 0xFE, 0x0E,
+ 0x3C, 0x78, 0xE0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xEE, 0x7C,
+ 0x38, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0xFE, 0xD6,
+ 0xD0, 0xD0, 0xD6, 0xFE, 0x7C, 0x10, 0x10, 0x00,
+ 0x00, 0x3C, 0x7E, 0x66, 0x60, 0x60, 0xF8, 0xF8,
+ 0x60, 0x60, 0xE6, 0xFE, 0xDC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x7E,
+ 0x66, 0x66, 0x7E, 0x3C, 0x66, 0x66, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E,
+ 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7C, 0x60, 0x60, 0x3C, 0x7E, 0x66,
+ 0x7E, 0x3C, 0x06, 0x06, 0x3E, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0xC3, 0x99, 0xBD, 0xA5, 0xA1,
+ 0xA5, 0xBD, 0x99, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, 0xF8,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36,
+ 0x6C, 0xD8, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7E, 0x7E, 0x06, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0xC3, 0xB9, 0xBD, 0xA5, 0xB9,
+ 0xB9, 0xA5, 0xA5, 0xC3, 0x7E, 0x3C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0xFC, 0xCC, 0xFC, 0x78, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x7E, 0x18,
+ 0x18, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x78, 0xF0, 0xC0,
+ 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF0, 0xF8, 0x18, 0x30, 0x18, 0xF8,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x7E, 0x7C, 0x60, 0x60, 0xC0,
+ 0x00, 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1C, 0x0C, 0x1C, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0xE0, 0x60, 0x60, 0x60, 0xF0,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xF8, 0x88, 0xF8, 0x70, 0x00, 0xF8,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8,
+ 0x6C, 0x36, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0xC0, 0x42, 0x46, 0xEC, 0x18,
+ 0x30, 0x64, 0xCC, 0x94, 0x3E, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x40, 0xC0, 0x42, 0x46, 0xEC, 0x18,
+ 0x30, 0x60, 0xDC, 0x82, 0x0C, 0x10, 0x1E, 0x00,
+ 0x00, 0x00, 0xE0, 0x10, 0x62, 0x16, 0xEC, 0x18,
+ 0x30, 0x64, 0xCC, 0x96, 0x3E, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18,
+ 0x78, 0xF0, 0xC0, 0xC6, 0xC6, 0xFE, 0x7C, 0x00,
+ 0x00, 0x60, 0x30, 0x00, 0x10, 0x38, 0x6C, 0xC6,
+ 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0x10, 0x38, 0x6C, 0xC6,
+ 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x44, 0x10, 0x38, 0x6C, 0xC6,
+ 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0x10, 0x38, 0x6C, 0xC6,
+ 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x6C, 0x6C, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xFE,
+ 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x44, 0x38, 0x38, 0x6C, 0xC6, 0xFE,
+ 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x3F, 0x7C, 0xEC, 0xCC, 0xFE, 0xFE,
+ 0xCC, 0xCC, 0xCC, 0xCF, 0xCF, 0x00, 0x00, 0x00,
+ 0x00, 0x7C, 0xFE, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC6, 0xFE, 0x7C, 0x0E, 0x66, 0x3C,
+ 0x00, 0x30, 0x18, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
+ 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
+ 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x00, 0xFE, 0xFE, 0xC0, 0xF0,
+ 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x6C, 0x6C, 0x00, 0xFE, 0xFE, 0xC0, 0xC0, 0xF0,
+ 0xF0, 0xC0, 0xC0, 0xFE, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x7C, 0x6E, 0x66, 0x66, 0xF6,
+ 0x66, 0x66, 0x6E, 0x7C, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0xC6, 0xC6, 0xE6, 0xF6,
+ 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x18, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xDC, 0x00, 0x7C, 0xFE, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x6C, 0x00, 0x7C, 0xFE, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xEE, 0x7C,
+ 0x38, 0x38, 0x7C, 0xEE, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0xFE, 0xC6, 0xC6, 0xCE, 0xCE, 0xD6,
+ 0xD6, 0xE6, 0xE6, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x30, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x7E,
+ 0x3C, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x7C, 0x7E, 0x66, 0x66,
+ 0x7E, 0x7C, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x7E, 0x66, 0x66, 0x66, 0x7E, 0x7C,
+ 0x66, 0x66, 0x66, 0x7E, 0x7C, 0xE0, 0xC0, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xCE, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xDC, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6C, 0x38, 0x00, 0x7E, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xCE, 0xFE, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x7E, 0x1A,
+ 0x3E, 0x7E, 0xD8, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE,
+ 0xC6, 0xC0, 0xC6, 0xFE, 0x7C, 0x18, 0x7C, 0x78,
+ 0x00, 0x00, 0x30, 0x18, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xFE, 0xFE, 0xC0, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x3C, 0x66, 0x00, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x00, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x6C, 0x7C, 0xF8, 0xDC, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xFE, 0xDC, 0x00, 0xFC, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x76, 0xFE, 0xDC, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x7C, 0xFE, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E,
+ 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x7C, 0xFE, 0xCE,
+ 0xD6, 0xD6, 0xE6, 0xFE, 0x7C, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x30, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x18, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFC, 0xF8,
+ 0x00, 0x00, 0x60, 0x60, 0x60, 0x7C, 0x7E, 0x66,
+ 0x66, 0x66, 0x66, 0x7E, 0x7C, 0x60, 0x60, 0x60,
+ 0x00, 0x00, 0x6C, 0x6C, 0x00, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xFE, 0x7E, 0x06, 0xFE, 0xFC,
+};
+
+const struct fb_font_desc font_regular = {
+ .name = "NetSurf Regular",
+ .width = 8,
+ .height = 16,
+ .encoding = "CP1252",
+ .data = fontdata_regular,
+};
+
#endif
diff --git a/atari/plot/font_internal.h b/atari/plot/font_internal.h
index 628a63c..9bfbbed 100644
--- a/atari/plot/font_internal.h
+++ b/atari/plot/font_internal.h
@@ -1,36 +1,37 @@
-/*
- * Copyright 2008 Vincent Sanders <vince(a)simtec.co.uk>
- * Copyright 2011 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2008 Vincent Sanders <vince(a)simtec.co.uk>
+ * Copyright 2011 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
- #ifdef WITH_INTERNAL_FONT_DRIVER
-#ifndef FONT_PLOTTER_INTERNAL
+
+#ifdef WITH_INTERNAL_FONT_DRIVER
+#ifndef FONT_PLOTTER_INTERNAL
#define FONT_PLOTTER_INTERNAL
-#include "atari/plot/plot.h"
-
-int ctor_font_plotter_internal( FONT_PLOTTER self );
-
-struct fb_font_desc {
- const char *name;
- int width, height;
- const char *encoding;
- const uint32_t *data;
-};
-
-
+#include "atari/plot/plot.h"
+
+int ctor_font_plotter_internal( FONT_PLOTTER self );
+
+struct fb_font_desc {
+ const char *name;
+ int width, height;
+ const char *encoding;
+ const uint32_t *data;
+};
+
+
#endif
#endif
diff --git a/atari/plot/font_vdi.c b/atari/plot/font_vdi.c
old mode 100755
new mode 100644
index 7f3dacf..ef54992
--- a/atari/plot/font_vdi.c
+++ b/atari/plot/font_vdi.c
@@ -29,13 +29,10 @@
#include "atari/encoding.h"
-
-
//static char * lstr = NULL;
-
static int dtor( FONT_PLOTTER self );
-static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str, size_t length, int * width );
+static int str_width( FONT_PLOTTER self,const plot_font_style_t *fstyle, const char * str, size_t length, int * width );
static int str_split( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
size_t length,int x, size_t *char_offset, int *actual_x );
static int pixel_pos( FONT_PLOTTER self, const plot_font_style_t *fstyle,const char *string,
@@ -73,7 +70,7 @@ int ctor_font_plotter_vdi( FONT_PLOTTER self )
self->str_split = str_split;
self->pixel_pos = pixel_pos;
self->text = text;
- LOG(("%s: %s\n", (char*)__FILE__, __FUNCTION__));
+ LOG("%s: %s\n", (char *)__FILE__, __FUNCTION__);
if( !init ) {
vdih = self->vdi_handle;
}
diff --git a/atari/plot/font_vdi.h b/atari/plot/font_vdi.h
old mode 100755
new mode 100644
index 6de2c4e..3a1fdb5
--- a/atari/plot/font_vdi.h
+++ b/atari/plot/font_vdi.h
@@ -1,25 +1,26 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifdef WITH_VDI_FONT_DRIVER
-#ifndef FONT_PLOTTER_VDI
-#define FONT_PLOTTER_VDI
-
-int ctor_font_plotter_vdi( FONT_PLOTTER self );
-
+#ifndef FONT_PLOTTER_VDI
+#define FONT_PLOTTER_VDI
+
+int ctor_font_plotter_vdi( FONT_PLOTTER self );
+
#endif
#endif
diff --git a/atari/plot/fontplot.h b/atari/plot/fontplot.h
index 27524fd..6690bff 100644
--- a/atari/plot/fontplot.h
+++ b/atari/plot/fontplot.h
@@ -1,3 +1,21 @@
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifndef FONT_PLOT_H
#define FONT_PLOT_H
diff --git a/atari/plot/plot.c b/atari/plot/plot.c
old mode 100755
new mode 100644
index ac998a4..1ac3ee9
--- a/atari/plot/plot.c
+++ b/atari/plot/plot.c
@@ -1542,7 +1542,7 @@ int plot_init(char * fdrvrname)
short work_out[57];
atari_plot_vdi_handle=graf_handle(&dummy, &dummy, &dummy, &dummy);
v_opnvwk(work_in, &atari_plot_vdi_handle, work_out);
- LOG(("Plot VDI handle: %d", atari_plot_vdi_handle));
+ LOG("Plot VDI handle: %d", atari_plot_vdi_handle);
}
read_vdi_sysinfo(atari_plot_vdi_handle, &vdi_sysinfo);
if(verbose_log) {
diff --git a/atari/plot/plot.h b/atari/plot/plot.h
old mode 100755
new mode 100644
diff --git a/atari/redrawslots.c b/atari/redrawslots.c
index 6977a6d..f535186 100644
--- a/atari/redrawslots.c
+++ b/atari/redrawslots.c
@@ -1,19 +1,19 @@
-/*
- * Copyright 2011 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2011 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdbool.h>
@@ -25,101 +25,101 @@
void redraw_slots_init(struct s_redrw_slots * slots, short size)
{
- // TODO: allocate slots dynamically!
+ // TODO: allocate slots dynamically!
slots->size = MIN( MAX_REDRW_SLOTS , size);
slots->areas_used = 0;
}
void redraw_slots_free(struct s_redrw_slots * slots)
{
- // TOOD: free areas...
+ // TOOD: free areas...
}
-static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
-{
- if (box2->x1 < box1->x0)
- return false;
-
- if (box2->y1 < box1->y0)
- return false;
-
- if (box2->x0 > box1->x1)
- return false;
-
- if (box2->y0 > box1->y1)
- return false;
-
- return true;
+static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
+{
+ if (box2->x1 < box1->x0)
+ return false;
+
+ if (box2->y1 < box1->y0)
+ return false;
+
+ if (box2->x0 > box1->x1)
+ return false;
+
+ if (box2->y0 > box1->y1)
+ return false;
+
+ return true;
}
void redraw_slot_schedule_grect(struct s_redrw_slots * slots, GRECT *area,
- bool force)
+ bool force)
{
- redraw_slot_schedule(slots, area->g_x, area->g_y,
- area->g_x + area->g_w, area->g_y + area->g_h, force);
+ redraw_slot_schedule(slots, area->g_x, area->g_y,
+ area->g_x + area->g_w, area->g_y + area->g_h, force);
}
-/*
- schedule redraw coords.
-*/
+/*
+ schedule redraw coords.
+*/
void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0,
- short x1, short y1, bool force)
-{
- int i = 0;
- struct rect area;
-
- area.x0 = x0;
- area.y0 = y0;
- area.x1 = x1;
- area.y1 = y1;
-
- if (force == false) {
- for (i=0; i<slots->areas_used; i++) {
- if (slots->areas[i].x0 <= x0
- && slots->areas[i].x1 >= x1
- && slots->areas[i].y0 <= y0
- && slots->areas[i].y1 >= y1) {
- /* the area is already queued for redraw */
- return;
- } else {
- if (rect_intersect(&slots->areas[i], &area )) {
- slots->areas[i].x0 = MIN(slots->areas[i].x0, x0);
- slots->areas[i].y0 = MIN(slots->areas[i].y0, y0);
- slots->areas[i].x1 = MAX(slots->areas[i].x1, x1);
- slots->areas[i].y1 = MAX(slots->areas[i].y1, y1);
- return;
- }
- }
- }
- }
-
- if (slots->areas_used < slots->size) {
- slots->areas[slots->areas_used].x0 = x0;
- slots->areas[slots->areas_used].x1 = x1;
- slots->areas[slots->areas_used].y0 = y0;
- slots->areas[slots->areas_used].y1 = y1;
- slots->areas_used++;
- } else {
- /*
- we are out of available slots, merge box with last slot
- this is dumb... but also a very rare case.
- */
- slots->areas[slots->size-1].x0 = MIN(slots->areas[i].x0, x0);
- slots->areas[slots->size-1].y0 = MIN(slots->areas[i].y0, y0);
- slots->areas[slots->size-1].x1 = MAX(slots->areas[i].x1, x1);
- slots->areas[slots->size-1].y1 = MAX(slots->areas[i].y1, y1);
- }
-
- return;
+ short x1, short y1, bool force)
+{
+ int i = 0;
+ struct rect area;
+
+ area.x0 = x0;
+ area.y0 = y0;
+ area.x1 = x1;
+ area.y1 = y1;
+
+ if (force == false) {
+ for (i=0; i<slots->areas_used; i++) {
+ if (slots->areas[i].x0 <= x0
+ && slots->areas[i].x1 >= x1
+ && slots->areas[i].y0 <= y0
+ && slots->areas[i].y1 >= y1) {
+ /* the area is already queued for redraw */
+ return;
+ } else {
+ if (rect_intersect(&slots->areas[i], &area )) {
+ slots->areas[i].x0 = MIN(slots->areas[i].x0, x0);
+ slots->areas[i].y0 = MIN(slots->areas[i].y0, y0);
+ slots->areas[i].x1 = MAX(slots->areas[i].x1, x1);
+ slots->areas[i].y1 = MAX(slots->areas[i].y1, y1);
+ return;
+ }
+ }
+ }
+ }
+
+ if (slots->areas_used < slots->size) {
+ slots->areas[slots->areas_used].x0 = x0;
+ slots->areas[slots->areas_used].x1 = x1;
+ slots->areas[slots->areas_used].y0 = y0;
+ slots->areas[slots->areas_used].y1 = y1;
+ slots->areas_used++;
+ } else {
+ /*
+ we are out of available slots, merge box with last slot
+ this is dumb... but also a very rare case.
+ */
+ slots->areas[slots->size-1].x0 = MIN(slots->areas[i].x0, x0);
+ slots->areas[slots->size-1].y0 = MIN(slots->areas[i].y0, y0);
+ slots->areas[slots->size-1].x1 = MAX(slots->areas[i].x1, x1);
+ slots->areas[slots->size-1].y1 = MAX(slots->areas[i].y1, y1);
+ }
+
+ return;
}
void redraw_slots_remove_area(struct s_redrw_slots * slots, int i)
{
- int x;
- for(x = i+1; i<slots->areas_used; x++){
- slots->areas[x-1] = slots->areas[x];
- }
- slots->areas_used--;
+ int x;
+ for (x = i+1; i<slots->areas_used; x++) {
+ slots->areas[x-1] = slots->areas[x];
+ }
+ slots->areas_used--;
}
diff --git a/atari/redrawslots.h b/atari/redrawslots.h
index c972c17..ca72a01 100644
--- a/atari/redrawslots.h
+++ b/atari/redrawslots.h
@@ -1,19 +1,19 @@
-/*
- * Copyright 2012 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2012 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -24,23 +24,23 @@
#include "utils/utils.h"
-/*
- MAX_REDRW_SLOTS
- This is the number of redraw requests that the slotlist can store.
- If a redraw is scheduled and all slots are used, the rectangle will
- be merged to one of the existing slots.
- */
+/**
+ * This is the number of redraw requests that the slotlist can store.
+ * If a redraw is scheduled and all slots are used, the rectangle will
+ * be merged to one of the existing slots.
+ */
#define MAX_REDRW_SLOTS 32
-
-/*
- This struct holds scheduled redraw requests.
-*/
-struct rect;
-struct s_redrw_slots
-{
+
+struct rect;
+
+/**
+ * This struct holds scheduled redraw requests.
+ */
+struct s_redrw_slots
+{
struct rect areas[MAX_REDRW_SLOTS];
- short size;
- short volatile areas_used;
+ short size;
+ short volatile areas_used;
};
void redraw_slots_init(struct s_redrw_slots * slots, short size);
diff --git a/atari/rootwin.c b/atari/rootwin.c
old mode 100755
new mode 100644
index 7b4cd03..c9f5071
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -106,7 +106,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
switch (msg[0]) {
case WM_REDRAW:
- LOG(("WM_REDRAW"));
+ LOG("WM_REDRAW");
on_redraw(data->rootwin, msg);
break;
@@ -114,7 +114,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
case WM_SIZED:
case WM_MOVED:
case WM_FULLED:
- LOG(("WM_SIZED"));
+ LOG("WM_SIZED");
on_resized(data->rootwin);
break;
@@ -133,7 +133,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
case WM_TOPPED:
case WM_NEWTOP:
case WM_UNICONIFY:
- LOG(("WM_TOPPED"));
+ LOG("WM_TOPPED");
gui_set_input_gui_window(data->rootwin->active_gui_window);
//window_restore_active_gui_window(data->rootwin);
// TODO: use something like "restore_active_gui_window_state()"
@@ -144,8 +144,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
// TODO: this needs to iterate through all gui windows and
// check if the rootwin is this window...
if (data->rootwin->active_gui_window != NULL) {
- LOG(("WM_CLOSED initiated destroy for bw %p",
- data->rootwin->active_gui_window->browser->bw));
+ LOG("WM_CLOSED initiated destroy for bw %p", data->rootwin->active_gui_window->browser->bw);
browser_window_destroy(
data->rootwin->active_gui_window->browser->bw);
}
@@ -168,14 +167,13 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
// handle key
uint16_t nkc = gem_to_norm( (short)ev_out->emo_kmeta,
(short)ev_out->emo_kreturn);
- LOG(("rootwin MU_KEYBD input, nkc: %x\n", nkc));
+ LOG("rootwin MU_KEYBD input, nkc: %x\n", nkc);
retval = on_window_key_input(data->rootwin, nkc);
// printf("on_window_key_input: %d\n", retval);
}
if ((ev_out->emo_events & MU_BUTTON) != 0) {
- LOG(("rootwin MU_BUTTON input, x: %d, y: %d\n", ev_out->emo_mouse.p_x,
- ev_out->emo_mouse.p_x));
+ LOG("rootwin MU_BUTTON input, x: %d, y: %d\n", ev_out->emo_mouse.p_x, ev_out->emo_mouse.p_x);
window_get_grect(data->rootwin, BROWSER_AREA_CONTENT,
&area);
if (POINT_WITHIN(ev_out->emo_mouse.p_x, ev_out->emo_mouse.p_y,
@@ -315,13 +313,13 @@ void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw)
struct gui_window *w;
input_window = NULL;
- LOG(("window: %p, gui_window: %p", rootwin, gw));
+ LOG("window: %p, gui_window: %p", rootwin, gw);
w = window_list;
// find the next active tab:
while( w != NULL ) {
if(w->root == rootwin && w != gw) {
- LOG(("activating next tab %p", w));
+ LOG("activating next tab %p", w);
gui_set_input_gui_window(w);
break;
}
@@ -341,7 +339,7 @@ int window_destroy(ROOTWIN *rootwin)
assert(rootwin != NULL);
- LOG(("%p", rootwin));
+ LOG("%p", rootwin);
if (gemtk_wm_get_user_data(rootwin->win) != NULL) {
free(gemtk_wm_get_user_data(rootwin->win));
@@ -407,7 +405,7 @@ void window_restore_active_gui_window(ROOTWIN *rootwin)
GRECT tb_area;
struct gui_window *gw;
- LOG((""));
+ LOG("");
assert(rootwin->active_gui_window);
@@ -502,7 +500,7 @@ void window_set_focus(struct s_gui_win_root *rootwin,
assert(rootwin != NULL);
if (rootwin->focus.type != type || rootwin->focus.element != element) {
- LOG(("Set focus: %p (%d)\n", element, type));
+ LOG("Set focus: %p (%d)\n", element, type);
rootwin->focus.type = type;
rootwin->focus.element = element;
switch( type ) {
@@ -566,11 +564,11 @@ void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw)
{
struct gui_window *old_gw = rootwin->active_gui_window;
- LOG((""));
+ LOG("");
if (rootwin->active_gui_window != NULL) {
if(rootwin->active_gui_window == gw) {
- LOG(("nothing to do..."));
+ LOG("nothing to do...");
return;
}
}
@@ -579,7 +577,7 @@ void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw)
rootwin->active_gui_window = gw;
if (old_gw != NULL) {
- LOG(("restoring window..."));
+ LOG("restoring window...");
window_restore_active_gui_window(rootwin);
}
}
@@ -654,7 +652,7 @@ void window_open_search(ROOTWIN *rootwin, bool reformat)
GRECT area;
OBJECT *obj;
- LOG((""));
+ LOG("");
gw = rootwin->active_gui_window;
bw = gw->browser->bw;
@@ -1471,10 +1469,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
buff[size] = 0;
- LOG(("file: %s, ext: %s, size: %d dropped at: %d,%d\n",
- (char*)buff, (char*)&ext,
- size, mx, my
- ));
+ LOG("file: %s, ext: %s, size: %d dropped at: %d,%d\n", (char *)buff, (char *)&ext, size, mx, my);
gui_window_get_scroll(gw, &sx, &sy);
@@ -1496,7 +1491,7 @@ static void on_file_dropped(ROOTWIN *rootwin, short msg[8])
if (ret != NSERROR_OK) {
free(buff);
/* A bad encoding should never happen */
- LOG(("utf8_from_local_encoding failed"));
+ LOG("utf8_from_local_encoding failed");
assert(ret != NSERROR_BAD_ENCODING);
/* no memory */
goto error;
diff --git a/atari/rootwin.h b/atari/rootwin.h
old mode 100755
new mode 100644
index a5b22c9..99b286f
--- a/atari/rootwin.h
+++ b/atari/rootwin.h
@@ -1,34 +1,34 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_BROWSER_WIN_H
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_BROWSER_WIN_H
#define NS_ATARI_BROWSER_WIN_H
-#include <atari/gui.h>
-
-#define GEMTK_WM_VISIBLE(gw) (gw->root->handle->status & WS_OPEN)
-#define GEMWIN_VISIBLE(win) (win->status & WS_OPEN)
-
-#define WIDGET_STATUSBAR 0x1
-#define WIDGET_TOOLBAR 0x2
+#include <atari/gui.h>
+
+#define GEMTK_WM_VISIBLE(gw) (gw->root->handle->status & WS_OPEN)
+#define GEMWIN_VISIBLE(win) (win->status & WS_OPEN)
+
+#define WIDGET_STATUSBAR 0x1
+#define WIDGET_TOOLBAR 0x2
#define WIDGET_SCROLL 0x4
#define WIDGET_RESIZE 0x8
-#define WIN_TOP 0x100
+#define WIN_TOP 0x100
enum browser_area_e {
BROWSER_AREA_CONTENT = 1,
@@ -37,40 +37,40 @@ enum browser_area_e {
BROWSER_AREA_URL_INPUT,
BROWSER_AREA_SEARCH
};
-
-
-/* -------------------------------------------------------------------------- */
-/* Public module functions: */
-/* -------------------------------------------------------------------------- */
-
-/* Creates an normal Browser window with [toolbar], [statusbar] */
+
+
+/* -------------------------------------------------------------------------- */
+/* Public module functions: */
+/* -------------------------------------------------------------------------- */
+
+/* Creates an normal Browser window with [toolbar], [statusbar] */
int window_create(struct gui_window * gw,
struct browser_window * bw,
struct gui_window * existing,
- unsigned long flags );
-/* Destroys WinDom part of gui_window */
-int window_destroy(ROOTWIN *rootwin);
-
-/** show the window at specified position and make gw the active tab. */
-void window_open(ROOTWIN *rootwin, struct gui_window *gw, GRECT pos);
-
-void window_snd_redraw(ROOTWIN *rootwin, short x, short y, short w, short h );
-/* Update Shade / Unshade state of the fwd/back buttons*/
-void window_update_back_forward(struct s_gui_win_root * rootwin);
-/* set root browser component: */
-void window_attach_browser(ROOTWIN *rootwin, CMP_BROWSER b);
-
-/* set focus element */
+ unsigned long flags );
+/* Destroys WinDom part of gui_window */
+int window_destroy(ROOTWIN *rootwin);
+
+/** show the window at specified position and make gw the active tab. */
+void window_open(ROOTWIN *rootwin, struct gui_window *gw, GRECT pos);
+
+void window_snd_redraw(ROOTWIN *rootwin, short x, short y, short w, short h );
+/* Update Shade / Unshade state of the fwd/back buttons*/
+void window_update_back_forward(struct s_gui_win_root * rootwin);
+/* set root browser component: */
+void window_attach_browser(ROOTWIN *rootwin, CMP_BROWSER b);
+
+/* set focus element */
void window_set_focus(ROOTWIN *rootwin, enum focus_element_type type,
- void * element );
-/* Shade / Unshade the forward/back bt. of toolbar, depending on history.*/
+ void * element );
+/* Shade / Unshade the forward/back bt. of toolbar, depending on history.*/
bool window_widget_has_focus(ROOTWIN *rootwin, enum focus_element_type t,
- void * element);
-bool window_url_widget_has_focus(ROOTWIN *rootwin);
-void window_set_url(ROOTWIN *rootwin, const char * text);
+ void * element);
+bool window_url_widget_has_focus(ROOTWIN *rootwin);
+void window_set_url(ROOTWIN *rootwin, const char * text);
void window_set_stauts(ROOTWIN *rootwin, char * text);
void window_set_title(ROOTWIN *rootwin, char * text);
-void window_set_content_size(ROOTWIN *rootwin, int w, int h);
+void window_set_content_size(ROOTWIN *rootwin, int w, int h);
void window_set_icon(ROOTWIN *rootwin, struct bitmap * bmp );
void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
void window_restore_active_gui_window(ROOTWIN *rootwin);
@@ -87,11 +87,11 @@ void window_get_grect(ROOTWIN *rootwin, enum browser_area_e which, GRECT *d);
void window_redraw_favicon(struct s_gui_win_root * rootwin, GRECT *clip);
void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
bool window_key_input(unsigned short kcode, unsigned short kstate,
- unsigned short nkc);
-
-
-/* -------------------------------------------------------------------------- */
-/* Public event handlers: */
-/* -------------------------------------------------------------------------- */
-
-#endif
+ unsigned short nkc);
+
+
+/* -------------------------------------------------------------------------- */
+/* Public event handlers: */
+/* -------------------------------------------------------------------------- */
+
+#endif
diff --git a/atari/save.h b/atari/save.h
index 0775723..01086be 100644
--- a/atari/save.h
+++ b/atari/save.h
@@ -1,19 +1,19 @@
-/*
- * Copyright 2012 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2012 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NSATARI_SAVE_H
diff --git a/atari/schedule.c b/atari/schedule.c
old mode 100755
new mode 100644
index 4ff51d4..5c652d5
--- a/atari/schedule.c
+++ b/atari/schedule.c
@@ -29,7 +29,7 @@
#ifdef DEBUG_SCHEDULER
#include "utils/log.h"
#else
-#define LOG(X)
+#define LOG(x...)
#endif
#define MS_NOW() ((clock() * 1000) / CLOCKS_PER_SEC)
@@ -71,7 +71,7 @@ static nserror schedule_remove(void (*callback)(void *p), void *p)
return NSERROR_OK;
}
- LOG(("removing %p, %p", callback, p));
+ LOG("removing %p, %p", callback, p);
cur_nscb = schedule_list;
prev_nscb = NULL;
@@ -80,8 +80,7 @@ static nserror schedule_remove(void (*callback)(void *p), void *p)
if ((cur_nscb->callback == callback) &&
(cur_nscb->p == p)) {
/* item to remove */
- LOG(("callback entry %p removing %p(%p)",
- cur_nscb, cur_nscb->callback, cur_nscb->p));
+ LOG("callback entry %p removing %p(%p)", cur_nscb, cur_nscb->callback, cur_nscb->p);
/* remove callback */
unlnk_nscb = cur_nscb;
@@ -119,8 +118,7 @@ nserror atari_schedule(int ival, void (*callback)(void *p), void *p)
nscb->timeout = MS_NOW() + ival;
- LOG(("adding callback %p for %p(%p) at %d ms",
- nscb, callback, p, nscb->timeout ));
+ LOG("adding callback %p for %p(%p) at %d ms", nscb, callback, p, nscb->timeout);
nscb->callback = callback;
nscb->p = p;
@@ -166,8 +164,7 @@ int schedule_run(void)
prev_nscb->next = unlnk_nscb->next;
}
- LOG(("callback entry %p running %p(%p)",
- unlnk_nscb, unlnk_nscb->callback, unlnk_nscb->p));
+ LOG("callback entry %p running %p(%p)", unlnk_nscb, unlnk_nscb->callback, unlnk_nscb->p);
/* call callback */
unlnk_nscb->callback(unlnk_nscb->p);
@@ -176,7 +173,7 @@ int schedule_run(void)
/* need to deal with callback modifying the list. */
if (schedule_list == NULL) {
- LOG(("schedule_list == NULL"));
+ LOG("schedule_list == NULL");
return -1; /* no more callbacks scheduled */
}
@@ -201,7 +198,7 @@ int schedule_run(void)
/* make rettime relative to now and convert to ms */
nexttime = nexttime - now;
- LOG(("returning time to next event as %ldms", nexttime ));
+ LOG("returning time to next event as %ldms", nexttime);
/*return next event time in milliseconds (24days max wait) */
return nexttime;
@@ -213,14 +210,14 @@ void list_schedule(void)
{
struct nscallback *cur_nscb;
- LOG(("schedule list at ms clock %ld", MS_NOW() ));
+ LOG("schedule list at ms clock %ld", MS_NOW());
cur_nscb = schedule_list;
while (cur_nscb != NULL) {
- LOG(("Schedule %p at %ld", cur_nscb, cur_nscb->timeout ));
+ LOG("Schedule %p at %ld", cur_nscb, cur_nscb->timeout);
cur_nscb = cur_nscb->next;
}
- LOG(("Maxmium callbacks scheduled: %d", max_scheduled ));
+ LOG("Maxmium callbacks scheduled: %d", max_scheduled);
}
diff --git a/atari/schedule.h b/atari/schedule.h
old mode 100755
new mode 100644
diff --git a/atari/search.c b/atari/search.c
index cd9847b..8ba5521 100644
--- a/atari/search.c
+++ b/atari/search.c
@@ -61,53 +61,53 @@ struct gui_search_table *atari_search_table = &search_table;
/**
-* Change the displayed search status.
-* \param found search pattern matched in text
-* \param p the pointer sent to search_verify_new() / search_create_context()
-*/
-
+ * Change the displayed search status.
+ * \param found search pattern matched in text
+ * \param p the pointer sent to search_verify_new() / search_create_context()
+ */
void nsatari_search_set_status(bool found, void *p)
{
- LOG(("%p set status: %d\n", p, found));
+ LOG("%p set status: %d\n", p, found);
// TODO: maybe update GUI
}
-/**
-* display hourglass while searching
-* \param active start/stop indicator
-* \param p the pointer sent to search_verify_new() / search_create_context()
-*/
+/**
+ * display hourglass while searching
+ * \param active start/stop indicator
+ * \param p the pointer sent to search_verify_new() / search_create_context()
+ */
void nsatari_search_set_hourglass(bool active, void *p)
{
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
- LOG(("active: %d, session: %p", active, p));
- if (active)
+ LOG("active: %d, session: %p", active, p);
+ if (active) {
gui_window_set_pointer(s->g, GUI_POINTER_PROGRESS);
- else
+ } else {
gui_window_set_pointer(s->g, GUI_POINTER_DEFAULT);
+ }
}
-/**
-* add search string to recent searches list
-* front is at liberty how to implement the bare notification
-* should normally store a strdup() of the string;
-* core gives no guarantee of the integrity of the const char *
-* \param string search pattern
-* \param p the pointer sent to search_verify_new() / search_create_context()
-*/
+/**
+ * add search string to recent searches list
+ * front is at liberty how to implement the bare notification
+ * should normally store a strdup() of the string;
+ * core gives no guarantee of the integrity of the const char *
+ * \param string search pattern
+ * \param p the pointer sent to search_verify_new() / search_create_context()
+ */
void nsatari_search_add_recent(const char *string, void *p)
{
- LOG(("%p add recent: %s\n", p, string));
+ LOG("%p add recent: %s\n", p, string);
}
-/**
-* activate search forwards button in gui
-* \param active activate/inactivate
-* \param p the pointer sent to search_verify_new() / search_create_context()
-*/
+/**
+ * activate search forwards button in gui
+ * \param active activate/inactivate
+ * \param p the pointer sent to search_verify_new() / search_create_context()
+ */
void nsatari_search_set_forward_state(bool active, void *p)
{
struct gui_window *gw;
@@ -115,26 +115,26 @@ void nsatari_search_set_forward_state(bool active, void *p)
GRECT area;
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
/* deactivate back cb */
- LOG(("%p: set forward state: %d\n", p, active));
+ LOG("%p: set forward state: %d\n", p, active);
gw = s->g;
toolbar = toolbar_get_form(gw->root->toolbar);
- if(active)
+ if (active) {
toolbar[TOOLBAR_BT_SEARCH_FWD].ob_state &= ~OS_DISABLED;
- else
+ } else {
toolbar[TOOLBAR_BT_SEARCH_FWD].ob_state |= OS_DISABLED;
+ }
window_get_grect(gw->root, BROWSER_AREA_SEARCH, &area);
window_schedule_redraw_grect(gw->root, &area);
-
}
-/**
-* activate search back button in gui
-* \param active activate/inactivate
-* \param p the pointer sent to search_verify_new() / search_create_context()
-*/
+/**
+ * activate search back button in gui
+ * \param active activate/inactivate
+ * \param p the pointer sent to search_verify_new() / search_create_context()
+ */
void nsatari_search_set_back_state(bool active, void *p)
{
struct gui_window *gw;
@@ -142,16 +142,17 @@ void nsatari_search_set_back_state(bool active, void *p)
GRECT area;
SEARCH_FORM_SESSION s = (SEARCH_FORM_SESSION)p;
/* deactivate back cb */
- LOG(("%p: set back state: %d\n", p, active));
+ LOG("%p: set back state: %d\n", p, active);
s->state.back_avail = active;
gw = s->g;
toolbar = toolbar_get_form(gw->root->toolbar);
- if(active)
+ if (active) {
toolbar[TOOLBAR_BT_SEARCH_BACK].ob_state &= ~OS_DISABLED;
- else
+ } else {
toolbar[TOOLBAR_BT_SEARCH_BACK].ob_state |= OS_DISABLED;
+ }
window_get_grect(gw->root, BROWSER_AREA_SEARCH, &area);
window_schedule_redraw_grect(gw->root, &area);
}
@@ -165,10 +166,12 @@ static int apply_form(OBJECT *obj, struct s_search_form_state *s)
s->flags = 0;
- if( (obj[TOOLBAR_CB_CASESENSE].ob_state & OS_SELECTED) != 0 )
+ if ((obj[TOOLBAR_CB_CASESENSE].ob_state & OS_SELECTED) != 0 ) {
s->flags |= SEARCH_FLAG_CASE_SENSITIVE;
- if( (obj[TOOLBAR_CB_SHOWALL].ob_state & OS_SELECTED) != 0 )
+ }
+ if ((obj[TOOLBAR_CB_SHOWALL].ob_state & OS_SELECTED) != 0 ) {
s->flags |= SEARCH_FLAG_SHOWALL;
+ }
cstr = gemtk_obj_get_text(obj, TOOLBAR_TB_SRCH);
snprintf(s->text, 32, "%s", cstr);
@@ -180,9 +183,10 @@ static void set_text(OBJECT *obj, short idx, char * text, int len)
{
char spare[255];
- if( len > 254 )
+ if (len > 254) {
len = 254;
- if( text != NULL ){
+ }
+ if (text != NULL) {
strncpy(spare, text, 254);
} else {
strcpy(spare, "");
@@ -191,19 +195,18 @@ static void set_text(OBJECT *obj, short idx, char * text, int len)
set_string(obj, idx, spare);
}
+
void nsatari_search_restore_form( struct s_search_form_session *s, OBJECT *obj)
{
if ((s->state.flags & SEARCH_FLAG_SHOWALL) != 0) {
obj[TOOLBAR_CB_SHOWALL].ob_state |= OS_SELECTED;
- }
- else {
+ } else {
obj[TOOLBAR_CB_SHOWALL].ob_state &= ~OS_SELECTED;
}
if ((s->state.flags & SEARCH_FLAG_CASE_SENSITIVE) != 0) {
obj[TOOLBAR_CB_CASESENSE].ob_state |= OS_SELECTED;
- }
- else {
+ } else {
obj[TOOLBAR_CB_CASESENSE].ob_state &= ~OS_SELECTED;
}
@@ -215,18 +218,19 @@ void nsatari_search_restore_form( struct s_search_form_session *s, OBJECT *obj)
TEDINFO *t = ((TEDINFO *)get_obspec(obj, TOOLBAR_TB_SRCH));
set_text(obj, TOOLBAR_TB_SRCH, s->state.text, t->te_txtlen);
-
}
+
void nsatari_search_session_destroy(struct s_search_form_session *s)
{
if (s != NULL) {
- LOG((""));
+ LOG("");
browser_window_search_clear(s->g->browser->bw);
free(s);
}
}
+
/** checks for search parameters changes */
static bool search_session_compare(struct s_search_form_session *s, OBJECT *obj)
{
@@ -245,7 +249,7 @@ static bool search_session_compare(struct s_search_form_session *s, OBJECT *obj)
char * cstr;
cstr = gemtk_obj_get_text(obj, TOOLBAR_TB_SRCH);
- if (cstr != NULL){
+ if (cstr != NULL) {
if (strcmp(cstr, (char*)&s->state.text) != 0) {
return (true);
}
@@ -256,34 +260,31 @@ static bool search_session_compare(struct s_search_form_session *s, OBJECT *obj)
void nsatari_search_perform(struct s_search_form_session *s, OBJECT *obj,
- search_flags_t f)
+ search_flags_t f)
{
assert(s!=null);
assert(input_window->browser->bw == s->g->browser->bw);
-
- if(search_session_compare(s, obj)){
+ if (search_session_compare(s, obj)) {
browser_window_search_clear(s->g->browser->bw);
apply_form(obj, &s->state);
- } else {
-
}
/* get search direction manually: */
- if ( (f&SEARCH_FLAG_FORWARDS) != 0 )
+ if ( (f&SEARCH_FLAG_FORWARDS) != 0 ) {
s->state.flags |= SEARCH_FLAG_FORWARDS;
- else
+ } else {
s->state.flags &= (~SEARCH_FLAG_FORWARDS);
+ }
browser_window_search(s->g->browser->bw, s,
- s->state.flags,
- gemtk_obj_get_text(obj, TOOLBAR_TB_SRCH));
-
+ s->state.flags,
+ gemtk_obj_get_text(obj, TOOLBAR_TB_SRCH));
}
struct s_search_form_session * nsatari_search_session_create(OBJECT * obj,
- struct gui_window *gw)
+ struct gui_window *gw)
{
struct s_search_form_session *sfs;
diff --git a/atari/settings.c b/atari/settings.c
index fe42f2a..e921da2 100644
--- a/atari/settings.c
+++ b/atari/settings.c
@@ -1,3 +1,22 @@
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
@@ -150,7 +169,7 @@ static char **read_locales(void)
warn_user("Failed to load locales: %s",buf);
return(NULL);
} else {
- LOG(("Reading locales from: %s...", buf));
+ LOG("Reading locales from: %s...", buf);
}
/* Count items: */
@@ -958,12 +977,12 @@ void open_settings(void)
void close_settings(void)
{
- LOG((""));
+ LOG("");
gemtk_wm_remove(settings_guiwin);
settings_guiwin = NULL;
wind_close(h_aes_win);
wind_delete(h_aes_win);
h_aes_win = 0;
- LOG(("Done"));
+ LOG("Done");
}
diff --git a/atari/settings.h b/atari/settings.h
index 87597e6..ac7bd8a 100644
--- a/atari/settings.h
+++ b/atari/settings.h
@@ -1,7 +1,25 @@
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
#ifndef NS_ATARI_SETTINGS
#define NS_ATARI_SETTINGS
-
void open_settings(void);
void close_settings(void);
diff --git a/atari/statusbar.c b/atari/statusbar.c
old mode 100755
new mode 100644
index b10a95a..c9d0f78
--- a/atari/statusbar.c
+++ b/atari/statusbar.c
@@ -166,7 +166,7 @@ CMP_STATUSBAR sb_create( struct gui_window * gw )
void sb_destroy( CMP_STATUSBAR s )
{
- LOG(("%s\n", __FUNCTION__ ));
+ LOG("%s\n", __FUNCTION__);
if( s ) {
if( s->comp ){
mt_CompDelete( &app, s->comp );
@@ -206,7 +206,7 @@ CMP_STATUSBAR sb_create( struct gui_window * gw )
void sb_destroy( CMP_STATUSBAR s )
{
- LOG(("%s\n", __FUNCTION__ ));
+ LOG("%s\n", __FUNCTION__);
if( s ) {
free( s );
}
diff --git a/atari/statusbar.h b/atari/statusbar.h
old mode 100755
new mode 100644
index 7739c6f..8ac0904
--- a/atari/statusbar.h
+++ b/atari/statusbar.h
@@ -1,41 +1,40 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_ATARI_STATUSBAR
-#define NS_ATARI_STATUSBAR
-
-#define STATUSBAR_HEIGHT 16
-#define STATUSBAR_MAX_SLEN 255
-
-struct s_statusbar
-{
-#ifdef WITH_COMPONENT_STATUSBAR
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_STATUSBAR
+#define NS_ATARI_STATUSBAR
+
+#define STATUSBAR_HEIGHT 16
+#define STATUSBAR_MAX_SLEN 255
+
+struct s_statusbar {
+#ifdef WITH_COMPONENT_STATUSBAR
COMPONENT * comp;
-#endif
- char text[STATUSBAR_MAX_SLEN+1];
- size_t textlen;
+#endif
+ char text[STATUSBAR_MAX_SLEN+1];
+ size_t textlen;
bool attached;
- short aes_win;
-};
-
-
-CMP_STATUSBAR sb_create( struct gui_window * gw );
-void sb_destroy( CMP_STATUSBAR s );
+ short aes_win;
+};
+
+CMP_STATUSBAR sb_create( struct gui_window * gw );
+void sb_destroy( CMP_STATUSBAR s );
void sb_set_text( CMP_STATUSBAR sb , const char * text );
-void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw);
-#endif
+void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw);
+
+#endif
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 0286181..e830679 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -69,15 +69,14 @@ enum e_toolbar_button_states {
struct s_toolbar;
-struct s_tb_button
-{
+struct s_tb_button {
short rsc_id;
void (*cb_click)(struct s_toolbar *tb);
hlcache_handle *icon[TOOLBAR_BUTTON_NUM_STATES];
struct s_toolbar *owner;
- enum e_toolbar_button_states state;
- short index;
- GRECT area;
+ enum e_toolbar_button_states state;
+ short index;
+ GRECT area;
};
@@ -97,50 +96,48 @@ static int area_full_height = 0;
static float toolbar_url_scale = 1.0;
static plot_font_style_t font_style_url = {
- .family = PLOT_FONT_FAMILY_SANS_SERIF,
- .size = 14*FONT_SIZE_SCALE,
- .weight = 400,
- .flags = FONTF_NONE,
- .background = 0xffffff,
- .foreground = 0x0
- };
+ .family = PLOT_FONT_FAMILY_SANS_SERIF,
+ .size = 14*FONT_SIZE_SCALE,
+ .weight = 400,
+ .flags = FONTF_NONE,
+ .background = 0xffffff,
+ .foreground = 0x0
+};
/* prototypes & order for button widgets: */
-
-static struct s_tb_button tb_buttons[] =
-{
+static struct s_tb_button tb_buttons[] = {
{
- TOOLBAR_BT_BACK,
- toolbar_back_click,
- {0,0},
- 0, 0, 0, {0,0,0,0}
- },
+ TOOLBAR_BT_BACK,
+ toolbar_back_click,
+ {0,0},
+ 0, 0, 0, {0,0,0,0}
+ },
{
- TOOLBAR_BT_HOME,
- toolbar_home_click,
- {0,0},
- 0, 0, 0, {0,0,0,0}
- },
+ TOOLBAR_BT_HOME,
+ toolbar_home_click,
+ {0,0},
+ 0, 0, 0, {0,0,0,0}
+ },
{
- TOOLBAR_BT_FORWARD,
- toolbar_forward_click,
- {0,0},
- 0, 0, 0, {0,0,0,0}
- },
+ TOOLBAR_BT_FORWARD,
+ toolbar_forward_click,
+ {0,0},
+ 0, 0, 0, {0,0,0,0}
+ },
{
- TOOLBAR_BT_STOP,
- toolbar_stop_click,
- {0,0},
- 0, 0, 0, {0,0,0,0}
- },
+ TOOLBAR_BT_STOP,
+ toolbar_stop_click,
+ {0,0},
+ 0, 0, 0, {0,0,0,0}
+ },
{
- TOOLBAR_BT_RELOAD,
- toolbar_reload_click,
- {0,0},
- 0, 0, 0, {0,0,0,0}
- },
+ TOOLBAR_BT_RELOAD,
+ toolbar_reload_click,
+ {0,0},
+ 0, 0, 0, {0,0,0,0}
+ },
{ 0, 0, {0,0}, 0, -1, 0, {0,0,0,0}}
};
@@ -148,8 +145,7 @@ struct s_toolbar_style {
int font_height_pt;
};
-static struct s_toolbar_style toolbar_styles[] =
-{
+static struct s_toolbar_style toolbar_styles[] = {
/* small (18 px height) */
{9},
/* medium (default - 26 px height) */
@@ -161,16 +157,16 @@ static struct s_toolbar_style toolbar_styles[] =
};
static const struct redraw_context toolbar_rdrw_ctx = {
- .interactive = true,
- .background_images = true,
- .plot = &atari_plotters
- };
+ .interactive = true,
+ .background_images = true,
+ .plot = &atari_plotters
+};
static void tb_txt_request_redraw(void *data, int x, int y, int w, int h );
/**
-* Find a button for a specific resource ID
-*/
+ * Find a button for a specific resource ID
+ */
static struct s_tb_button *find_button(struct s_toolbar *tb, int rsc_id)
{
int i = 0;
@@ -184,54 +180,54 @@ static struct s_tb_button *find_button(struct s_toolbar *tb, int rsc_id)
}
/**
-* Callback for textarea redraw
-*/
+ * Callback for textarea redraw
+ */
static void tb_txt_request_redraw(void *data, int x, int y, int w, int h)
{
- GRECT area;
+ GRECT area;
struct s_toolbar * tb = (struct s_toolbar *)data;
if (tb->attached == false) {
- return;
- }
+ return;
+ }
toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area);
area.g_x += x;
area.g_y += y;
area.g_w = w;
area.g_h = h;
- //dbg_grect("tb_txt_request_redraw", &area);
+ /* dbg_grect("tb_txt_request_redraw", &area); */
window_schedule_redraw_grect(tb->owner, &area);
- return;
+ return;
}
static void tb_txt_callback(void *data, struct textarea_msg *msg)
{
switch (msg->type) {
- case TEXTAREA_MSG_DRAG_REPORT:
+ case TEXTAREA_MSG_DRAG_REPORT:
break;
- case TEXTAREA_MSG_REDRAW_REQUEST:
- tb_txt_request_redraw(data,
- msg->data.redraw.x0, msg->data.redraw.y0,
- msg->data.redraw.x1 - msg->data.redraw.x0,
- msg->data.redraw.y1 - msg->data.redraw.y0);
+ case TEXTAREA_MSG_REDRAW_REQUEST:
+ tb_txt_request_redraw(data,
+ msg->data.redraw.x0, msg->data.redraw.y0,
+ msg->data.redraw.x1 - msg->data.redraw.x0,
+ msg->data.redraw.y1 - msg->data.redraw.y0);
break;
- default:
+ default:
break;
}
}
static struct s_tb_button *button_init(struct s_toolbar *tb, OBJECT * tree, int index,
- struct s_tb_button * instance)
+ struct s_tb_button * instance)
{
*instance = tb_buttons[index];
instance->owner = tb;
- return(instance);
+ return(instance);
}
@@ -244,12 +240,12 @@ void toolbar_init( void )
{
static USERBLK userblk;
- aes_toolbar = gemtk_obj_get_tree(TOOLBAR);
- throbber_form = gemtk_obj_get_tree(THROBBER);
+ aes_toolbar = gemtk_obj_get_tree(TOOLBAR);
+ throbber_form = gemtk_obj_get_tree(THROBBER);
userblk.ub_code = toolbar_url_userdraw;
- userblk.ub_parm = (long) aes_toolbar[TOOLBAR_AREA_URL].ob_spec.userblk;
- aes_toolbar[TOOLBAR_AREA_URL].ob_spec.userblk = &userblk;
+ userblk.ub_parm = (long) aes_toolbar[TOOLBAR_AREA_URL].ob_spec.userblk;
+ aes_toolbar[TOOLBAR_AREA_URL].ob_spec.userblk = &userblk;
aes_toolbar[TOOLBAR_CB_SHOWALL].ob_state &= ~OS_SELECTED;
aes_toolbar[TOOLBAR_CB_CASESENSE].ob_state &= ~OS_SELECTED;
@@ -257,11 +253,11 @@ void toolbar_init( void )
/* init default values: */
gemtk_obj_set_str_safe(aes_toolbar, TOOLBAR_TB_SRCH, (char*)"");
- area_full_height = aes_toolbar->ob_height;
+ area_full_height = aes_toolbar->ob_height;
area_search_height = aes_toolbar[TOOLBAR_AREA_SEARCH].ob_height;
area_navigation_height = aes_toolbar[TOOLBAR_AREA_NAVIGATION].ob_height;
- init = true;
+ init = true;
}
@@ -276,7 +272,7 @@ struct s_toolbar *toolbar_create(struct s_gui_win_root *owner)
int i;
struct s_toolbar *t;
- LOG((""));
+ LOG("");
assert(init == true);
@@ -327,22 +323,21 @@ struct s_toolbar *toolbar_create(struct s_gui_win_root *owner)
ta_setup.text.foreground = 0x000000;
ta_setup.text.background = 0xffffff;
t->url.textarea = textarea_create(ta_flags, &ta_setup,
- tb_txt_callback, t);
+ tb_txt_callback, t);
/* create the throbber widget: */
t->throbber.index = THROBBER_INACTIVE_INDEX;
t->throbber.max_index = THROBBER_MAX_INDEX;
t->throbber.running = false;
- LOG(("created toolbar: %p, root: %p, textarea: %p, throbber: %p", t,
- owner, t->url.textarea, t->throbber));
+ LOG("created toolbar: %p, root: %p, textarea: %p, throbber: %p", t, owner, t->url.textarea, t->throbber);
return( t );
}
void toolbar_destroy(struct s_toolbar *tb)
{
- free(tb->buttons);
+ free(tb->buttons);
free(tb->form);
textarea_destroy(tb->url.textarea);
@@ -369,102 +364,101 @@ static int toolbar_calculate_height(struct s_toolbar *tb)
static void toolbar_reflow(struct s_toolbar *tb)
{
- int i;
- short offx, offy;
+ int i;
+ short offx, offy;
- // position toolbar areas:
- tb->form->ob_x = tb->area.g_x;
- tb->form->ob_y = tb->area.g_y;
- tb->form->ob_width = tb->area.g_w;
- tb->form->ob_height = toolbar_calculate_height(tb);
+ // position toolbar areas:
+ tb->form->ob_x = tb->area.g_x;
+ tb->form->ob_y = tb->area.g_y;
+ tb->form->ob_width = tb->area.g_w;
+ tb->form->ob_height = toolbar_calculate_height(tb);
// expand the "main" areas to the current width:
- tb->form[TOOLBAR_AREA_NAVIGATION].ob_width = tb->area.g_w;
- tb->form[TOOLBAR_AREA_SEARCH].ob_width = tb->area.g_w;
+ tb->form[TOOLBAR_AREA_NAVIGATION].ob_width = tb->area.g_w;
+ tb->form[TOOLBAR_AREA_SEARCH].ob_width = tb->area.g_w;
- if (tb->search_visible) {
+ if (tb->search_visible) {
tb->form[TOOLBAR_AREA_SEARCH].ob_state &= ~OF_HIDETREE;
- } else {
- tb->form[TOOLBAR_AREA_SEARCH].ob_state |= OF_HIDETREE;
+ } else {
+ tb->form[TOOLBAR_AREA_SEARCH].ob_state |= OF_HIDETREE;
- }
+ }
// align TOOLBAR_AREA_RIGHT IBOX at right edge:
- tb->form[TOOLBAR_AREA_RIGHT].ob_x = tb->area.g_w
- - tb->form[TOOLBAR_AREA_RIGHT].ob_width;
+ tb->form[TOOLBAR_AREA_RIGHT].ob_x = tb->area.g_w
+ - tb->form[TOOLBAR_AREA_RIGHT].ob_width;
// center the URL area:
- tb->form[TOOLBAR_AREA_URL].ob_width = tb->area.g_w
- - (tb->form[TOOLBAR_AREA_LEFT].ob_width
- + tb->form[TOOLBAR_AREA_RIGHT].ob_width);
+ tb->form[TOOLBAR_AREA_URL].ob_width = tb->area.g_w
+ - (tb->form[TOOLBAR_AREA_LEFT].ob_width
+ + tb->form[TOOLBAR_AREA_RIGHT].ob_width);
- // position throbber image above IBOX:
- objc_offset(tb->form, TOOLBAR_THROBBER_AREA, &offx, &offy);
- throbber_form[tb->throbber.index].ob_x = offx;
- throbber_form[tb->throbber.index].ob_y = offy;
+ // position throbber image above IBOX:
+ objc_offset(tb->form, TOOLBAR_THROBBER_AREA, &offx, &offy);
+ throbber_form[tb->throbber.index].ob_x = offx;
+ throbber_form[tb->throbber.index].ob_y = offy;
// align the search button:
tb->form[TOOLBAR_SEARCH_ALIGN_RIGHT].ob_x = tb->area.g_w
- - tb->form[TOOLBAR_SEARCH_ALIGN_RIGHT].ob_width;
-
- // set button states:
- for (i=0; i < tb->btcnt; i++ ) {
- if (tb->buttons[i].state == button_off) {
- tb->form[tb->buttons[i].rsc_id].ob_state |= OS_DISABLED;
- }
- else if (tb->buttons[i].state == button_on) {
- tb->form[tb->buttons[i].rsc_id].ob_state &= ~OS_DISABLED;
- }
+ - tb->form[TOOLBAR_SEARCH_ALIGN_RIGHT].ob_width;
+
+ // set button states:
+ for (i=0; i < tb->btcnt; i++ ) {
+ if (tb->buttons[i].state == button_off) {
+ tb->form[tb->buttons[i].rsc_id].ob_state |= OS_DISABLED;
+ } else if (tb->buttons[i].state == button_on) {
+ tb->form[tb->buttons[i].rsc_id].ob_state &= ~OS_DISABLED;
+ }
}
- tb->reflow = false;
- // TODO: iterate through all other toolbars and set reflow = true
+ tb->reflow = false;
+ // TODO: iterate through all other toolbars and set reflow = true
}
void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
{
- GRECT area, area_ro;
+ GRECT area, area_ro;
- if (tb->attached == false) {
- return;
- }
+ if (tb->attached == false) {
+ return;
+ }
- if(tb->reflow == true)
- toolbar_reflow(tb);
+ if(tb->reflow == true)
+ toolbar_reflow(tb);
//dbg_grect("toolbar redraw clip", clip);
/* Redraw the AES objects: */
- objc_draw_grect(tb->form,0,8,clip);
- objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
+ objc_draw_grect(tb->form,0,8,clip);
+ objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
- toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area_ro);
- area = area_ro;
+ toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area_ro);
+ area = area_ro;
- if (rc_intersect(clip, &area)) {
- float old_scale;
+ if (rc_intersect(clip, &area)) {
+ float old_scale;
- plot_set_dimensions(area_ro.g_x, area_ro.g_y, area_ro.g_w, area_ro.g_h);
- struct rect r = {
- .x0 = MAX(0,area.g_x - area_ro.g_x),
- .y0 = MAX(0,area.g_y - area_ro.g_y),
- .x1 = MAX(0,area.g_x - area_ro.g_x) + area.g_w,
- .y1 = MAX(0,area.g_y - area_ro.g_y) + area.g_h
+ plot_set_dimensions(area_ro.g_x, area_ro.g_y, area_ro.g_w, area_ro.g_h);
+ struct rect r = {
+ .x0 = MAX(0,area.g_x - area_ro.g_x),
+ .y0 = MAX(0,area.g_y - area_ro.g_y),
+ .x1 = MAX(0,area.g_x - area_ro.g_x) + area.g_w,
+ .y1 = MAX(0,area.g_y - area_ro.g_y) + area.g_h
};
//dbg_rect("tb textarea clip: ", &r);
// TODO: let this be handled by an userdef object redraw function:
/* Redraw the url input: */
old_scale = plot_set_scale(toolbar_url_scale);
- textarea_redraw(tb->url.textarea, 0, 0, 0xffffff, 1.0, &r,
- &toolbar_rdrw_ctx);
- plot_set_scale(old_scale);
- }
+ textarea_redraw(tb->url.textarea, 0, 0, 0xffffff, 1.0, &r,
+ &toolbar_rdrw_ctx);
+ plot_set_scale(old_scale);
+ }
}
void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
- short button)
+ short button)
{
- LOG((""));
+ LOG("");
struct s_tb_button * bt;
bool enable = false;
@@ -473,13 +467,13 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
assert(bw != NULL);
if (button == TOOLBAR_BT_BACK || button <= 0 ) {
- bt = find_button(tb, TOOLBAR_BT_BACK);
+ bt = find_button(tb, TOOLBAR_BT_BACK);
enable = browser_window_back_available(bw);
- if (enable) {
- bt->state = button_on;
- } else {
- bt->state = button_off;
- }
+ if (enable) {
+ bt->state = button_on;
+ } else {
+ bt->state = button_off;
+ }
}
if (button == TOOLBAR_BT_HOME || button <= 0 ) {
@@ -489,46 +483,45 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
if (button == TOOLBAR_BT_FORWARD || button <= 0 ) {
bt = find_button(tb, TOOLBAR_BT_FORWARD);
enable = browser_window_forward_available(bw);
- if (enable) {
- bt->state = button_on;
- } else {
- bt->state = button_off;
- }
+ if (enable) {
+ bt->state = button_on;
+ } else {
+ bt->state = button_off;
+ }
}
if (button == TOOLBAR_BT_RELOAD || button <= 0 ) {
- bt = find_button(tb, TOOLBAR_BT_RELOAD);
+ bt = find_button(tb, TOOLBAR_BT_RELOAD);
enable = browser_window_reload_available(bw);
- if (enable) {
- bt->state = button_on;
- } else {
- bt->state = button_off;
- }
+ if (enable) {
+ bt->state = button_on;
+ } else {
+ bt->state = button_off;
+ }
}
if (button == TOOLBAR_BT_STOP || button <= 0) {
- bt = find_button(tb, TOOLBAR_BT_STOP);
+ bt = find_button(tb, TOOLBAR_BT_STOP);
enable = browser_window_stop_available(bw);
- if (enable) {
- bt->state = button_on;
- } else {
- bt->state = button_off;
- }
+ if (enable) {
+ bt->state = button_on;
+ } else {
+ bt->state = button_off;
+ }
}
- if (tb->attached) {
- if (button > 0) {
- toolbar_get_grect(tb, button, &area);
- window_schedule_redraw_grect(tb->owner, &area);
- }
- else {
- toolbar_get_grect(tb, TOOLBAR_AREA_LEFT, &area);
- window_schedule_redraw_grect(tb->owner, &area);
-
- toolbar_get_grect(tb, TOOLBAR_AREA_RIGHT, &area);
- window_schedule_redraw_grect(tb->owner, &area);
- }
- }
+ if (tb->attached) {
+ if (button > 0) {
+ toolbar_get_grect(tb, button, &area);
+ window_schedule_redraw_grect(tb->owner, &area);
+ } else {
+ toolbar_get_grect(tb, TOOLBAR_AREA_LEFT, &area);
+ window_schedule_redraw_grect(tb->owner, &area);
+
+ toolbar_get_grect(tb, TOOLBAR_AREA_RIGHT, &area);
+ window_schedule_redraw_grect(tb->owner, &area);
+ }
+ }
}
void toolbar_set_width(struct s_toolbar *tb, short w)
@@ -541,12 +534,12 @@ void toolbar_set_width(struct s_toolbar *tb, short w)
tb->area.g_w = w;
- /* reflow now, just for url input calucation: */
- toolbar_reflow(tb);
- /* this will request an textarea redraw: */
- textarea_set_dimensions(tb->url.textarea,
- tb->form[TOOLBAR_AREA_URL].ob_width,
- tb->form[TOOLBAR_AREA_URL].ob_height);
+ /* reflow now, just for url input calucation: */
+ toolbar_reflow(tb);
+ /* this will request an textarea redraw: */
+ textarea_set_dimensions(tb->url.textarea,
+ tb->form[TOOLBAR_AREA_URL].ob_width,
+ tb->form[TOOLBAR_AREA_URL].ob_height);
tb->reflow = true;
}
}
@@ -566,56 +559,56 @@ void toolbar_set_origin(struct s_toolbar *tb, short x, short y)
void toolbar_set_dimensions(struct s_toolbar *tb, GRECT *area)
{
- if (area->g_w != tb->area.g_w) {
-
- tb->area = *area;
-
- /* reflow now, just for url input calucation: */
- toolbar_reflow(tb);
- /* this will request an textarea redraw: */
- textarea_set_dimensions(tb->url.textarea,
- tb->form[TOOLBAR_AREA_URL].ob_width,
- tb->form[TOOLBAR_AREA_URL].ob_height-1);
- }
- else {
- tb->area = *area;
- }
+ if (area->g_w != tb->area.g_w) {
+
+ tb->area = *area;
+
+ /* reflow now, just for url input calucation: */
+ toolbar_reflow(tb);
+ /* this will request an textarea redraw: */
+ textarea_set_dimensions(tb->url.textarea,
+ tb->form[TOOLBAR_AREA_URL].ob_width,
+ tb->form[TOOLBAR_AREA_URL].ob_height-1);
+ }
+ else {
+ tb->area = *area;
+ }
/* reflow for next redraw: */
- /* TODO: that's only required because we do not reset others toolbars reflow
- state on reflow */
- tb->reflow = true;
+ /* TODO: that's only required because we do not reset others toolbars reflow
+ state on reflow */
+ tb->reflow = true;
}
void toolbar_set_url(struct s_toolbar *tb, const char * text)
{
- LOG((""));
- textarea_set_text(tb->url.textarea, text);
-
- if (tb->attached && tb->visible) {
- GRECT area;
- toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area);
- window_schedule_redraw_grect(tb->owner, &area);
- struct gui_window * gw = window_get_active_gui_window(tb->owner);
- assert(gw != NULL);
- toolbar_update_buttons(tb, gw->browser->bw , 0);
+ LOG("");
+ textarea_set_text(tb->url.textarea, text);
+
+ if (tb->attached && tb->visible) {
+ GRECT area;
+ toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area);
+ window_schedule_redraw_grect(tb->owner, &area);
+ struct gui_window * gw = window_get_active_gui_window(tb->owner);
+ assert(gw != NULL);
+ toolbar_update_buttons(tb, gw->browser->bw , 0);
}
}
void toolbar_set_throbber_state(struct s_toolbar *tb, bool active)
{
- GRECT throbber_area;
-
- tb->throbber.running = active;
- if (active) {
- tb->throbber.index = THROBBER_MIN_INDEX;
- } else {
- tb->throbber.index = THROBBER_INACTIVE_INDEX;
- }
-
- tb->reflow = true;
- toolbar_get_grect(tb, TOOLBAR_THROBBER_AREA, &throbber_area);
- window_schedule_redraw_grect(tb->owner, &throbber_area);
+ GRECT throbber_area;
+
+ tb->throbber.running = active;
+ if (active) {
+ tb->throbber.index = THROBBER_MIN_INDEX;
+ } else {
+ tb->throbber.index = THROBBER_INACTIVE_INDEX;
+ }
+
+ tb->reflow = true;
+ toolbar_get_grect(tb, TOOLBAR_THROBBER_AREA, &throbber_area);
+ window_schedule_redraw_grect(tb->owner, &throbber_area);
}
void toolbar_set_visible(struct s_toolbar *tb, short area, bool visible)
@@ -628,8 +621,7 @@ void toolbar_set_visible(struct s_toolbar *tb, short area, bool visible)
tb->visible = false;
tb->reflow = true;
}
- }
- else if (area == TOOLBAR_AREA_SEARCH) {
+ } else if (area == TOOLBAR_AREA_SEARCH) {
tb->search_visible = visible;
tb->reflow = true;
OBJECT *frm = toolbar_get_form(tb);
@@ -648,35 +640,36 @@ void toolbar_set_reflow(struct s_toolbar *tb, bool do_reflow)
void toolbar_set_attached(struct s_toolbar *tb, bool attached)
{
- tb->attached = attached;
+ tb->attached = attached;
}
void toolbar_throbber_progress(struct s_toolbar *tb)
{
- GRECT throbber_area;
+ GRECT throbber_area;
- assert(tb->throbber.running == true);
+ assert(tb->throbber.running == true);
- if(tb->throbber.running == false)
- return;
+ if(tb->throbber.running == false)
+ return;
- tb->throbber.index++;
- if(tb->throbber.index > THROBBER_MAX_INDEX)
- tb->throbber.index = THROBBER_MIN_INDEX;
+ tb->throbber.index++;
+ if (tb->throbber.index > THROBBER_MAX_INDEX) {
+ tb->throbber.index = THROBBER_MIN_INDEX;
+ }
- tb->reflow = true;
- toolbar_get_grect(tb, TOOLBAR_THROBBER_AREA, &throbber_area);
- window_schedule_redraw_grect(tb->owner, &throbber_area);
+ tb->reflow = true;
+ toolbar_get_grect(tb, TOOLBAR_THROBBER_AREA, &throbber_area);
+ window_schedule_redraw_grect(tb->owner, &throbber_area);
}
bool toolbar_text_input(struct s_toolbar *tb, char *text)
{
- bool handled = true;
+ bool handled = true;
- LOG((""));
+ LOG("");
- return(handled);
+ return(handled);
}
bool toolbar_key_input(struct s_toolbar *tb, short nkc)
@@ -695,8 +688,8 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
if ((nkc&0xFF) >= 9) {
ret = textarea_keypress(tb->url.textarea, ucs4);
}
- }
- else if (ik == NS_KEY_CR || ik == NS_KEY_NL) {
+
+ } else if (ik == NS_KEY_CR || ik == NS_KEY_NL) {
nsurl *url;
char tmp_url[PATH_MAX];
if ( textarea_get_text( tb->url.textarea, tmp_url, PATH_MAX) > 0 ) {
@@ -705,15 +698,15 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
warn_user("NoMemory", 0);
} else {
browser_window_navigate(gw->browser->bw, url, NULL,
- BW_NAVIGATE_HISTORY,
- NULL, NULL, NULL);
+ BW_NAVIGATE_HISTORY,
+ NULL, NULL, NULL);
nsurl_unref(url);
}
ret = true;
}
- }
- else if (ik == NS_KEY_COPY_SELECTION) {
+
+ } else if (ik == NS_KEY_COPY_SELECTION) {
// copy whole text
char * text;
int len;
@@ -724,8 +717,8 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
scrap_txt_write(text);
free( text );
}
- }
- else if ( ik == NS_KEY_PASTE) {
+
+ } else if ( ik == NS_KEY_PASTE) {
char * clip = scrap_txt_read();
if ( clip != NULL ){
int clip_length = strlen( clip );
@@ -743,13 +736,14 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
}
free( clip );
}
- }
- else if (ik == NS_KEY_ESCAPE) {
+
+ } else if (ik == NS_KEY_ESCAPE) {
textarea_keypress( tb->url.textarea, NS_KEY_SELECT_ALL );
textarea_keypress( tb->url.textarea, NS_KEY_DELETE_LEFT );
- }
- else {
+
+ } else {
ret = textarea_keypress( tb->url.textarea, ik );
+
}
return( ret );
@@ -758,36 +752,35 @@ bool toolbar_key_input(struct s_toolbar *tb, short nkc)
void toolbar_mouse_input(struct s_toolbar *tb, short obj, short button)
{
- LOG((""));
- GRECT work;
+ LOG("");
+ GRECT work;
short mx, my, mb, kstat;
struct gui_window * gw;
- if (obj==TOOLBAR_AREA_URL){
+ if (obj==TOOLBAR_AREA_URL) {
+ graf_mkstate(&mx, &my, &mb, &kstat);
+ toolbar_get_grect(tb, TOOLBAR_AREA_URL, &work);
+ mx -= work.g_x;
+ my -= work.g_y;
- graf_mkstate(&mx, &my, &mb, &kstat);
- toolbar_get_grect(tb, TOOLBAR_AREA_URL, &work);
- mx -= work.g_x;
- my -= work.g_y;
+ /* TODO: reset mouse state of browser window? */
+ /* select whole text when newly focused, otherwise set caret to
+ end of text */
+ if (!window_url_widget_has_focus(tb->owner)) {
+ window_set_focus(tb->owner, URL_WIDGET, (void*)&tb->url);
- /* TODO: reset mouse state of browser window? */
- /* select whole text when newly focused, otherwise set caret to
- end of text */
- if (!window_url_widget_has_focus(tb->owner)) {
- window_set_focus(tb->owner, URL_WIDGET, (void*)&tb->url);
- }
- /* url widget has focus and mouse button is still pressed... */
- else if (mb & 1) {
+ } else if (mb & 1) {
+ /* url widget has focus and mouse button is still pressed... */
- textarea_mouse_action(tb->url.textarea, BROWSER_MOUSE_DRAG_1,
- mx, my );
+ textarea_mouse_action(tb->url.textarea, BROWSER_MOUSE_DRAG_1,
+ mx, my );
short prev_x = mx;
short prev_y = my;
do {
if (abs(prev_x-mx) > 5 || abs(prev_y-my) > 5) {
textarea_mouse_action( tb->url.textarea,
- BROWSER_MOUSE_HOLDING_1, mx, my );
+ BROWSER_MOUSE_HOLDING_1, mx, my );
prev_x = mx;
prev_y = my;
window_schedule_redraw_grect(tb->owner, &work);
@@ -796,121 +789,118 @@ void toolbar_mouse_input(struct s_toolbar *tb, short obj, short button)
graf_mkstate( &mx, &my, &mb, &kstat );
mx = mx - (work.g_x);
my = my - (work.g_y);
- } while (mb & 1);
+ } while (mb & 1);
textarea_mouse_action( tb->url.textarea, BROWSER_MOUSE_HOVER, mx,
- my);
- }
- else if (button & 2) {
+ my);
+
+ } else if (button & 2) {
// TODO: open a context popup
- }
- else {
- /* when execution reaches here, mouse input is a click or dclick */
- /* TODO: recognize click + shitoolbar_update_buttonsft key */
- if (aes_event_out.emo_mclicks == 2 ) {
+
+ } else {
+ /* when execution reaches here, mouse input is a click or dclick */
+ /* TODO: recognize click + shitoolbar_update_buttonsft key */
+ if (aes_event_out.emo_mclicks == 2 ) {
textarea_mouse_action( tb->url.textarea,
- BROWSER_MOUSE_DOUBLE_CLICK | BROWSER_MOUSE_CLICK_1, mx,
- my);
- toolbar_get_grect(tb, TOOLBAR_AREA_URL, &work);
- window_schedule_redraw_grect(tb->owner, &work);
+ BROWSER_MOUSE_DOUBLE_CLICK | BROWSER_MOUSE_CLICK_1, mx,
+ my);
+ toolbar_get_grect(tb, TOOLBAR_AREA_URL, &work);
+ window_schedule_redraw_grect(tb->owner, &work);
} else {
textarea_mouse_action(tb->url.textarea,
- BROWSER_MOUSE_PRESS_1, mx, my );
+ BROWSER_MOUSE_PRESS_1, mx, my );
}
- }
- }
- else if(obj==TOOLBAR_TB_SRCH) {
+ }
+
+ } else if(obj==TOOLBAR_TB_SRCH) {
window_set_focus(tb->owner, SEARCH_INPUT, NULL);
- }
- else if (obj==TOOLBAR_BT_SEARCH_FWD) {
+
+ } else if (obj==TOOLBAR_BT_SEARCH_FWD) {
gw = tb->owner->active_gui_window;
assert(gw->search);
nsatari_search_perform(gw->search, tb->form, SEARCH_FLAG_FORWARDS);
- }
- else if (obj==TOOLBAR_BT_SEARCH_BACK) {
+
+ } else if (obj==TOOLBAR_BT_SEARCH_BACK) {
gw = tb->owner->active_gui_window;
assert(gw->search);
nsatari_search_perform(gw->search, tb->form, 0);
- }
- else if (obj==TOOLBAR_BT_CLOSE_SEARCH) {
+
+ } else if (obj==TOOLBAR_BT_CLOSE_SEARCH) {
tb->form[TOOLBAR_BT_CLOSE_SEARCH].ob_state &= ~OS_SELECTED;
window_close_search(tb->owner);
+ } else {
+ struct s_tb_button *bt = find_button(tb, obj);
+ if (bt != NULL && bt->state != button_off) {
+ bt->cb_click(tb);
+ struct gui_window * gw = window_get_active_gui_window(tb->owner);
+ toolbar_update_buttons(tb, gw->browser->bw, 0);
+ }
}
- else {
- struct s_tb_button *bt = find_button(tb, obj);
- if (bt != NULL && bt->state != button_off) {
- bt->cb_click(tb);
- struct gui_window * gw = window_get_active_gui_window(tb->owner);
- toolbar_update_buttons(tb, gw->browser->bw, 0);
- }
-
- }
}
/**
-* Receive a specific region of the toolbar.
-* @param tb - the toolbar pointer
-* @param which - the area to retrieve: 0 to receive the workarea,
- all other values must be
- an resource ID of the TOOLBAR tree.
-* @param dst - GRECT pointer receiving the area.
-*/
+ * Receive a specific region of the toolbar.
+ * @param tb - the toolbar pointer
+ * @param which - the area to retrieve: 0 to receive the workarea,
+ all other values must be
+ an resource ID of the TOOLBAR tree.
+ * @param dst - GRECT pointer receiving the area.
+ */
void toolbar_get_grect(struct s_toolbar *tb, short which, GRECT *dst)
{
- #define LAST_TOOLBAR_AREA TOOLBAR_AREA_SEARCH
+#define LAST_TOOLBAR_AREA TOOLBAR_AREA_SEARCH
- if (tb->reflow == true) {
- toolbar_reflow(tb);
- }
+ if (tb->reflow == true) {
+ toolbar_reflow(tb);
+ }
- objc_offset(tb->form, which, &dst->g_x, &dst->g_y);
+ objc_offset(tb->form, which, &dst->g_x, &dst->g_y);
- dst->g_w = tb->form[which].ob_width;
- dst->g_h = tb->form[which].ob_height;
- //tb->form[which].ob_height;
+ dst->g_w = tb->form[which].ob_width;
+ dst->g_h = tb->form[which].ob_height;
+ //tb->form[which].ob_height;
- //printf("Toolbar get grect (%d): ", which);
- //dbg_grect("", dst);
+ //printf("Toolbar get grect (%d): ", which);
+ //dbg_grect("", dst);
- #undef LAST_TOOLBAR_AREA
+#undef LAST_TOOLBAR_AREA
}
struct textarea *toolbar_get_textarea(struct s_toolbar *tb,
- enum toolbar_textarea which)
+ enum toolbar_textarea which)
{
- return(tb->url.textarea);
+ return(tb->url.textarea);
}
char *toolbar_get_url(struct s_toolbar *tb)
{
- char * c_url = NULL;
- int c_url_len = 0;
+ char * c_url = NULL;
+ int c_url_len = 0;
- c_url_len = textarea_get_text(tb->url.textarea, NULL, 0);
+ c_url_len = textarea_get_text(tb->url.textarea, NULL, 0);
- if (c_url_len > -1) {
- c_url = malloc(c_url_len+1);
- textarea_get_text(tb->url.textarea, c_url, c_url_len+1);
- }
+ if (c_url_len > -1) {
+ c_url = malloc(c_url_len+1);
+ textarea_get_text(tb->url.textarea, c_url, c_url_len+1);
+ }
- return(c_url);
+ return(c_url);
}
nsurl * toolbar_get_nsurl(struct s_toolbar * tb)
{
+ nsurl * ns_url = NULL;
+ char * c_url;
- nsurl * ns_url = NULL;
- char * c_url;
-
- c_url = toolbar_get_url(tb);
- if (c_url) {
- nsurl_create(c_url, &ns_url);
- }
+ c_url = toolbar_get_url(tb);
+ if (c_url) {
+ nsurl_create(c_url, &ns_url);
+ }
- return(ns_url);
+ return(ns_url);
}
@@ -923,43 +913,45 @@ OBJECT *toolbar_get_form(struct s_toolbar *tb)
/* public event handler */
void toolbar_back_click(struct s_toolbar *tb)
{
- struct browser_window * bw;
- struct gui_window * gw;
+ struct browser_window * bw;
+ struct gui_window * gw;
- gw = window_get_active_gui_window(tb->owner);
- assert(gw != NULL);
- bw = gw->browser->bw;
- assert(bw != NULL);
+ gw = window_get_active_gui_window(tb->owner);
+ assert(gw != NULL);
+ bw = gw->browser->bw;
+ assert(bw != NULL);
- if( browser_window_back_available(bw) )
+ if( browser_window_back_available(bw) ) {
browser_window_history_back(bw, false);
+ }
}
void toolbar_reload_click(struct s_toolbar *tb)
{
- struct browser_window * bw;
- struct gui_window * gw;
+ struct browser_window * bw;
+ struct gui_window * gw;
- gw = window_get_active_gui_window(tb->owner);
- assert(gw != NULL);
- bw = gw->browser->bw;
- assert(bw != NULL);
+ gw = window_get_active_gui_window(tb->owner);
+ assert(gw != NULL);
+ bw = gw->browser->bw;
+ assert(bw != NULL);
browser_window_reload(bw, true);
}
void toolbar_forward_click(struct s_toolbar *tb)
{
- struct browser_window * bw;
- struct gui_window * gw;
+ struct browser_window * bw;
+ struct gui_window * gw;
- gw = window_get_active_gui_window(tb->owner);
- assert(gw != NULL);
- bw = gw->browser->bw;
- assert(bw != NULL);
+ gw = window_get_active_gui_window(tb->owner);
+ assert(gw != NULL);
+ bw = gw->browser->bw;
+ assert(bw != NULL);
- if (browser_window_forward_available(bw))
+ if (browser_window_forward_available(bw)) {
browser_window_history_forward(bw, false);
+ }
}
void toolbar_home_click(struct s_toolbar *tb)
@@ -975,8 +967,8 @@ void toolbar_home_click(struct s_toolbar *tb)
assert(bw != NULL);
use_url = nsoption_charp(homepage_url);
- if(use_url == NULL || strlen(use_url) == 0){
- use_url = (char*)"about:welcome";
+ if (use_url == NULL || strlen(use_url) == 0){
+ use_url = (char*)"about:welcome";
}
if (nsurl_create(use_url, &url) != NSERROR_OK) {
@@ -989,56 +981,56 @@ void toolbar_home_click(struct s_toolbar *tb)
NULL,
NULL,
NULL);
- nsurl_unref(url);
+ nsurl_unref(url);
}
}
void toolbar_stop_click(struct s_toolbar *tb)
{
- struct browser_window * bw;
- struct gui_window * gw;
+ struct browser_window * bw;
+ struct gui_window * gw;
- gw = window_get_active_gui_window(tb->owner);
+ gw = window_get_active_gui_window(tb->owner);
- assert(gw != NULL);
+ assert(gw != NULL);
- bw = gw->browser->bw;
+ bw = gw->browser->bw;
- assert(bw != NULL);
+ assert(bw != NULL);
browser_window_stop(bw);
}
void toolbar_favorite_click(struct s_toolbar *tb)
{
- nsurl * ns_url = NULL;
- char * c_url;
- int c_url_len = 0;
-
- c_url = toolbar_get_url(tb);
- c_url_len = strlen(c_url);
-
- nsurl_create(c_url, &ns_url);
-
- if (hotlist_has_url(ns_url)) {
- char msg[c_url_len+100];
- snprintf(msg, c_url_len+100, "Really delete from favorites: \"%s\"",
- c_url);
- if(gemtk_msg_box_show(GEMTK_MSG_BOX_CONFIRM, msg)) {
- hotlist_remove_url(ns_url);
- }
- }
- else {
- hotlist_add_url(ns_url);
- }
-
- nsurl_unref(ns_url);
- free(c_url);
+ nsurl * ns_url = NULL;
+ char * c_url;
+ int c_url_len = 0;
+
+ c_url = toolbar_get_url(tb);
+ c_url_len = strlen(c_url);
+
+ nsurl_create(c_url, &ns_url);
+
+ if (hotlist_has_url(ns_url)) {
+ char msg[c_url_len+100];
+ snprintf(msg, c_url_len+100, "Really delete from favorites: \"%s\"",
+ c_url);
+ if (gemtk_msg_box_show(GEMTK_MSG_BOX_CONFIRM, msg)) {
+ hotlist_remove_url(ns_url);
+ }
+
+ } else {
+ hotlist_add_url(ns_url);
+
+ }
+
+ nsurl_unref(ns_url);
+ free(c_url);
}
void toolbar_crypto_click(struct s_toolbar *tb)
{
}
-
diff --git a/atari/toolbar.h b/atari/toolbar.h
index 19063f9..61ae48c 100644
--- a/atari/toolbar.h
+++ b/atari/toolbar.h
@@ -26,37 +26,35 @@ struct s_toolbar;
struct nsurl;
enum toolbar_textarea {
- URL_INPUT_TEXT_AREA = 1
+ URL_INPUT_TEXT_AREA = 1
};
-struct s_url_widget
-{
+struct s_url_widget {
struct textarea *textarea;
- GRECT area;
+ GRECT area;
};
-struct s_throbber_widget
-{
- short index;
- short max_index;
- bool running;
-};
+struct s_throbber_widget {
+ short index;
+ short max_index;
+ bool running;
+};
-struct s_toolbar
-{
+struct s_toolbar {
struct s_gui_win_root *owner;
- struct s_url_widget url;
+ struct s_url_widget url;
struct s_throbber_widget throbber;
OBJECT *form;
- GRECT area;
+ GRECT area;
+
/* size & location of buttons: */
struct s_tb_button * buttons;
int btcnt;
int style;
bool attached;
- bool reflow;
- bool visible;
- bool search_visible;
+ bool reflow;
+ bool visible;
+ bool search_visible;
};
@@ -68,11 +66,11 @@ bool toolbar_text_input(struct s_toolbar *tb, char *text);
bool toolbar_key_input(struct s_toolbar *tb, short nkc);
void toolbar_mouse_input(struct s_toolbar *tb, short obj, short mbut);
void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
- short idx);
+ short idx);
void toolbar_get_grect(struct s_toolbar *tb, short which, GRECT *g);
OBJECT *toolbar_get_form(struct s_toolbar *tb);
struct textarea *toolbar_get_textarea(struct s_toolbar *tb,
- enum toolbar_textarea which);
+ enum toolbar_textarea which);
char *toolbar_get_url(struct s_toolbar *tb);
struct nsurl * toolbar_get_nsurl(struct s_toolbar * tb);
void toolbar_set_throbber_state(struct s_toolbar *tb, bool active);
@@ -86,10 +84,10 @@ void toolbar_set_url(struct s_toolbar *tb, const char *text);
void toolbar_redraw(struct s_toolbar *tb, GRECT *clip);
void toolbar_throbber_progress(struct s_toolbar *tb);
/* public events handlers: */
-void toolbar_back_click(struct s_toolbar *tb);
-void toolbar_reload_click(struct s_toolbar *tb);
-void toolbar_forward_click(struct s_toolbar *tb);
-void toolbar_home_click(struct s_toolbar *tb);
+void toolbar_back_click(struct s_toolbar *tb);
+void toolbar_reload_click(struct s_toolbar *tb);
+void toolbar_forward_click(struct s_toolbar *tb);
+void toolbar_home_click(struct s_toolbar *tb);
void toolbar_stop_click(struct s_toolbar *tb);
void toolbar_favorite_click(struct s_toolbar *tb);
void toolbar_crypto_click(struct s_toolbar *tb);
diff --git a/atari/treeview.c b/atari/treeview.c
index 2f99cbc..20ac3e7 100644
--- a/atari/treeview.c
+++ b/atari/treeview.c
@@ -326,8 +326,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
on_keybd_event(cw, ev_out, msg);
}
if( (ev_out->emo_events & MU_BUTTON) != 0 ) {
- LOG(("Treeview click at: %d,%d\n", ev_out->emo_mouse.p_x,
- ev_out->emo_mouse.p_y));
+ LOG("Treeview click at: %d,%d\n", ev_out->emo_mouse.p_x, ev_out->emo_mouse.p_y);
on_mbutton_event(cw, ev_out, msg);
}
@@ -528,7 +527,7 @@ atari_treeview_create(GUIWIN *win, struct atari_treeview_callbacks * callbacks,
tv = calloc(1, sizeof(struct atari_treeview_window));
if (tv == NULL) {
- LOG(("calloc failed"));
+ LOG("calloc failed");
warn_user(messages_get_errorcode(NSERROR_NOMEM), 0);
return NULL;
}
diff --git a/atari/treeview.h b/atari/treeview.h
index 4412b1d..a6b4a62 100644
--- a/atari/treeview.h
+++ b/atari/treeview.h
@@ -1,19 +1,19 @@
-/*
- * Copyright 2013 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+/*
+ * Copyright 2013 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NSATARI_TREEVIEW_H
@@ -28,9 +28,9 @@
* atari_treeview_create as the flags parameter to have an standardized treeview
* window.
*/
-#define ATARI_TREEVIEW_WIDGETS (CLOSER | MOVER | SIZER| NAME | FULLER | \
- SMALLER | VSLIDE | HSLIDE | UPARROW | DNARROW \
- | LFARROW | RTARROW)
+#define ATARI_TREEVIEW_WIDGETS (CLOSER | MOVER | SIZER| NAME | FULLER | \
+ SMALLER | VSLIDE | HSLIDE | UPARROW | DNARROW | \
+ LFARROW | RTARROW)
enum treeview_area_e {
TREEVIEW_AREA_WORK = 0,
@@ -48,18 +48,12 @@ struct atari_treeview_window;
* These callbacks must be implemented by any atari treeview window.
*/
-// TODO: add drag_status callback
-typedef nserror (*atari_treeview_init2_callback)(struct core_window *cw,
- struct core_window_callback_table * default_callbacks);
+/** \todo atari add drag_status callback */
+typedef nserror (*atari_treeview_init2_callback)(struct core_window *cw, struct core_window_callback_table * default_callbacks);
typedef void (*atari_treeview_finish_callback)(struct core_window *cw);
-typedef void (*atari_treeview_keypress_callback)(struct core_window *cw,
- uint32_t ucs4);
-typedef void (*atari_treeview_mouse_action_callback)(struct core_window *cw,
- browser_mouse_state mouse,
- int x, int y);
-typedef void (*atari_treeview_draw_callback)(struct core_window *cw, int x,
- int y, struct rect *clip,
- const struct redraw_context *ctx);
+typedef void (*atari_treeview_keypress_callback)(struct core_window *cw, uint32_t ucs4);
+typedef void (*atari_treeview_mouse_action_callback)(struct core_window *cw, browser_mouse_state mouse, int x, int y);
+typedef void (*atari_treeview_draw_callback)(struct core_window *cw, int x, int y, struct rect *clip, const struct redraw_context *ctx);
struct atari_treeview_callbacks {
atari_treeview_init2_callback init_phase2;
@@ -74,12 +68,11 @@ struct atari_treeview_callbacks {
* Initalize an window to be an treeview window.
*
*/
-struct core_window *atari_treeview_create(GUIWIN *win,
- struct atari_treeview_callbacks * callbacks,
- void * user_data, uint32_t flags);
+struct core_window *atari_treeview_create(GUIWIN *win, struct atari_treeview_callbacks * callbacks, void * user_data, uint32_t flags);
+
/**
* Free the Treeview, but not the gemtk window used for the treeview.
-*/
+ */
void atari_treeview_delete(struct core_window *cw);
/**
@@ -89,12 +82,12 @@ void atari_treeview_open(struct core_window *cw, GRECT *pos);
/**
* Returns the window "open" state.
-*/
+ */
bool atari_treeview_is_open(struct core_window *cw);
/**
* Closes (hides) the treeview window.
-*/
+ */
void atari_treeview_close(struct core_window *cw);
/**
@@ -105,9 +98,8 @@ GUIWIN * atari_treeview_get_gemtk_window(struct core_window *cw);
/**
* Get an specific area inside the window.
-*/
-void atari_treeview_get_grect(struct core_window *cw, enum treeview_area_e mode,
- GRECT *dest);
+ */
+void atari_treeview_get_grect(struct core_window *cw, enum treeview_area_e mode, GRECT *dest);
/**
* Process all pending redraw requests for a single treeview
@@ -116,9 +108,8 @@ void atari_treeview_redraw(struct core_window *cw);
/**
* Attach arbitary user data to the treeview.
-*/
-void atari_treeview_set_user_data(struct core_window *cw,
- void *user_data_ptr);
+ */
+void atari_treeview_set_user_data(struct core_window *cw, void *user_data_ptr);
/**
* Return the arbitary user data set by atari_treeview_set_user_data()
@@ -127,8 +118,7 @@ void *atari_treeview_get_user_data(struct core_window *cw);
/**
* Process all redraw request of all open Treeview windows
-*/
+ */
void atari_treeview_flush_redraws(void);
#endif //NSATARI_TREEVIEW_H
-
diff --git a/atari/verify_ssl.c b/atari/verify_ssl.c
old mode 100755
new mode 100644
index 5d3f868..cbd9d0b
--- a/atari/verify_ssl.c
+++ b/atari/verify_ssl.c
@@ -81,7 +81,7 @@ static void __CDECL cert_info_draw( WINDOW * win, short buf[8], void * data)
if( line == NULL )
return;
- LOG(("Cert info draw, win: %p, data: %p, scrollx: %d", win, data, dp->scrollx ));
+ LOG("Cert info draw, win: %p, data: %p, scrollx: %d", win, data, dp->scrollx );
WindGet( win, WF_WORKXYWH, &x, &y, &w, &h );
/*using static values here, as RsrcUserDraw has mem leaks & a very small stack */
@@ -159,7 +159,7 @@ static void do_popup( WINDOW *win, int index, int mode, void *data)
char * items[dp->num_certs];
short x, y;
unsigned int i;
- LOG(("do_popup: num certs: %d", dp->num_certs));
+ LOG("do_popup: num certs: %d", dp->num_certs);
for( i = 0; i<dp->num_certs; i++) {
items[i] = malloc( 48 );
strncpy(items[i], (char*)&dp->cert_infos_n[i].issuer, 46 );
@@ -244,7 +244,7 @@ bool verify_ssl_form_do( const char * url, const struct ssl_cert_info * cert_inf
break;
case VERIFY_BT_SCROLL_R:
- LOG(( "scroll r!" ));
+ LOG("scroll r!");
cont = true;
dp.scrollx += 1;
if( dp.scrollx > (dp.cols - (272 / 8 )) )
diff --git a/atari/verify_ssl.h b/atari/verify_ssl.h
old mode 100755
new mode 100644
index 97716ab..b69bc9c
--- a/atari/verify_ssl.h
+++ b/atari/verify_ssl.h
@@ -1,24 +1,24 @@
-/*
- * Copyright 2010 Ole Loots <ole(a)monochrom.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NS_VERIFY_SSL_H_INCLUDED
-#define NS_VERIFY_SSL_H_INCLUDED
-
-bool verify_ssl_form_do( const char * url, const struct ssl_cert_info * cert_infos_n , unsigned long num_certs );
-
-#endif
+/*
+ * Copyright 2010 Ole Loots <ole(a)monochrom.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_VERIFY_SSL_H_INCLUDED
+#define NS_VERIFY_SSL_H_INCLUDED
+
+bool verify_ssl_form_do( const char * url, const struct ssl_cert_info * cert_infos_n , unsigned long num_certs );
+
+#endif
diff --git a/beos/bitmap.cpp b/beos/bitmap.cpp
index 2ed73a4..3228770 100644
--- a/beos/bitmap.cpp
+++ b/beos/bitmap.cpp
@@ -377,7 +377,7 @@ nsbeos_bitmap_get_pretile_x(struct bitmap* bitmap)
if (!bitmap->pretile_x) {
int width = bitmap->primary->Bounds().Width() + 1;
int xmult = (MIN_PRETILE_WIDTH + width - 1)/width;
- LOG(("Pretiling %p for X*%d", bitmap, xmult));
+ LOG("Pretiling %p for X*%d", bitmap, xmult);
bitmap->pretile_x = nsbeos_bitmap_generate_pretile(bitmap->primary, xmult, 1);
}
return bitmap->pretile_x;
@@ -396,7 +396,7 @@ nsbeos_bitmap_get_pretile_y(struct bitmap* bitmap)
if (!bitmap->pretile_y) {
int height = bitmap->primary->Bounds().Height() + 1;
int ymult = (MIN_PRETILE_HEIGHT + height - 1)/height;
- LOG(("Pretiling %p for Y*%d", bitmap, ymult));
+ LOG("Pretiling %p for Y*%d", bitmap, ymult);
bitmap->pretile_y = nsbeos_bitmap_generate_pretile(bitmap->primary, 1, ymult);
}
return bitmap->pretile_y;
@@ -416,7 +416,7 @@ nsbeos_bitmap_get_pretile_xy(struct bitmap* bitmap)
int height = bitmap->primary->Bounds().Height() + 1;
int xmult = (MIN_PRETILE_WIDTH + width - 1)/width;
int ymult = (MIN_PRETILE_HEIGHT + height - 1)/height;
- LOG(("Pretiling %p for X*%d Y*%d", bitmap, xmult, ymult));
+ LOG("Pretiling %p for X*%d Y*%d", bitmap, xmult, ymult);
bitmap->pretile_xy = nsbeos_bitmap_generate_pretile(bitmap->primary, xmult, ymult);
}
return bitmap->pretile_xy;
diff --git a/beos/fetch_rsrc.cpp b/beos/fetch_rsrc.cpp
index 67d0f35..917e759 100644
--- a/beos/fetch_rsrc.cpp
+++ b/beos/fetch_rsrc.cpp
@@ -70,13 +70,13 @@ BResources *gAppResources = NULL;
static bool fetch_rsrc_initialise(lwc_string *scheme)
{
- LOG(("fetch_rsrc_initialise called for %s", lwc_string_data(scheme)));
+ LOG("fetch_rsrc_initialise called for %s", lwc_string_data(scheme));
return true;
}
static void fetch_rsrc_finalise(lwc_string *scheme)
{
- LOG(("fetch_rsrc_finalise called for %s", lwc_string_data(scheme)));
+ LOG("fetch_rsrc_finalise called for %s", lwc_string_data(scheme));
}
static bool fetch_rsrc_can_fetch(const nsurl *url)
@@ -161,7 +161,7 @@ static bool fetch_rsrc_process(struct fetch_rsrc_context *c)
* rsrc://[TYPE][@NUM]/name[,mime]
*/
- LOG(("*** Processing %s", c->url));
+ LOG("*** Processing %s", c->url);
if (strlen(c->url) < 7) {
/* 7 is the minimum possible length (rsrc://) */
@@ -198,11 +198,11 @@ static bool fetch_rsrc_process(struct fetch_rsrc_context *c)
uint8 c1, c2, c3, c4;
if (sscanf(params, "%c%c%c%c", &c1, &c2, &c3, &c4) > 3) {
type = c1 << 24 | c2 << 16 | c3 << 8 | c4;
- LOG(("fetch_rsrc: type:%4.4s\n", &type));
+ LOG("fetch_rsrc: type:%4.4s\n", &type);
}
}
- LOG(("fetch_rsrc: 0x%08lx, %ld, '%s'\n", type, id, c->name));
+ LOG("fetch_rsrc: 0x%08lx, %ld, '%s'\n", type, id, c->name);
bool found;
if (id)
@@ -277,8 +277,7 @@ static void fetch_rsrc_poll(lwc_string *scheme)
char header[64];
fetch_set_http_code(c->parent_fetch, 200);
- LOG(("setting rsrc: MIME type to %s, length to %zd",
- c->mimetype, c->datalen));
+ LOG("setting rsrc: MIME type to %s, length to %zd", c->mimetype, c->datalen);
/* Any callback can result in the fetch being aborted.
* Therefore, we _must_ check for this after _every_
* call to fetch_rsrc_send_callback().
@@ -308,7 +307,7 @@ static void fetch_rsrc_poll(lwc_string *scheme)
fetch_rsrc_send_callback(&msg, c);
}
} else {
- LOG(("Processing of %s failed!", c->url));
+ LOG("Processing of %s failed!", c->url);
/* Ensure that we're unlocked here. If we aren't,
* then fetch_rsrc_process() is broken.
diff --git a/beos/font.cpp b/beos/font.cpp
index ba6803f..cba3e4d 100644
--- a/beos/font.cpp
+++ b/beos/font.cpp
@@ -125,7 +125,7 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle,
const char *string, size_t length,
int x, size_t *char_offset, int *actual_x)
{
- //LOG(("(, '%s', %d, %d, , )", string, length, x));
+ //LOG("(, '%s', %d, %d, , )", string, length, x);
//fprintf(stderr, "%s(, '%s', %d, %d, , )\n", __FUNCTION__, string, length, x);
int index;
BFont font;
@@ -183,7 +183,7 @@ bool nsfont_split(const plot_font_style_t *fstyle,
int x, size_t *char_offset, int *actual_x)
{
//fprintf(stderr, "%s(, '%s', %d, %d, , )\n", __FUNCTION__, string, length, x);
- //LOG(("(, '%s', %d, %d, , )", string, length, x));
+ //LOG("(, '%s', %d, %d, , )", string, length, x);
int index = 0;
BFont font;
diff --git a/beos/gui.cpp b/beos/gui.cpp
index 7c5d9e0..5eabfa8 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -338,14 +338,14 @@ static void check_homedir(void)
if (err < B_OK) {
/* we really can't continue without a home directory. */
- LOG(("Can't find user settings directory - nowhere to store state!"));
+ LOG("Can't find user settings directory - nowhere to store state!");
die("NetSurf needs to find the user settings directory in order to run.\n");
}
path.Append("NetSurf");
err = create_directory(path.Path(), 0644);
if (err < B_OK) {
- LOG(("Unable to create %s", path.Path()));
+ LOG("Unable to create %s", path.Path());
die("NetSurf could not create its settings directory.\n");
}
}
@@ -371,7 +371,7 @@ static nsurl *gui_get_resource_url(const char *path)
path = "favicon.png";
u << path;
- LOG(("(%s) -> '%s'\n", path, u.String()));
+ LOG("(%s) -> '%s'\n", path, u.String());
nsurl_create(u.String(), &url);
return url;
}
@@ -572,7 +572,7 @@ static void gui_init(int argc, char** argv)
die("Unable to load throbber image.\n");
find_resource(buf, "Choices", "%/Choices");
- LOG(("Using '%s' as Preferences file", buf));
+ LOG("Using '%s' as Preferences file", buf);
options_file_location = strdup(buf);
nsoption_read(buf, NULL);
@@ -611,12 +611,12 @@ static void gui_init(int argc, char** argv)
if (nsoption_charp(cookie_file) == NULL) {
find_resource(buf, "Cookies", "%/Cookies");
- LOG(("Using '%s' as Cookies file", buf));
+ LOG("Using '%s' as Cookies file", buf);
nsoption_set_charp(cookie_file, strdup(buf));
}
if (nsoption_charp(cookie_jar) == NULL) {
find_resource(buf, "Cookies", "%/Cookies");
- LOG(("Using '%s' as Cookie Jar file", buf));
+ LOG("Using '%s' as Cookie Jar file", buf);
nsoption_set_charp(cookie_jar, strdup(buf));
}
if ((nsoption_charp(cookie_file) == NULL) ||
@@ -625,13 +625,13 @@ static void gui_init(int argc, char** argv)
if (nsoption_charp(url_file) == NULL) {
find_resource(buf, "URLs", "%/URLs");
- LOG(("Using '%s' as URL file", buf));
+ LOG("Using '%s' as URL file", buf);
nsoption_set_charp(url_file, strdup(buf));
}
if (nsoption_charp(ca_path) == NULL) {
find_resource(buf, "certs", "/etc/ssl/certs");
- LOG(("Using '%s' as certificate path", buf));
+ LOG("Using '%s' as certificate path", buf);
nsoption_set_charp(ca_path, strdup(buf));
}
@@ -692,7 +692,7 @@ void nsbeos_pipe_message(BMessage *message, BView *_this, struct gui_window *gui
if (gui)
message->AddPointer("gui_window", gui);
int len = write(sEventPipe[1], &message, sizeof(void *));
- //LOG(("nsbeos_pipe_message: %d written", len));
+ //LOG("nsbeos_pipe_message: %d written", len);
//printf("nsbeos_pipe_message: %d written\n", len);
}
@@ -708,7 +708,7 @@ void nsbeos_pipe_message_top(BMessage *message, BWindow *_this, struct beos_scaf
if (scaffold)
message->AddPointer("scaffolding", scaffold);
int len = write(sEventPipe[1], &message, sizeof(void *));
- //LOG(("nsbeos_pipe_message: %d written", len));
+ //LOG("nsbeos_pipe_message: %d written", len);
//printf("nsbeos_pipe_message: %d written\n", len);
}
@@ -747,17 +747,17 @@ void nsbeos_gui_poll(void)
timeout.tv_sec = (long)(next_schedule / 1000000LL);
timeout.tv_usec = (long)(next_schedule % 1000000LL);
- //LOG(("gui_poll: select(%d, ..., %Ldus", max_fd, next_schedule));
+ //LOG("gui_poll: select(%d, ..., %Ldus", max_fd, next_schedule);
fd_count = select(max_fd, &read_fd_set, &write_fd_set, &exc_fd_set,
&timeout);
- //LOG(("select: %d\n", fd_count));
+ //LOG("select: %d\n", fd_count);
if (fd_count > 0 && FD_ISSET(sEventPipe[0], &read_fd_set)) {
BMessage *message;
int len = read(sEventPipe[0], &message, sizeof(void *));
- //LOG(("gui_poll: BMessage ? %d read", len));
+ //LOG("gui_poll: BMessage ? %d read", len);
if (len == sizeof(void *)) {
- //LOG(("gui_poll: BMessage.what %-4.4s\n", &(message->what)));
+ //LOG("gui_poll: BMessage.what %-4.4s\n", &(message->what));
nsbeos_dispatch_event(message);
}
}
@@ -921,7 +921,7 @@ static nserror gui_launch_url(struct nsurl *url)
void warn_user(const char *warning, const char *detail)
{
- LOG(("warn_user: %s (%s)", warning, detail));
+ LOG("warn_user: %s (%s)", warning, detail);
BAlert *alert;
BString text(warning);
if (detail)
@@ -1035,7 +1035,9 @@ int main(int argc, char** argv)
/* common initialisation */
BPath messages = get_messages_path();
- ret = netsurf_init(messages.Path(), NULL);
+ ret = messages_add_from_file(messages.Path());
+
+ ret = netsurf_init(NULL);
if (ret != NSERROR_OK) {
die("NetSurf failed to initialise");
}
@@ -1096,7 +1098,9 @@ int gui_init_replicant(int argc, char** argv)
/* common initialisation */
BPath messages = get_messages_path();
- ret = netsurf_init(messages.Path(), NULL);
+ ret = messages_add_from_file(messages.Path());
+
+ ret = netsurf_init(NULL);
if (ret != NSERROR_OK) {
// FIXME: must not die when in replicant!
die("NetSurf failed to initialise");
diff --git a/beos/plotters.cpp b/beos/plotters.cpp
index 81d0e10..f63d734 100644
--- a/beos/plotters.cpp
+++ b/beos/plotters.cpp
@@ -484,7 +484,7 @@ bool nsbeos_plot_path(const float *p, unsigned int n, colour fill, float width,
return true;
if (p[0] != PLOTTER_PATH_MOVE) {
- LOG(("path doesn't start with a move"));
+ LOG("path doesn't start with a move");
return false;
}
@@ -511,7 +511,7 @@ bool nsbeos_plot_path(const float *p, unsigned int n, colour fill, float width,
shape.BezierTo(pt);
i += 7;
} else {
- LOG(("bad path command %f", p[i]));
+ LOG("bad path command %f", p[i]);
return false;
}
}
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 49e1cd4..b64bdca 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -771,7 +771,7 @@ int32 nsbeos_replicant_main_thread(void *_arg)
static void nsbeos_window_destroy_event(NSBrowserWindow *window, nsbeos_scaffolding *g, BMessage *event)
{
- LOG(("Being Destroyed = %d", g->being_destroyed));
+ LOG("Being Destroyed = %d", g->being_destroyed);
if (--open_windows == 0)
nsbeos_done = true;
@@ -826,7 +826,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
bw = nsbeos_get_browser_for_gui(scaffold->top_level);
bool reloadAll = false;
- LOG(("nsbeos_scaffolding_dispatch_event() what = 0x%08lx", message->what));
+ LOG("nsbeos_scaffolding_dispatch_event() what = 0x%08lx", message->what);
switch (message->what) {
case B_QUIT_REQUESTED:
nsbeos_scaffolding_destroy(scaffold);
@@ -970,7 +970,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
browser_window_key_press(bw, NS_KEY_PASTE);
break;
case B_SELECT_ALL:
- LOG(("Selecting all text"));
+ LOG("Selecting all text");
browser_window_key_press(bw, NS_KEY_SELECT_ALL);
break;
case B_NETPOSITIVE_BACK:
@@ -1289,7 +1289,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
void nsbeos_scaffolding_destroy(nsbeos_scaffolding *scaffold)
{
- LOG(("Being Destroyed = %d", scaffold->being_destroyed));
+ LOG("Being Destroyed = %d", scaffold->being_destroyed);
if (scaffold->being_destroyed) return;
scaffold->being_destroyed = 1;
nsbeos_window_destroy_event(scaffold->window, scaffold, NULL);
@@ -1374,7 +1374,7 @@ static void recursively_set_menu_items_target(BMenu *menu, BHandler *handler)
void nsbeos_attach_toplevel_view(nsbeos_scaffolding *g, BView *view)
{
- LOG(("Attaching view to scaffolding %p", g));
+ LOG("Attaching view to scaffolding %p", g);
// this is a replicant,... and it went bad
if (!g->window) {
@@ -1651,7 +1651,7 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
{
struct beos_scaffolding *g = (struct beos_scaffolding *)malloc(sizeof(*g));
- LOG(("Constructing a scaffold of %p for gui_window %p", g, toplevel));
+ LOG("Constructing a scaffold of %p for gui_window %p", g, toplevel);
g->top_level = toplevel;
g->being_destroyed = 0;
diff --git a/beos/schedule.cpp b/beos/schedule.cpp
index bcfb963..a9da535 100644
--- a/beos/schedule.cpp
+++ b/beos/schedule.cpp
@@ -31,7 +31,7 @@ extern "C" {
#ifdef DEBUG_BEOS_SCHEDULE
#include "utils/log.h"
#else
-#define LOG(X)
+#define LOG(x...)
#endif
}
@@ -58,8 +58,7 @@ nsbeos_schedule_kill_callback(void *_target, void *_match)
_nsbeos_callback_t *match = (_nsbeos_callback_t *)_match;
if ((target->callback == match->callback) &&
(target->context == match->context)) {
- LOG(("Found match for %p(%p), killing.",
- target->callback, target->context));
+ LOG("Found match for %p(%p), killing.", target->callback, target->context);
target->callback = NULL;
target->context = NULL;
target->callback_killed = true;
@@ -70,7 +69,7 @@ nsbeos_schedule_kill_callback(void *_target, void *_match)
static void
schedule_remove(void (*callback)(void *p), void *p)
{
- LOG(("schedule_remove() for %p(%p)", cb->callback, cb->context));
+ LOG("schedule_remove() for %p(%p)", cb->callback, cb->context);
if (callbacks == NULL)
return;
_nsbeos_callback_t cb_match;
@@ -82,7 +81,7 @@ schedule_remove(void (*callback)(void *p), void *p)
nserror beos_schedule(int t, void (*callback)(void *p), void *p)
{
- LOG(("t:%d cb:%p p:%p", t, cb->callback, cb->context));
+ LOG("t:%d cb:%p p:%p", t, cb->callback, cb->context);
if (callbacks == NULL) {
callbacks = new BList;
@@ -112,7 +111,7 @@ nserror beos_schedule(int t, void (*callback)(void *p), void *p)
bool
schedule_run(void)
{
- LOG(("schedule_run()"));
+ LOG("schedule_run()");
earliest_callback_timeout = B_INFINITE_TIMEOUT;
if (callbacks == NULL)
@@ -121,7 +120,7 @@ schedule_run(void)
bigtime_t now = system_time();
int32 i;
- LOG(("Checking %ld callbacks to for deadline.", this_run->CountItems()));
+ LOG("Checking %ld callbacks to for deadline.", this_run->CountItems());
/* Run all the callbacks which made it this far. */
for (i = 0; i < callbacks->CountItems(); ) {
@@ -133,7 +132,7 @@ schedule_run(void)
i++;
continue;
}
- LOG(("Running callbacks %p(%p).", cb->callback, cb->context));
+ LOG("Running callbacks %p(%p).", cb->callback, cb->context);
if (!cb->callback_killed)
cb->callback(cb->context);
callbacks->RemoveItem(cb);
diff --git a/beos/throbber.cpp b/beos/throbber.cpp
index f7fb353..fe40b3e 100644
--- a/beos/throbber.cpp
+++ b/beos/throbber.cpp
@@ -50,15 +50,14 @@ bool nsbeos_throbber_initialise_from_png(const int frames, ...)
if (frames < 2) {
/* we need at least two frames - one for idle, one for active */
- LOG(("Insufficent number of frames in throbber animation!"));
- LOG(("(called with %d frames, where 2 is a minimum.)",
- frames));
+ LOG("Insufficent number of frames in throbber animation!");
+ LOG("(called with %d frames, where 2 is a minimum.)", frames);
return false;
}
BResources *res = get_app_resources();
if (res == NULL) {
- LOG(("Can't find resources for throbber!"));
+ LOG("Can't find resources for throbber!");
return false;
}
@@ -75,14 +74,14 @@ bool nsbeos_throbber_initialise_from_png(const int frames, ...)
data = res->LoadResource('data', fn, &size);
throb->framedata[i] = NULL;
if (!data) {
- LOG(("Error when loading resource %s", fn));
+ LOG("Error when loading resource %s", fn);
errors_when_loading = true;
continue;
}
BMemoryIO mem(data, size);
throb->framedata[i] = BTranslationUtils::GetBitmap(&mem);
if (throb->framedata[i] == NULL) {
- LOG(("Error when loading %s: GetBitmap() returned NULL", fn));
+ LOG("Error when loading %s: GetBitmap() returned NULL", fn);
errors_when_loading = true;
}
}
diff --git a/beos/window.cpp b/beos/window.cpp
index b85d07d..2763bc3 100644
--- a/beos/window.cpp
+++ b/beos/window.cpp
@@ -351,7 +351,7 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
return 0;
}
- LOG(("Creating gui window %p for browser window %p", g, bw));
+ LOG("Creating gui window %p for browser window %p", g, bw);
g->bw = bw;
g->mouse.state = 0;
@@ -433,25 +433,25 @@ void nsbeos_dispatch_event(BMessage *message)
continue;
if (gui && gui != z) {
- LOG(("discarding event for destroyed gui_window"));
+ LOG("discarding event for destroyed gui_window");
delete message;
return;
}
if (scaffold && (!y || scaffold != y->scaffold)) {
- LOG(("discarding event for destroyed scaffolding"));
+ LOG("discarding event for destroyed scaffolding");
delete message;
return;
}
// messages for top-level
if (scaffold) {
- LOG(("dispatching to top-level"));
+ LOG("dispatching to top-level");
nsbeos_scaffolding_dispatch_event(scaffold, message);
delete message;
return;
}
- //LOG(("processing message"));
+ //LOG("processing message");
switch (message->what) {
case B_QUIT_REQUESTED:
// from the BApplication
@@ -761,7 +761,7 @@ void nsbeos_window_keypress_event(BView *view, gui_window *g, BMessage *event)
if (!numbytes)
numbytes = strlen(bytes);
- LOG(("mods 0x%08lx key %ld raw %ld byte[0] %d", mods, key, raw_char, buff[0]));
+ LOG("mods 0x%08lx key %ld raw %ld byte[0] %d", mods, key, raw_char, buff[0]);
char byte;
if (numbytes == 1) {
@@ -950,10 +950,10 @@ static void gui_window_destroy(struct gui_window *g)
g->next->prev = g->prev;
- LOG(("Destroying gui_window %p", g));
+ LOG("Destroying gui_window %p", g);
assert(g != NULL);
assert(g->bw != NULL);
- LOG((" Scaffolding: %p", g->scaffold));
+ LOG(" Scaffolding: %p", g->scaffold);
if (g->view == NULL)
return;
@@ -1091,7 +1091,7 @@ static void gui_window_update_extent(struct gui_window *g)
float y_prop = g->view->Bounds().Height() / y_max;
x_max -= g->view->Bounds().Width() + 1;
y_max -= g->view->Bounds().Height() + 1;
- LOG(("x_max = %f y_max = %f x_prop = %f y_prop = %f\n", x_max, y_max, x_prop, y_prop));
+ LOG("x_max = %f y_max = %f x_prop = %f y_prop = %f\n", x_max, y_max, x_prop, y_prop);
if (g->view->ScrollBar(B_HORIZONTAL)) {
g->view->ScrollBar(B_HORIZONTAL)->SetRange(0, x_max);
g->view->ScrollBar(B_HORIZONTAL)->SetProportion(x_prop);
diff --git a/cocoa/DownloadWindowController.m b/cocoa/DownloadWindowController.m
index e9a13e6..cb6117e 100644
--- a/cocoa/DownloadWindowController.m
+++ b/cocoa/DownloadWindowController.m
@@ -20,6 +20,7 @@
#import "cocoa/gui.h"
#import "utils/log.h"
+#import "utils/nsurl.h"
#import "desktop/download.h"
#import "desktop/gui_download.h"
@@ -112,7 +113,7 @@ static void cocoa_register_download( DownloadWindowController *download );
(NSString *)kLSQuarantineTypeWebDownload, (NSString *)kLSQuarantineTypeKey,
nil];
LSSetItemAttribute( &ref, kLSRolesAll, kLSItemQuarantineProperties, (CFDictionaryRef)attributes );
- LOG(("Set quarantine attributes on file %s", [path UTF8String]));
+ LOG("Set quarantine attributes on file %s", [path UTF8String]);
}
[self setOutputFile: [NSFileHandle fileHandleForWritingAtPath: path]];
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
index ac26c9c..d9c711a 100644
--- a/cocoa/NetsurfApp.m
+++ b/cocoa/NetsurfApp.m
@@ -248,8 +248,10 @@ int main( int argc, char **argv )
nsoption_read(options, NULL);
nsoption_commandline(&argc, argv, NULL);
+ error = messages_add_from_file(messages);
+
/* common initialisation */
- error = netsurf_init(messages, NULL);
+ error = netsurf_init(NULL);
if (error != NSERROR_OK) {
die("NetSurf failed to initialise");
}
diff --git a/cocoa/apple_image.h b/cocoa/apple_image.h
index 0874803..11248a6 100644
--- a/cocoa/apple_image.h
+++ b/cocoa/apple_image.h
@@ -25,6 +25,9 @@
#ifdef WITH_APPLE_IMAGE
+/**
+ * Initialise apple image handlers instead of generic core ones.
+ */
nserror apple_image_init(void);
#else
diff --git a/cocoa/apple_image.m b/cocoa/apple_image.m
index c6f9df3..91dfcb4 100644
--- a/cocoa/apple_image.m
+++ b/cocoa/apple_image.m
@@ -9,7 +9,7 @@
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
@@ -26,29 +26,19 @@
#include "desktop/plotters.h"
#include "utils/utils.h"
-#include "cocoa/schedule.h"
+#import "cocoa/schedule.h"
+#import "cocoa/bitmap.h"
typedef struct apple_image_content {
struct content base;
struct bitmap *bitmap; /**< Created NetSurf bitmap */
- NSUInteger frames;
- NSUInteger currentFrame;
- int *frameTimes;
+ NSUInteger frames;
+ NSUInteger currentFrame;
+ int *frameTimes;
} apple_image_content;
-static nserror apple_image_create(const content_handler *handler,
- lwc_string *imime_type, const http_parameter *params,
- llcache_handle *llcache, const char *fallback_charset,
- bool quirks, struct content **c);
-static bool apple_image_convert(struct content *c);
-static void apple_image_destroy(struct content *c);
-static bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
- const struct rect *clip, const struct redraw_context *ctx);
-static nserror apple_image_clone(const struct content *old,
- struct content **newc);
-static content_type apple_image_content_type(void);
static void *apple_image_get_internal(const struct content *c, void *context)
{
@@ -57,55 +47,7 @@ static void *apple_image_get_internal(const struct content *c, void *context)
return ai_c->bitmap;
}
-static const content_handler apple_image_content_handler = {
- .create = apple_image_create,
- .data_complete = apple_image_convert,
- .destroy = apple_image_destroy,
- .redraw = apple_image_redraw,
- .clone = apple_image_clone,
- .get_internal = apple_image_get_internal,
- .type = apple_image_content_type,
- .no_share = false
-};
-
-static nserror register_for_type( NSString *mime )
-{
- const char *type = [mime UTF8String];
- /* nsgif has priority since it supports animated GIF */
-#ifdef WITH_GIF
- if (strcmp(type, "image/gif") == 0)
- return NSERROR_OK;
-#endif
-
- nserror error = content_factory_register_handler( type, &apple_image_content_handler );
- if (error != NSERROR_OK) return error;
-
- return NSERROR_OK;
-}
-
-nserror apple_image_init(void)
-{
- NSArray *utis = [NSBitmapImageRep imageTypes];
- for (NSString *uti in utis) {
- NSDictionary *declaration = [(NSDictionary *)UTTypeCopyDeclaration( (CFStringRef)uti ) autorelease];
- id mimeTypes = [[declaration objectForKey: (NSString *)kUTTypeTagSpecificationKey] objectForKey: (NSString *)kUTTagClassMIMEType];
-
- if (mimeTypes == nil) continue;
-
- if (![mimeTypes isKindOfClass: [NSArray class]]) {
- mimeTypes = [NSArray arrayWithObject: mimeTypes];
- }
-
- for (NSString *mime in mimeTypes) {
- nserror error = register_for_type( mime );
- if (error != NSERROR_OK) return error;
- }
- }
-
- return NSERROR_OK;
-}
-
-nserror apple_image_create(const content_handler *handler,
+static nserror apple_image_create(const content_handler *handler,
lwc_string *imime_type, const http_parameter *params,
llcache_handle *llcache, const char *fallback_charset,
bool quirks, struct content **c)
@@ -132,30 +74,29 @@ nserror apple_image_create(const content_handler *handler,
static void animate_image_cb( void *ptr )
{
- struct apple_image_content *ai = ptr;
- ++ai->currentFrame;
- if (ai->currentFrame >= ai->frames) ai->currentFrame = 0;
-
- [(NSBitmapImageRep *)ai->bitmap setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: ai->currentFrame]];
- bitmap_modified( ai->bitmap );
-
- union content_msg_data data;
- data.redraw.full_redraw = true;
- data.redraw.x = data.redraw.object_x = 0;
- data.redraw.y = data.redraw.object_y = 0;
- data.redraw.width = data.redraw.object_width = ai->base.width;
- data.redraw.height = data.redraw.object_height = ai->base.height;
+ struct apple_image_content *ai = ptr;
+ ++ai->currentFrame;
+ if (ai->currentFrame >= ai->frames) ai->currentFrame = 0;
+
+ [(NSBitmapImageRep *)ai->bitmap setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: ai->currentFrame]];
+ cocoa_bitmap_modified( ai->bitmap );
+
+ union content_msg_data data;
+ data.redraw.full_redraw = true;
+ data.redraw.x = data.redraw.object_x = 0;
+ data.redraw.y = data.redraw.object_y = 0;
+ data.redraw.width = data.redraw.object_width = ai->base.width;
+ data.redraw.height = data.redraw.object_height = ai->base.height;
data.redraw.object = &ai->base;
- content_broadcast( &ai->base, CONTENT_MSG_REDRAW, data );
+ content_broadcast( &ai->base, CONTENT_MSG_REDRAW, data );
- cocoa_schedule(ai->frameTimes[ai->currentFrame], animate_image_cb, ai );
+ cocoa_schedule(ai->frameTimes[ai->currentFrame], animate_image_cb, ai );
}
/**
* Convert a CONTENT_APPLE_IMAGE for display.
*/
-
-bool apple_image_convert(struct content *c)
+static bool apple_image_convert(struct content *c)
{
apple_image_content *ai_c = (apple_image_content *)c;
unsigned long size;
@@ -170,7 +111,7 @@ bool apple_image_convert(struct content *c)
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
-
+
c->width = [image pixelsWide];
c->height = [image pixelsHigh];
ai_c->bitmap = (void *)image;
@@ -178,40 +119,40 @@ bool apple_image_convert(struct content *c)
NSString *url = [NSString stringWithUTF8String: nsurl_access(llcache_handle_get_url( content_get_llcache_handle( c )) )];
NSString *title = [NSString stringWithFormat: @"%@ (%dx%d)", [url lastPathComponent], c->width, c->height];
content__set_title(c, [title UTF8String] );
-
+
content_set_ready(c);
content_set_done(c);
content_set_status(c, "");
-
- struct apple_image_content *ai = (struct apple_image_content *)c;
- NSUInteger frames = [[image valueForProperty: NSImageFrameCount] unsignedIntegerValue];
- if (frames > 1) {
- ai->frames = frames;
- ai->currentFrame = 0;
- ai->frameTimes = calloc( ai->frames , sizeof(int));
- for (NSUInteger i = 0; i < frames; i++) {
- [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: i]];
- ai->frameTimes[i] = 1000 * [[image valueForProperty: NSImageCurrentFrameDuration] floatValue];
- }
- [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: 0]];
- cocoa_schedule( ai->frameTimes[0], animate_image_cb, ai );
- }
-
+
+ struct apple_image_content *ai = (struct apple_image_content *)c;
+ NSUInteger frames = [[image valueForProperty: NSImageFrameCount] unsignedIntegerValue];
+ if (frames > 1) {
+ ai->frames = frames;
+ ai->currentFrame = 0;
+ ai->frameTimes = calloc( ai->frames , sizeof(int));
+ for (NSUInteger i = 0; i < frames; i++) {
+ [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: i]];
+ ai->frameTimes[i] = 1000 * [[image valueForProperty: NSImageCurrentFrameDuration] floatValue];
+ }
+ [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: 0]];
+ cocoa_schedule( ai->frameTimes[0], animate_image_cb, ai );
+ }
+
return true;
}
-void apple_image_destroy(struct content *c)
+static void apple_image_destroy(struct content *c)
{
apple_image_content *ai_c = (apple_image_content *)c;
[(id)ai_c->bitmap release];
ai_c->bitmap = NULL;
- cocoa_schedule(-1, animate_image_cb, c );
+ cocoa_schedule(-1, animate_image_cb, c );
}
-nserror apple_image_clone(const struct content *old, struct content **newc)
+static nserror apple_image_clone(const struct content *old, struct content **newc)
{
apple_image_content *ai;
apple_image_content *ai_old = (apple_image_content *)old;
@@ -235,11 +176,11 @@ nserror apple_image_clone(const struct content *old, struct content **newc)
}
*newc = (struct content *) ai;
-
+
return NSERROR_OK;
}
-content_type apple_image_content_type(void)
+static content_type apple_image_content_type(void)
{
return CONTENT_IMAGE;
}
@@ -247,8 +188,7 @@ content_type apple_image_content_type(void)
/**
* Redraw a CONTENT_APPLE_IMAGE with appropriate tiling.
*/
-
-bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
+static bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
apple_image_content *ai_c = (apple_image_content *)c;
@@ -263,4 +203,53 @@ bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
ai_c->bitmap, data->background_colour, flags);
}
+static const content_handler apple_image_content_handler = {
+ .create = apple_image_create,
+ .data_complete = apple_image_convert,
+ .destroy = apple_image_destroy,
+ .redraw = apple_image_redraw,
+ .clone = apple_image_clone,
+ .get_internal = apple_image_get_internal,
+ .type = apple_image_content_type,
+ .no_share = false
+};
+
+static nserror register_for_type( NSString *mime )
+{
+ const char *type = [mime UTF8String];
+ /* nsgif has priority since it supports animated GIF */
+#ifdef WITH_GIF
+ if (strcmp(type, "image/gif") == 0)
+ return NSERROR_OK;
+#endif
+
+ nserror error = content_factory_register_handler( type, &apple_image_content_handler );
+ if (error != NSERROR_OK) return error;
+
+ return NSERROR_OK;
+}
+
+/* exported interface documented in cocoa/apple_image.h */
+nserror apple_image_init(void)
+{
+ NSArray *utis = [NSBitmapImageRep imageTypes];
+ for (NSString *uti in utis) {
+ NSDictionary *declaration = [(NSDictionary *)UTTypeCopyDeclaration( (CFStringRef)uti ) autorelease];
+ id mimeTypes = [[declaration objectForKey: (NSString *)kUTTypeTagSpecificationKey] objectForKey: (NSString *)kUTTagClassMIMEType];
+
+ if (mimeTypes == nil) continue;
+
+ if (![mimeTypes isKindOfClass: [NSArray class]]) {
+ mimeTypes = [NSArray arrayWithObject: mimeTypes];
+ }
+
+ for (NSString *mime in mimeTypes) {
+ nserror error = register_for_type( mime );
+ if (error != NSERROR_OK) return error;
+ }
+ }
+
+ return NSERROR_OK;
+}
+
#endif /* WITH_APPLE_IMAGE */
diff --git a/cocoa/bitmap.h b/cocoa/bitmap.h
index dc463b8..1eeed17 100644
--- a/cocoa/bitmap.h
+++ b/cocoa/bitmap.h
@@ -21,6 +21,8 @@
CGImageRef cocoa_get_cgimage( void *bitmap );
+void cocoa_bitmap_modified(void *bitmap);
+
struct gui_bitmap_table *cocoa_bitmap_table;
#endif
diff --git a/cocoa/bitmap.m b/cocoa/bitmap.m
index 39a1448..6e263a1 100644
--- a/cocoa/bitmap.m
+++ b/cocoa/bitmap.m
@@ -9,7 +9,7 @@
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
@@ -44,28 +44,28 @@
static CGImageRef cocoa_prepare_bitmap( void *bitmap );
static NSMapTable *cocoa_get_bitmap_cache( void );
-int bitmap_get_width(void *bitmap)
+static int bitmap_get_width(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp pixelsWide];
}
-int bitmap_get_height(void *bitmap)
+static int bitmap_get_height(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp pixelsHigh];
}
-bool bitmap_get_opaque(void *bitmap)
+static bool bitmap_get_opaque(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp isOpaque];
}
-void bitmap_destroy(void *bitmap)
+static void bitmap_destroy(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
@@ -80,7 +80,7 @@ void bitmap_destroy(void *bitmap)
[bmp release];
}
-void *bitmap_create(int width, int height, unsigned int state)
+static void *bitmap_create(int width, int height, unsigned int state)
{
NSBitmapImageRep *bmp = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: NULL
@@ -98,35 +98,35 @@ void *bitmap_create(int width, int height, unsigned int state)
return bmp;
}
-void bitmap_set_opaque(void *bitmap, bool opaque)
+static void bitmap_set_opaque(void *bitmap, bool opaque)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
[bmp setOpaque: opaque ? YES : NO];
}
-unsigned char *bitmap_get_buffer(void *bitmap)
+static unsigned char *bitmap_get_buffer(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp bitmapData];
}
-size_t bitmap_get_rowstride(void *bitmap)
+static size_t bitmap_get_rowstride(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp bytesPerRow];
}
-size_t bitmap_get_bpp(void *bitmap)
+static size_t bitmap_get_bpp(void *bitmap)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
return [bmp bitsPerPixel] / 8;
}
-bool bitmap_test_opaque(void *bitmap)
+static bool bitmap_test_opaque(void *bitmap)
{
NSCParameterAssert( bitmap_get_bpp( bitmap ) == BYTES_PER_PIXEL );
@@ -148,7 +148,7 @@ bool bitmap_test_opaque(void *bitmap)
return true;
}
-bool bitmap_save(void *bitmap, const char *path, unsigned flags)
+static bool bitmap_save(void *bitmap, const char *path, unsigned flags)
{
NSCParameterAssert( NULL != bitmap );
NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
@@ -157,7 +157,7 @@ bool bitmap_save(void *bitmap, const char *path, unsigned flags)
return [tiff writeToFile: [NSString stringWithUTF8String: path] atomically: YES];
}
-void bitmap_modified(void *bitmap)
+void cocoa_bitmap_modified(void *bitmap)
{
NSMapTable *cache = cocoa_get_bitmap_cache();
CGImageRef image = NSMapGet( cache, bitmap );
@@ -258,7 +258,7 @@ static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *conte
[NSGraphicsContext setCurrentContext: nil];
CGContextRelease( bitmapContext );
- bitmap_modified( bitmap );
+ cocoa_bitmap_modified( bitmap );
return true;
}
@@ -275,7 +275,7 @@ static struct gui_bitmap_table bitmap_table = {
.get_height = bitmap_get_height,
.get_bpp = bitmap_get_bpp,
.save = bitmap_save,
- .modified = bitmap_modified,
+ .modified = cocoa_bitmap_modified,
.render = bitmap_render,
};
diff --git a/cocoa/fetch.m b/cocoa/fetch.m
index 278b801..1c36bb8 100644
--- a/cocoa/fetch.m
+++ b/cocoa/fetch.m
@@ -51,13 +51,13 @@ static const char *fetch_filetype(const char *unix_path)
uti = [[NSWorkspace sharedWorkspace] typeOfFile: [NSString stringWithUTF8String: unix_path] error:&utiError];
if (nil != uti) {
- LOG(("Looking for mimetype from uti \"%s\"", [uti UTF8String] ));
+ LOG("Looking for mimetype from uti \"%s\"", [uti UTF8String] );
mimeType = (NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassMIMEType );
} else {
NSAlert *utiAlert = [NSAlert alertWithError:utiError];
[utiAlert runModal]; // Ignore return value.
- LOG(("uti call failed"));
+ LOG("uti call failed");
strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype));
return cocoafiletype;
@@ -69,13 +69,13 @@ static const char *fetch_filetype(const char *unix_path)
} else {
const char *extension;
- LOG(("mimetype from uti failed"));
+ LOG("mimetype from uti failed");
extension = [(NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassFilenameExtension) UTF8String];
if (extension == NULL) {
/* give up and go with default */
- LOG(("No extension going with default type"));
+ LOG("No extension going with default type");
strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype)); } else {
int eidx = 0; /* index of extension entry */
@@ -90,7 +90,7 @@ static const char *fetch_filetype(const char *unix_path)
}
}
- LOG(( "\tMIME type for '%s' is '%s'", unix_path, cocoafiletype ));
+ LOG("\tMIME type for '%s' is '%s'", unix_path, cocoafiletype);
return cocoafiletype;
}
diff --git a/cocoa/plotter.m b/cocoa/plotter.m
index 61f53c1..dbc9460 100644
--- a/cocoa/plotter.m
+++ b/cocoa/plotter.m
@@ -201,7 +201,7 @@ static bool plot_path(const float *p, unsigned int n, colour fill, float width,
if (n == 0) return true;
if (*p != PLOTTER_PATH_MOVE) {
- LOG(("Path does not start with move"));
+ LOG("Path does not start with move");
return false;
}
@@ -236,7 +236,7 @@ static bool plot_path(const float *p, unsigned int n, colour fill, float width,
break;
default:
- LOG(("Invalid path"));
+ LOG("Invalid path");
return false;
}
}
diff --git a/content/content.c b/content/content.c
index cf02164..d5eff46 100644
--- a/content/content.c
+++ b/content/content.c
@@ -79,8 +79,7 @@ nserror content__init(struct content *c, const content_handler *handler,
struct content_user *user_sentinel;
nserror error;
- LOG(("url "URL_FMT_SPC" -> %p",
- nsurl_access(llcache_handle_get_url(llcache)), c));
+ LOG("url "URL_FMT_SPC" -> %p", nsurl_access(llcache_handle_get_url(llcache)), c);
user_sentinel = calloc(1, sizeof(struct content_user));
if (user_sentinel == NULL) {
@@ -280,8 +279,7 @@ void content_convert(struct content *c)
if (c->locked == true)
return;
- LOG(("content "URL_FMT_SPC" (%p)",
- nsurl_access(llcache_handle_get_url(c->llcache)), c));
+ LOG("content "URL_FMT_SPC" (%p)", nsurl_access(llcache_handle_get_url(c->llcache)), c);
if (c->handler->data_complete != NULL) {
c->locked = true;
@@ -360,7 +358,7 @@ void content__reformat(struct content *c, bool background,
assert(c->status == CONTENT_STATUS_READY ||
c->status == CONTENT_STATUS_DONE);
assert(c->locked == false);
- LOG(("%p %s", c, nsurl_access(llcache_handle_get_url(c->llcache))));
+ LOG("%p %s", c, nsurl_access(llcache_handle_get_url(c->llcache)));
c->available_width = width;
if (c->handler->reformat != NULL) {
@@ -385,8 +383,7 @@ void content_destroy(struct content *c)
struct content_rfc5988_link *link;
assert(c);
- LOG(("content %p %s", c,
- nsurl_access(llcache_handle_get_url(c->llcache))));
+ LOG("content %p %s", c, nsurl_access(llcache_handle_get_url(c->llcache)));
assert(c->locked == false);
if (c->handler->destroy != NULL)
@@ -599,7 +596,7 @@ bool content_scaled_redraw(struct hlcache_handle *h,
return true;
}
- LOG(("Content %p %dx%d ctx:%p", c, width, height, ctx));
+ LOG("Content %p %dx%d ctx:%p", c, width, height, ctx);
if (ctx->plot->option_knockout) {
knockout_plot_start(ctx, &new_ctx);
@@ -664,9 +661,7 @@ bool content_add_user(struct content *c,
{
struct content_user *user;
- LOG(("content "URL_FMT_SPC" (%p), user %p %p",
- nsurl_access(llcache_handle_get_url(c->llcache)),
- c, callback, pw));
+ LOG("content "URL_FMT_SPC" (%p), user %p %p", nsurl_access(llcache_handle_get_url(c->llcache)), c, callback, pw);
user = malloc(sizeof(struct content_user));
if (!user)
return false;
@@ -692,9 +687,7 @@ void content_remove_user(struct content *c,
void *pw)
{
struct content_user *user, *next;
- LOG(("content "URL_FMT_SPC" (%p), user %p %p",
- nsurl_access(llcache_handle_get_url(c->llcache)), c,
- callback, pw));
+ LOG("content "URL_FMT_SPC" (%p), user %p %p", nsurl_access(llcache_handle_get_url(c->llcache)), c, callback, pw);
/* user_list starts with a sentinel */
for (user = c->user_list; user->next != 0 &&
@@ -702,7 +695,7 @@ void content_remove_user(struct content *c,
user->next->pw == pw); user = user->next)
;
if (user->next == 0) {
- LOG(("user not found in list"));
+ LOG("user not found in list");
assert(0);
return;
}
@@ -765,7 +758,7 @@ void content_broadcast(struct content *c, content_msg msg,
{
struct content_user *user, *next;
assert(c);
-// LOG(("%p %s -> %d", c, c->url, msg));
+// LOG("%p %s -> %d", c, c->url, msg);
for (user = c->user_list->next; user != 0; user = next) {
next = user->next; /* user may be destroyed during callback */
if (user->callback != 0)
@@ -808,8 +801,7 @@ void content_open(hlcache_handle *h, struct browser_window *bw,
{
struct content *c = hlcache_handle_get_content(h);
assert(c != 0);
- LOG(("content %p %s", c,
- nsurl_access(llcache_handle_get_url(c->llcache))));
+ LOG("content %p %s", c, nsurl_access(llcache_handle_get_url(c->llcache)));
if (c->handler->open != NULL)
c->handler->open(c, bw, page, params);
}
@@ -825,8 +817,7 @@ void content_close(hlcache_handle *h)
{
struct content *c = hlcache_handle_get_content(h);
assert(c != 0);
- LOG(("content %p %s", c,
- nsurl_access(llcache_handle_get_url(c->llcache))));
+ LOG("content %p %s", c, nsurl_access(llcache_handle_get_url(c->llcache)));
if (c->handler->close != NULL)
c->handler->close(c);
}
@@ -1479,7 +1470,7 @@ nserror content__clone(const struct content *c, struct content *nc)
*/
nserror content_abort(struct content *c)
{
- LOG(("Aborting %p", c));
+ LOG("Aborting %p", c);
if (c->handler->stop != NULL)
c->handler->stop(c);
diff --git a/content/fetch.c b/content/fetch.c
index 0ca9041..2307676 100644
--- a/content/fetch.c
+++ b/content/fetch.c
@@ -66,9 +66,9 @@
/** Verbose fetcher logging */
#ifdef DEBUG_FETCH_VERBOSE
-#define FETCH_LOG(x) LOG(x)
+#define FETCH_LOG(x...) LOG(x...)
#else
-#define FETCH_LOG(x)
+#define FETCH_LOG(x...)
#endif
/** The maximum number of fetchers that can be added */
@@ -159,8 +159,8 @@ static int get_fetcher_for_scheme(lwc_string *scheme)
static bool fetch_dispatch_job(struct fetch *fetch)
{
RING_REMOVE(queue_ring, fetch);
- FETCH_LOG(("Attempting to start fetch %p, fetcher %p, url %s", fetch,
- fetch->fetcher_handle, nsurl_access(fetch->url)));
+ FETCH_LOG("Attempting to start fetch %p, fetcher %p, url %s", fetch,
+ fetch->fetcher_handle, nsurl_access(fetch->url));
if (!fetchers[fetch->fetcherd].ops.start(fetch->fetcher_handle)) {
RING_INSERT(queue_ring, fetch); /* Put it back on the end of the queue */
@@ -218,14 +218,14 @@ static void dump_rings(void)
q = queue_ring;
if (q) {
do {
- LOG(("queue_ring: %s", nsurl_access(q->url)));
+ LOG("queue_ring: %s", nsurl_access(q->url));
q = q->r_next;
} while (q != queue_ring);
}
f = fetch_ring;
if (f) {
do {
- LOG(("fetch_ring: %s", nsurl_access(f->url)));
+ LOG("fetch_ring: %s", nsurl_access(f->url));
f = f->r_next;
} while (f != fetch_ring);
}
@@ -245,7 +245,7 @@ static bool fetch_dispatch_jobs(void)
RING_GETSIZE(struct fetch, queue_ring, all_queued);
RING_GETSIZE(struct fetch, fetch_ring, all_active);
- FETCH_LOG(("queue_ring %i, fetch_ring %i", all_queued, all_active));
+ FETCH_LOG("queue_ring %i, fetch_ring %i", all_queued, all_active);
dump_rings();
while ((all_queued != 0) &&
@@ -253,12 +253,12 @@ static bool fetch_dispatch_jobs(void)
fetch_choose_and_dispatch()) {
all_queued--;
all_active++;
- FETCH_LOG(("%d queued, %d fetching",
- all_queued, all_active));
+ FETCH_LOG("%d queued, %d fetching",
+ all_queued, all_active);
}
- FETCH_LOG(("Fetch ring is now %d elements.", all_active));
- FETCH_LOG(("Queue ring is now %d elements.", all_queued));
+ FETCH_LOG("Fetch ring is now %d elements.", all_active);
+ FETCH_LOG("Queue ring is now %d elements.", all_queued);
return (all_active > 0);
}
@@ -268,7 +268,7 @@ static void fetcher_poll(void *unused)
int fetcherd;
if (fetch_dispatch_jobs()) {
- FETCH_LOG(("Polling fetchers"));
+ FETCH_LOG("Polling fetchers");
for (fetcherd = 0; fetcherd < MAX_FETCHERS; fetcherd++) {
if (fetchers[fetcherd].refcount > 0) {
/* fetcher present */
@@ -340,9 +340,7 @@ void fetcher_quit(void)
* the reference count to allow the fetcher to
* be stopped.
*/
- LOG(("Fetcher for scheme %s still has %d active users at quit.",
- lwc_string_data(fetchers[fetcherd].scheme),
- fetchers[fetcherd].refcount));
+ LOG("Fetcher for scheme %s still has %d active users at quit.", lwc_string_data(fetchers[fetcherd].scheme), fetchers[fetcherd].refcount);
fetchers[fetcherd].refcount = 1;
}
@@ -392,12 +390,12 @@ nserror fetcher_fdset(fd_set *read_fd_set,
int fetcherd; /* fetcher index */
if (!fetch_dispatch_jobs()) {
- FETCH_LOG(("No jobs"));
+ FETCH_LOG("No jobs");
*maxfd_out = -1;
return NSERROR_OK;
}
- FETCH_LOG(("Polling fetchers"));
+ FETCH_LOG("Polling fetchers");
for (fetcherd = 0; fetcherd < MAX_FETCHERS; fetcherd++) {
if (fetchers[fetcherd].refcount > 0) {
@@ -439,7 +437,7 @@ nserror fetcher_fdset(fd_set *read_fd_set,
}
/* exported interface documented in content/fetch.h */
-struct fetch *
+nserror
fetch_start(nsurl *url,
nsurl *referer,
fetch_callback callback,
@@ -449,7 +447,8 @@ fetch_start(nsurl *url,
const struct fetch_multipart_data *post_multipart,
bool verifiable,
bool downgrade_tls,
- const char *headers[])
+ const char *headers[],
+ struct fetch **fetch_out)
{
struct fetch *fetch;
lwc_string *scheme;
@@ -457,7 +456,7 @@ fetch_start(nsurl *url,
fetch = malloc(sizeof (*fetch));
if (fetch == NULL) {
- return NULL;
+ return NSERROR_NOMEM;
}
/* The URL we're fetching must have a scheme */
@@ -469,10 +468,10 @@ fetch_start(nsurl *url,
if (fetch->fetcherd == -1) {
lwc_string_unref(scheme);
free(fetch);
- return NULL;
+ return NSERROR_NO_FETCH_HANDLER;
}
- FETCH_LOG(("fetch %p, url '%s'", fetch, nsurl_access(url)));
+ FETCH_LOG("fetch %p, url '%s'", fetch, nsurl_access(url));
/* construct a new fetch structure */
fetch->callback = callback;
@@ -549,7 +548,11 @@ fetch_start(nsurl *url,
free(fetch);
- return NULL;
+
+ /** \todo The fetchers setup should return nserror and that be
+ * passed back rather than assuming a bad url
+ */
+ return NSERROR_BAD_URL;
}
/* Rah, got it, so ref the fetcher. */
@@ -560,27 +563,28 @@ fetch_start(nsurl *url,
/* Ask the queue to run. */
if (fetch_dispatch_jobs()) {
- FETCH_LOG(("scheduling poll"));
+ FETCH_LOG("scheduling poll");
/* schedule active fetchers to run again in 10ms */
guit->browser->schedule(10, fetcher_poll, NULL);
}
- return fetch;
+ *fetch_out = fetch;
+ return NSERROR_OK;
}
/* exported interface documented in content/fetch.h */
void fetch_abort(struct fetch *f)
{
assert(f);
- FETCH_LOG(("fetch %p, fetcher %p, url '%s'", f, f->fetcher_handle,
- nsurl_access(f->url)));
+ FETCH_LOG("fetch %p, fetcher %p, url '%s'", f, f->fetcher_handle,
+ nsurl_access(f->url));
fetchers[f->fetcherd].ops.abort(f->fetcher_handle);
}
/* exported interface documented in content/fetch.h */
void fetch_free(struct fetch *f)
{
- FETCH_LOG(("Freeing fetch %p, fetcher %p", f, f->fetcher_handle));
+ FETCH_LOG("Freeing fetch %p, fetcher %p", f, f->fetcher_handle);
fetchers[f->fetcherd].ops.free(f->fetcher_handle);
@@ -713,7 +717,7 @@ void fetch_multipart_data_destroy(struct fetch_multipart_data *list)
free(list->name);
free(list->value);
if (list->file) {
- FETCH_LOG(("Freeing rawfile: %s", list->rawfile));
+ FETCH_LOG("Freeing rawfile: %s", list->rawfile);
free(list->rawfile);
}
free(list);
@@ -731,8 +735,8 @@ fetch_send_callback(const fetch_msg *msg, struct fetch *fetch)
/* exported interface documented in content/fetch.h */
void fetch_remove_from_queues(struct fetch *fetch)
{
- FETCH_LOG(("Fetch %p, fetcher %p can be freed",
- fetch, fetch->fetcher_handle));
+ FETCH_LOG("Fetch %p, fetcher %p can be freed",
+ fetch, fetch->fetcher_handle);
/* Go ahead and free the fetch properly now */
if (fetch->fetch_is_active) {
@@ -748,9 +752,9 @@ void fetch_remove_from_queues(struct fetch *fetch)
RING_GETSIZE(struct fetch, fetch_ring, all_active);
RING_GETSIZE(struct fetch, queue_ring, all_queued);
- LOG(("Fetch ring is now %d elements.", all_active));
+ LOG("Fetch ring is now %d elements.", all_active);
- LOG(("Queue ring is now %d elements.", all_queued));
+ LOG("Queue ring is now %d elements.", all_queued);
#endif
}
@@ -758,7 +762,7 @@ void fetch_remove_from_queues(struct fetch *fetch)
/* exported interface documented in content/fetch.h */
void fetch_set_http_code(struct fetch *fetch, long http_code)
{
- FETCH_LOG(("Setting HTTP code to %ld", http_code));
+ FETCH_LOG("Setting HTTP code to %ld", http_code);
fetch->http_code = http_code;
}
diff --git a/content/fetch.h b/content/fetch.h
index 37539ef..529a800 100644
--- a/content/fetch.h
+++ b/content/fetch.h
@@ -113,13 +113,24 @@ typedef void (*fetch_callback)(const fetch_msg *msg, void *p);
* data contains an error message. FETCH_REDIRECT may replace the FETCH_HEADER,
* FETCH_DATA, FETCH_FINISHED sequence if the server sends a replacement URL.
*
- */
-struct fetch *fetch_start(nsurl *url, nsurl *referer,
- fetch_callback callback,
- void *p, bool only_2xx, const char *post_urlenc,
- const struct fetch_multipart_data *post_multipart,
- bool verifiable, bool downgrade_tls,
- const char *headers[]);
+ * \param url URL to fetch
+ * \param referer
+ * \param callback
+ * \param p
+ * \param only_2xx
+ * \param post_urlenc
+ * \param post_multipart
+ * \param verifiable
+ * \param downgrade_tls
+ * \param headers
+ * \param fetch_out ponter to recive new fetch object.
+ * \return NSERROR_OK and fetch_out updated else appropriate error code
+ */
+nserror fetch_start(nsurl *url, nsurl *referer, fetch_callback callback,
+ void *p, bool only_2xx, const char *post_urlenc,
+ const struct fetch_multipart_data *post_multipart,
+ bool verifiable, bool downgrade_tls,
+ const char *headers[], struct fetch **fetch_out);
/**
* Abort a fetch.
diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c
index b82f6b0..a2c6f2e 100644
--- a/content/fetchers/curl.c
+++ b/content/fetchers/curl.c
@@ -112,7 +112,7 @@ static char fetch_proxy_userpwd[100]; /**< Proxy authentication details. */
*/
static bool fetch_curl_initialise(lwc_string *scheme)
{
- LOG(("Initialise cURL fetcher for %s", lwc_string_data(scheme)));
+ LOG("Initialise cURL fetcher for %s", lwc_string_data(scheme));
curl_fetchers_registered++;
return true; /* Always succeeds */
}
@@ -128,17 +128,17 @@ static void fetch_curl_finalise(lwc_string *scheme)
struct cache_handle *h;
curl_fetchers_registered--;
- LOG(("Finalise cURL fetcher %s", lwc_string_data(scheme)));
+ LOG("Finalise cURL fetcher %s", lwc_string_data(scheme));
if (curl_fetchers_registered == 0) {
CURLMcode codem;
/* All the fetchers have been finalised. */
- LOG(("All cURL fetchers finalised, closing down cURL"));
+ LOG("All cURL fetchers finalised, closing down cURL");
curl_easy_cleanup(fetch_blank_curl);
codem = curl_multi_cleanup(fetch_curl_multi);
if (codem != CURLM_OK)
- LOG(("curl_multi_cleanup failed: ignoring"));
+ LOG("curl_multi_cleanup failed: ignoring");
curl_global_cleanup();
}
@@ -208,8 +208,7 @@ fetch_curl_post_convert(const struct fetch_multipart_data *control)
"application/octet-stream",
CURLFORM_END);
if (code != CURL_FORMADD_OK)
- LOG(("curl_formadd: %d (%s)",
- code, control->name));
+ LOG("curl_formadd: %d (%s)", code, control->name);
} else {
char *mimetype = guit->fetch->mimetype(control->value);
code = curl_formadd(&post, &last,
@@ -220,9 +219,7 @@ fetch_curl_post_convert(const struct fetch_multipart_data *control)
(mimetype != 0 ? mimetype : "text/plain"),
CURLFORM_END);
if (code != CURL_FORMADD_OK)
- LOG(("curl_formadd: %d (%s=%s)",
- code, control->name,
- control->value));
+ LOG("curl_formadd: %d (%s=%s)", code, control->name, control->value);
free(mimetype);
}
free(leafname);
@@ -233,9 +230,7 @@ fetch_curl_post_convert(const struct fetch_multipart_data *control)
CURLFORM_COPYCONTENTS, control->value,
CURLFORM_END);
if (code != CURL_FORMADD_OK)
- LOG(("curl_formadd: %d (%s=%s)", code,
- control->name,
- control->value));
+ LOG("curl_formadd: %d (%s=%s)", code, control->name, control->value);
}
}
@@ -282,7 +277,7 @@ fetch_curl_setup(struct fetch *parent_fetch,
fetch->fetch_handle = parent_fetch;
- LOG(("fetch %p, url '%s'", fetch, nsurl_access(url)));
+ LOG("fetch %p, url '%s'", fetch, nsurl_access(url));
/* construct a new fetch structure */
fetch->curl_handle = NULL;
@@ -681,7 +676,7 @@ static void fetch_curl_abort(void *vf)
{
struct curl_fetch_info *f = (struct curl_fetch_info *)vf;
assert(f);
- LOG(("fetch %p, url '%s'", f, nsurl_access(f->url)));
+ LOG("fetch %p, url '%s'", f, nsurl_access(f->url));
if (f->curl_handle) {
f->abort = true;
} else {
@@ -701,7 +696,7 @@ static void fetch_curl_stop(struct curl_fetch_info *f)
CURLMcode codem;
assert(f);
- LOG(("fetch %p, url '%s'", f, nsurl_access(f->url)));
+ LOG("fetch %p, url '%s'", f, nsurl_access(f->url));
if (f->curl_handle) {
/* remove from curl multi handle */
@@ -769,7 +764,7 @@ static bool fetch_curl_process_headers(struct curl_fetch_info *f)
assert(code == CURLE_OK);
}
http_code = f->http_code;
- LOG(("HTTP status code %li", http_code));
+ LOG("HTTP status code %li", http_code);
if (http_code == 304 && !f->post_urlenc && !f->post_multipart) {
/* Not Modified && GET request */
@@ -780,7 +775,7 @@ static bool fetch_curl_process_headers(struct curl_fetch_info *f)
/* handle HTTP redirects (3xx response codes) */
if (300 <= http_code && http_code < 400 && f->location != 0) {
- LOG(("FETCH_REDIRECT, '%s'", f->location));
+ LOG("FETCH_REDIRECT, '%s'", f->location);
msg.type = FETCH_REDIRECT;
msg.data.redirect = f->location;
fetch_send_callback(&msg, f->fetch_handle);
@@ -836,7 +831,7 @@ static void fetch_curl_done(CURL *curl_handle, CURLcode result)
assert(code == CURLE_OK);
abort_fetch = f->abort;
- LOG(("done %s", nsurl_access(f->url)));
+ LOG("done %s", nsurl_access(f->url));
if (abort_fetch == false && (result == CURLE_OK ||
(result == CURLE_WRITE_ERROR && f->stopped == false))) {
@@ -874,7 +869,7 @@ static void fetch_curl_done(CURL *curl_handle, CURLcode result)
memset(f->cert_data, 0, sizeof(f->cert_data));
cert = true;
} else {
- LOG(("Unknown cURL response code %d", result));
+ LOG("Unknown cURL response code %d", result);
error = true;
}
@@ -1007,8 +1002,7 @@ static void fetch_curl_poll(lwc_string *scheme_ignored)
do {
codem = curl_multi_perform(fetch_curl_multi, &running);
if (codem != CURLM_OK && codem != CURLM_CALL_MULTI_PERFORM) {
- LOG(("curl_multi_perform: %i %s",
- codem, curl_multi_strerror(codem)));
+ LOG("curl_multi_perform: %i %s", codem, curl_multi_strerror(codem));
warn_user("MiscError", curl_multi_strerror(codem));
return;
}
@@ -1169,7 +1163,7 @@ static size_t fetch_curl_header(char *data, size_t size, size_t nmemb,
free(f->location);
f->location = malloc(size);
if (!f->location) {
- LOG(("malloc failed"));
+ LOG("malloc failed");
return size;
}
SKIP_ST(9);
@@ -1242,17 +1236,17 @@ nserror fetch_curl_register(void)
.finalise = fetch_curl_finalise
};
- LOG(("curl_version %s", curl_version()));
+ LOG("curl_version %s", curl_version());
code = curl_global_init(CURL_GLOBAL_ALL);
if (code != CURLE_OK) {
- LOG(("curl_global_init failed."));
+ LOG("curl_global_init failed.");
return NSERROR_INIT_FAILED;
}
fetch_curl_multi = curl_multi_init();
if (!fetch_curl_multi) {
- LOG(("curl_multi_init failed."));
+ LOG("curl_multi_init failed.");
return NSERROR_INIT_FAILED;
}
@@ -1280,7 +1274,7 @@ nserror fetch_curl_register(void)
*/
fetch_blank_curl = curl_easy_init();
if (!fetch_blank_curl) {
- LOG(("curl_easy_init failed"));
+ LOG("curl_easy_init failed");
return NSERROR_INIT_FAILED;
}
@@ -1312,11 +1306,11 @@ nserror fetch_curl_register(void)
if (nsoption_charp(ca_bundle) &&
strcmp(nsoption_charp(ca_bundle), "")) {
- LOG(("ca_bundle: '%s'", nsoption_charp(ca_bundle)));
+ LOG("ca_bundle: '%s'", nsoption_charp(ca_bundle));
SETOPT(CURLOPT_CAINFO, nsoption_charp(ca_bundle));
}
if (nsoption_charp(ca_path) && strcmp(nsoption_charp(ca_path), "")) {
- LOG(("ca_path: '%s'", nsoption_charp(ca_path)));
+ LOG("ca_path: '%s'", nsoption_charp(ca_path));
SETOPT(CURLOPT_CAPATH, nsoption_charp(ca_path));
}
@@ -1328,7 +1322,7 @@ nserror fetch_curl_register(void)
curl_with_openssl = false;
}
- LOG(("cURL %slinked against openssl", curl_with_openssl ? "" : "not "));
+ LOG("cURL %slinked against openssl", curl_with_openssl ? "" : "not ");
/* cURL initialised okay, register the fetchers */
@@ -1347,20 +1341,19 @@ nserror fetch_curl_register(void)
}
if (fetcher_add(scheme, &fetcher_ops) != NSERROR_OK) {
- LOG(("Unable to register cURL fetcher for %s",
- data->protocols[i]));
+ LOG("Unable to register cURL fetcher for %s", data->protocols[i]);
}
}
return NSERROR_OK;
curl_easy_setopt_failed:
- LOG(("curl_easy_setopt failed."));
+ LOG("curl_easy_setopt failed.");
return NSERROR_INIT_FAILED;
#if LIBCURL_VERSION_NUM >= 0x071e00
curl_multi_setopt_failed:
- LOG(("curl_multi_setopt failed."));
+ LOG("curl_multi_setopt failed.");
return NSERROR_INIT_FAILED;
#endif
}
diff --git a/content/fetchers/data.c b/content/fetchers/data.c
index ecf77b0..00494cc 100644
--- a/content/fetchers/data.c
+++ b/content/fetchers/data.c
@@ -62,7 +62,7 @@ static CURL *curl;
static bool fetch_data_initialise(lwc_string *scheme)
{
- LOG(("fetch_data_initialise called for %s", lwc_string_data(scheme)));
+ LOG("fetch_data_initialise called for %s", lwc_string_data(scheme));
if ( (curl = curl_easy_init()) == NULL)
return false;
else
@@ -71,7 +71,7 @@ static bool fetch_data_initialise(lwc_string *scheme)
static void fetch_data_finalise(lwc_string *scheme)
{
- LOG(("fetch_data_finalise called for %s", lwc_string_data(scheme)));
+ LOG("fetch_data_finalise called for %s", lwc_string_data(scheme));
curl_easy_cleanup(curl);
}
@@ -154,7 +154,7 @@ static bool fetch_data_process(struct fetch_data_context *c)
* data must still be there.
*/
- LOG(("url: %.140s", c->url));
+ LOG("url: %.140s", c->url);
if (strlen(c->url) < 6) {
/* 6 is the minimum possible length (data:,) */
@@ -263,8 +263,7 @@ static void fetch_data_poll(lwc_string *scheme)
char header[64];
fetch_set_http_code(c->parent_fetch, 200);
- LOG(("setting data: MIME type to %s, length to %zd",
- c->mimetype, c->datalen));
+ LOG("setting data: MIME type to %s, length to %zd", c->mimetype, c->datalen);
/* Any callback can result in the fetch being aborted.
* Therefore, we _must_ check for this after _every_
* call to fetch_data_send_callback().
@@ -300,7 +299,7 @@ static void fetch_data_poll(lwc_string *scheme)
fetch_data_send_callback(&msg, c);
}
} else {
- LOG(("Processing of %s failed!", c->url));
+ LOG("Processing of %s failed!", c->url);
/* Ensure that we're unlocked here. If we aren't,
* then fetch_data_process() is broken.
diff --git a/content/fetchers/resource.c b/content/fetchers/resource.c
index 1a439aa..6472dc5 100644
--- a/content/fetchers/resource.c
+++ b/content/fetchers/resource.c
@@ -52,26 +52,7 @@
#include "content/fetchers/resource.h"
#include "content/urldb.h"
-struct fetch_resource_context;
-
-typedef bool (*fetch_resource_handler)(struct fetch_resource_context *);
-
-/** Context for an resource fetch */
-struct fetch_resource_context {
- struct fetch_resource_context *r_next, *r_prev;
-
- struct fetch *fetchh; /**< Handle for this fetch */
-
- bool aborted; /**< Flag indicating fetch has been aborted */
- bool locked; /**< Flag indicating entry is already entered */
-
- nsurl *url;
- nsurl *redirect_url; /**< The url the fetch redirects to */
-
- fetch_resource_handler handler;
-};
-
-static struct fetch_resource_context *ring = NULL;
+#define DIRECT_ETAG_VALUE 123456
/** Valid resource paths */
static const char *fetch_resource_paths[] = {
@@ -95,11 +76,41 @@ static const char *fetch_resource_paths[] = {
"icons/hotlist-rmv.png",
"icons/search.png"
};
+
+/**
+ * map of resource scheme paths to redirect urls
+ */
static struct fetch_resource_map_entry {
- lwc_string *path;
- nsurl *url;
+ lwc_string *path; /**< resource scheme path */
+ nsurl *redirect_url; /**< url to redirect to */
+ const uint8_t *data; /**< direct pointer to data */
+ size_t data_len; /**< length of direct data */
} fetch_resource_map[NOF_ELEMENTS(fetch_resource_paths)];
+struct fetch_resource_context;
+
+typedef bool (*fetch_resource_handler)(struct fetch_resource_context *);
+
+/** Context for an resource fetch */
+struct fetch_resource_context {
+ struct fetch_resource_context *r_next, *r_prev;
+
+ struct fetch *fetchh; /**< Handle for this fetch */
+
+ bool aborted; /**< Flag indicating fetch has been aborted */
+ bool locked; /**< Flag indicating entry is already entered */
+
+ nsurl *url; /**< requested url */
+
+ struct fetch_resource_map_entry *entry; /**< resource map entry */
+
+ fetch_resource_handler handler;
+
+ int etag;
+};
+
+static struct fetch_resource_context *ring = NULL;
+
static uint32_t fetch_resource_path_count;
/** issue fetch callbacks with locking */
@@ -136,7 +147,9 @@ static bool fetch_resource_send_header(struct fetch_resource_context *ctx,
-
+/**
+ * resource handler that results in a redirect to another url.
+ */
static bool fetch_resource_redirect_handler(struct fetch_resource_context *ctx)
{
fetch_msg msg;
@@ -145,12 +158,65 @@ static bool fetch_resource_redirect_handler(struct fetch_resource_context *ctx)
fetch_set_http_code(ctx->fetchh, 302);
msg.type = FETCH_REDIRECT;
- msg.data.redirect = nsurl_access(ctx->redirect_url);
- fetch_resource_send_callback(&msg, ctx);
+ msg.data.redirect = nsurl_access(ctx->entry->redirect_url);
+ fetch_resource_send_callback(&msg, ctx);
return true;
}
+/* resource handler that returns data directly */
+static bool fetch_resource_data_handler(struct fetch_resource_context *ctx)
+{
+ fetch_msg msg;
+
+ /* Check if we can just return not modified */
+ if (ctx->etag != 0 && ctx->etag == DIRECT_ETAG_VALUE) {
+ fetch_set_http_code(ctx->fetchh, 304);
+ msg.type = FETCH_NOTMODIFIED;
+ fetch_resource_send_callback(&msg, ctx);
+ return true;
+ }
+
+ /* fetch is going to be successful */
+ fetch_set_http_code(ctx->fetchh, 200);
+
+ /* Any callback can result in the fetch being aborted.
+ * Therefore, we _must_ check for this after _every_ call to
+ * fetch_file_send_callback().
+ */
+
+ /* content type */
+ if (fetch_resource_send_header(ctx, "Content-Type: %s",
+ guit->fetch->filetype(lwc_string_data(ctx->entry->path))))
+ goto fetch_resource_data_aborted;
+
+ /* content length */
+ if (fetch_resource_send_header(ctx,
+ "Content-Length: %"SSIZET_FMT,
+ ctx->entry->data_len))
+ goto fetch_resource_data_aborted;
+
+ /* create etag */
+ if (fetch_resource_send_header(ctx,
+ "ETag: \"%10" PRId64 "\"",
+ (int64_t) DIRECT_ETAG_VALUE))
+ goto fetch_resource_data_aborted;
+
+
+ msg.type = FETCH_DATA;
+ msg.data.header_or_data.buf = (const uint8_t *) ctx->entry->data;
+ msg.data.header_or_data.len = ctx->entry->data_len;
+ fetch_resource_send_callback(&msg, ctx);
+
+ if (ctx->aborted == false) {
+ msg.type = FETCH_FINISHED;
+ fetch_resource_send_callback(&msg, ctx);
+ }
+
+fetch_resource_data_aborted:
+
+ return true;
+}
static bool fetch_resource_notfound_handler(struct fetch_resource_context *ctx)
{
@@ -195,6 +261,7 @@ static bool fetch_resource_initialise(lwc_string *scheme)
{
struct fetch_resource_map_entry *e;
uint32_t i;
+ nserror res;
fetch_resource_path_count = 0;
@@ -207,15 +274,26 @@ static bool fetch_resource_initialise(lwc_string *scheme)
while (i > 0) {
i--;
lwc_string_unref(fetch_resource_map[i].path);
- nsurl_unref(fetch_resource_map[i].url);
+ nsurl_unref(fetch_resource_map[i].redirect_url);
}
+ /** \todo should this exit with an error condition? */
}
- e->url = guit->fetch->get_resource_url(fetch_resource_paths[i]);
- if (e->url == NULL) {
- lwc_string_unref(e->path);
- } else {
+ e->data = NULL;
+ res = guit->fetch->get_resource_data(lwc_string_data(e->path),
+ &e->data,
+ &e->data_len);
+ if (res == NSERROR_OK) {
+ LOG("direct data for %s", fetch_resource_paths[i]);
fetch_resource_path_count++;
+ } else {
+ e->redirect_url = guit->fetch->get_resource_url(fetch_resource_paths[i]);
+ if (e->redirect_url == NULL) {
+ lwc_string_unref(e->path);
+ } else {
+ LOG("redirect url for %s", fetch_resource_paths[i]);
+ fetch_resource_path_count++;
+ }
}
}
@@ -229,7 +307,11 @@ static void fetch_resource_finalise(lwc_string *scheme)
for (i = 0; i < fetch_resource_path_count; i++) {
lwc_string_unref(fetch_resource_map[i].path);
- nsurl_unref(fetch_resource_map[i].url);
+ if (fetch_resource_map[i].data != NULL) {
+ guit->fetch->release_resource_data(fetch_resource_map[i].data);
+ } else {
+ nsurl_unref(fetch_resource_map[i].redirect_url);
+ }
}
}
@@ -238,38 +320,44 @@ static bool fetch_resource_can_fetch(const nsurl *url)
return true;
}
-/** callback to set up a resource fetch context. */
+/**
+ * set up a resource fetch context.
+ */
static void *
fetch_resource_setup(struct fetch *fetchh,
- nsurl *url,
- bool only_2xx,
- bool downgrade_tls,
- const char *post_urlenc,
- const struct fetch_multipart_data *post_multipart,
- const char **headers)
+ nsurl *url,
+ bool only_2xx,
+ bool downgrade_tls,
+ const char *post_urlenc,
+ const struct fetch_multipart_data *post_multipart,
+ const char **headers)
{
struct fetch_resource_context *ctx;
lwc_string *path;
+ uint32_t i;
ctx = calloc(1, sizeof(*ctx));
- if (ctx == NULL)
+ if (ctx == NULL) {
return NULL;
+ }
ctx->handler = fetch_resource_notfound_handler;
if ((path = nsurl_get_component(url, NSURL_PATH)) != NULL) {
- uint32_t i;
bool match;
/* Ensure requested path is valid */
for (i = 0; i < fetch_resource_path_count; i++) {
- if (lwc_string_isequal(path,
- fetch_resource_map[i].path,
+ if (lwc_string_isequal(path,
+ fetch_resource_map[i].path,
&match) == lwc_error_ok && match) {
- ctx->redirect_url =
- nsurl_ref(fetch_resource_map[i].url);
- ctx->handler =
- fetch_resource_redirect_handler;
+ /* found a url match, select handler */
+ ctx->entry = &fetch_resource_map[i];
+ if (ctx->entry->data != NULL) {
+ ctx->handler = fetch_resource_data_handler;
+ } else {
+ ctx->handler = fetch_resource_redirect_handler;
+ }
break;
}
}
@@ -279,6 +367,23 @@ fetch_resource_setup(struct fetch *fetchh,
ctx->url = nsurl_ref(url);
+ /* Scan request headers looking for If-None-Match */
+ for (i = 0; headers[i] != NULL; i++) {
+ if (strncasecmp(headers[i], "If-None-Match:",
+ SLEN("If-None-Match:")) == 0) {
+ /* If-None-Match: "12345678" */
+ const char *d = headers[i] + SLEN("If-None-Match:");
+
+ /* Scan to first digit, if any */
+ while (*d != '\0' && (*d < '0' || '9' < *d))
+ d++;
+
+ /* Convert to time_t */
+ if (*d != '\0')
+ ctx->etag = atoi(d);
+ }
+ }
+
ctx->fetchh = fetchh;
RING_INSERT(ring, ctx);
@@ -290,8 +395,6 @@ fetch_resource_setup(struct fetch *fetchh,
static void fetch_resource_free(void *ctx)
{
struct fetch_resource_context *c = ctx;
- if (c->redirect_url != NULL)
- nsurl_unref(c->redirect_url);
if (c->url != NULL)
nsurl_unref(c->url);
RING_REMOVE(ring, c);
diff --git a/content/fs_backing_store.c b/content/fs_backing_store.c
index 2a5b3ea..b9490dd 100644
--- a/content/fs_backing_store.c
+++ b/content/fs_backing_store.c
@@ -232,7 +232,8 @@ struct store_state {
*/
bool entries_dirty;
- /** URL identifier to entry index mapping.
+ /**
+ * URL identifier to entry index mapping.
*
* This is an open coded index on the entries url field and
* provides a computationaly inexpensive way to go from the
@@ -240,7 +241,8 @@ struct store_state {
*/
entry_index_t *addrmap;
- /* small block managemet */
+
+ /** small block indexes */
struct block_file blocks[ENTRY_ELEM_COUNT][BLOCK_FILE_COUNT];
/** flag indicating if the block file use maps have been made
@@ -248,6 +250,11 @@ struct store_state {
*/
bool blocks_dirty;
+ /** flag indicating if a block file has been opened for update
+ * since maintinance was previously done.
+ */
+ bool blocks_opened;
+
/* stats */
uint64_t total_alloc; /**< total size of all allocated storage. */
@@ -512,11 +519,11 @@ invalidate_entry(struct store_state *state, struct store_entry *bse)
* This entry cannot be immediately removed as it has
* associated allocation so wait for allocation release.
*/
- LOG(("invalidating entry with referenced allocation"));
+ LOG("invalidating entry with referenced allocation");
return NSERROR_OK;
}
- LOG(("Removing entry for %p", bse));
+ LOG("Removing entry for %p", bse);
/* remove the entry from the index */
ret = remove_store_entry(state, &bse);
@@ -526,12 +533,12 @@ invalidate_entry(struct store_state *state, struct store_entry *bse)
ret = invalidate_element(state, bse, ENTRY_ELEM_META);
if (ret != NSERROR_OK) {
- LOG(("Error invalidating metadata element"));
+ LOG("Error invalidating metadata element");
}
ret = invalidate_element(state, bse, ENTRY_ELEM_DATA);
if (ret != NSERROR_OK) {
- LOG(("Error invalidating data element"));
+ LOG("Error invalidating data element");
}
return NSERROR_OK;
@@ -613,8 +620,8 @@ static nserror store_evict(struct store_state *state)
return NSERROR_OK;
}
- LOG(("Evicting entries to reduce %d by %d",
- state->total_alloc, state->hysteresis));
+ LOG("Evicting entries to reduce %"PRIu64" by %zd",
+ state->total_alloc, state->hysteresis);
/* allocate storage for the list */
elist = malloc(sizeof(entry_ident_t) * state->last_entry);
@@ -651,7 +658,7 @@ static nserror store_evict(struct store_state *state)
free(elist);
- LOG(("removed %d in %d entries", removed, ent));
+ LOG("removed %zd in %d entries", removed, ent);
return ret;
}
@@ -727,8 +734,8 @@ static nserror write_entries(struct store_state *state)
*
* Serialise block file use map out to storage.
*
- * @param state The backing store state to serialise.
- * @return NSERROR_OK on sucess or error code on faliure.
+ * \param state The backing store state to serialise.
+ * \return NSERROR_OK on sucess or error code on faliure.
*/
static nserror write_blocks(struct store_state *state)
{
@@ -766,7 +773,7 @@ static nserror write_blocks(struct store_state *state)
&state->blocks[elem_idx][bfidx].use_map[0],
BLOCK_USE_MAP_SIZE);
if (wr != BLOCK_USE_MAP_SIZE) {
- LOG(("writing block file %d use index on file number %d failed", elem_idx, bfidx));
+ LOG("writing block file %d use index on file number %d failed", elem_idx, bfidx);
goto wr_err;
}
written += wr;
@@ -802,6 +809,46 @@ wr_err:
}
/**
+ * Ensures block files are of the correct extent
+ *
+ * block files have their extent set to their maximum size to ensure
+ * subsequent reads and writes do not need to extend teh file and are
+ * therefore faster.
+ *
+ * \param state The backing store state to set block extent for.
+ * \return NSERROR_OK on sucess or error code on faliure.
+ */
+static nserror set_block_extents(struct store_state *state)
+{
+ int bfidx; /* block file index */
+ int elem_idx;
+ int ftr;
+
+ if (state->blocks_opened == false) {
+ /* no blocks have been opened since last write */
+ return NSERROR_OK;
+ }
+
+ LOG("Starting");
+ for (elem_idx = 0; elem_idx < ENTRY_ELEM_COUNT; elem_idx++) {
+ for (bfidx = 0; bfidx < BLOCK_FILE_COUNT; bfidx++) {
+ if (state->blocks[elem_idx][bfidx].fd != -1) {
+ /* ensure block file is correct extent */
+ ftr = ftruncate(state->blocks[elem_idx][bfidx].fd, 1U << (log2_block_size[elem_idx] + BLOCK_ENTRY_COUNT));
+ if (ftr == -1) {
+ LOG("Truncate failed errno:%d", errno);
+ }
+ }
+ }
+ }
+ LOG("Complete");
+
+ state->blocks_opened = false;
+
+ return NSERROR_OK;
+}
+
+/**
* maintinance of control structures.
*
* callback scheduled when control data has been update. Currently
@@ -816,6 +863,7 @@ static void control_maintinance(void *s)
write_entries(state);
write_blocks(state);
+ set_block_extents(state);
}
@@ -838,7 +886,7 @@ get_store_entry(struct store_state *state, nsurl *url, struct store_entry **bse)
entry_ident_t ident;
unsigned int sei; /* store entry index */
- LOG(("url:%s", nsurl_access(url)));
+ LOG("url:%s", nsurl_access(url));
/* use the url hash as the entry identifier */
ident = nsurl_hash(url);
@@ -846,13 +894,13 @@ get_store_entry(struct store_state *state, nsurl *url, struct store_entry **bse)
sei = BS_ENTRY_INDEX(ident, state);
if (sei == 0) {
- LOG(("Failed to find ident 0x%x in index", ident));
+ LOG("Failed to find ident 0x%x in index", ident);
return NSERROR_NOT_FOUND;
}
if (state->entries[sei].ident != ident) {
/* entry ident did not match */
- LOG(("ident did not match entry"));
+ LOG("ident did not match entry");
return NSERROR_NOT_FOUND;
}
@@ -927,7 +975,7 @@ set_store_entry(struct store_state *state,
nserror ret;
struct store_entry_element *elem;
- LOG(("url:%s", nsurl_access(url)));
+ LOG("url:%s", nsurl_access(url));
/* evict entries as required and ensure there is at least one
* new entry available.
@@ -965,8 +1013,7 @@ set_store_entry(struct store_state *state,
* to see if the old entry is in use and if
* not prefer the newly stored entry instead?
*/
- LOG(("Entry index collision trying to replace %x with %x",
- se->ident, ident));
+ LOG("Entry index collision trying to replace %x with %x", se->ident, ident);
return NSERROR_PERMISSION;
}
}
@@ -979,7 +1026,7 @@ set_store_entry(struct store_state *state,
/* this entry cannot be removed as it has associated
* allocation.
*/
- LOG(("attempt to overwrite entry with in use data"));
+ LOG("attempt to overwrite entry with in use data");
return NSERROR_PERMISSION;
}
@@ -1038,7 +1085,7 @@ store_open(struct store_state *state,
fname = store_fname(state, ident, elem_idx);
if (fname == NULL) {
- LOG(("filename error"));
+ LOG("filename error");
return -1;
}
@@ -1046,13 +1093,13 @@ store_open(struct store_state *state,
if (openflags & O_CREAT) {
ret = netsurf_mkdir_all(fname);
if (ret != NSERROR_OK) {
- LOG(("file path \"%s\" could not be created", fname));
+ LOG("file path \"%s\" could not be created", fname);
free(fname);
return -1;
}
}
- LOG(("opening %s", fname));
+ LOG("opening %s", fname);
fd = open(fname, openflags, S_IRUSR | S_IWUSR);
free(fname);
@@ -1079,9 +1126,9 @@ build_entrymap(struct store_state *state)
{
unsigned int eloop;
- LOG(("Allocating %d bytes for max of %d buckets",
- (1 << state->ident_bits) * sizeof(entry_index_t),
- 1 << state->ident_bits));
+ LOG("Allocating %ld bytes for max of %d buckets",
+ (1 << state->ident_bits) * sizeof(entry_index_t),
+ 1 << state->ident_bits);
state->addrmap = calloc(1 << state->ident_bits, sizeof(entry_index_t));
if (state->addrmap == NULL) {
@@ -1092,10 +1139,10 @@ build_entrymap(struct store_state *state)
for (eloop = 1; eloop < state->last_entry; eloop++) {
/*
- LOG(("entry:%d ident:0x%08x used:%d",
+ LOG("entry:%d ident:0x%08x used:%d",
eloop,
BS_ADDRESS(state->entries[eloop].ident, state),
- state->entries[eloop].use_count));
+ state->entries[eloop].use_count);
*/
/* update the address map to point at the entry */
@@ -1157,10 +1204,10 @@ read_entries(struct store_state *state)
entries_size = (1 << state->entry_bits) * sizeof(struct store_entry);
- LOG(("Allocating %d bytes for max of %d entries of %d length elements %d length",
- entries_size, 1 << state->entry_bits,
- sizeof(struct store_entry),
- sizeof(struct store_entry_element)));
+ LOG("Allocating %zd bytes for max of %d entries of %ld length elements %ld length",
+ entries_size, 1 << state->entry_bits,
+ sizeof(struct store_entry),
+ sizeof(struct store_entry_element));
state->entries = calloc(1, entries_size);
if (state->entries == NULL) {
@@ -1175,7 +1222,7 @@ read_entries(struct store_state *state)
close(fd);
if (rd > 0) {
state->last_entry = rd / sizeof(struct store_entry);
- LOG(("Read %d entries", state->last_entry));
+ LOG("Read %d entries", state->last_entry);
}
} else {
/* could rebuild entries from fs */
@@ -1206,7 +1253,7 @@ read_blocks(struct store_state *state)
return ret;
}
- LOG(("Initialising block use map from %s", fname));
+ LOG("Initialising block use map from %s", fname);
fd = open(fname, O_RDWR);
free(fname);
@@ -1218,7 +1265,7 @@ read_blocks(struct store_state *state)
&state->blocks[elem_idx][bfidx].use_map[0],
BLOCK_USE_MAP_SIZE);
if (rd <= 0) {
- LOG(("reading block file %d use index on file number %d failed", elem_idx, bfidx));
+ LOG("reading block file %d use index on file number %d failed", elem_idx, bfidx);
goto rd_err;
}
}
@@ -1227,7 +1274,7 @@ read_blocks(struct store_state *state)
close(fd);
} else {
- LOG(("Initialising block use map to defaults"));
+ LOG("Initialising block use map to defaults");
/* ensure block 0 (invalid sentinal) is skipped */
state->blocks[ENTRY_ELEM_DATA][0].use_map[0] = 1;
state->blocks[ENTRY_ELEM_META][0].use_map[0] = 1;
@@ -1297,7 +1344,7 @@ write_control(struct store_state *state)
return ret;
}
- LOG(("writing control file \"%s\"", fname));
+ LOG("writing control file \"%s\"", fname);
ret = netsurf_mkdir_all(fname);
if (ret != NSERROR_OK) {
@@ -1345,7 +1392,7 @@ read_control(struct store_state *state)
return ret;
}
- LOG(("opening control file \"%s\"", fname));
+ LOG("opening control file \"%s\"", fname);
fcontrol = fopen(fname, "rb");
@@ -1462,7 +1509,7 @@ initialise(const struct llcache_store_parameters *parameters)
/* read store control and create new if required */
ret = read_control(newstate);
if (ret != NSERROR_OK) {
- LOG(("read control failed %s", messages_get_errorcode(ret)));
+ LOG("read control failed %s", messages_get_errorcode(ret));
ret = write_control(newstate);
if (ret == NSERROR_OK) {
unlink_entries(newstate);
@@ -1511,12 +1558,15 @@ initialise(const struct llcache_store_parameters *parameters)
storestate = newstate;
- LOG(("FS backing store init successful"));
+ LOG("FS backing store init successful");
- LOG(("path:%s limit:%d hyst:%d addr:%d entries:%d",
- newstate->path, newstate->limit, newstate->hysteresis,
- newstate->ident_bits, newstate->entry_bits));
- LOG(("Using %lld/%lld", newstate->total_alloc, newstate->limit));
+ LOG("path:%s limit:%zd hyst:%zd addr:%d entries:%d",
+ newstate->path,
+ newstate->limit,
+ newstate->hysteresis,
+ newstate->ident_bits,
+ newstate->entry_bits);
+ LOG("Using %"PRIu64"/%zd", newstate->total_alloc, newstate->limit);
return NSERROR_OK;
}
@@ -1534,6 +1584,7 @@ static nserror
finalise(void)
{
int bf; /* block file index */
+ unsigned int op_count;
if (storestate != NULL) {
guit->browser->schedule(-1, control_maintinance, storestate);
@@ -1550,14 +1601,19 @@ finalise(void)
}
}
+ op_count = storestate->hit_count + storestate->miss_count;
+
/* avoid division by zero */
- if (storestate->miss_count == 0) {
- storestate->miss_count = 1;
+ if (op_count > 0) {
+ LOG("Cache total/hit/miss/fail (counts) %d/%zd/%zd/%d (100%%/%zd%%/%zd%%/%d%%)",
+ op_count,
+ storestate->hit_count,
+ storestate->miss_count,
+ 0,
+ (storestate->hit_count * 100) / op_count,
+ (storestate->miss_count * 100) / op_count,
+ 0);
}
- LOG(("hits:%d misses:%d hit ratio:%d returned:%d bytes",
- storestate->hit_count, storestate->miss_count,
- storestate->hit_count / storestate->miss_count,
- storestate->hit_size));
free(storestate->path);
free(storestate);
@@ -1590,13 +1646,12 @@ static nserror store_write_block(struct store_state *state,
state->blocks[elem_idx][bf].fd = store_open(state, bf,
elem_idx + ENTRY_ELEM_COUNT, O_CREAT | O_RDWR);
if (state->blocks[elem_idx][bf].fd == -1) {
- LOG(("Open failed errno %d", errno));
+ LOG("Open failed errno %d", errno);
return NSERROR_SAVE_FAILED;
}
- /* ensure block file is correct length at open */
- ftruncate(state->blocks[elem_idx][bf].fd,
- 1U << (log2_block_size[elem_idx] + BLOCK_ENTRY_COUNT));
+ /* flag that a block file has been opened */
+ state->blocks_opened = true;
}
offst = bi << log2_block_size[elem_idx];
@@ -1606,15 +1661,21 @@ static nserror store_write_block(struct store_state *state,
bse->elem[elem_idx].size,
offst);
if (wr != (ssize_t)bse->elem[elem_idx].size) {
- LOG(("Write failed %d of %d bytes from %p at 0x%x block %d errno %d",
- wr, bse->elem[elem_idx].size, bse->elem[elem_idx].data,
- offst, bse->elem[elem_idx].block, errno));
+ LOG("Write failed %zd of %d bytes from %p at 0x%jx block %d errno %d",
+ wr,
+ bse->elem[elem_idx].size,
+ bse->elem[elem_idx].data,
+ (uintmax_t)offst,
+ bse->elem[elem_idx].block,
+ errno);
return NSERROR_SAVE_FAILED;
}
- LOG(("Wrote %d bytes from %p at 0x%x block %d",
- wr, bse->elem[elem_idx].data,
- offst, bse->elem[elem_idx].block));
+ LOG("Wrote %zd bytes from %p at 0x%jx block %d",
+ wr,
+ bse->elem[elem_idx].data,
+ (uintmax_t)offst,
+ bse->elem[elem_idx].block);
return NSERROR_OK;
}
@@ -1638,7 +1699,7 @@ static nserror store_write_file(struct store_state *state,
fd = store_open(state, bse->ident, elem_idx, O_CREAT | O_WRONLY);
if (fd < 0) {
perror("");
- LOG(("Open failed %d errno %d", fd, errno));
+ LOG("Open failed %d errno %d", fd, errno);
return NSERROR_SAVE_FAILED;
}
@@ -1647,15 +1708,17 @@ static nserror store_write_file(struct store_state *state,
close(fd);
if (wr != (ssize_t)bse->elem[elem_idx].size) {
- LOG(("Write failed %d of %d bytes from %p errno %d",
- wr, bse->elem[elem_idx].size, bse->elem[elem_idx].data,
- err));
+ LOG("Write failed %zd of %d bytes from %p errno %d",
+ wr,
+ bse->elem[elem_idx].size,
+ bse->elem[elem_idx].data,
+ err);
/** @todo Delete the file? */
return NSERROR_SAVE_FAILED;
}
- LOG(("Wrote %d bytes from %p", wr, bse->elem[elem_idx].data));
+ LOG("Wrote %zd bytes from %p", wr, bse->elem[elem_idx].data);
return NSERROR_OK;
}
@@ -1696,7 +1759,7 @@ store(nsurl *url,
/* set the store entry up */
ret = set_store_entry(storestate, url, elem_idx, data, datalen, &bse);
if (ret != NSERROR_OK) {
- LOG(("store entry setting failed"));
+ LOG("store entry setting failed");
return ret;
}
@@ -1719,7 +1782,7 @@ static nserror entry_release_alloc(struct store_entry_element *elem)
if ((elem->flags & ENTRY_ELEM_FLAG_HEAP) != 0) {
elem->ref--;
if (elem->ref == 0) {
- LOG(("freeing %p", elem->data));
+ LOG("freeing %p", elem->data);
free(elem->data);
elem->flags &= ~ENTRY_ELEM_FLAG_HEAP;
}
@@ -1751,13 +1814,12 @@ static nserror store_read_block(struct store_state *state,
state->blocks[elem_idx][bf].fd = store_open(state, bf,
elem_idx + ENTRY_ELEM_COUNT, O_CREAT | O_RDWR);
if (state->blocks[elem_idx][bf].fd == -1) {
- LOG(("Open failed errno %d", errno));
+ LOG("Open failed errno %d", errno);
return NSERROR_SAVE_FAILED;
}
- /* ensure block file is correct length at open */
- ftruncate(state->blocks[elem_idx][bf].fd,
- 1U << (log2_block_size[elem_idx] + BLOCK_ENTRY_COUNT));
+ /* flag that a block file has been opened */
+ state->blocks_opened = true;
}
offst = bi << log2_block_size[elem_idx];
@@ -1767,15 +1829,21 @@ static nserror store_read_block(struct store_state *state,
bse->elem[elem_idx].size,
offst);
if (rd != (ssize_t)bse->elem[elem_idx].size) {
- LOG(("Failed reading %d of %d bytes into %p from 0x%x block %d errno %d",
- rd, bse->elem[elem_idx].size, bse->elem[elem_idx].data,
- offst, bse->elem[elem_idx].block, errno));
+ LOG("Failed reading %zd of %d bytes into %p from 0x%jx block %d errno %d",
+ rd,
+ bse->elem[elem_idx].size,
+ bse->elem[elem_idx].data,
+ (uintmax_t)offst,
+ bse->elem[elem_idx].block,
+ errno);
return NSERROR_SAVE_FAILED;
}
- LOG(("Read %d bytes into %p from 0x%x block %d",
- rd, bse->elem[elem_idx].data,
- offst, bse->elem[elem_idx].block));
+ LOG("Read %zd bytes into %p from 0x%jx block %d",
+ rd,
+ bse->elem[elem_idx].data,
+ (uintmax_t)offst,
+ bse->elem[elem_idx].block);
return NSERROR_OK;
}
@@ -1800,7 +1868,7 @@ static nserror store_read_file(struct store_state *state,
/* separate file in backing store */
fd = store_open(storestate, bse->ident, elem_idx, O_RDONLY);
if (fd < 0) {
- LOG(("Open failed %d errno %d", fd, errno));
+ LOG("Open failed %d errno %d", fd, errno);
/** @todo should this invalidate the entry? */
return NSERROR_NOT_FOUND;
}
@@ -1810,7 +1878,7 @@ static nserror store_read_file(struct store_state *state,
bse->elem[elem_idx].data + tot,
bse->elem[elem_idx].size - tot);
if (rd <= 0) {
- LOG(("read error returned %d errno %d", rd, errno));
+ LOG("read error returned %zd errno %d", rd, errno);
ret = NSERROR_NOT_FOUND;
break;
}
@@ -1819,7 +1887,7 @@ static nserror store_read_file(struct store_state *state,
close(fd);
- LOG(("Read %d bytes into %p", tot, bse->elem[elem_idx].data));
+ LOG("Read %zd bytes into %p", tot, bse->elem[elem_idx].data);
return ret;
}
@@ -1852,13 +1920,13 @@ fetch(nsurl *url,
/* fetch store entry */
ret = get_store_entry(storestate, url, &bse);
if (ret != NSERROR_OK) {
- LOG(("entry not found"));
+ LOG("entry not found");
storestate->miss_count++;
return ret;
}
storestate->hit_count++;
- LOG(("retriving cache data for url:%s", nsurl_access(url)));
+ LOG("retriving cache data for url:%s", nsurl_access(url));
/* calculate the entry element index */
if ((bsflags & BACKING_STORE_META) != 0) {
@@ -1873,17 +1941,16 @@ fetch(nsurl *url,
/* use the existing allocation and bump the ref count. */
elem->ref++;
- LOG(("Using existing entry (%p) allocation %p refs:%d",
- bse, elem->data, elem->ref));
+ LOG("Using existing entry (%p) allocation %p refs:%d", bse, elem->data, elem->ref);
} else {
/* allocate from the heap */
elem->data = malloc(elem->size);
if (elem->data == NULL) {
- LOG(("Failed to create new heap allocation"));
+ LOG("Failed to create new heap allocation");
return NSERROR_NOMEM;
}
- LOG(("Created new heap allocation %p", elem->data));
+ LOG("Created new heap allocation %p", elem->data);
/* mark the entry as having a valid heap allocation */
elem->flags |= ENTRY_ELEM_FLAG_HEAP;
@@ -1932,7 +1999,7 @@ static nserror release(nsurl *url, enum backing_store_flags bsflags)
ret = get_store_entry(storestate, url, &bse);
if (ret != NSERROR_OK) {
- LOG(("entry not found"));
+ LOG("entry not found");
return ret;
}
diff --git a/content/hlcache.c b/content/hlcache.c
index 6e99128..85567f5 100644
--- a/content/hlcache.c
+++ b/content/hlcache.c
@@ -191,7 +191,7 @@ static void hlcache_content_callback(struct content *c, content_msg msg,
error = handle->cb(handle, &event, handle->pw);
if (error != NSERROR_OK)
- LOG(("Error in callback: %d", error));
+ LOG("Error in callback: %d", error);
}
/**
@@ -560,7 +560,7 @@ void hlcache_finalise(void)
num_contents++;
}
- LOG(("%d contents remain before cache drain", num_contents));
+ LOG("%d contents remain before cache drain", num_contents);
/* Drain cache */
do {
@@ -574,17 +574,14 @@ void hlcache_finalise(void)
}
} while (num_contents > 0 && num_contents != prev_contents);
- LOG(("%d contents remaining:", num_contents));
+ LOG("%d contents remaining:", num_contents);
for (entry = hlcache->content_list; entry != NULL; entry = entry->next) {
hlcache_handle entry_handle = { entry, NULL, NULL };
if (entry->content != NULL) {
- LOG((" %p : %s (%d users)", entry,
- nsurl_access(
- hlcache_handle_get_url(&entry_handle)),
- content_count_users(entry->content)));
+ LOG(" %p : %s (%d users)", entry, nsurl_access(hlcache_handle_get_url(&entry_handle)), content_count_users(entry->content));
} else {
- LOG((" %p", entry));
+ LOG(" %p", entry);
}
}
@@ -612,12 +609,12 @@ void hlcache_finalise(void)
hlcache->retrieval_ctx_ring = NULL;
}
- LOG(("hit/miss %d/%d", hlcache->hit_count, hlcache->miss_count));
+ LOG("hit/miss %d/%d", hlcache->hit_count, hlcache->miss_count);
free(hlcache);
hlcache = NULL;
- LOG(("Finalising low-level cache"));
+ LOG("Finalising low-level cache");
llcache_finalise();
}
@@ -634,8 +631,9 @@ nserror hlcache_handle_retrieve(nsurl *url, uint32_t flags,
assert(cb != NULL);
ctx = calloc(1, sizeof(hlcache_retrieval_ctx));
- if (ctx == NULL)
+ if (ctx == NULL) {
return NSERROR_NOMEM;
+ }
ctx->handle = calloc(1, sizeof(hlcache_handle));
if (ctx->handle == NULL) {
@@ -665,17 +663,17 @@ nserror hlcache_handle_retrieve(nsurl *url, uint32_t flags,
hlcache_llcache_callback, ctx,
&ctx->llcache);
if (error != NSERROR_OK) {
+ /* error retriving handle so free context and return error */
free((char *) ctx->child.charset);
free(ctx->handle);
free(ctx);
- return error;
- }
-
- RING_INSERT(hlcache->retrieval_ctx_ring, ctx);
-
- *result = ctx->handle;
+ } else {
+ /* successfuly started fetch so add new context to list */
+ RING_INSERT(hlcache->retrieval_ctx_ring, ctx);
- return NSERROR_OK;
+ *result = ctx->handle;
+ }
+ return error;
}
/* See hlcache.h for documentation */
diff --git a/content/llcache.c b/content/llcache.c
index 9628fd3..851dbbb 100644
--- a/content/llcache.c
+++ b/content/llcache.c
@@ -35,6 +35,8 @@
#include <stdint.h>
#include <string.h>
#include <strings.h>
+#include <inttypes.h>
+
#include <curl/curl.h>
#include <nsutils/time.h>
@@ -58,9 +60,9 @@
//#define LLCACHE_TRACE 1
#ifdef LLCACHE_TRACE
-#define LLCACHE_LOG(x) LOG(x)
+#define LLCACHE_LOG(x...) LOG(x)
#else
-#define LLCACHE_LOG(x)
+#define LLCACHE_LOG(x...) ((void) 0)
#endif
/**
@@ -297,8 +299,9 @@ static nserror llcache_object_user_new(llcache_handle_callback cb, void *pw,
llcache_object_user *u;
h = calloc(1, sizeof(llcache_handle));
- if (h == NULL)
+ if (h == NULL) {
return NSERROR_NOMEM;
+ }
u = calloc(1, sizeof(llcache_object_user));
if (u == NULL) {
@@ -311,7 +314,7 @@ static nserror llcache_object_user_new(llcache_handle_callback cb, void *pw,
u->handle = h;
- LLCACHE_LOG(("Created user %p (%p, %p, %p)", u, h, (void *) cb, pw));
+ LLCACHE_LOG("Created user %p (%p, %p, %p)", u, h, (void *) cb, pw);
*user = u;
@@ -328,7 +331,7 @@ static nserror llcache_object_user_new(llcache_handle_callback cb, void *pw,
*/
static nserror llcache_object_user_destroy(llcache_object_user *user)
{
- LLCACHE_LOG(("Destroyed user %p", user));
+ LLCACHE_LOG("Destroyed user %p", user);
assert(user->next == NULL);
assert(user->prev == NULL);
@@ -372,7 +375,7 @@ static nserror llcache_object_remove_user(llcache_object *object,
object->last_used = time(NULL);
}
- LLCACHE_LOG(("Removing user %p from %p", user, object));
+ LLCACHE_LOG("Removing user %p from %p", user, object);
return NSERROR_OK;
}
@@ -428,7 +431,7 @@ static nserror llcache_object_new(nsurl *url, llcache_object **result)
if (obj == NULL)
return NSERROR_NOMEM;
- LLCACHE_LOG(("Created object %p (%s)", obj, nsurl_access(url)));
+ LLCACHE_LOG("Created object %p (%s)", obj, nsurl_access(url));
obj->url = nsurl_ref(url);
@@ -770,9 +773,13 @@ static nserror llcache_fetch_process_header(llcache_object *object,
/**
* (Re)fetch an object
*
+ * sets up headers and attempts to start an actual fetch from the
+ * fetchers system updating the llcache object with the new fetch on
+ * sucessful start.
+ *
* \pre The fetch parameters in object->fetch must be populated
*
- * \param object Object to refetch
+ * \param object Object to refetch
* \return NSERROR_OK on success, appropriate error otherwise
*/
static nserror llcache_object_refetch(llcache_object *object)
@@ -781,6 +788,7 @@ static nserror llcache_object_refetch(llcache_object *object)
struct fetch_multipart_data *multipart = NULL;
char **headers = NULL;
int header_idx = 0;
+ nserror res;
if (object->fetch.post != NULL) {
if (object->fetch.post->type == LLCACHE_POST_URL_ENCODED) {
@@ -792,8 +800,9 @@ static nserror llcache_object_refetch(llcache_object *object)
/* Generate cache-control headers */
headers = malloc(3 * sizeof(char *));
- if (headers == NULL)
+ if (headers == NULL) {
return NSERROR_NOMEM;
+ }
if (object->cache.etag != NULL) {
const size_t len = SLEN("If-None-Match: ") +
@@ -838,27 +847,28 @@ static nserror llcache_object_refetch(llcache_object *object)
/* Reset fetch state */
object->fetch.state = LLCACHE_FETCH_INIT;
- LLCACHE_LOG(("Refetching %p", object));
+ LLCACHE_LOG("Refetching %p", object);
/* Kick off fetch */
- object->fetch.fetch = fetch_start(object->url, object->fetch.referer,
- llcache_fetch_callback, object,
- object->fetch.flags & LLCACHE_RETRIEVE_NO_ERROR_PAGES,
- urlenc, multipart,
- object->fetch.flags & LLCACHE_RETRIEVE_VERIFIABLE,
- object->fetch.tried_with_tls_downgrade,
- (const char **) headers);
+ res = fetch_start(object->url,
+ object->fetch.referer,
+ llcache_fetch_callback,
+ object,
+ object->fetch.flags & LLCACHE_RETRIEVE_NO_ERROR_PAGES,
+ urlenc,
+ multipart,
+ object->fetch.flags & LLCACHE_RETRIEVE_VERIFIABLE,
+ object->fetch.tried_with_tls_downgrade,
+ (const char **)headers,
+ &object->fetch.fetch);
/* Clean up cache-control headers */
- while (--header_idx >= 0)
+ while (--header_idx >= 0) {
free(headers[header_idx]);
+ }
free(headers);
- /* Did we succeed in creating a fetch? */
- if (object->fetch.fetch == NULL)
- return NSERROR_NOMEM;
-
- return NSERROR_OK;
+ return res;
}
/**
@@ -884,7 +894,7 @@ static nserror llcache_object_fetch(llcache_object *object, uint32_t flags,
nsurl *referer_clone = NULL;
llcache_post_data *post_clone = NULL;
- LLCACHE_LOG(("Starting fetch for %p", object));
+ LLCACHE_LOG("Starting fetch for %p", object);
if (post != NULL) {
error = llcache_post_data_clone(post, &post_clone);
@@ -917,7 +927,7 @@ static nserror llcache_object_destroy(llcache_object *object)
{
size_t i;
- LLCACHE_LOG(("Destroying object %p", object));
+ LLCACHE_LOG("Destroying object %p", object);
if (object->source_data != NULL) {
if (object->store_state == LLCACHE_STATE_DISC) {
@@ -1008,7 +1018,7 @@ llcache_object_rfc2616_remaining_lifetime(const llcache_cache_control *cd)
else
freshness_lifetime = 0;
- /* LLCACHE_LOG(("%d:%d", freshness_lifetime, current_age)); */
+ /* LLCACHE_LOG("%d:%d", freshness_lifetime, current_age); */
if ((cd->no_cache == LLCACHE_VALIDATE_FRESH) &&
(freshness_lifetime > current_age)) {
@@ -1037,9 +1047,9 @@ static bool llcache_object_is_fresh(const llcache_object *object)
remaining_lifetime = llcache_object_rfc2616_remaining_lifetime(cd);
- LLCACHE_LOG(("%p: (%d > 0 || %d != %d)", object,
+ LLCACHE_LOG("%p: (%d > 0 || %d != %d)", object,
remaining_lifetime,
- object->fetch.state, LLCACHE_FETCH_COMPLETE));
+ object->fetch.state, LLCACHE_FETCH_COMPLETE);
/* The object is fresh if:
* - it was not forbidden from being returned from the cache
@@ -1283,7 +1293,7 @@ llcache_serialise_metadata(llcache_object *object,
datasize -= use;
}
- LLCACHE_LOG(("Filled buffer with %d spare", datasize));
+ LLCACHE_LOG("Filled buffer with %d spare", datasize);
*data_out = data;
*datasize_out = allocsize - datasize;
@@ -1292,13 +1302,13 @@ llcache_serialise_metadata(llcache_object *object,
overflow:
/* somehow we overflowed the buffer - hth? */
- LOG(("Overflowed metadata buffer"));
+ LOG("Overflowed metadata buffer");
free(data);
return NSERROR_INVALID;
operror:
/* output error */
- LOG(("Output error"));
+ LOG("Output error");
free(data);
return NSERROR_INVALID;
}
@@ -1336,7 +1346,7 @@ llcache_process_metadata(llcache_object *object)
size_t num_headers;
size_t hloop;
- LOG(("Retriving metadata"));
+ LOG("Retriving metadata");
/* attempt to retrieve object metadata from the backing store */
res = guit->llcache->fetch(object->url,
@@ -1349,7 +1359,7 @@ llcache_process_metadata(llcache_object *object)
end = metadata + metadatalen;
- LOG(("Processing retrived data"));
+ LOG("Processing retrived data");
/* metadata line 1 is the url the metadata referrs to */
line = 1;
@@ -1372,9 +1382,7 @@ llcache_process_metadata(llcache_object *object)
* by simply skipping caching of this object.
*/
- LOG(("Got metadata for %s instead of %s",
- nsurl_access(metadataurl),
- nsurl_access(object->url)));
+ LOG("Got metadata for %s instead of %s", nsurl_access(metadataurl), nsurl_access(object->url));
nsurl_unref(metadataurl);
@@ -1467,7 +1475,7 @@ llcache_process_metadata(llcache_object *object)
return NSERROR_OK;
format_error:
- LOG(("metadata error on line %d error code %d\n", line, res));
+ LOG("metadata error on line %d error code %d\n", line, res);
guit->llcache->release(object->url, BACKING_STORE_META);
return res;
@@ -1549,8 +1557,8 @@ llcache_object_retrieve_from_cache(nsurl *url,
nserror error;
llcache_object *obj, *newest = NULL;
- LLCACHE_LOG(("Searching cache for %s flags:%x referer:%s post:%p",
- nsurl_access(url), flags, referer==NULL?"":nsurl_access(referer), post));
+ LLCACHE_LOG("Searching cache for %s flags:%x referer:%s post:%p",
+ nsurl_access(url), flags, referer==NULL?"":nsurl_access(referer), post);
/* Search for the most recently fetched matching object */
for (obj = llcache->cached_objects; obj != NULL; obj = obj->next) {
@@ -1567,7 +1575,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
* pull from persistant store.
*/
if (newest == NULL) {
- LLCACHE_LOG(("No viable object found in llcache"));
+ LLCACHE_LOG("No viable object found in llcache");
error = llcache_object_new(url, &obj);
if (error != NSERROR_OK)
@@ -1576,7 +1584,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
/* attempt to retrieve object from persistant store */
error = llcache_object_fetch_persistant(obj, flags, referer, post, redirect_count);
if (error == NSERROR_OK) {
- LLCACHE_LOG(("retrived object from persistant store"));
+ LLCACHE_LOG("retrived object from persistant store");
/* set newest object from persistant store which
* will cause the normal object handling to be used.
@@ -1594,7 +1602,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
if ((newest != NULL) && (llcache_object_is_fresh(newest))) {
/* Found a suitable object, and it's still fresh */
- LLCACHE_LOG(("Found fresh %p", newest));
+ LLCACHE_LOG("Found fresh %p", newest);
/* The client needs to catch up with the object's state.
* This will occur the next time that llcache_poll is called.
@@ -1615,7 +1623,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
* failed, destroy cache object and fall though to
* cache miss to re-fetch
*/
- LLCACHE_LOG(("Persistant retrival failed for %p", newest));
+ LLCACHE_LOG("Persistant retrival failed for %p", newest);
llcache_object_remove_from_list(newest, &llcache->cached_objects);
llcache_object_destroy(newest);
@@ -1636,7 +1644,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
if (error != NSERROR_OK)
return error;
- LLCACHE_LOG(("Found candidate %p (%p)", obj, newest));
+ LLCACHE_LOG("Found candidate %p (%p)", obj, newest);
/* Clone candidate's cache data */
error = llcache_object_clone_cache_data(newest, obj, true);
@@ -1666,7 +1674,7 @@ llcache_object_retrieve_from_cache(nsurl *url,
return NSERROR_OK;
}
- LLCACHE_LOG(("Persistant retrival failed for %p", newest));
+ LLCACHE_LOG("Persistant retrival failed for %p", newest);
/* retrival of source data from persistant store
* failed, destroy cache object and fall though to
@@ -1708,17 +1716,21 @@ llcache_object_retrieve_from_cache(nsurl *url,
* \param result Pointer to location to recieve retrieved object
* \return NSERROR_OK on success, appropriate error otherwise
*/
-static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
- nsurl *referer, const llcache_post_data *post,
- uint32_t redirect_count, llcache_object **result)
+static nserror
+llcache_object_retrieve(nsurl *url,
+ uint32_t flags,
+ nsurl *referer,
+ const llcache_post_data *post,
+ uint32_t redirect_count,
+ llcache_object **result)
{
nserror error;
llcache_object *obj;
nsurl *defragmented_url;
bool uncachable = false;
- LLCACHE_LOG(("Retrieve %s (%x, %s, %p)", nsurl_access(url), flags,
- referer==NULL?"":nsurl_access(referer), post));
+ LLCACHE_LOG("Retrieve %s (%x, %s, %p)", nsurl_access(url), flags,
+ referer==NULL?"":nsurl_access(referer), post);
/* Get rid of any url fragment */
@@ -1783,7 +1795,7 @@ static nserror llcache_object_retrieve(nsurl *url, uint32_t flags,
/* Returned object is already in the cached list */
}
- LLCACHE_LOG(("Retrieved %p", obj));
+ LLCACHE_LOG("Retrieved %p", obj);
*result = obj;
@@ -1816,7 +1828,7 @@ static nserror llcache_object_add_user(llcache_object *object,
object->users->prev = user;
object->users = user;
- LLCACHE_LOG(("Adding user %p to %p", user, object));
+ LLCACHE_LOG("Adding user %p to %p", user, object);
return NSERROR_OK;
}
@@ -1857,7 +1869,7 @@ static nserror llcache_fetch_redirect(llcache_object *object, const char *target
/* Forcibly stop redirecting if we've followed too many redirects */
#define REDIRECT_LIMIT 10
if (object->fetch.redirect_count > REDIRECT_LIMIT) {
- LOG(("Too many nested redirects"));
+ LOG("Too many nested redirects");
event.type = LLCACHE_EVENT_ERROR;
event.data.msg = messages_get("BadRedirect");
@@ -2442,9 +2454,8 @@ static void llcache_persist_slowcheck(void *p)
total_bandwidth = (llcache->total_written * 1000) / llcache->total_elapsed;
if (total_bandwidth < llcache->minimum_bandwidth) {
- LOG(("Current bandwidth %llu less than minimum %llu",
- total_bandwidth, llcache->minimum_bandwidth));
- warn_user("LowDiscWriteBandwidth", 0);
+ LOG("Current bandwidth %"PRIu64" less than minimum %zd",
+ total_bandwidth, llcache->minimum_bandwidth);
guit->llcache->finalise();
}
}
@@ -2474,7 +2485,7 @@ static void llcache_persist(void *p)
ret = build_candidate_list(&lst, &lst_count);
if (ret != NSERROR_OK) {
- LLCACHE_LOG(("Unable to construct candidate list for persisatnt writeout"));
+ LLCACHE_LOG("Unable to construct candidate list for persisatnt writeout");
return;
}
@@ -2492,15 +2503,15 @@ static void llcache_persist(void *p)
total_elapsed += elapsed;
total_bandwidth = (total_written * 1000) / total_elapsed;
- LLCACHE_LOG(("Wrote %d bytes in %dms bw:%d %s",
+ LLCACHE_LOG("Wrote %zd bytes in %lums bw:%lu %s",
written, elapsed, (written * 1000) / elapsed,
- nsurl_access(lst[idx]->url) ));
+ nsurl_access(lst[idx]->url) );
/* check to for the time quantum or the size
* (bandwidth) for this run being exceeded.
*/
if (total_elapsed > llcache->time_quantum) {
- LOG(("Overran timeslot"));
+ LOG("Overran timeslot");
/* writeout has exhausted the available time.
* Either the writeout is slow or the last
* object was very large.
@@ -2558,10 +2569,10 @@ static void llcache_persist(void *p)
llcache->total_written += total_written;
llcache->total_elapsed += total_elapsed;
- LLCACHE_LOG(("writeout size:%d time:%d bandwidth:%dbytes/s",
- total_written, total_elapsed, total_bandwidth));
+ LLCACHE_LOG("writeout size:%zd time:%lu bandwidth:%lubytes/s",
+ total_written, total_elapsed, total_bandwidth);
- LLCACHE_LOG(("Rescheduling writeout in %dms", next));
+ LLCACHE_LOG("Rescheduling writeout in %dms", next);
guit->browser->schedule(next, llcache_persist, NULL);
}
@@ -2578,7 +2589,7 @@ static void llcache_fetch_callback(const fetch_msg *msg, void *p)
llcache_object *object = p;
llcache_event event;
- LLCACHE_LOG(("Fetch event %d for %p", msg->type, object));
+ LLCACHE_LOG("Fetch event %d for %p", msg->type, object);
switch (msg->type) {
case FETCH_HEADER:
@@ -2856,12 +2867,11 @@ static nserror llcache_object_notify_users(llcache_object *object)
#ifdef LLCACHE_TRACE
if (handle->state != objstate) {
if (emitted_notify == false) {
- LOG(("Notifying users of %p", object));
+ LOG("Notifying users of %p", object);
emitted_notify = true;
}
- LOG(("User %p state: %d Object state: %d",
- user, handle->state, objstate));
+ LOG("User %p state: %d Object state: %d", user, handle->state, objstate);
}
#endif
@@ -3120,7 +3130,7 @@ void llcache_clean(bool purge)
int remaining_lifetime;
uint32_t limit;
- LLCACHE_LOG(("Attempting cache clean"));
+ LLCACHE_LOG("Attempting cache clean");
/* If the cache is being purged set the size limit to zero. */
if (purge) {
@@ -3140,7 +3150,8 @@ void llcache_clean(bool purge)
(object->candidate_count == 0) &&
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false)) {
- LLCACHE_LOG(("Discarding uncachable object with no users (%p) %s", object, nsurl_access(object->url)));
+ LLCACHE_LOG("Discarding uncachable object with no users (%p) %s",
+ object, nsurl_access(object->url));
llcache_object_remove_from_list(object,
&llcache->uncached_objects);
@@ -3165,7 +3176,7 @@ void llcache_clean(bool purge)
(object->fetch.outstanding_query == false) &&
(remaining_lifetime <= 0)) {
/* object is stale */
- LLCACHE_LOG(("discarding stale cacheable object with no users or pending fetches (%p) %s", object, nsurl_access(object->url)));
+ LLCACHE_LOG("discarding stale cacheable object with no users or pending fetches (%p) %s", object, nsurl_access(object->url));
llcache_object_remove_from_list(object,
&llcache->cached_objects);
@@ -3209,9 +3220,9 @@ void llcache_clean(bool purge)
llcache_size -= object->source_len;
- LLCACHE_LOG(("Freeing source data for %p len:%d",
+ LLCACHE_LOG("Freeing source data for %p len:%zd",
object,
- object->source_len));
+ object->source_len);
}
}
@@ -3229,11 +3240,11 @@ void llcache_clean(bool purge)
(object->fetch.outstanding_query == false) &&
(object->store_state == LLCACHE_STATE_DISC) &&
(object->source_data == NULL)) {
- LLCACHE_LOG(("discarding backed object len:%d age:%d (%p) %s",
+ LLCACHE_LOG("discarding backed object len:%zd age:%d (%p) %s",
object->source_len,
time(NULL) - object->last_used,
object,
- nsurl_access(object->url)));
+ nsurl_access(object->url));
llcache_size -= total_object_size(object);
@@ -3259,11 +3270,11 @@ void llcache_clean(bool purge)
(object->fetch.fetch == NULL) &&
(object->fetch.outstanding_query == false) &&
(object->store_state == LLCACHE_STATE_RAM)) {
- LLCACHE_LOG(("discarding fresh object len:%d age:%d (%p) %s",
+ LLCACHE_LOG("discarding fresh object len:%zd age:%d (%p) %s",
object->source_len,
time(NULL) - object->last_used,
object,
- nsurl_access(object->url)));
+ nsurl_access(object->url));
llcache_size -= object->source_len + sizeof(*object);
@@ -3273,7 +3284,7 @@ void llcache_clean(bool purge)
}
}
- LLCACHE_LOG(("Size: %u", llcache_size));
+ LLCACHE_LOG("Size: %u", llcache_size);
}
/* Exported interface documented in content/llcache.h */
@@ -3294,7 +3305,7 @@ llcache_initialise(const struct llcache_parameters *prm)
llcache->time_quantum = prm->time_quantum;
llcache->all_caught_up = true;
- LOG(("llcache initialising with a limit of %d bytes", llcache->limit));
+ LOG("llcache initialising with a limit of %d bytes", llcache->limit);
/* backing store initialisation */
return guit->llcache->initialise(&prm->store);
@@ -3305,12 +3316,7 @@ llcache_initialise(const struct llcache_parameters *prm)
void llcache_finalise(void)
{
llcache_object *object, *next;
- unsigned long total_bandwidth = 0; /* total bandwidth */
-
- if (llcache->total_elapsed > 0) {
- total_bandwidth = (llcache->total_written * 1000) /
- llcache->total_elapsed;
- }
+ uint64_t total_bandwidth = 0; /* total bandwidth */
/* Clean uncached objects */
for (object = llcache->uncached_objects; object != NULL; object = next) {
@@ -3357,8 +3363,12 @@ void llcache_finalise(void)
/* backing store finalisation */
guit->llcache->finalise();
- LOG(("Backing store average bandwidth %lu bytes/second",
- total_bandwidth));
+ if (llcache->total_elapsed > 0) {
+ total_bandwidth = (llcache->total_written * 1000) /
+ llcache->total_elapsed;
+ }
+
+ LOG("Backing store wrote %"PRIu64" bytes in %"PRIu64" ms ""(average %"PRIu64" bytes/second)", llcache->total_written, llcache->total_elapsed, total_bandwidth);
free(llcache);
llcache = NULL;
@@ -3415,13 +3425,15 @@ nserror llcache_handle_retrieve(nsurl *url, uint32_t flags,
llcache_object *object;
/* Can we fetch this URL at all? */
- if (fetch_can_fetch(url) == false)
+ if (fetch_can_fetch(url) == false) {
return NSERROR_NO_FETCH_HANDLER;
+ }
/* Create a new object user */
error = llcache_object_user_new(cb, pw, &user);
- if (error != NSERROR_OK)
+ if (error != NSERROR_OK) {
return error;
+ }
/* Retrieve a suitable object from the cache,
* creating a new one if needed. */
diff --git a/content/urldb.c b/content/urldb.c
index a9476d7..1121244 100644
--- a/content/urldb.c
+++ b/content/urldb.c
@@ -564,7 +564,7 @@ static bool urldb__host_is_ip_address(const char *host)
c[slash - host] = '\0';
sane_host = c;
host_len = slash - host - 1;
- LOG(("WARNING: called with non-host '%s'", host));
+ LOG("WARNING: called with non-host '%s'", host);
}
if (strspn(sane_host, "0123456789abcdefABCDEF[].:") < host_len)
@@ -1152,7 +1152,7 @@ static struct path_data *urldb_match_path(const struct path_data *parent,
assert(parent->segment == NULL);
if (path[0] != '/') {
- LOG(("path is %s", path));
+ LOG("path is %s", path);
}
assert(path[0] == '/');
@@ -1278,12 +1278,12 @@ static void urldb_dump_paths(struct path_data *parent)
do {
if (p->segment != NULL) {
- LOG(("\t%s : %u", lwc_string_data(p->scheme), p->port));
+ LOG("\t%s : %u", lwc_string_data(p->scheme), p->port);
- LOG(("\t\t'%s'", p->segment));
+ LOG("\t\t'%s'", p->segment);
for (i = 0; i != p->