লেখক পরিচিতি
লেখকের নাম:
আহমেদ ওয়াহিদ মাসুদ
মোট লেখা:৯৮
লেখা সম্পর্কিত
সহজ ভাষায় প্রোগ্রামিং : অ্যাডভান্সড সি
এতদিন সি ল্যাঙ্গুয়েজের ওপর বিভিন্ন লেখা প্রকাশের উদ্দেশ্য হলো পাঠকেরা যেনো সি ল্যাঙ্গুয়েজের ওপর ভালো ধারণা নিতে পারেন। ল্যাঙ্গুয়েজটির বিভিন্ন উপাদান কীভাবে কাজ করে, সে সম্পর্কেও যেনো ধারণা পান। অর্থাৎ এসব লেখা থেকে পাঠক শুধু ল্যাঙ্গুয়েজটি শিখতে পারবেন। কিন্তু ল্যাঙ্গুয়েজ শেখা এক জিনিস আর সেই শেখাটাকে কাজে লাগিয়ে প্রফেশনাল কোনো সফটওয়্যার বানানো আরেক জিনিস। কেননা, ল্যাঙ্গুয়েজ শেখা মানে হলো কিছু নিয়ম-কানুন শেখা। অন্যদিকে সফটওয়্যার ডেভেলপ করার সময় শুধু একটি ল্যাঙ্গুয়েজ সম্পর্কে জানলেই চলে না, আরও কিছু বিষয় জানতে হবে। যে কাজের জন্য সফটওয়্যার বানানো হবে, একজন ডেভেলপারকে সেই কাজ সম্পর্কে কিছু ধারণা রাখতে হবে এবং সংগ্রহ করতে হবে কিছু প্রয়োজনীয় তথ্য। পরে সেই তথ্যের ওপর ভিত্তি করে প্রোগ্রাম বা সফটওয়্যার বানানোর সময় ল্যাঙ্গুয়েজটি একটি টুল হিসেবে ব্যবহার হবে। যেমন, একটি অ্যান্টিভাইরাস বানানোর জন্য কমপিউটারের ডিস্ক, ড্রাইভ, ডিরেক্টরি, ফাইল ও অপারেটিং সিস্টেমের অভ্যন্তরীণ বিষয়ে জানতে হয়। কোনো কমিউনিকেশন প্রোগ্রাম ডেভেলপ করতে হলে মডেম, সিরিয়াল পোর্ট প্রভৃতি সম্পর্কে ধারণা থাকতে হয়। একটি গেম তৈরি করতে হলে ভিজিএ কার্ড, কিবোর্ড, মাউস, গণিত ইত্যাদি বিষয়ে ধারণা থাকতে হবে। সাউন্ড প্রসেসিংয়ের কোনো প্রোগ্রাম বানাতে হলে সাউন্ড কার্ড, সাউন্ড ফাইল ও বিভিন্ন অ্যালগরিদম জানতে হবে। মেশিন ট্রান্সলেশনের ওপর কিছু বানাতে হলে আর্টিফিশিয়াল ইন্টেলিজেন্স, কমপিউটেশনাল গ্রামার মডেল, পার্সিং ইত্যাদির ওপর গভীর ধারণা থাকতে হবে। এসব ধারণা থাকার পর প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে বিষয়গুলোকে একটি প্রোগ্রামে উপস্থাপন করা হয়। এ লেখায় সে ধরনের একটি প্রোগ্রাম কীভাবে তৈরি করতে হয়, তা দেখানো হয়েছে।
সি-তে মেমরি ম্যানেজমেন্ট, বায়োস সার্ভিস, ডস সার্ভিস, ড্রাইভ, ডিরেক্টরি, ফাইল, গ্রাফিক্স, গণিত, সময়, স্ট্রিং প্রভৃতি নিয়ে কাজ করার জন্য কিছু লাইব্রেরি ফাংশন দেয়া আছে, যা বিভিন্ন প্রোগ্রামিংয়ের কাজে প্রয়োজনে ব্যবহার করা যাবে। ধরা যাক, একটি প্রোগ্রাম তৈরি করতে হবে, যা বিভিন্ন প্রয়োজনে সাউন্ড কার্ড ব্যবহার করবে। তাই স্বভাবতই প্রোগ্রামের শুরুতে চেক করে দেখতে হবে কমপিউটারে সাউন্ড কার্ড ইনস্টল করা আছে কি না।
#include
#include
#define TIME1 10
#define TIME2 50
undigned SBPORT=0x210;
char ISFOUND=0;
unsigned COUNT1,COUNT2;
void main(void){
COUNT1=TIME1;
while((SBPORT<=0x260)%%!ISFOUND){
outportb(SBPORT+0x6,1);
outportb(SBPORT+0x6,0);
COUNT2=TIME2;
while((COUNT2>0)&&(inportb(SBPORT+0xE)<128)){
—COUNT2;}
if((COUNT2==0)||(inportb(SBPORT+0xA)!=0xAA)){
—COUNT;
if(COUNT1==0){
COUNT1=TIME1;
SBPORT=SBPORT+0x10;}}
else
ISFOUND=1;}
if(ISFOUND)
printf(“sound card found at port %x”,SBPORT);
else
printf(“no card found”);}
এ প্রোগ্রামটি যে কমপিউটারে রান করা হবে, সেখানে সাউন্ড কার্ড ইনস্টল করা থাকলে কার্ডের বেস পোর্টটি হেক্সাডেসিমালে দেখা যাবে। আর কোনো সাউন্ড কার্ড ইনস্টল করা না থাকলে প্রিন্ট করবে যে কোনো কার্ড পাওয়া যায়নি। প্রোগ্রামটি লক্ষ করলে দেখা যাবে inportb() এবং outportb() নামে দুটি লাইব্রেরি ফাংশন ব্যবহার করা হয়েছে। কোনো হার্ডওয়্যারের কোনো পোর্ট থেকে একটি বাইট পড়ার জন্য ইনপোর্ট ফাংশন ও হার্ডওয়্যার পোর্টে একটি বাইট লেখার জন্য আউটপোর্ট ফাংশন ব্যবহার করা হয়। কিন্তু ঝামেলা হবে বিভিন্ন ইফ বা হোয়াইল স্টেটমেন্টের কন্ডিশনগুলো বুঝতে। এ এক্সপ্রেশনগুলো কীভাবে কাজ করে, তা জানতে হলে একজন প্রোগ্রামারকে সাউন্ড কার্ড সম্পর্কে জানতে হবে।
সাউন্ড প্লাস্টার কিংবা এর কম্প্যাটিবল কার্ডগুলোতে একটি ডিএসপি চিপ থাকে। এই চিপটি সাউন্ড রেকর্ডিং, প্লেয়িং ও এডিটিংয়ের কাজে ব্যবহার হয়। এই চিপ নিয়ে কাজ করার জন্য চারটি আট বিটের পোর্ট আছে। যেমন :
2x6H : এটি হলো রিসেট পোর্ট। এখানে শুধু ডাটা লেখা যায়।
2xAH : এটি ডাটা ইনপুট পোর্ট। এখান থেকে শুধু ডাটা পড়া যায়।
2xCH : এটিকে বলে কমান্ড/ডাটা পোর্ট এবং বাফার স্ট্যাটাস পোর্ট। সাউন্ড ডাটা নিয়ে কাজ করার জন্য ডিএসপি চিপের কিছু নিজস্ব কমান্ড আছে। সেসব কমান্ড ব্যবহারের জন্য কিংবা আমাদের কোনো ডাটা লেখার জন্য এই পোর্ট ব্যবহার হয়।
2xEH : ডাটা আছে কি না তা এই পোর্টের মাধ্যমে বোঝা যায়।
প্রোগ্রামে যদি লেখা হয় outportb(0x216,1); তাহলে রিসেট পোর্টে ১ লেখা হবে। একইভাবে inportb(0x21E); লেখা হলে 21E পোর্টে কোনো ডাটা থাকলে তা রিটার্ন করবে।
কমপিউটারে কোনো সাউন্ড কার্ড আছে কি না তা জানার জন্য এ ডিএসপি চিপের পোর্টগুলো ব্যবহার করা যায়। যদি প্রোগ্রাম চিপটি রিসেট করতে পারে, তাহলে সাউন্ডকার্ডের উপস্থিতি জানা যাবে। আর এই চিপ রিসেট করার জন্য প্রোগ্রামে নিচের কাজগুলো করতে হবে :
০১. 2x6H পোর্টটিতে ১ লিখতে হবে।
০২. কিছু সময় অপেক্ষা করতে হবে (৩ থেকে ৫ মিলিসেকেন্ডের মতো)।
০৩. আবার 2x6H পোর্টে ০ লিখতে হবে।
০৪. 2xEH পোর্টটি পড়ে দেখতে হবে ৮ নম্বর বিটে ১ আছে কি না। যদি অনেকবার পড়ার পরও ৮ নম্বর বিটে ১ না পাওয়া যায়, তাহলে ডিএসপি রিসেট হবে না। এ ক্ষেত্রে হয়তো ভুল বেস পোর্ট নির্ধারণ করা হয়েছে কিংবা সাউন্ড কার্ডই নেই।
০৫. এরপর 2xAH পোর্ট থেকে ডাটা পড়তে হবে।
০৬. 2xAH পোর্ট থেকে যে ডাটা পাওয়া যাবে, তা অবশ্যই AAH হতে হবে। যদি না পাওয়া যায় তাহলে ৪ ও ৫ নম্বর স্টেপ আবার করতে হবে। যদি পাওয়া যায়, তাহলে বোঝা যাবে সাউন্ড কার্ড ইনস্টল করা আছে এবং কাজ করার জন্য সঠিক বেস পোর্ট ব্যবহার করা হয়েছে। যদি AAH পাওয়া না যায়, তাহলে হয়তো ভুল বেস পোর্ট ব্যবহার করা হয়েছে অথবা সাউন্ড কার্ড ইনস্টল করা নেই।
উপরের প্রোগ্রামে এ নিয়মগুলো অনুসরণ করে সাউন্ড কার্ড আছে কি না তা চেক করা যায়। এভাবে প্রফেশনাল কোনো প্রোগ্রাম তৈরি করার জন্য ল্যাঙ্গুয়েজ জানা হলো প্রথম শর্ত। এরপর যে বিষয়ে প্রোগ্রাম লেখা হবে, সে বিষয়ে জানতে হবে এবং সেটা ল্যাঙ্গুয়েজের মাধ্যমে উপস্থাপন করতে হবে। তবে এখানেই সবকিছু শেষ নয়। প্রোগ্রাম কোন অপারেটিং সিস্টেমে চলবে, সে সম্পর্কেও ধারণা থাকতে হবে। যেমন ডসের জন্য লেখার সময় ডস সম্পর্কে এবং উইন্ডোজের জন্য লেখার সময় উইন্ডোজ সম্পর্কে ভালো ধারণা থাকতে হবে। আর কোন চিপ কীভাবে ব্যবহার করতে হবে বা তার কী কী পোর্ট আছে, এসব ওই চিপের ম্যানুফ্যাকচার কোম্পানিই দিয়ে দেয়। প্রোগ্রামারকে শুধু তা অনুসরণ করে প্রোগ্রাম লিখতে হয়
ফিডব্যক : wahid_cseaust@yahoo.com