From d11ebd1247b176506ea7b694ff66bf7a276ccd29 Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Sun, 20 Sep 2015 23:26:26 +0200 Subject: [PATCH] add code to fuzz terminology (wip) --- afl/in/colors_fonts | 260 ++++++++++++++++++++++++++++++++++++++++++++ src/bin/termpty.c | 77 ++++++++++--- 2 files changed, 322 insertions(+), 15 deletions(-) create mode 100644 afl/in/colors_fonts diff --git a/afl/in/colors_fonts b/afl/in/colors_fonts new file mode 100644 index 00000000..b6cd945f --- /dev/null +++ b/afl/in/colors_fonts @@ -0,0 +1,260 @@ +]4;16;rgb:00/00/00\]4;17;rgb:00/00/2a\]4;18;rgb:00/00/55\]4;19;rgb:00/00/7f\]4;20;rgb:00/00/aa\]4;21;rgb:00/00/d4\]4;22;rgb:00/2a/00\]4;23;rgb:00/2a/2a\]4;24;rgb:00/2a/55\]4;25;rgb:00/2a/7f\]4;26;rgb:00/2a/aa\]4;27;rgb:00/2a/d4\]4;28;rgb:00/55/00\]4;29;rgb:00/55/2a\]4;30;rgb:00/55/55\]4;31;rgb:00/55/7f\]4;32;rgb:00/55/aa\]4;33;rgb:00/55/d4\]4;34;rgb:00/7f/00\]4;35;rgb:00/7f/2a\]4;36;rgb:00/7f/55\]4;37;rgb:00/7f/7f\]4;38;rgb:00/7f/aa\]4;39;rgb:00/7f/d4\]4;40;rgb:00/aa/00\]4;41;rgb:00/aa/2a\]4;42;rgb:00/aa/55\]4;43;rgb:00/aa/7f\]4;44;rgb:00/aa/aa\]4;45;rgb:00/aa/d4\]4;46;rgb:00/d4/00\]4;47;rgb:00/d4/2a\]4;48;rgb:00/d4/55\]4;49;rgb:00/d4/7f\]4;50;rgb:00/d4/aa\]4;51;rgb:00/d4/d4\]4;52;rgb:2a/00/00\]4;53;rgb:2a/00/2a\]4;54;rgb:2a/00/55\]4;55;rgb:2a/00/7f\]4;56;rgb:2a/00/aa\]4;57;rgb:2a/00/d4\]4;58;rgb:2a/2a/00\]4;59;rgb:2a/2a/2a\]4;60;rgb:2a/2a/55\]4;61;rgb:2a/2a/7f\]4;62;rgb:2a/2a/aa\]4;63;rgb:2a/2a/d4\]4;64;rgb:2a/55/00\]4;65;rgb:2a/55/2a\]4;66;rgb:2a/55/55\]4;67;rgb:2a/55/7f\]4;68;rgb:2a/55/aa\]4;69;rgb:2a/55/d4\]4;70;rgb:2a/7f/00\]4;71;rgb:2a/7f/2a\]4;72;rgb:2a/7f/55\]4;73;rgb:2a/7f/7f\]4;74;rgb:2a/7f/aa\]4;75;rgb:2a/7f/d4\]4;76;rgb:2a/aa/00\]4;77;rgb:2a/aa/2a\]4;78;rgb:2a/aa/55\]4;79;rgb:2a/aa/7f\]4;80;rgb:2a/aa/aa\]4;81;rgb:2a/aa/d4\]4;82;rgb:2a/d4/00\]4;83;rgb:2a/d4/2a\]4;84;rgb:2a/d4/55\]4;85;rgb:2a/d4/7f\]4;86;rgb:2a/d4/aa\]4;87;rgb:2a/d4/d4\]4;88;rgb:55/00/00\]4;89;rgb:55/00/2a\]4;90;rgb:55/00/55\]4;91;rgb:55/00/7f\]4;92;rgb:55/00/aa\]4;93;rgb:55/00/d4\]4;94;rgb:55/2a/00\]4;95;rgb:55/2a/2a\]4;96;rgb:55/2a/55\]4;97;rgb:55/2a/7f\]4;98;rgb:55/2a/aa\]4;99;rgb:55/2a/d4\]4;100;rgb:55/55/00\]4;101;rgb:55/55/2a\]4;102;rgb:55/55/55\]4;103;rgb:55/55/7f\]4;104;rgb:55/55/aa\]4;105;rgb:55/55/d4\]4;106;rgb:55/7f/00\]4;107;rgb:55/7f/2a\]4;108;rgb:55/7f/55\]4;109;rgb:55/7f/7f\]4;110;rgb:55/7f/aa\]4;111;rgb:55/7f/d4\]4;112;rgb:55/aa/00\]4;113;rgb:55/aa/2a\]4;114;rgb:55/aa/55\]4;115;rgb:55/aa/7f\]4;116;rgb:55/aa/aa\]4;117;rgb:55/aa/d4\]4;118;rgb:55/d4/00\]4;119;rgb:55/d4/2a\]4;120;rgb:55/d4/55\]4;121;rgb:55/d4/7f\]4;122;rgb:55/d4/aa\]4;123;rgb:55/d4/d4\]4;124;rgb:7f/00/00\]4;125;rgb:7f/00/2a\]4;126;rgb:7f/00/55\]4;127;rgb:7f/00/7f\]4;128;rgb:7f/00/aa\]4;129;rgb:7f/00/d4\]4;130;rgb:7f/2a/00\]4;131;rgb:7f/2a/2a\]4;132;rgb:7f/2a/55\]4;133;rgb:7f/2a/7f\]4;134;rgb:7f/2a/aa\]4;135;rgb:7f/2a/d4\]4;136;rgb:7f/55/00\]4;137;rgb:7f/55/2a\]4;138;rgb:7f/55/55\]4;139;rgb:7f/55/7f\]4;140;rgb:7f/55/aa\]4;141;rgb:7f/55/d4\]4;142;rgb:7f/7f/00\]4;143;rgb:7f/7f/2a\]4;144;rgb:7f/7f/55\]4;145;rgb:7f/7f/7f\]4;146;rgb:7f/7f/aa\]4;147;rgb:7f/7f/d4\]4;148;rgb:7f/aa/00\]4;149;rgb:7f/aa/2a\]4;150;rgb:7f/aa/55\]4;151;rgb:7f/aa/7f\]4;152;rgb:7f/aa/aa\]4;153;rgb:7f/aa/d4\]4;154;rgb:7f/d4/00\]4;155;rgb:7f/d4/2a\]4;156;rgb:7f/d4/55\]4;157;rgb:7f/d4/7f\]4;158;rgb:7f/d4/aa\]4;159;rgb:7f/d4/d4\]4;160;rgb:aa/00/00\]4;161;rgb:aa/00/2a\]4;162;rgb:aa/00/55\]4;163;rgb:aa/00/7f\]4;164;rgb:aa/00/aa\]4;165;rgb:aa/00/d4\]4;166;rgb:aa/2a/00\]4;167;rgb:aa/2a/2a\]4;168;rgb:aa/2a/55\]4;169;rgb:aa/2a/7f\]4;170;rgb:aa/2a/aa\]4;171;rgb:aa/2a/d4\]4;172;rgb:aa/55/00\]4;173;rgb:aa/55/2a\]4;174;rgb:aa/55/55\]4;175;rgb:aa/55/7f\]4;176;rgb:aa/55/aa\]4;177;rgb:aa/55/d4\]4;178;rgb:aa/7f/00\]4;179;rgb:aa/7f/2a\]4;180;rgb:aa/7f/55\]4;181;rgb:aa/7f/7f\]4;182;rgb:aa/7f/aa\]4;183;rgb:aa/7f/d4\]4;184;rgb:aa/aa/00\]4;185;rgb:aa/aa/2a\]4;186;rgb:aa/aa/55\]4;187;rgb:aa/aa/7f\]4;188;rgb:aa/aa/aa\]4;189;rgb:aa/aa/d4\]4;190;rgb:aa/d4/00\]4;191;rgb:aa/d4/2a\]4;192;rgb:aa/d4/55\]4;193;rgb:aa/d4/7f\]4;194;rgb:aa/d4/aa\]4;195;rgb:aa/d4/d4\]4;196;rgb:d4/00/00\]4;197;rgb:d4/00/2a\]4;198;rgb:d4/00/55\]4;199;rgb:d4/00/7f\]4;200;rgb:d4/00/aa\]4;201;rgb:d4/00/d4\]4;202;rgb:d4/2a/00\]4;203;rgb:d4/2a/2a\]4;204;rgb:d4/2a/55\]4;205;rgb:d4/2a/7f\]4;206;rgb:d4/2a/aa\]4;207;rgb:d4/2a/d4\]4;208;rgb:d4/55/00\]4;209;rgb:d4/55/2a\]4;210;rgb:d4/55/55\]4;211;rgb:d4/55/7f\]4;212;rgb:d4/55/aa\]4;213;rgb:d4/55/d4\]4;214;rgb:d4/7f/00\]4;215;rgb:d4/7f/2a\]4;216;rgb:d4/7f/55\]4;217;rgb:d4/7f/7f\]4;218;rgb:d4/7f/aa\]4;219;rgb:d4/7f/d4\]4;220;rgb:d4/aa/00\]4;221;rgb:d4/aa/2a\]4;222;rgb:d4/aa/55\]4;223;rgb:d4/aa/7f\]4;224;rgb:d4/aa/aa\]4;225;rgb:d4/aa/d4\]4;226;rgb:d4/d4/00\]4;227;rgb:d4/d4/2a\]4;228;rgb:d4/d4/55\]4;229;rgb:d4/d4/7f\]4;230;rgb:d4/d4/aa\]4;231;rgb:d4/d4/d4\]4;232;rgb:08/08/08\]4;233;rgb:12/12/12\]4;234;rgb:1c/1c/1c\]4;235;rgb:26/26/26\]4;236;rgb:30/30/30\]4;237;rgb:3a/3a/3a\]4;238;rgb:44/44/44\]4;239;rgb:4e/4e/4e\]4;240;rgb:58/58/58\]4;241;rgb:62/62/62\]4;242;rgb:6c/6c/6c\]4;243;rgb:76/76/76\]4;244;rgb:80/80/80\]4;245;rgb:8a/8a/8a\]4;246;rgb:94/94/94\]4;247;rgb:9e/9e/9e\]4;248;rgb:a8/a8/a8\]4;249;rgb:b2/b2/b2\]4;250;rgb:bc/bc/bc\]4;251;rgb:c6/c6/c6\]4;252;rgb:d0/d0/d0\]4;253;rgb:da/da/da\]4;254;rgb:e4/e4/e4\]4;255;rgb:ee/ee/ee\(256) System colors: background +         +         +System colors: background +         +         +System colors: foreground +████████████████ +████████████████ +Bright colors: background +         +         +Bright colors: foreground +████████████████ +████████████████ +Dim/Faint colors: background +         +         +Dim/Faint colors: foreground +████████████████ +████████████████ + +Color cube, 6x6x6: +                                          +                                          +                                          +                                          +                                          +                                          +Grayscale ramp: +                         +normal +abc +ABC + +bold +abc +ABC + +italic +abc +ABC + +bolditalic +abcd +ABC + +fraktur +abc +ABCD + + +Markus Kuhn [ˈmaʳkʊs kuːn] — 2002-07-25 + + +The ASCII compatible UTF-8 encoding used in this plain-text file +is defined in Unicode, ISO 10646-1, and RFC 2279. + + +Using Unicode/UTF-8, you can write in emails and source code things such as + +Mathematics and sciences: + + ∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i), ⎧⎡⎛┌─────┐⎞⎤⎫ + ⎪⎢⎜│a²+b³ ⎟⎥⎪ + ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), ⎪⎢⎜│───── ⎟⎥⎪ + ⎪⎢⎜⎷ c₈ ⎟⎥⎪ + ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⎨⎢⎜ ⎟⎥⎬ + ⎪⎢⎜ ∞ ⎟⎥⎪ + ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫), ⎪⎢⎜ ⎲ ⎟⎥⎪ + ⎪⎢⎜ ⎳aⁱ-bⁱ⎟⎥⎪ + 2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm ⎩⎣⎝i=1 ⎠⎦⎭ + +Linguistics and dictionaries: + + ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn + Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ] + +APL: + + ((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈ + +Nicer typography in plain text files: + + ╔══════════════════════════════════════════╗ + ║ ║ + ║ • ‘single’ and “double” quotes ║ + ║ ║ + ║ • Curly apostrophes: “We’ve been here” ║ + ║ ║ + ║ • Latin-1 apostrophe and accents: '´` ║ + ║ ║ + ║ • ‚deutsche‘ „Anführungszeichen“ ║ + ║ ║ + ║ • †, ‡, ‰, •, 3–4, —, −5/+5, ™, … ║ + ║ ║ + ║ • ASCII safety test: 1lI|, 0OD, 8B ║ + ║ ╭─────────╮ ║ + ║ • the euro symbol: │ 14.95 € │ ║ + ║ ╰─────────╯ ║ + ╚══════════════════════════════════════════╝ + +Combining characters: + + STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑ + +Greek (in Polytonic): + + The Greek anthem: + + Σὲ γνωρίζω ἀπὸ τὴν κόψη + τοῦ σπαθιοῦ τὴν τρομερή, + σὲ γνωρίζω ἀπὸ τὴν ὄψη + ποὺ μὲ βία μετράει τὴ γῆ. + + ᾿Απ᾿ τὰ κόκκαλα βγαλμένη + τῶν ῾Ελλήνων τὰ ἱερά + καὶ σὰν πρῶτα ἀνδρειωμένη + χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά! + + From a speech of Demosthenes in the 4th century BC: + + Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι, + ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς + λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ + τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿ + εἰς τοῦτο προήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ + πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν + οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι, + οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν + ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον + τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι + γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν + προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους + σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ + τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ + τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς + τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον. + + Δημοσθένους, Γ´ ᾿Ολυνθιακὸς + +Georgian: + + From a Unicode conference invitation: + + გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო + კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს, + ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს + ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი, + ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება + ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში, + ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში. + +Russian: + + From a Unicode conference invitation: + + Зарегистрируйтесь сейчас на Десятую Международную Конференцию по + Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии. + Конференция соберет широкий круг экспертов по вопросам глобального + Интернета и Unicode, локализации и интернационализации, воплощению и + применению Unicode в различных операционных системах и программных + приложениях, шрифтах, верстке и многоязычных компьютерных системах. + +Thai (UCS Level 2): + + Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese + classic 'San Gua'): + + [----------------------------|------------------------] + ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช พระปกเกศกองบู๊กู้ขึ้นใหม่ + สิบสองกษัตริย์ก่อนหน้าแลถัดไป สององค์ไซร้โง่เขลาเบาปัญญา + ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนักหนา + โฮจิ๋นเรียกทัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัญ + เหมือนขับไสไล่เสือจากเคหา รับหมาป่าเข้ามาเลยอาสัญ + ฝ่ายอ้องอุ้นยุแยกให้แตกกัน ใช้สาวนั้นเป็นชนวนชื่นชวนใจ + พลันลิฉุยกุยกีกลับก่อเหตุ ช่างอาเพศจริงหนาฟ้าร้องไห้ + ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ + + (The above is a two-column text. If combining characters are handled + correctly, the lines of the second column should be aligned with the + | character above.) + +Ethiopian: + + Proverbs in the Amharic language: + + ሰማይ አይታረስ ንጉሥ አይከሰስ። + ብላ ካለኝ እንደአባቴ በቆመጠኝ። + ጌጥ ያለቤቱ ቁምጥና ነው። + ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው። + የአፍ ወለምታ በቅቤ አይታሽም። + አይጥ በበላ ዳዋ ተመታ። + ሲተረጉሙ ይደረግሙ። + ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል። + ድር ቢያብር አንበሳ ያስር። + ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም። + እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም። + የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ። + ሥራ ከመፍታት ልጄን ላፋታት። + ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል። + የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ። + ተንጋሎ ቢተፉ ተመልሶ ባፉ። + ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው። + እግርህን በፍራሽህ ልክ ዘርጋ። + +Runes: + + ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ + + (Old English, which transcribed into Latin reads 'He cwaeth that he + bude thaem lande northweardum with tha Westsae.' and means 'He said + that he lived in the northern land near the Western Sea.') + +Braille: + + ⡌⠁⠧⠑ ⠼⠁⠒ ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌ + + ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞ + ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎ + ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂ + ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙ + ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑ + ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲ + + ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ + + ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹ + ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞ + ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕ + ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹ + ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎ + ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎ + ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳ + ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞ + ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ + + (The first couple of paragraphs of "A Christmas Carol" by Dickens) + +Compact font selection example text: + + ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789 + abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ + –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд + ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა + +Greetings in various languages: + + Hello world, Καλημέρα κόσμε, コンニチハ + +Box drawing alignment tests: █ + ▉ + ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳ + ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳ + ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳ + ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳ + ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎ + ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏ + ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ ▗▄▖▛▀▜ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█ + ▝▀▘▙▄▟ diff --git a/src/bin/termpty.c b/src/bin/termpty.c index ef1bc873..c9d713f9 100644 --- a/src/bin/termpty.c +++ b/src/bin/termpty.c @@ -182,13 +182,19 @@ _cb_exe_exit(void *data, int type EINA_UNUSED, void *event) } static Eina_Bool -_cb_fd_read(void *data, Ecore_Fd_Handler *fd_handler EINA_UNUSED) +_cb_fd_read(void *data, Ecore_Fd_Handler *fd_handler) { Termpty *ty = data; char buf[4097]; Eina_Unicode codepoint[4097]; int len, i, j, k, reads; + if (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_ERROR)) + { + ERR("error while reading from tty slave fd"); + return ECORE_CALLBACK_CANCEL; + } + // read up to 64 * 4096 bytes for (reads = 0; reads < 64; reads++) { @@ -202,6 +208,11 @@ _cb_fd_read(void *data, Ecore_Fd_Handler *fd_handler EINA_UNUSED) len--; } len = read(ty->fd, rbuf, len); + if (len < 0 && errno != EAGAIN) + { + ERR("error while reading from tty slave fd"); + break; + } if (len <= 0) break; @@ -265,6 +276,25 @@ _cb_fd_read(void *data, Ecore_Fd_Handler *fd_handler EINA_UNUSED) _handle_buf(ty, codepoint, j); } if (ty->cb.change.func) ty->cb.change.func(ty->cb.change.data); + if (len <= 0) + { + if (42) + { + ty->exit_code = 0; + ty->pid = -1; + + if (ty->hand_exe_exit) ecore_event_handler_del(ty->hand_exe_exit); + ty->hand_exe_exit = NULL; + if (ty->hand_fd) ecore_main_fd_handler_del(ty->hand_fd); + ty->hand_fd = NULL; + ty->fd = -1; + ty->slavefd = -1; + if (ty->cb.exited.func) + ty->cb.exited.func(ty->cb.exited.data); + } + return ECORE_CALLBACK_CANCEL; + } + return EINA_TRUE; } @@ -320,6 +350,19 @@ termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd, ty->circular_offset = 0; + /* TODO: boris */ + if (42) + { + ty->fd = STDIN_FILENO; + ty->hand_fd = ecore_main_fd_handler_add(ty->fd, + ECORE_FD_READ | ECORE_FD_ERROR, + _cb_fd_read, ty, + NULL, NULL); + _pty_size(ty); + termpty_save_register(ty); + return ty; + } + needs_shell = ((!cmd) || (strpbrk(cmd, " |&;<>()$`\\\"'*?#") != NULL)); DBG("cmd='%s' needs_shell=%u", cmd ? cmd : "", needs_shell); @@ -385,20 +428,20 @@ termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd, goto err; } if (!(mode & O_NDELAY)) - if (fcntl(ty->fd, F_SETFL, mode | O_NDELAY)) - { - ERR(_("fcntl() on pty '%s' failed: %s"), pty, strerror(errno)); - goto err; - } + if (fcntl(ty->fd, F_SETFL, mode | O_NDELAY)) + { + ERR(_("fcntl() on pty '%s' failed: %s"), pty, strerror(errno)); + goto err; + } #if defined (__sun) || defined (__sun__) if (ioctl(ty->slavefd, I_PUSH, "ptem") < 0 || ioctl(ty->slavefd, I_PUSH, "ldterm") < 0 || ioctl(ty->slavefd, I_PUSH, "ttcompat") < 0) - { - ERR(_("ioctl() on pty '%s' failed: %s"), pty, strerror(errno)); - goto err; - } + { + ERR(_("ioctl() on pty '%s' failed: %s"), pty, strerror(errno)); + goto err; + } # endif if (tcgetattr(ty->slavefd, &t) < 0) @@ -460,10 +503,10 @@ termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd, dup2(ty->slavefd, 2); if (ioctl(ty->slavefd, TIOCSCTTY, NULL) < 0) exit(1); - + close(ty->fd); close(ty->slavefd); - + /* TODO: should we reset signals here? */ /* pretend to be xterm */ @@ -866,10 +909,14 @@ termpty_cellrow_get(Termpty *ty, int y_requested, ssize_t *wret) void termpty_write(Termpty *ty, const char *input, int len) { - if (ty->fd < 0) return; - if (write(ty->fd, input, len) < 0) + int fd = ty->fd; + + /* TODO: boris */ + fd = STDOUT_FILENO; + if (fd < 0) return; + if (write(fd, input, len) < 0) ERR(_("Could not write to file descriptor %d: %s"), - ty->fd, strerror(errno)); + fd, strerror(errno)); } struct screen_info