این کتاب راجع به دو بسته نرم افزاری به نام Tk , Tel می باشد.
که با همدیگر یک سیستم برنامه نویسی برای گسترش و استفاده از واسط گرافیکی کاربرد (GUI) را فراهم می کند.
Tel بیانگر زبان ابزار فرمان است و با نام “Tiche” شناخته شده است و یک زبان اسکریپتی ساده برای کنترل و توسعه برنامه های کاربردی می باشد.
Tel یک برنامه نویسی کلی و عمومی را با استفاده از ابزارهای سودمند از قبیل متغیرها، حلقه ها و توابع برای برنامه های کاربردی متنوع هم می آورد.
بعلاوه Tel به صورت توکا (embeobble) می باشد.
یعنی مفسر آن بعنوان کتابخانه ای از توابع “C” که می تواند به راحتی داخل برنامه های کاربردی قرار داده شود پیاده سازی شود.
و هر بنامه ای کاربردی می توان خصوصیات بنیادی Tel را با فرمانهای افزودنی بخصوصی با برنامه های کاربردی گسترش دهد.
یکی از مفیدترین ابزارهایی که برای گسترش Tel به کار گرفته شده است Tk می باشد.
Tk یک بسته از ابزارهای نرم افزاری برای سیستم های ویندوز با ورژنهای مختلف می باشد.
و تلفظ نام آن “TeEkey” می باشد.
Tk وسایل و امکانات Tel را با فرمانهای افزودنی برای ساختن واسطه های کاربر گسترش می دهد.
بنابراین شما می توانید ساختها واسطه های کاربر را برای استفاده از کدهای زبان C با اسکریپتهای Tcl بنویسید.
Tk نیز مانند TCl بعنوان توابع کتابخانه ای C پیاده سازی شده است.
بنابراین در خیلی از برنامه های کاربردی گوناگون می تواند مورد استفاده قرار گیرئد.
برنامه های کاربردی نیز می توانند براساس خصوصیات Tk با واسطه های اشیاء گرافیکی کاربرد (widgest) و مدیریت هندسی در C گسترش یابند.
Tel و Tk با همدیگر 4 مزیت را برای کاربران و توسعه دهندگان کاربردی ایجاد می کنند ابتدا اینکه Tel داشتن یک زبان اسکریپتی قدرتمنمد را برای هر برنامهی کاربردی آسان می کند.
تمام چیزی را که یک برنامه کاربردی نیاز است انجام دهد پیاده سازی تعدادی از فرامین Tel است که ویژگی های اصلی برنامه های کاربردی را تامین می کند.
پس برنامه کاربردی میتواند با مفسر tel با پروسی جدها، یک تابع کامل زبان اسکریپی که شامل هر دو مورد فرمان های تهیه شده به وسیله Tel (که هسته Tel (Tel Core) نامیده می شوند) شکل 1.
1 را ببینید.
1-2) Figure: برای ایجاد کردن یک برنامه کاربردی جدید براساس Tel، یک گسترش دهنده برنامه کاربردی یک ساختمان داده های ویژه C برای آن برنامه کاربردی طراحی می کند و کدهای C را برای پیاده سازی تعداد کمی از فرامین Tel پیاده سازی می کند.
کتابخانه Tel هر امکانی را فراهم می کند در غیر این صورت Tel نیازمند به یک زبان فرمان گرا قابل برنامه نویسی است.
برنامه کاربردی می تواند با نوشتن اسکپریپتهای TCl اصلاح شده و گسترش یابد.
برای مثال، یک برنامه کاربردی برای خوداندن تابلوهای اعلانات (بولتن) الکترونیکی ممکن است شامل کدهای C باشد.
که یک فرمان Tel را برای جستجو و کاوش در تابلو اعلانات و صدور یک پیغام جدید برای این کار و یک فرمان دیگر را برای پیغام داده شده پیاده سازی می کند.
زمانی که از این فرمان ها خارجی می شویم اسکریپتهای Tel می توانند برای تکرار این چرخه در لابه لای پیغام های جدیدی از تمام تابلوهای اعلانات نوشته شوند و همه آنها را در یک زمان نمایش دهند یا فایل پیغامهایی که خوانده شده اند یا خوانده نشده اند را بر روی دیسک ذخیره کرده و نگهداری کنند.
و یا اینکه یک یا چند تابلو اعلانات را برای موضوع ویژه ای جستجو کنند.
برنامه کاربردی تابلو اعلانات نیازی نیست هر یک از توابع افزودنی را در C پیاده سازی کند.
بلکه همه این توابع می توانستند به عنوان اسکریپتهای Tel پیاده سازی می شوند و کاربران این برنامه های کاربردی می توانستند اسکپریپتهای افزودنی Tel را برای افزودن توابع بیشتر به برنامه کاربردی بنویسند.
مزیت دوم Tel و Tk قابلیت توسعه و گسترش سریع آن می باشد.
برای مثال فیلمی از برنامه های کاربردی پنجره ای جالب می توانند تماماً به وسیله اسکریپتهای Tel نوشته شوند.
بدون اینکه ابداً از کدهای C استفاده شود.
این کار با استفاده ای یک واسط کاربرد (Shell) پنجره ای که Wish نامیده می شود انجام می شود.
این کار به شما اجازه می دهد که در سطح بالاتری نسبت به وقتی در C یا ++C هستید برنامه نویسی کنید و خیلی از جزئیاتی که برنامه نویسان باد مخاطب آن باشند و از شما پوشیده است.
در مقایسه ای نسبت به ابزارها وقتی شما تماماً در C برنامه نویسی می کنید یادگیری استفاده از Tel و Tk آسانتر است و نیاز به کدنویسی کمتری دارد.
کاربران مبتدی Tel و Tk می توانند فقط چند ساعت پس از یادگیری آن واسطه های کاربر جالبی ایجاد کنند.
و به گفته خیلی از کاربران وقتی آنها Tel و Tk را جایگزین دیگر ابزارهای نرم افزار کرده اند با کاهش قابل ملاحظه ای تا ده برابر در حجم کد و زمان لازم برای گسترش برنامه روبرو شده اند.
دلیل دیگری برای توسعه سریع Tel/Tk مفسری بودن زبان Tel می باشد.
وقتی شما یک برنامه کاربردی Tel از قبیل Wish را استفاده می کنید می توانید اسکریپتهای جدیدی تولید و اجرا کنید بدون اینکه لازم باشد آن برنامه کاربردی مجدداً اجرا یا کامپایل شوند.
این کار به شما اجازه می دهد خیلی سریع آن را تست کنید.
و خطاهای (باس) آن را مشخص سازند.
زمانی که Tel تفسیر می شود خیلی کندتر از کدهای کامپایل شده C اجرا می شود.
ولی ایستگاه های کاری و سیستم های جدید به طور باورنکردنی سریع هستند.
برای مثال شما می توانید اسکریپتی با صدها و حتی هاران فرمان Tel را با یک حرکت ماوس بدون اینکه تاخیر قابل ملاحظه ای داشته باشد اجرا کنید.
در مورد موارد نادری که به نحوه اجرای مسأله قابل ملاحظه ای است شما می توانید بیشتر اجراها را در قسمت های مهم بحرانی اسکریپتی Tel مجدداص در C پیاده سازی می کنند.
مزیت دوم Tel و Tk قابلیت توسعه و گسترش سریع آن می باشد.
در مورد موارد نادری که به نحوه اجرای مسأله قابل ملاحظه ای است شما می توانید بیشتر اجراها را در قسمت های مهم بحرانی اسکریپتی Tel مجدداص در C پیاده سازی می کنند.
سازماندهی کتاب: مزیت سوم Tel مزیتی است که آن را به یک «زبان چسبنده» بسیار خوب تبدیل کرده است.
چون Tel قابل تعبیه شدن در برنامه های دیگر می باشد.
Tel می تواند در برنامه های مختلف و به منظور تحقق اهداف مختلف به کار گرفته شود.
می توان یک اسکریپت Tel را طوری نوشت که تمام خصوصیات برنامه ها را در بر داشته باشد.
برای مثال هر برنامه کاربردی پنجره Tk می تواند یک اسکریپت Tel را به هر برنامه کاربردی Tk انتشار دهد.
این ویژگی جلوه های چند رسانه ای (Multi- medis effects) را خیلی بیشتر در دسترس قرار م یدهد در زمانی که برنامه های کاربردی صوتی و تصویری با Tk ساخته شده اند (و هم اکنون موجودند) برنامه Tk می تواند فرامین اجرا و ضبط را برای آنها صادر کند.
صفحات گسترده می توانند خودشان را به وسیله پایگاه داده برنامه های کاربردی به روز (upobte) کنند.
ویراستارهای واسطه های کاربر می توانند نمایش و رفتار برنام های کاربردی را در حالت اجرا و غیره اصلاح کنند.
Tel یک lingua Franea را تهیه می کند که اجازه می دهد برنامه های کاربردی با همدیگر کار کنند.
مزیت چهارم Tel راحتی کاربر است.
زمانی که یک کاربر Tel و Tk را یاد می گیرد او می تواند صرفاً با یک یادگیری چند فرمان خاص برنامه کاربردی اسکریپتهایی برای هر برنامه کاربردی Tel و Tk بنویسید و در برنامه های کاربردی جدیدی ایجاد کند.
این مزیت سفارشی کردن و بهبود برنامه های کاربردی را برای کاربران امکانپذیر می سازد.
2-1) سازماندهی کتاب فصل 2 از چندین اسکریپت ساده برای مروری سریع بر مهمترین ویژگی های Tel و Tk استفاده می کند و یک سیستم مناسب و راحت به شما معرفی می کند و آنها بدون هیچ توضیحی در مورد جزئیات مفیدند.
باقیمانده کتاب دوباره حالت جامع تری دارد.
و به 4 بخش تقسیم یم شوند.
معرفی زبان اسکریپتی Tel.
بعد از خواندن ابن بخش شما قادرید اسکپریپتهایی برای برنامه های کاربردی Tel بنویسید.
این قسمت فرمانهای افزودنی Tel را توصیف می کند.
که به وسیله Tk آماده شده اند و به شما اجازه می دهند به واسطه های کاربر اشیاء گرافیکی (widgets) مانند منوط و نوارهای پیمایشی را ایجاد کرده آنها را در پنجره برنامه کاربردی مرتب کنید.
بعد از خواندن این قسمت شما قادر خواهید بود برنامه های کاربردی پنجره ای جدیدی مثل wish ایجاد کنید.
و اسکریپتهایی برای بهبود برنامه های کاربردی Tk موجود بنویسید.
قسمت سوم در مورد پروسی جرهای C در کتابخانه Tel و نحوه استفاده از آنها برای ایجاد فرمان های Tel جدید بحث می کند.
بعد از خواندن این قسمت شما قادر خواهید بود بسته های نرم افزاری (پکیج Package)Tel و برنامه های کاربردی در C بنویسید.
قسمت چهارم کتابخانه پروسی خبرهای Tk را توصیف می کند.
بعد از خواندن این قسمت شما قادرید اشیاء گرافیکی (widgets)جدیدی ایجاد کنید و آنها را در C مدیریت هندسی کنید.
هر یک از این بخش های اصلی شامل 10 فصل کوتاه می باشند.
هر فصل انتخاب شده قسمتی از سیتسم را توصیف می کند.
لازم نیست تمام فصول را به ترتیب بخوانید.
من توصیه می کنم که شما خواندن فصول 3-9 را به سرعت شروعغ کنید.
بعد از فصول XXX-YYY عبور کنید و بعد از آن فصل هایی را که به آن نیاز دارید بخوانید.
در اینجا هیچ خصوصیت و ویژگی ناگفته نمی ماند.
و تمام توضیحات طوری سازماندهی شده اند که یک مقدمه مرتب و روان را نسبت به مرجع مطالب ارائه دهند.
یک مجموعه مجزا از مراجع با توزیع Tel و Tk موجود است.
اینها خیلی مجهزترند.
اما قطعاً هر ویژگی از هر دو سیستم را ارائه می دهند.
این کتاب فرض می کند که شما با زبان برنامه نویسی CANSIC استاندارد آشنا هستید و تنجربیاتی در مورد Xl , unix دارید.
برای اینکه فصل چهار را بهتر درک کنید نیاز دارید خیلی از ویژگی های تهیه شده به وسیله xlib از قبیل گرافیک و خصوصیات پنجره ها را بفهممند.
اما این جزئیات فقط در فصل 4 مورد نیازند.
شما قبل از اینکه خواندن این کتاب را شروع کنید نیازی نیست راجع به Tel و Tk چیزی بدانید.
هر دوی اینها معرفی خواهند شد.
در تمام این کتاب من از فونت couvier برای نشان دادن هر چیزی که کامپیوتر تایپ می کند مثل نام متغیرها، پروسی جرها و نام فرمانها، اسکریپتهای Tel و کدهای C استفاده می کنیم.
مثالی از اسکریپت Tel در زیر آمده است: set Q 44 44 فرمانهای Tel مثل “Set a 44” و نتیجه آن مثالی از نمایش با فونت couvier می باشد و نتیجه آن یعنی “44” که به صورت مایل نمایش داده شده است.
علامت قبل از نتیجه نشانگر مقدار برگردانده شده است.
اگر خطایی در یک فرمان tel اتفاق بیفتد پیغام خطا با فونت کوریر مایل نمیش داده می شود و علامت در شروع پیغام درج می شود.
تا نشان دهد که مقدار برگشت داده شده یک پیغام خطاستset a 44 55.
wrong # args.Should be "set vorname?
Newualve?
وقتی ساختار دستوری فرمان های tel را شرح می دهیم از فونت کوریر مایل برا ینشان دادن نام آرگونامهای رسمی استفاده می کنیم.
اگر یک یا چند آرگومان در درون علامت های سوال محصور شده باشند به معنی اختیاری بودن استفاده از آراگومان می باشد.
برای مثال ساختار فرمان set در زیر آمده است.
Set war name?
New volve?
و به معنی آن است که کلمه set باید کلمه به کلمه برای فراخوانی آن فرمان وارد شود.
New value , Varname نام آرگومانهای فرمان set می باشند.
هنگامی که بخواهید فرمانset را فراخوانی کنید باید یک نام متغیر به جای varname و یک مقدار جدیدی برا یاین متغیر در عوض newline تایپ کنید.
آرگون های newvale اختیاری می باشند.
فصل دوم: مروری بر Tel , Tk این فصل Tel , Tk را با یک سری از اسکریپتهای خواص اصلی سیستم ها را شرح می دهند معرفی می کنند.
گرچه شما باید قادر باشید بعد ا زخواندن این فصل نوشتن اسکریپتهای ساده را آغاز کنید.
اما توضیحاتی که در اینجا آمده است کامل نیست.
تمام مطالب این فصل با جزئیات بیشتر در فصل های بعدب مطرح خواهد شد و همچنین سیستم ها از جنبه های گوناگونی از قبیل واسطه های آنها در C که در این فصل به آنها هیچ اشاره ای نشده است در فصل بعدی بحث خواهد شد.
هدف از این فصل نشان دادن ساختارهای Tel , Tk و کارهای مختلفی است که آنها می توانند انجام دهند.
بنابراین وقتی در مورد جزئیات خصوصیات آنها بحث می شود قادر خواهید بود ببینید که چرا آنها مفیدند.
1-2) شروع به کار: برای فراخوانی یک اسکرپیت Tel شما باید یک برنامه کاربردی Tel را اجرا کنید.
اگر Tel را روی سیستمتان نصب کرده باید باید یک واسط کاربر ساده Tel به نام Telsh بر روی سیستمتان موجود باشد که شمامی توانید با استفاده از آن بعضی از مثالهای این فصل را امتحان کنید.
(اگر Tel روی سیستمتان نصب نشده باشد می توانید با رجوع به ضمیمه اطلاعات کافی راجع به نحوه فراهم کردن و نصب آنها به دست آورید) فرمان زیر را برای فراخوانی Telsh در واسط های کاربر تایپ کنید.
Telsh در حالت محاوره ای راه اندازی خواهد شد.
Tel از ورودی استانداردش ورودی ها را می خوند و برای ارزیابی و پردازش به مفسر انتقال می دهد.
برای شروع فرمان زیر را در Telsh تایپ کنید.
Telsh expr 2+2 نتیجه را که “4” می باشد چاپ می کند.
و پرامپت (Prompt) آن برای دریافت فرمان بعدی شما را راهنمایی می کند.
یک سرور از Tel , Tk: برای مثال چندین ویژگی از Tel را شرح می دهد.
اول اینک فرمان های Tel فرمی مشابه فرمان های واسط کاربر دارند.
هر فرمان شامل یک یا چند کلمه است که با فضای خالی (Space) یا تب از هم جدا شده اند.
در این مثال 4 کلمه دیده می شود.
2, +2 , 2 اولین کلمه هر فرمانی نام آن فرمان است.
این نام یک پروسی جر C را در برنامه کاربردی انتخاب می کند.
که این پروسی جر تابع مربوط به این فرمان را اجرا خواهد کرد.
بقیه کلمات آرگومانهایی هستند که به پروسی جر C انتقال داده می شوند.
EXPr یکی از فرامین مرکزی (Core command) ساخته شده در درون مفسر Tel می باشد.
بنابراین در هر برنامهی کاربردی Tel وجود دارد.
این فرمان آرگومانهایش را به صورت یک رشته به هم اتصال می دهد و این رشته را به صورت یک عبارت ریاضی مورد ارزیابی قرار می دهد.
هر فرمان Tel یک رشته را به عنوان نتیجه بر می گرداند.
برای فرمان expr نتیجه مقدار عبارت می باشد.
نتایج همیشه به صورت یک رشته برگردانده می شوند.
بنابراین expr نتیجه عددی را به رشته تبدیل کرده و آن را بر می گرداند.
اگر فرمانی نتیجه ای داشته باشد که معنی خاصی ندارد یک رشته خالی را به جای آن بر می گرداند.
به این مثال توجه کنید.
Expr 2 + 2 4 خط اول فرمانی است که شما تایپ کرده ایدو خط دوم نتیجه ای است که این فرمان بر می گرداند.
علامت نشان دهنده این است که این خط شامل برگردانده شده به عنوان نتیجه می باشد.
ولی Telsh واقعاً این علامت “” را چاپ نمی کند.
من مقادیر برگشت داده ای که مهم نیستند مانند ترتیبی از فرامین که فقط نتیجه فرمان آخر مهم است را حذف می کنم.
فرامین به طور طبیعی در خط جدید خاتمه یابند.
بنابراین وقتی شما در Telsh درهر خط چیزی را تایپ می کنید طبیعتاً یک فرمان مجزا مصوب می شود.
سمی کالون ها نیز به عنوان جدا کننده فرامین از یکدیگر عمل می کنند و د رمواردی که شما مایلید چند فرمان را در یک خط تایپ کنید مورد استفاده قرار می گیرند.
التبه تایپ یک فرمان در چند خط نیز امکانپذیر است و شما نحوه انجام آن را در آینده خواهید دید.
در فرمان expr یک عبارت ساختار دستوری مشابه AMSZC دارد و بیشتر عملگرهای C را با همان قوانین تقدم عملگرها پوشش می دهد.
در اینجا چند مثال آورده شده است که شما می توانید آنها را در Telsh تایپ کرده و امتحان کنید.
Expr 3 12 Expr 14.1 *6 84.6 Expr ( 3 > 4) 11 (6 7) 1 این مثال یک عملگر بیتی را شرح می دهد که بیتهای عملوند خود را به سومت چپ شیفت می دهد.
مثال دوم نشان می دهد که که این عبارت می توانند شامل مقادیر حقیقی مثل داده های صحیح باشند.
مثال آخر استفاده از عملگرهای رابطه ای و دو عملگر منطقی 11 را نشان می دهد.
مثل C نتایج بولین بهص ورت عددی نشان داده می شود.
که 1 نشانگر مقدار درست و 0 نشانگر مقدار نادرست می باشند.
برای خارج شدن از Telsh فرمان exit را فراخوانی می کنیم: Exit این فرمان برنامه کاربردی را خاتمه داده و به واسطه کاربرد (Shell) بر می گردد.
2-2: نوشتن برنامه Helloword با Tk برنامه کاربردی “Helloword”.
دکمه “Helloword” با مدیر پنجره mwm تهیه شده است.
اگر شما از مدیر پنجره دیگری استفاده کنید ممکن است نمایش شکل شما متفاوت باشد.
گرچه Tel یک مجموعه کامل از ابزارهای برنامه نویسی از قبیل متغیرها و حلقه ها و پروسی جرها را فراهم می کند اما محیط برنامه نویسی مجزایی ندارد.Tel می تواند به عنوان بخشی از برنامه های کاربری که از فرامین Tel خودشان علاوه بر فرمان های مرکزی Tel (Tel eore) استفاده می کنند به کار می روند.
فرمان های خاصی از برنامه های کاربردی اصول جالبی را فراهم می کنند که کنار هم قرار گرفتن این اصول می تواند در توابع مفید باشد.
Tel به تنهایی خیلی جالب نیست و استفاده از امکانات آن سخت است مگر اینکه شما Tel را با فرمان های خاصی از برنامه کاربردی به کار برید.
Tk یک مجموعه جالب از فرامین را برای استفاده با ابزارهای برنامه نویسی مهیا می کند.
بیشتر مثالهای کتاب در یک برنامه کاربردی به نام wish استفاده شده است.
که شباهت زیادی به Telsh دارد.
به جز اینکه شامل فرمانهای ترعیف شده به وسیله Tk می باشد.
فرمان های Tk به شما اجازه می دهد Telsh دارد.
به جز اینکه شامل فرمان های تعریف شده به وسیله Tk می باشد.
فرمان های Tk به شما اجازه می دهند که واسط گرافیکی کاربر ایجاد کنید.
اگر شما Tk , Tel را روی سیستمتان نصب کرده باشید می توانید wish را نیز مانند Telsh فراخوانی کنید.
این کار یک پنجره خالی کوچک روی صفحه نمایش شما ظاهر می کند و فرمان ها را از ورودی استاندارد می خواند.
در اینجا یک اسکریپت ساده Wish آمده است.
Button .b- text “Hallo, world!
“- command exit pack.b اگر شما این دو فرمان Tel را در پنجره wish تایپ کنید شکل 1-2 در پنجره نمایش داده خواهد شد.
اگر شما با ماوس روی این دکمه کلیک کنید از Wish خارج می شوید.
و پنجره دیگر قابل دیدن نخواهد بود.
در مورد این مثال چند مطلب وجود دارد که باید توضیح دهیم.
ابتدا اجازه دهید موضوعات دستوری را مورد بررسی قرار دهیم.
این مثال شاخمل دو فرمان Button و Pack می باشد که هر دو به وسیله Tk پیاده سازی شده اند.
گرچه به نظر می رسد که این فرمانها با فرمان expr که در بخش قبلی مطرح شد فرق دارند ولی آنها ساخاری مشابه دیگر فرمان های Tel دارند که شامل یک یا چند کلمه می باشند.
که به وسلیه فضاهای خالی از هم مجزا شده اند.
فرمان Button شامل 6 کلمه و فرمان Pack شامل دو کلمه می باشد.
کلمه چهارم از فرمان Button درداخل جفت کوتیشن (“ “) قرار گرفته است.
این عمل اجازه می دهد که در داخل کلمه از کاراکترهای فضای خالی نیز استفاد کنیم.
این جفت کوتیشن ها جزئی از خود کلمه نیستند.
و قبل از اینکه کلمه به عنوان یک آرگومان به فرمان عبور داده شود توسط مفسر Tel حذف می شوند.
برای فرمان expr ساختار کلمه زمانی که Tel ساختار کلمه خیلی مهم است.
در فرمان Button آرگومان اول نامن پنجره و آرگومان بعدی که به صورت جفتی می باشد و شامل دو نام است که اولی نام یک گزینه پیکربندی و دومین آرگومان مقداری برای این گزینه است.
بنابراین اگر جفت کوتیشن حذف شوند مقدار گزینه Text- عبارت “Hello” خواهد شد و با عبارت “world” بعنوان یک پیکربندی مجزا قرار رفتار خواهد شد.
زمانی که هیچ انتخاب ترعیف شده ای به نام “world” وجود ندارد.
این فرمان یک مقدار خطا بر می گرداند.
حال بیایید رفتار این فرمان ها را بررسی کنیم.
Widget یک ساختمان بلاکی عمده برای واسطه گرافیکی کاربر در TK می باشند.
یک widget پنجرهای با رفتار و نمایشی خاص می باشد.
(هر دو واژه “Widget” و “windows” به صورت مترادف در Tk استفاده می شوند.
Widgect ها به کلاس هایی مانند منوها و دکمه ها و نوارهایی پیمایش تقسیم می شوند.
تمام Widgect ها که دارای کلاس واحدی هستند نمایش و رفتار عمومی یکسانی دارند.
برای مثال همه دکمه های Widgect ها که دارای کلاس واحدی هستند نمایش و رفتار عمومی یکسانی دارند.
برای مثال همه دکمه های Widget وقتی که با ماوس فراخوانی شوند یک رشته متنی یا Bitmap را نمایش می دهند و یا یک فرمان مخصوص از Tel سازماندهی شده اند و جایگاه آنها با نامشان در این سلسله مراتب مشخص می شوند.
Widget اصلی که وقتی شما wish را آغاز می کنید.
روی صفحه نمایش ظاهر می شود با نام “.” مشخص می شود.
نام .b به فرزند widgect اصلی اشاره دارد.
نام widgect ها در Tk درست مثل نام فایل ها در unix می باشد بجز اینکه Tk از “.” بعنوان جدا کننده کاراکترها به جای “/” استفاده می کند.
بنابراین .a.b.e اشاره به widgect ی دارد که فرزند widgect اصلی است.
Tk یک فرمان برای هر کلاس از widgect ها تهیه می کند که شما آن را برای ایجاد یک widgect از همان کلاس فرا می خوانند.
برای مثال فرمان button ، ویرگت button ایجاد می کند.
تمام فرمان های ایجاد widgect فرم مشابهی دارند.
آرگومان اول نام widgect جدیدی است که می خواهیم ایجاد کنیم و آرگومانهای بعدی گزینه های پیکربندی را مشخص می کنند.
Widgect هایی که با کلاسهای متفاوت مجموعه متفاوتی از گزینه ها را پشتیبانی می کنند.
Widgect ها عموماً گزینه های زیادی دارند.
برای مثال در اینجا در حدود 2 گزینه مختلف برای Button ها تعریف شده است و مقادیر پیش فرض برای گزینه هایی که شما تعیین نمی کنید فراهم شده اند.
وقتی یک فرمان ایجاد widgect مثال button فراخوانی می شود یک پنجره جدید به وسیله نام داده شده ایجاد می کند.
و با گزیننه مشخص شده آن را پیکربندی می کند.
فرمان button در مثال دو گزینه را مشخص می کند.
–text که یک رشته برای نمایش button است و –command که یک اسکریپت Tel است که وقتی کاربر آن را فراخوانی کند اجرا می شود.
در این مثال گزینه –command ، exit است.
در اینجا چند مثال دیگر از گزینه های Button آورده شده است.
که می توانید آنها را امتحان کنید.
Back ground The background color for the button Foreground the color of the text in the button Font the name of the hont touse for the button?
Such as * -times – medium- r- normal-- * -?
120-* for a 12- point tiMES Roman font?
فرمان Pack دکمه Widget را روی صفحه نمایش قابل رویت می کند .ایجاد یک Widget به صورت خوودکار باعث نمایش آن نمی شود.
عناصر مستقلی که مدیران هندسی Cgeometrymoridgen نامیده می شوند.
مسمولیت محاسبه اندازه و موقعیت ونمایش این پنجره ها (Widget) را بر روی صفحه نمایش بر عهده دارند این فرمان درخواست می کند که .b تمام قسمت های پنجره والد خود را پر کند.
بعلاوه اگر والد (در اینجا پنجره) فضایی بیشتر از فضای مورد نیاز فرزند در اختیار داشته باشد جمع می شود تا فقط به اندازه کافی برای نگهداشتن فرزند بزرگ شود.
بنابراین وقتی شما فرمان Pack را تایپ می کنید پنجره اصلی از اندازه اصلی خودش جمع تر می شود.
و اندازه آن برابر اندازه نشان داده شده در شکل 1-2 می شود.
3-2- فایهلای اسکرپیتی: در مثالهایی که تاکنون دیده اید فرمان های Tel به صورت محاوره ای در Telsh و Wish تایپ می شدند.
شما می توانید این فرمان ها را در درون فایل های اسکرپیتی به کار برده و آنها را فراخوانی کنید.
درست مثل Shellscript (زیر برنامه ای که توسط مفسر فرمان (Shell) یک سیستم عامل کامل اجرا می شود.
برای انجام انی مثال یعنی Hello word متن زیر را در یک فایل به نام hello قرار دهید.
Hello: # !
usr / bin/ wish- f Button.
B- text “Hello, World!
“- Command exit Paek.
B این مثال به جز خط اول دقیقاً مثل مثالی است که پیشتر نوشتیم.
تا وقتی این مثال را Wish می نوشتیم خط اول یک توضیح بود ولی اگر بخواهید این فایل را اجرایی کنید (برای مثال “chanod 775 hello” را در واسط کاربرد (shell) تایپ کنید).
شما می توانید سیستم Wish را فرا م یخواند و این فایل را مثال یک اسکریپت تفسیر انتقال می دهد.
Wish همان پنجره نشان داده شده در Figure 2.1 نمایش می دهد و منتظر فرمان شما خواهد بود.
در این مورد شما قادر نخواهید بود فرمان ها را به طور محاوره ای در Wish تایپ کنید.
تنها کای که می توانید انجام دهید کلیک کردن روی این دکمه است.
این اسکریپت تنها وقتی شما Wish را در میسر /usr/ local/ bin نصب کرده باید کار می کند.
اگر شما wish را در جای دیگری نصب کرده اید باید خط اول را طوری تغییر دهید تا به محل مورد نظر شما که در آنجا wish نصب شده رجوع کنید.
عملاص کاربران برنامه های کاربردی Tk بندرت فرمان های Tel را به کار می برند.
کاربران معمولا توسط ماوس وصفی کلید با برنامه کاربردی در تعاملند مثل برنامه های گرافیکی.
Tel معمولا پشت صحنه کارهایی انجام می دهد که از دید کاربران پنهان است.
اسکریپت hello با یک برنامه کاربردی که کدهای C و ابزاری از قبیل Motif نوشته و کامپایل شده و به یک فایل باینری اجرایی تبدیل شده رفتاری مشابه دارد.
باری دیباگ کردن همانگونه که معمول است گسترش دهندگان برنامه های کاربردی فرامین Tel را بهصورت محاوره ای تایپ می کنند.
برای مثال شما می توانید اسکریپت Hello را به وسیله Wish تست کنید.
(به جای hello، در واسط کاربر wish را تایپ کنید) سپس فرمان زیر را تایپ کنید.
Sourree hello Source یک فرمان Tel است که نام فایل را به عنوان یک آرگومان دریافت می کند.
فایل را می خواند و به عنوان یک اسکریپت Tel مورد ارزیابی قرار می دهد.
این کار همان واسط کاربردی را تولید خواهد کرد که اگر شما Hello را مستقیماً از واسط کاربر Shell فراخوانی می گردید.
اما شما حالا می توانید فرمان های Tel را به صورت محاوره ای نیز به کار برید.
شم می توانید فایل اسکریپتی را ویرایش کرده و فرمان –command را به –command "Puts Good- bye!
; exit" تغییر دهید.
سپس بدون اینکه برنامه را مجدداً شروع کنید فرمان های زیر را در wish تایپ کنید: Destory.
B Source Hello فرمان اول دکمه موجود را وزن خواهد کرد و فرمان دوم مجدداً دکمه را با گزینه جدید ایجاد خواهد کرد.
حالا وقتی شا روی این دکمه کلیک کنید فرمان Puts قبل از خروج از Wish یک پیغام جدید در خروجی استاندارد خواهد نوشت.
4-2- متغیرها و جانشینی ها: Tel به شما اجازه می دهد مقادیری را در متغیرها ذخیره کرده و سپس این مقادیر را در فرمان ها استفاده کنید.
برای مثال اسکریپت زیر را ملاحظه کنید که می توانید آن را در wish یا Telsh تایپ کنید.
Set a 44 expr $a* 4 44 176 فرمان اول مقدار 44 را به متغیر a نسبت می دهد.
و مقدار آن را بر می گرداند.
در فرماندوم علامت $ باعث می شود که Tel عمل جانشینی متغیر را انجام دهد.
مفسر Q $a Tel مقدار متغیر a را که توسط فرمان seq به آن نسبت داده شده و مقدار آن 44 است قرا رمی دهد.
پس آرگومان expr مقدار 44*4 را دریافت می کند.
در Tel لازم نیست متغیرها را تعریف کنیم وقتی مقداری به آنها نسبت می دهیم به طور خودکار ایجاد می وشوند.
مقادیر متغیرها به صورت رشته ذخیره می شوند.
و این مقادیر رشته ای با هر طوری مجازند.
البته در این مثال اگر در فرمان expr، a مقداری به جز مقادیر عددی صحیح یا عددی حقیقی داشته باشد یک خطا رخ خواهد داد.
(مقادیر دیگر را امتحان کنید و نتیجه آن را ببنید).
Tel همچنین جانشینی فرمان ها را نیز پیش بینی کرده است.
که به شما اجازه می دهد از نتیجه یک فرمان بعنوان آرگومان فمرانی دیگر استفاده کنید.
Set a 447 Set b [expr $a* 44] 176 براکتها جانشینی فرمان ها را فراخوانی می کنند.
هر چیزی که در درون براکتها فقرار گرفته باشد بعنوان یک اسکریپت Tel مجزا ارزیابی شده و نتیجه این اسکرپیت جانشین فرمانی می شود که در بارکت قرار گرفته است.
در این مثال دومین آرگومان از دومین فرمان “176” خواهد شد.
5-2) ساختار کنترلی: مثال بعدی متغیرها و جانشین های آنها را با ساختارهای کنترلی برای ساختن یک پروسی جر Tcl به نام Pouler به کار می برد که یک عدد پایه را به یک عدد صحیح می رساند.
Proc power {base P} Set result 1 While {$P>0} Set result {expr $result * $ base} Set P [expr $ P-1] { return $result } اگر شما خطوط بالا را در Telsh , wish به کار ببرید یا آنها را در یک فایل قرار داده و با فرمان Source به کار ببرید فرمان جدید Power در دسترس خواهد.
این فرمان در آرگومان وارد یک عدد صحیح و یک عدد پایه که باید به توان یان عدد صحیح برسد ونتیجه یم شود عدد پایه که به توآن عدد صحیح رسیده است: Power 2 6 4 Power 1.15 5 2.01136 این مثال از یک ساختار دستوری دیگر به نام آکولاد { } b استفاده می کند.
آکولادها مثل جفت کوتیشن می تواند در اطرف یک کلمه و فضاهای خالی قرار گیرند.
اما آکولاد ها و جفت کوتیشن ها از دو لحاظ با هم تفاوت دارند.
ابتدا اینکه آکولاد ها به صورت لانه ای هستند.
این فرمان از وقتی در خط اول آکولاد باز میشود شروع شده و وقتی در خط وسط بسته می شود پایان می یابد و شامل مطالبی است که در بین این دو آکولاد قرار می گیرند.
مفسر Tel آکولادهایی بیرونی را حذف می کند و هر چیزی را که بین آنها باشد به انضمام چندیدن صفت از آکولادهای تو در تو را به عنوان آرگومان به پروسی جر (Proe) عبور میدهد.
دومیت تفاوت این جفت کوتیشن ها و آکولادها این است که در داخل آکولادها جانشینی اتفاق نمی افتد ولی در داخل جفت کوتیشن ها عملجانشینی انجام می شود.
تمام کاراکترهای بین دو آکولاد کلمه به کلمه و بدون هیچ پردازش خاصی به پروسی انتقال داده می شوند.
فرمان Proe سه آرگومان دارد.
نام پروسی جر، یک لیست از نام آرگومانها که با فضاهای خالی از هم جدا شده اند و بدنه پروسی جر که یک اسکریپت Tel می باشد.
Proe نام پروسی جر با به عنوان یک فرمان جدید وارد مفسر Tel می کند.
هر وقت این فرمان فراخوانی شود بدنه تابع مورد ارزیابی قرار خواهد گرفت.
وقتی که بدنه تابع در حال اجراست دستیابی به آرگومانها بعنوان متغیرها امکان پذیر خواهد بود که Base آرگومان اول و P دومین ارگومان را برای Power نگه می دارند.
بدنه پروسی جر Power سه فرمان را شامل می شود.
.return , while , set فرمان While بیشترین کار پروسی جر را انجام می دد و شالم دو آرگومان می باشد.
یک عبارت مثل “$P>0” و یکی بدنه که یک اسکریپت چند خطی Tel می باشد.
فرمان While این عبارت را مورد ارزیابی قرار می دهد و اگر نتیجه غیر صفر باشد بدنه به عنوان یک اسکرپیت Tel مورد ارزیابی قرار می گیرد.
و این فرایند بارها و بارها تکرار می شود.
تا اینکه این عبارت صفر شود.
در این مثال بدنه نرمان While مقدار نتیجه را در Base ضرب می کند و p را یک واحد کاهش می دهد.
وقتی که p صفر شود نتیجه مقدار موردنظر یعنی Base به توان P می باشد.
فرمان return حذف می شود مقدار برگشتی پروسی جر نتیجه آخرین فرمان در بدنه پروسی جر خواهد شد.
در فرمان Power نتیجه فرمان While مقدار برگشت داده خواهد وبد.
که همیشه یک رشته تهی خواهد بود.
ما از آکولادها در این مثال استفاده کردیم.
مسأله مشکلتر در نوشتن اسکرپیتهای Tel مدیریت جانشینها می باشد.
اینکه وقتی شما می خواهید روی دهند و وقتی که نمی خواهید از رخ دادن آنها جلوگیری کنید.
آکولادها مانع از جانشینی ها می شوند و یا آنها را به تعویق می اندازند.
بدنه پروسی جر باید در درون آکولادها قرار گیرند.
چون ما نمی خواهیم زمانی که بدنه تابع بعنوان یک آرگومان به Proe انتقال می یابد.
جانشینی فرمان ها و متغیرها اتفاق بیفتد.
ما می خواهیم این جانشینی در زمانی دیگر یعنی زمانی که بدنه تابع بعنوان یک اسکرپیت Tel مورد ارزیابی قرار می گیرد اتفاق بیفتد.
بدنه فرمان While نیز به همین دلیل در این آکولادها قرار گرفته است.
بجز اینکه نمی خواهیم جانشینی ها یک بار انجام شود، می خواهیم در زمان تجزیه و تحلیل فرمان while تا زمانی که بدنه آن مورد ارزیابی قرار می گیرد این جانشینی ها با رها و بارها انجام می شود.
آکولادها در مورد آرگومان {$P>0} مربوط به فرمان While نیز مورد نیازند.
بدون این آکولادها مقدار متغیر P در هنگام تحلیل فرمان While جانشین متغیر P خواهد شد و این عبارت یک مقدار ثابت خواهد داشت.
و حلقه while تا ابد ادامه پیدا خواهد کرد.
(شما می توانید بعضی از این آرگومانها را با جفت کوتیشن جایگزین کنید و ببینید چه اتفاق می افتد).
در مثالهای این کتاب در جایی که آکولاد برای یک آرگومان که یک اسکرپیت Tel می باشد باز می شود و ما از یک ساختار دستوری خاص استفاده می کنیم و اسکرپیت را که در خطوط بعدی می آیند به صورت دندانه دار می نویسیم.
1) گرچه من فکر می کنم این کار و آکولاد در انتهای اسکریپت بسته می شود.
خوانایی برنامه را بالا می برد ولی Tel به این ساختار دستوری خاص نیازی ندارد.
این قوانی دستوری آرگومانهای اسکریپتی و هر آرگومان دیگری به یک شکل رفتار می کنند.
درحقیقت مفسر Tel حتی وقتی که یک آرگون را تجزیه و تحلیل می کند نمی داند که این آرگومان یک اسکرپیت حقیقت مفسر Tel حتی وقتی یک آرگومان را تجزیه و تحلیل می کند نمی داند که این آرگومان یک اسکرپیت است.
نتیجه مطلب این است که آکولاد باید در همان خطی که قسمت قبلی فرمان قرار گرتفه است باز شود.
اگر آکولاد باز به یک خط دیگر انتقال یابد خط جدید خود به خود قبل از آکولاد باز به این فرمان خاتمه می دهد.
شما تاکنون تقریباً با تمام ساختار دستوری زبان Tel را دیده اید.
تنها ویژگی دستوری که باقیمانده جانشینی یک اسلش “/” می باشد که به شما اجازه می دهد کاراکترهای خاص مثل دالرساین “$” ار در داخل یک کلمه به کار ببرید.
بدون اینکه لازم باشد آن را درون آکولاد قرار دهید.
توجه داشته باشید که While , proe عناصر نحوی خاصی در Tel نیستند.
این دو فرمان مانند بقیه فرمان های Tel می باشند.
و دارای آرگومانهایی هستند.
تنها مورد خاص در مورد While , proe این است که آنها با بعضی آرگومانهایشان مثل اسکریپتهای Tel رفتار می کنند و باعث می شوند این اسکریپتها مورد ارزیابی قرار گیرند.
خیلی از فرمانهای دیگر نیز ابن کار را انجام می دهند.
فرمان Button مثالی در این مورد بود.
(آرگومان فرمان یک اسکریپت Tel می باشد) و شما در این مورد ساختارهای کنترلی دیگری مثل for case, foreach, Eual را نیز موردمطالعه قرار خواهید داد.
نکته دیگری در مورد پروسی جرها این است که متغیرهای یک پروسی جر به طور طبیعی برای آن پروسی جر محلی اند و در خارج از آن پروسی جر قابل مشاده نیستد.
در مثال Base,P ,Power متغیرهایی محلی آرگومان بودند و همچنین متغیر .Result با هر بار فراخوانی پروسی جر یک مجموعه تاز از متغیرهای محلی ایجاد می شود.
(یک کپی از مقدار آرگومانها انتقال می یابد) و وقتی یک پروسی جر باز می گردد متغیرهای محلی آن حذف می شوند.