আমরা কীভাবে আমাদের নিজস্ব অপারেটিং সিস্টেম তৈরি করতে পারি সে সম্পর্কে টিউটোরিয়ালগুলির সিরিজে ফিরে আসি। আমি মনে করি আপনি এই অধ্যায়টি অনেক পছন্দ করবেন কারণ আমরা শেষ পর্যন্ত আমাদের অপারেটিং সিস্টেমের সাথে ইন্টারেক্ট করতে পারি। আজ আমরা কিবোর্ড ইনপুট পড়ব। এর জন্য, স্কিমটি টাইমারের মতো। আমাদের যাইহোক আইআরকিউ ব্যবহার করতে হবে তাই আমরা টাইমারের মতোই শুরু করব।
এনডি_আইআরকিউ_ইনস্টল হ্যান্ডলার (1, এবং এনডি_কিবোর্ডহ্যান্ডলার);
আমাদের কী-বোর্ড হ্যান্ডলারটি আরও বেশি জটিল কারণ আমরা কীগুলি পড়ি এবং সেগুলি একটি বাফারে জমা করি।
বাহ্যিক "সি" শূন্য এনডি_কিয়ারবোর্ড_হ্যান্ডলার (স্ট্রাক্ট রেগস * আর) {স্বাক্ষরবিহীন চর স্ক্যানকোড = এনডি :: কীবোর্ড :: গেটচার (); if (স্ক্যানকোড! = 255) {এনডি :: স্ক্রিন :: পুতচর (স্ক্যানকোড); স্ট্রিংবফার [স্ট্রিংপোস] = স্ক্যানকোড; স্ট্রিংপোস ++; }}
http://gist.github.com/634afddcb3e977ea202d
আমরা কীভাবে এনডি :: কীবোর্ড :: গেটচার নামে একটি ফাংশন বলি তা আমরা পরীক্ষা করতে পারি। সেখানে আমরা চরিত্রটি অর্জন করি এবং তারপরে এটি খালি অক্ষর না হলে (এখানে আমি 255 ব্যবহার করেছি, আমাদের আরও ভাল সিস্টেম ব্যবহার করতে হবে) আমরা চরিত্রটি পর্দায় রেখেছি এবং এটি অক্ষরের একটি সরল বাফারে সংরক্ষণ করি (এটিও রয়েছে উন্নতিতে সংবেদনশীল, বর্তমান সিস্টেমটি উপচে পড়তে পারে)।
এনএসাইন করা এনডি :: কীবোর্ড :: গেটচার () {স্বাক্ষরযুক্ত চর স্ক্যানকোড; স্ক্যানকোড = (স্বাক্ষরবিহীন চর) এনডি :: পোর্টস :: ইনপুটবি (0x60); যদি (স্ক্যানকোড & ND_KEYBOARD_KEY_RELEASE) - 255 ফেরত; } অন্য {en_US [স্ক্যানকোড] ফেরান; }} চর * এনডি :: কীবোর্ড :: গেটস্ট্রিং () {जबकि (স্ট্রিংবফার [স্ট্রিংপোস -১]! = '\ n') {} স্ট্রিংপোস = 1; স্ট্রিংবফার রিটার্ন করুন; }
http://gist.github.com/2d4f13e0b1a281c66884
এখানে আমরা দেখতে পাচ্ছি যে কী টিপানো হয়েছে তা কীভাবে প্রাপ্ত হয়। 0x60 এ সর্বদা সর্বশেষ কী টিপুন। আসলে এটি সরাসরি আইআরকিউ ব্যবহার না করেই পড়তে পারে, তবে তারপরে পরিবর্তন কখন ঘটেছিল তা কীভাবে সনাক্ত করব তা আমরা জানব না। সেখানে আমরা অ্যান্ড অপারেশনটি যাচাই করে দেখি যে আমরা প্রাপ্ত কোডটি মুক্তি পেয়েছে এমন একটি কী এর সাথে সম্পর্কিত।
সেক্ষেত্রে আমরা 255 ফেরত আসি (কারণ আমরা পরে তা অগ্রাহ্য করব) এবং অন্যথায় কী টিপানো হয়েছে। সেক্ষেত্রে আমরা en_US নামক একটি অ্যারের অবস্থানটি ফিরিয়ে দিই। এই অ্যারেতে কী তথ্য রয়েছে? এই অ্যারেটিই আমরা কীম্যাপ বা চরিত্রের মানচিত্র বলব। আপনি যেমন জানতে পারবেন, বিভিন্ন ভাষার বিভিন্ন কীবোর্ড রয়েছে এবং কীগুলি ওভাররাইট করার কারণে সেগুলি সমর্থিত নয়। সুতরাং en_US আমাদের প্রতিটি কোডের সাথে সম্পর্কিত কীটি দেবে এবং এটি আমেরিকান কীবোর্ডে কাজ করবে।
স্বাক্ষরবিহীন চর en_US [128] = {0,27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0 ',' - ',' = ',' \ বি ',' \ টি ',' কিউ ',' ডাব্লু ',' ই ',' আর ',' টি ',' ই ',' ইউ ',' আই ',' ও ',' পি ',' [','] ',' \ n ', ০, / * সিটিআরএল * /' এ ',' এস ',' ডি ',' চ ',' জি ', 'এইচ', 'জ', 'কে', 'এল', ';', '\' ',' ``, ০, / * বাম শিফট * / '\\', 'জেড', 'এক্স', 'সি', 'ভি', 'বি', 'এন', 'এম', ',', '।', '/', 0, / * রাইট শিফট * / '*', 0, / * আল্ট * / '', 0, / * ক্যাপস লক * / 0, / * এফ 0-এফ 0,0,0,0,0,0,0,0,0,0 কী * / 1, / * সংখ্যা লক * / 10, / * স্ক্রোল লক * / 0, / * হোম কী * / 0, / * উপরে তীর * / 0, / * পৃষ্ঠা আপ * / '-', 0, / * বাম তীর * / 0, 0, / * ডান তীর * / '+', 0, / * শেষ কী * / 0, / * ডাউন তীর * / 0, / * পৃষ্ঠা ডাউন * / 0, / * কী সন্নিবেশ করুন * / 0, / * কী মুছুন * / 0, 0, 0,0,0, 0, / * এফ 0-এফ 11 কী * / 12};
http://gist.github.com/bf52085aec05f3070b65
একটি সংজ্ঞায়িত ফাংশনও ছিল যা একটি বাক্যাংশ পেয়েছিল। উদ্দেশ্যটি কেবল অ্যাপ্লিকেশনগুলির যে স্ট্রিংগুলির প্রয়োজন হয় সেগুলি সহজেই অ্যাক্সেস করা কেবল এই মুহূর্তে। আমি নেক্সটশেললাইটের কথা বলছি, নেক্সটডাইভেলের সম্ভাব্য ভবিষ্যতের শেলের একটি হ্রাস করা সংস্করণ। নেক্সটশেললাইটের উদ্দেশ্য হ'ল ধীরে ধীরে নতুন বৈশিষ্ট্যগুলি পরীক্ষা করার জন্য একটি হ্রাস করা শেল সরবরাহ করা। আমি এখানে শেল কোড রাখতে যাচ্ছি না তবে আমি এটিকে NextDivel কোডের মধ্যে অন্তর্ভুক্ত করেছি।
এই মুহুর্তে এটি পৃথক প্রোগ্রাম হিসাবে কাজ করে না তবে কার্নেল দ্বারা ডাকা একটি ফাংশন হিসাবে কাজ করে, মূলত কারণ আমরা এখনও এক্সিকিউটেবলগুলি চালনার বিকল্প যোগ করি নি। এবং অবশ্যই, নতুন কীবোর্ড ইনপুট ফাংশনগুলির সাথে শেল কীভাবে কাজ করে তার কয়েকটি ছবি।
চমৎকার শিক্ষক! ধন্যবাদ 🙂
সত্যটি আমি হ'ল আমি টিউটোরিয়ালটি কখনই অনুসরণ করি নি কারণ সংকলনের চেষ্টা করার সময় প্রথম অংশে এটি আমাকে একটি ত্রুটি দিয়েছিল তবে আমি মনে করি না এটি কোন ত্রুটি ছিল
আমার ক্রাস অজ্ঞতার জন্য দুঃখিত ... এই কোডগুলি কোথা থেকে লেখা হয়েছে? টার্মিনাল থেকে ??
কোডগুলি সোর্স কোডের একটি অংশ। আমি এটি সম্পূর্ণ রাখি না কারণ অন্যথায় পোস্টটি সমস্ত কোড এবং কিছুই ব্যাখ্যা নয়। আমি আপনাকে টিউটোরিয়ালগুলি শুরু থেকে পড়ার পরামর্শ দিচ্ছি যদি আপনি এটি অনুসরণ করতে চান। আপনি এখানে পুরো উত্স কোডও পরীক্ষা করতে পারেন (http://github.com/AdrianArroyoCalle/next-divel)
কীভাবে উন্নতি হবে যাতে ওভারফ্লো না ঘটে?
কডি, আপনি কি এখনও সংগ্রহশালার কোডটি পরীক্ষা করেছেন? সর্বাধিক আকার প্রতিষ্ঠিত হয়, পাশাপাশি এটি নিয়ন্ত্রণের জন্য কার্যাদিও রয়েছে, সেখানে আপনি আকার পরিবর্তন করতে পারেন বা স্যাচুরেট হয়ে গেলে বাফারকে মুক্ত করার জন্য যুক্তিসঙ্গত উপায়টি প্রয়োগ করতে পারেন
এটি পরীক্ষা করার জন্য আমি লিঙ্কটি রেখেছি leave https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp
হ্যালো খুব আকর্ষণীয়, আপনি কি এমুলেটিং লিনাস টরভালসের এই "সিরিজ" দিয়ে চালিয়ে যাচ্ছেন?
আপনি কি কোনও বই, তথ্য এই জাতীয় কার্নেল তৈরি করতে সক্ষম হতে পরামর্শ দিতে পারেন?
Saludos !!
ওহে. টিউটোরিয়াল জন্য ধন্যবাদ। দয়া করে, আপনি কি এটির উপর একটি বইয়ের সুপারিশ করতে পারেন যা আপনি তৈরি করেছেন তা তেনেনবাউমের "অপারেটিং সিস্টেম" নয়? আগাম অনেক ধন্যবাদ।
গ্রিটিংস।