IMD 1.18: 15/07/2013 8:41:26 turbo pascal tutor source disk  ÿÿÿ €DÒÿööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööÿÿÿ@`€   À à @`€ Ààÿ! #@%`'€) +À-à/1 3@5`7€9 ;À=à?A C@E`G€I KÀMàOQðÿS@U`W€Y [ðÿ]à_ÿ/c@e`g€i kÀmàoq s@u`w€y {À}àÿ� ƒ@…`‡€ÿ¯‹À�à� ‘ “@ •` ÿ� ™  ›À �à Ÿ ¡ £ðÿ¥` §€ ©  «À ­à ¯ ± ³@ µ` ÿ� ¹  »À ½à ¿ Á Ã@ Å` Ç€ É  ËÀ ÍðÿÏ Ñ Ó@ Õ` ×€ Ù  ÛÀ Ýà ßá ã@å`ç€é ëÀÿöööööööööööööööööööööööööÿÿÿ@`€   À à @`€ Ààÿ! #@%`'€) +À-à/1 3@5`7€9 ;À=à?A C@E`G€I KÀMàOQðÿS@U`W€Y [ðÿ]à_ÿ/c@e`g€i kÀmàoq s@u`w€y {À}àÿ� ƒ@…`‡€ÿ¯‹À�à� ‘ “@ •` ÿ� ™  ›À �à Ÿ ¡ £ðÿ¥` §€ ©  «À ­à ¯ ± ³@ µ` ÿ� ¹  »À ½à ¿ Á Ã@ Å` Ç€ É  ËÀ ÍðÿÏ Ñ Ó@ Õ` ×€ Ù  ÛÀ Ýà ßá ã@å`ç€é ëÀÿöööööööööööööööööööööööööREADME COM9TUTORINSCOM€eTUTORINSDTAR€TUTORINSMSG\€TUTOR PASa€:WINDOW INC€QUIZ INC‰€DISPLAY INC—TSCROLL INC¤€$TUTOR LIB·.README Î>ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööér)��Í«Copyright (C) 1985 BORLAND IncˆT?0No Terminal selectedP.Š' äùtC.ŠPè_XþÌuóøÃ‹ØCKuÃ. &2äÀÀÀP2ÀÔ XHu÷ëåèÈÿr!.‹ÐëØPS»ªèìÿ»¤è±ÿr.‹¼èÀÿ[XÃPS»¶ëéPS»°ëâœPS»ÊèÂÿ[X�ÜPS»ÄëñPS»¾è®ÿ[Xûm릻}ë¡ dPSQRVW¾�¿Ò¹.‹.‰FFGGâô.Š . žÆè#.Š¡. ŸÂè»Òè,ÿ.‹¢è=ÿ_^ZY[XÿÒ2íù.ö�ÿt.ˆÃOO»K2ä.ö·v Àt0.ˆGŠÄ ÛuèÃé•‘[_ë)PQ±ÓèØYX%Ã;Úu;ÁÃÁÚëå&‹E&‹]P ÃXÃ[S‰>Œ‹Á»r3Û$øè¼ÿ‹È‹ÓÇ ŒÄ>èÂÿt%è°ÿs ‰> Œ&Ä=ëéèst +ÁÚ%ë6&Ä=ëTè`‹ÇŒÃè‹ÿ£f‰hQR‹È‹Ó‹ÄŒÓƒëè_ÿ3ÀèhÿZYwé 3À3ÛSP&ÿu&ÿ5‹ÇŒÃèTÿ‹øŽÃ&�&�E&�E&�EÄ6 &‰<&�DÃÄ6&‰<&�DÑ[_ë[S‹Á&‹ &‹U Òu²‘é »r3Û$øèåþ£‰ Ä>‹ÇŒÃèáþsW&‹&‹]èÕþs‹øŽÃëî‹ñŽÂÿ6 ÿ6&‰&‰\&�D&�D&‰ &‰U&‹E&‹]è<t&Ä=&‹E&‹]&‹ &‹Uë&‰‰‹ùŽÂ&‰&‰]‹È‹Ó¡‹ &‰E&‰]£‰ÇŒÃèBþèMþuQ¡f‹hèAþt1‹ñŽÂ&‹&‹\&‹L&‹T&‰&‰]¡‹è þ&‰E&‰]3ÀÉ>fŒhW3Àü¹ó«_3ÀÃ3É3Ò3öÄ>èùýtè&Ä=ëó‹ÄŒÓƒëèÊý3À+hrè‹ÂÃ;ós‹óèÈý‹È‹ÓÃèÀÿ‹ÆÃ[¡f&‰‹h&‰Uÿã[&Ä=‰>f‰>ŒhŒ3ÀÄ>¹üó«ÿã€>p°ÿu2€>qu+²ÿ´蜊à°tþÈ€üu²ÿ´舴 Àt¢q¸ÿˆ&p%ÂLè»ÿtú pÆp Àu  qÆqë€>ru<uéù2äÂXZPR€úÿt´è5€>ruLèwÿt Lè²ÿ<uLèªÿXÃXZP´ë�XZP´ë �´è2ä€ü=t€üt3€ü€tHUüÍ!]ÃVQ‹6V‹Xƒ<t FFâ÷Y^¸ùÃYèÙÿr‰^ÃQV‹6V‹X9uÇFFâô^Y븋6V‹X‹ Ût ´>è¥ÿÇFFâíÃ3À£P¿‰>V‰X3Àüó«°#ºPè5Ær¹ë¹¾¿üó¥3À£p¢\£^£`Æ]~Æ Ã´%è,ÿËÌû$,4ûÌÿÿÁÿÿ‚ÿÿCÿÿÄÿÿÅÿÿÁÿÿÁÏSQRWV2äPÿ^_ZY[ÃSQRWVLÿëîU‹ì‡^.ŠC ÀtèÑÿëó‡^]Ãèåÿ ùüó«_.÷u ŒÈŽÀß+Ø´Jèòý.‹D£R.‹D£T.‹.‹LQVèRþ^Y¿ùù‰><.‹D£>ø Àt Ç8Æ:‰>H.‹D£J Àt ÇDÆFƒÆV¸5è�ý‰lŒn°º èKþ÷Pt°ºÉ è;þ÷PtÆrÇZ© 3À£d¢t‹>¿8è%‹J¿DèÆØô0è3ý Àtú> ëº, ´ èýºT ´ èý´èýNot enough memory$Incorrect DOS version$ Program aborted $P¿8èÕ¿Dèθ%Ålè¼üX÷Pu´Lè­ü´€è¨üÿ6R¸&:PŽTË[.‹ Àt53Ò‹ ÀtSØBëô‹Ë[‹óƒÆ‹;÷t +ÎñùNOýó¤JuãǃÃÿã^.;uƒÆÿæPRV¿t2ÀŠàŠ ÀtGëõW ät€ü:t €ü\tÆ\GFF.ŠˆFG Àuõ¸=ºtèü‹Ø_^ZÆr).‰¸B2íŠÎŠò2ÒèóûYr´?�Tèåûr´>èÝû늲ðVé¨[èRS¾”¿t¹ üó¥ÃLÿÃ[YSŠÐŠñþÊþÎéè÷‹Ð Òtè“[+àL‹üüª‘ó¤ÿã3Ò¿€.Š 2íG3Ûã.Š< t< uGIëï‹÷ã.Š< t< tGIëï‹Ç+ÆtCJuғÈĉ>Æ[�ÈYXSQ»”èòë#ˆÄ‰>Æ[�ÈZX¿Ò��E�ESP‘»”è YÄ>ÆWŠÄ2ö“-”+Èv G&Æ þÆ:òtâó‘»”ŠCG&ˆþÆ:òtâñ_&ˆ5Ã2À밢ʼn>Î[�Ð�Ê�ÌèGS3À»”8t08Åuèðr!Ä>Ê&‰ë¿Òèr‹÷Ä>Êü¥¥¥3À8t“-“Ä>Î&‰ù@빿”X‹ô6Š2ö;Êv‹ÊBF¿”üó¤Æâÿà´,èLú‰Ü‰ÚÃ[ŒÚ‹÷ _üó¤ŽÚÿã[ŒÚ‹÷+á‹üüó¤ŽÚÿã[Y_üóªÿ㑌Ú[_^ü;÷sñùNOýó¤ŽÚÿã[XUPWS‹÷ŽØü­P­‹Ø­‹È­‹Ð­‹è­P­‹ø­P­ŽÀ^XÜWU‹ìÄ~ ü«‹Ã«‹Á«‹Â«X«‹Æ«X«ŒØ«X«X«[ƒÄ]ÿã;Ásò�ëv�;Á|;Âò‘ëh�‹Ä+Ár=r±ÓèŒÑÁ;hròÿëI�[X�S€rLèµøtLèðø€&r<tÃ�bƒbºë#3À†\À>\uÊ\¶ë [X�S²�b¶RèºùZ¡b-‡d Àu RRÿ6dÿZZ€þsè2ú^C User Breakë0ÆØÿw èú I/Oëè ú Run-timeèþù error ŠÂè"úèîù, PC=¡dè úèßù Program aborted °é¿û Ày÷ØÃPè[Ñè™÷ó’ËÜ‹ÚSQŠÇŠûŠÝŠé2ÉÐØÑÛÑÙXÈXظébȸ6؉܉ڋÃà Ày÷ØÆ-C2íº'èºèèºdè ² èŠÈë2ÉþÁ+ÂsúÂþÅþÉuþÍt€Á0ˆCÃ3À€?$º u²CPŠèEùŠÈX€é0r%€ù r€úu€é€ù r€ùsR÷âZr2íÁsÎë €út‹ÈÉÊ€ù-t€ù+uCQè¥ÿYr €ù-u÷ØøÃ=€u€ù-uÃùÃ[‹÷&Š 2íA+á‹üüó¤ÿã^.Š 2íA+á‹üüó¤ÿæZŠÁ‹Ü6Š2íÙC6Ä?‹ô:ÈvŠÈ6ˆAüó¤�gÿâ[‹÷2í+áL‹ü6ˆ Güó¤ÿã[2í‹ô6Š2ä+Á‹þø Àt'y‹ç6Š Aüó¤ë6ˆ ùñAýó¤G‹çÿãèE¸tH ÀÃè9¸uH ÀÃè-¸sH ÀÃè!¸vH ÀÃè¸wH ÀÃè ¸rH ÀËüƒÇ6Š 2íG‹÷ñ6Š2öF‹ÞÚŠÁŠâ;Êv‡Ê Ét üó¦u:àZY‹ãQÿâ�bÿ6b[‹ü6Š2ö‹÷Fò6Š Ñr$6ˆ2í+ù‹çAVüó¤‹þ^NO‹ÊAýó¤G‹çÿã²éõü�bÿ6b[è‹÷Yã5‘ äu0H‹ô6Š2ö‹üú+Ðvð;Ñvñ‹Ñýó¤ë3Ò‡÷6ˆ‹æÿã²é¬ü[‹ü6Š2äàDÿã�b‹ü6Š2öG‹÷ò6Š 2íF‹ÞÙ3À+Ñr@ ÉtBüQWVó¦^_Yt@GJuñ3À‹ãÿ&bˆÞ£à[�ä�æ‰&èŒêSÄ>äWèÍý¸P¡àHè@ÿÄ>èèºýèðþÄ>äè¯ýÿ6à¸ÿè#ÿèÛþŠÞèÊýéWÿ£â[�à�ä�æSÄ>äWè}ý¸P¡àHèðþ¡àâ äuÄ>äè_ýP¸ÿèÖþèŽþ±ÿèýÃ[XþÈu†Äÿã‰b²é§û‹ô6Š\2ÿ6‹@Šà°6‰@Ã[â‹ô6Š:Át2äð‹ü2íù‘Aýó¤G‹çÿã äu Àtòé^û[Z‹÷ƒì ‹üQü ít2ÀªþÍuûŽÚó¤Y´ *å*át2ÀªþÌuûÿã[ƒì ‹ü¹3Àüó«ÿãèï6Ñ[XS*Èr2íAŠáèÛŠÌ6ÐàsC°âôËôFF6‹| 6ŽD"ŠÕ2öò2íüó¤Â$[ŠÕ2ö2í‹ôòñ‹üƒÇ ;÷tNOýó¤G‹çÿã¸ë3Àè•ó§ŽÚt5 ÀÂ@3Àë¸è}Hu‡þ­ ¯uâø¸ë3ÀŽÚ ÀÂ@è_­ «âúŽÚ èQ­÷Ð#«âøŽÚ èA­#«âúŽÚ ‹Ü6‹G" ät3Àë è6"¸t@ ÀÂ"ŠØ2ÿ±ÓëƒÃÜŠÈ€á°ÒàËôƒÆ‹üƒÇ$ŒÚ¹üÃ;øu;Ñu@ ÀÃ;øu;ÑuH ÀÃÇþ€ëÇþ Ét3>þ Àu‹Á‹Þ‹×Ã:Áv‘‡Þ‡×ˆ*È€ù(rŠë߉>þ€&ÿ€‰>06�Ï€€Î€€ùr Šç‹Ú3Ò€éëð€ùr ŠãŠßŠúŠÖ2ö€é Ét ÑêÑÛÐÜþÉuö ö€uåÞ×s^ÑÚÑÛÐÜþÀuTùÆå‡Þ‡×*åÞ×s€6ÿ€öÔ÷Ó÷ҀăӃұ öuŠòŠ×ŠûŠÜ2ä,vþÉuêëöÆ€uÐäÑÓÑÒþÈuñ3À3Û3ÒÀæ26ÿà Éto ÀtqÁè£ì‰î‰ð2ä3Û3Ò¿ò±GŠ- íu ŠãŠßŠúŠÖ2öë¾ÐÝs &íîðÑÚÑÛÐÜNuçþÉuÍ‘ŸöÆ€u žÐÕÑÓÑÒ ÉtþÉ‘26ÿ Àu3À3Û3Òà Àtû*Áõè�¢ì¿ñ±¾;öu ;ôu:&ór *&óôöõÐÕNu ˆ-þÉtO¾ÐäÑÓÑÒsÊ*&óôöøëÙÐäÑÓÑÒr;öu ;ôu:&óõ‹ì‹î‹ðŸöÆ€u žÐÕÑÓÑÒëþÁuùÃéYÿr €r[3À3Û3ÒÀs[ùÉò‹Ê3ÏöՀ倈.ÿ€Î€�Ï€‰6ô‰>öÃWVQèÀýY^_ÃWVQè®ýY^_ÃWVQèŸþY^_ÃWVQèÿY^_ÃR3×ZyRÑÒZÃöÆ€tètõÃ:Áu Àt ;×u;Þu:åà Àu3Û3ÒÊü‹Ð Òy÷Ú¸� öu°ˆ†Ö ÒxþÈÑâyú ÿx€æ3ÛÃ<¨sI‹È‹ó‹ú2ä3Û3Ò€é€v9€ùr Šç‹Úºÿÿ€éëï€ùr ŠãŠßŠúŠÖ¶ÿ€é Ét ùÑÚÑÛÐÜþÉuõ#×#Þ"åÃ2ÀÃRSPè©ÿ‹È‹ó‹úX[Zé×ü[&ÿu&ÿu&ÿ5ÿã[.ÿw.ÿw.ÿ7ƒÃÿã[XYZ_&‰&‰M&‰Uÿã�bY^_X[ZèŸürRSPÿ&b²éiö�bY^_X[Zè|üëã�bY^_X[ZèhýëÔ�bY^_X[Z ÉtèÏýëÁ²é3ö‹Ü6€t6€w€Ã‹Ü6€gÃ�bY^_X[Zè™þÿ6b¸tH ÀÃ�bY^_X[Zèþÿ6b¸uH ÀÃ�bY^_X[Zèeþÿ6b¸sH ÀÃ�bY^_X[ZèKþÿ6b¸vH ÀÃ�bY^_X[Zè1þÿ6b¸wH ÀÃ�bY^_X[Zèþÿ6b¸rH ÀÃ�bX[Z‹È‹ó‹úé ÿ�bX[ZèLþéîþ�bX[Zè�þéáþèýõº€° öÇ€u ÑáÑÓþÊþÈuñ2Ò€çXSQRÿàµÿë2í[XZZS’±�*Êr"€ùwþÁŠü€Ì€Óès ít@x öÇ€t÷ØÃ3Àò’é÷ôè¬ýYRSPÿá�bY^_Xè›ýRSPWVQÿ&b�bX[Z‹È‹ó‹ú ÀtAöÆ€uC£ø‰ú‰ü€Á€Ðù€Á€ŠÁ,¢¡ø‹ú‹üèýèþüþÈRSPè´ú:Y^_sÞWVQÿ&b²éô�bY^_¸�!»¢ÚºIèŒúë�bX[Züèø_YƒÇâÚ¹�3ö3ÿé ÷Sƒúr!‹Áè|ë²öE€tþÂ*Âs2À< r° þÀŠÐŠðRè™ZŠÂþÀ öuÁyÆë < r° è[¾öÅ€t°-èjŠé ötµ íyèYëèKþÍyù Òt°.èIþÅtè@þÊuõþÊxè,ë÷ öuðEè+°+ ÉyöÙ°-è°/þÀ€é sùè€Á:ŠÁë Š ÀtFë°0ˆCË‹]‹U Àu¾Ç00FF�þuô¹ÃŠî€æPR,€˜ºM÷êŠÌZX€ùÙuþÁQöÙè{Y<�sèúþÉQ€Î€±„*Ȱt ÑêÑÛÑØþÉuö¾Šî±Òí€Å0ˆ,€æRSPÑàÑÓÑÒÑàÑÓÑÒYÁYÙYÑÑàÑÓÑÒF�þuÍYÃ2仨€?5ÆrþÈx Kþ€?:rÆëïÆ1ÆGþÁÊ€ù-t€ù+uCQèYr€ù-u €=t€u€øÃ‹ó3À3Û3Ò3ÉÆŠ €ùar€ùzw€é è¥r&è6r2WVQRSPŠÁ2äè¸÷Y^_è&õY^_öÅ@tþë€ù.uöÅ@ùu€Í@F뵋ÞÀùEŠu;èErïFŠ €ù+t€ù-u€Í FèErÙPŠÁFè<r ŠàÐàÐàÄÐàÁFŠÈXöÅ töÙè ‰‰]‰U묀ùÚ|€ù& QVWè_^YÃùÊ €ù0r €ù:õr€é0ÃRSPˆ ÉyöيـãüŠûÐëß2ÿ�¿ü.‹.‹].‹U€átèVþÉuù‹È‹ó‹úX[Zö€ué7õé®õ�Ž@› ¼>¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@ ÀuÀ΀QRSPÑêÑÛÐÜÑêÑÛÐÜYåYÙYÑYs ÑÚÑÛÐÜþÀuùÀæÃ^_ZY[WVöÇ€u€Ï€° *Âr< s ÀtÑëÑÙþÈëô‹Á‹ÓÃ3À3ÒøÿÿºÿÿÃ‹Ú‹È Âtº öÇ€uÑáÑÓþÊëó€çXSQRÿà°¢[èñë_SŒÀŒÚ;Âu�ÿDv5W¾”�} ¹ üó¥_è�s°»ÿÿ&‰€>t &ˆE�EL&‰EÃ&ÇEÃÆ\"Ã2Àë°ë°¢�bÿ6b&ŠE$t&€eßÃ&‰Mè €>\uñ蘀>\uç÷Pt¸D&‹è×å÷€t&ÇE€>s&ÆE€&‹]&‰]&‰] Ãt[¸B&‹3É3Òè£å&‹M�ù€r¹€+ÁƒÚs Át6‹È3À3ÒQ‹Ê‹Ð¸B&‹èwåèZ÷Ú&‹u&€<tFBuöë ¸B&‹¹ÿÿèUå&ÆE@&‹E&‰E&E&‰E Ã�bÿ6b&€}€uï&‹U&+U t ¸B&‹¹ÿÿèå´@&‹3Éèåë¸�bÿ6b&€}@ué!Ã�bÿ6b&ŠE$u&èáÿ&ÆE&‹ƒûvƒûÿt&Çÿÿ´>èÉäsÆ\ÿù »±!QS¾”¹Šèþå.:t [YƒÃâçùÃFCâéYY€<:uó.Š.‹_ÃCONÁÿÿTRMÁÿÿKBD‚ÿÿLSTCÿÿAUXÄÿÿUSRÅÿÿINPOUTERR&ƒ=ÿu-¸=²öt´<3ɲñR�U è8äZr&‰È\<uÆ\óÃ�bÇ8Œÿ&b�b‰>Œ&öE€uÆ\ÿ&b�bÇDŒÿ&b�b‰>Œ&öE@uÆ\ÿ&b°ÿë2À�bÇ8Œ€&:ßWPèX Àtèçä_ÿ&b2öŠ.]€ý~rµ~Æ]~»‰^2ÉèŸä²<t9<t5<tCþÊ<t+<t'<t5<tC< tE< rÕ:ÍtÑŠ'ˆþÁC€ü sˆ'èCë¾þÉx¸èeä KþÊuð묊< r¦è&þÁCþÊuðëš öt–ë öuÆëèNäÇ CC‰`Ê&rÆrPèäXˆ&rÃÄ>€>\uu&ŠE¨ uh$u&‹]&;] rè_&‹]&ŠC&‰]ë?W<u‹^;`r Šðè ÿ‹^ŠC‰^ë<uLÿë<uLÿëLÿ"_&ˆE&€M Ã&ŠEðô?&‹&‹M&‹UèQâs3À&‹] Àu&Æ@&‰]Ø&‰] ÃW»”SèDÿ[<t"&€eß< vîˆC�ûtSè)ÿ[< v&€eßëçÆ»”€?_Ãr€?tÆ\ùÃWèÿþ&€eß_[&ˆÿãøëù[Sœèšÿtè êèÎÿr �s&‰Ã&ˆÃ�Ã[Sè}ÿtW¿è!ù‹÷_è¨ÿrü¥¥¥Ã[S3Û2íWSQè¤þY[< t<t&€eß_C&ˆââë_&ˆÃ[S2íWQèzþYü< t<t &€eß_ªâæÃ_° óªÃè[þ<t&€eß< t< uìèGþ< u&€eßÃÄ>€>\u?&ŠM€áu&‹]&ˆC&‰]&;] t%ÃP€ùt€ùt€ùtÿ ÃÿÃÿÃÿÃ&‹M&+Mt´@&‹&‹U&‰Uè¼àr;ÁtÆ\ðà Àtè!â<v ‘I° QèxÿYâ÷[XSéoÿ‘[XSQ»”è>èXèýá�ë”+Ãv ‘S° QèPÿYâ÷[‹Ë»”ŠSQè@ÿY[CâôÃ’[Y¿��E�ESQ»”è:öë¾[YS¿ & É u¿&è¡èè ÃTRUEFALSEèœá‹ÜCC6*vŠÈ2íS° QèëþYâ÷[6Š2íC Ét 6ŠSQèÕþY[CâóZ‹ãÿâ[.Š2íCã .ŠSQèºþY[Câóÿã° è®þ° é©þº ë º ëºëº�bÿ6b&öE€t RèÄüZ:Ât<t< w öt &€eßëä3À@Ã3ÀÃ2Àé ù2Àë°¢�bÿ6bQè8Y€>\uQè ûY€>\u&‰MÃ�bÿ6b´@&‹3ÉéAßÂ�bÿ6b&ÇEéLú�b‰>Œ&ƒ}uÆ\ÿ&bÇ?™ëÇ@ð[^S€>\uA‹×Ä>Š&&‹&‹MŽÞèàÞr!;Át#€>?u Àt&‹M‹úøŽÆ+È3ÀüóªÃ ¢\Ã3Ò�b_ÿ6b&‹MèÆ‹Ê‹Ð¸B&‹QRè“ÞY[r;Áu;ÓtÆ\‘Ãè®÷ëÉ[S¸D&‹èpÞ À¸u@ ÀÃ[S¸B&‹3É3ÒèUÞ&‹MëO�[Sèæÿé«÷[S¸B&‹3É3Òè5ÞPR¸B&‹3É3Òè&ÞY[PR‹Ó¸B&‹èÞZX&‹MIÁƒÒë´[SèÁÿéf÷ƒùt‹ñ3Û¹!ÑÓs+Þùë+ÞsÞùõÑÐÑÒâéË؋Â÷á“÷áÓÑ[_SéFþ‘[_SéCþÇ?™ëÇ@ð�bZ^_Pè>Y€>\u ;Át ¢\ÿ&bÇ?™ëÇ@ð�b‹Ï[XZ^_SQè _&‰ÿ&b&ƒ}tO&ƒ}tR&÷eZ‘Š&&‹ŽÞèHÝs ¢\3À&‹Mƒùt‹úø3Ò÷ñ Òt€>?u P+ÊŽÆ3ÀüóªX@ÃÆ\Ã�bÿ6b´A�U èúÜsÆ\Ã�bèkâ_ÿ6b´V�U W¿”èÔÜ_rÖ¾”�} ¹ üó¥Ã�bè:âÿ6b¡” Àt(€ü:uèöÝ,Ar«<s§´ŠÐè—Ü€>–t ´;º”èˆÜr�÷9ë·:�bèùáÿ6bŠçëâ�bXÿ6b Àu´è]ÜþÀŠÐ@¢”Ç•:\´G¾—èFÜsƾ”3ÛŠ Àt FC&ˆþÉuñ&ˆûu)ë3Û�bÿ6b÷PuBS¸=�U èÜZr0‹Ø¸B3ÉèúÛr$´?¹ÿÿºu*èêÛ´>èäÛ‹&jè~ÜÇZ© é"²éž÷Æ\!ÃèLÝ:b kšw  ‹ìèß•*é§Revised 10/02/85READMEU‹ìUéèV÷¸ P¸è‘ú¸ P¸è‡ú¸ P¸è}ú¸ P¸èsú¸ P¸èiú¸ P¸è_ú¸ P¸èUú¸ P¸èKú¸ P¸èAú¸ P¸è7ú¸ P¸è-ú¸ P¸è#ú¸ P¸èú¸ P¸èú¸ P¸èú¸ P¸èûù¸ P¸èñù¸ P¸èçù¸ P¸èÝù¸ P¸èÓù¸ P¸èÉù¸ P¸è¿ù¸ P¸èµù¸ P¸è«ù¸ P¸è¡ùèvúèáé‹å]ÃU‹ìUéLL¸PÄ~è›âèWäY‘+È}é.A‰FüQÄ~‹FüøWÄ~‹Füø&Š2äè¼Ö_&ˆYItÿFüéÖÿé‹å]ÂU‹ìUéLè Þué¿(èÄõ�~ýèä÷èˆàéäÿé‹å]ÃU‹ìUéèÃõèÝùènàèºõ¸P¸èõø�~è â¸èqùèQà3Àé¹Üé‹å]ÂQU‹ìUé¡U‹Äÿvþ‹èUéLè{õè}ù. Reading text.è�ùèàè^õèxùè à¿ W¸Z´P¸èßèFõè`ùèñßè=õè?ù Reading line#èFùè×߸£d·‹^þ6ÄUèKù4P¡d·=:¸|HY#ÁPè2Ý4Y#Á Àué\¡d·£d·‹^þ6ÄUèÂô¡d·¹Q÷á—�ǹ±Pè'÷èx÷èwß¡d·¹™÷ù’=téè±ô¸ P¸èì÷¡d·P¸èþ÷èKßéwÿè”ô¸ P¸èÏ÷¡d·P¸èá÷è.ß‹^þ6ÄUè¨ø4uéqèhôè‚øèßè_ôèyøè ßè‰Ü4uéLèLôèNø"-- Sorry, this program only reads ¸:P¸è}÷èø lines of text.è#øè´Þ¹è]Þèþè÷óèøè¢Þé‹å]ùèDÞè�üèÞóèø÷è‰ÞèÕóèï÷è€ÞèÌóèæ÷èwÞèÃóèÅ÷0Borland International: Read a Text File Program.è©÷è:Þè†ó¿˜*èß߸'èG÷è“÷è$ÞèpóèŠ÷èÞègóèi÷ Looking for �~è°ß¸è÷èøÝÄ~UW�~è›ßè³ðèæÝÄ~U¹€èûðèÒÝ=ué%¹WèzÝè�ß -- FILE NOT FOUND±PèÏßè.ý¹ èUÝègý¡d·=|é&¹WèAÝ¿©*è:ßèPß FILE EMPTYèZà±Pè•ßèôüé‹å]ÂUU‹ìUéNU‹Äÿvþ‹èUé U‹Äÿvþÿvü‹èUéLLŠF2ä Àué¹èâÜèûè|ò�~èÕÞ¸è=öèÝé!èfò¸ P¸è¡õ¸ P�~è±Þèmàè�õèùÜé‹å]ÂSU‹Äÿvþÿvü‹èUéLL¿,è9òèAöèÒÜ¿,è,òè�Þ ¸èÛõ¿©*èfÞè|Þ NotesèŠß¸èÁõè öèžÜ‹^þ6ŠGý2äè�Ò=Até-¿,èäñèHÞ ¸è“õèÇõPage ‹FP¸èõèÌõè]Ü¿,è·ñèÞ ¸èfõèFܸP¿©*èêÝèÞ Notesèßè™ßY‘+È}é#A‰FøQ¿,èwñ¸=P¸è ôè ÜYItÿFøéáÿ¿,èYñèaõèòÛ¿,èLñèTõèåÛ‹FP‹FY‘+È}é^A‰FøQèOÙué¹èqÛèû¸‹^ü6ˆGùé_¿,è ñèpÝ ¸è»ô‹Fø¹Q÷á—�ǹè<ݸè¤ôèðôè�ÛYItÿFøé¦ÿ¿,èÑð¸ P¸èúóèÏôè`Û¸ ‹^ü6ˆGùéXéùÿ‹å]ƒì¹_èïÚèÝPrinting . . .±PèIݸPèÌý¸‰Fú‹F;F~é«è�ØPŠFù2ä=¸tHY Á Àué0¹èžÚèCú¹_è•Úè«ÜPrinting . . .±PèïܸPèrý郋F2;Fé!¹è`Ú‹FP‹FP‹FúPè²ý‹F‰Fé$¹è?Ú‹FP‹F2P‹FúPèŽý‹F2‰F‹Fú‰FúéJÿ¹_èÚè%ÜPrinting . . .±PèiܸPèìüé‹å]ÂU‹Äÿvþ‹èUéLL¹èÔÙèø‹FP‹FY‘+È}é|A‰FúQèŒ×uéE¿(è0ï‹^þ 6�ýèLñèðÙ‹^þ6ŠGý2äPèÏÞ¸èÛÞ¸èÕÞè¥ßuéété ¹èrÙèù‹Fú¹Q÷á—èï�ǹè[Û¸èÃòèóè ÙYItÿFúéˆÿ‹F+FP¸-Y‘+È}éA‰FúQèÄîèÞòèoÙYItÿFúéìÿè±îèËòè\Ùè¨îèªòK===========================================================================èsòèÙ‹F=¸tHP‹F;d·¸tHY#Á ÀuéVè,îè.òI exit

print page print all [ END OF TEXT ]è�Øé%‹F=¸HP‹F;d·¸|HY#Á ÀuéXè²íè´ñK exit

print page print all page down page upèØé©‹F=téIèOíèQñ<<ESC> exit

print page print all page downè½×éUèíèñK exit

print page print all  page upèe׸ ‹^þ6ˆGýéXéùÿ‹å]ÂU‹Äÿvþ‹èUéLLÄ~&‹P¸-YÁ;d·~éSÄ~WÄ~&‹P¸-YÁ_&‰Ä~&‹P¸-YÁ‰Fú‹Fú;d·é¡d·‰Fú¹è‘ÖÄ~&‹P‹FúPè›üé‹å]ÂU‹Äÿvþ‹èUéLLÄ~&‹=ékÄ~WÄ~&‹P¸-Y‘+Á_&‰Ä~&‹=|é Ä~¸&‰Ä~&‹P¸-YÁ‰Fú‹Fú;d·é¡d·‰Fú¹èÖÄ~&‹P‹FúPè üé‹å]ÂU‹Äÿvþ‹èUé¸ ‹^þ6ˆGý¸‹^þ6‰Gúé‹å]Ãì¹èºÕèÍÿ¹è±Õèîó‹FúP¸-YÁ;d·|é¹è’Õ‹FúP‹FúP¸-YÁPè•ûé¹ètÕ‹FúP¡d·Pè�ûŠFý2äPè�Ú¸è©Ú¸è£ÚèsÛ4ué4¿(èÆê�~ýèæìèŠÕŠFý2äPèmÚ¸ èyÚ¸ èsÚèCÛué¸ ˆFýŠFý2äèZË=té&¹WèÕè×INTERRUPTED . . .±PèW×è¶ôéP=téè¨Òué¹èÊÔèoô¸ ˆFýé.= té¹è°Ô�~úWè«ýé=té¹è—Ô�~úWèþéü=Pté�‹FúP¸-YÁ;d·|é¹èhÔ‹FúP‹FúP¸-YÁPèB÷é¹èJÔ‹FúP¡d·Pè.÷‹FúP¸-YÁ;d·|é¹è#Ô‹FúP‹FúP¸-YÁPè&úé¹èÔ‹FúP¡d·Pèúég=AtéY¹èéÓ¸P¡d·PèÍö‹FúP¸-YÁ;d·|é¹èÂÓ‹FúP‹FúP¸-YÁPèÅùé¹è¤Ó‹FúP¡d·Pè±ùé¸ ˆFýŠFý2ä=¸tHPèQÑ4Y#Á Àué þé‹å]ÃèlÑ=té¿©*W¸è<ѱ@èÕ¹ èJÓ¿©*Wè“ò¹[è<Ó¿>W¿©*è0Õ±PèœÕè6ó¹ è"Óèöé3ÀèÕÏååée%��Í«Copyright (C) 1984 BORLAND IncüMNo Terminal selectedPÿ.Š' äùt C.Šè þÌuõøÃè* ÃSQRWVPœ2äPÿ©�X^_ZY[Ã<€rè¦ëè†$ëÚU‹ì‡^Pœ.ŠC ÀtèÇÿëó�X‡^]ÃU‹ì‡^Pœ.ŠC ÀtéèÁÿëóCKuÃ. &2äÀÀÀP2ÀÔ XHu÷ëåènÿr!.‹ÐëØSP»ªèìÿ»¤èWÿr.‹¼èÀÿX[ÃSP»¶ëéSP»°ëâSPœ.€>Òt .ÆÒ»Êè´ÿ�X[ÃSPœ.€>Òÿtñ.ÆÒÿ»ÄëãSP»¾è’ÿX[ûmé‰ÿ»}éƒÿSQRWVPœ¾�¿Ó¹.‹.‰FFGGâô.Š . žÆè$.Š¡. ŸÂè»Óè¶þ.‹¢è!ÿ�X^_ZY[ÿÓ2íù.ö�ÿt.ˆÃOO»K2ä.ö·n Àt0.ˆGŠÄ Ûuèà d[YSŠÐŠñþÊþÎépÿ´ èN2ä$´èB÷Ît<uéß!2äÂXZP€úÿs´è!÷ÎtLèÂÿ Àt LèÆÿ<uLè¾ÿÃXZP´éüXZP´éô´èï2䋨éiþé‘[_ë)PQ±ÓèØYX%Ã;Úu;ÁÃÁÚëå&‹E&‹]P ÃXÃ[S‰>FŒH‹Á»r3Û$øè¼ÿ‹È‹ÓÇNBŒPÄ>BèÂÿt%è°ÿs ‰>NŒP&Ä=ëéèst +ÁÚ%ë6&Ä=ëTè`‹ÇŒÃè‹ÿ£Ö‰ØQR‹È‹Ó‹ÄŒÓƒëè_ÿ3ÀèhÿZYwé° 3À3ÛSP&ÿu&ÿ5‹ÇŒÃèTÿ‹øŽÃ&�&�E&�E&�EÄ6N&‰<&�DÃÄ6F&‰<&�DÑ[_ë[S‹Á&‹ &‹U»r3Û$øèîþ£J‰LÄ>B‹ÇŒÃèêþsW&‹&‹]èÞþs‹øŽÃëî‹ñŽÂÿ6Lÿ6J&‰&‰\&�D&�D&‰ &‰U&‹E&‹]è<t&Ä=&‹E&‹]&‹ &‹Uë&‰B‰D‹ùŽÂ&‰&‰]‹È‹Ó¡J‹L&‰E&‰]£R‰TÇŒÃTèKþèVþuQ¡Ö‹ØèJþt1‹ñŽÂ&‹&‹\&‹L&‹T&‰&‰]¡R‹Tè)þ&‰E&‰]3ÀÉ>ÖŒØW3Àü¹ó«_3À Ã3É3Ò3öÄ>Bèþtè&Ä=ëó‹ÄŒÓƒëèÓý3À+Ørè‹ÂÃ;ós‹óèÑý‹È‹ÓÃèÀÿ‹ÆÃ[¡Ö&‰‹Ø&‰Uÿã[&‹£Ö&‹E£Øÿã‰V‰XÓ[‰.;W!tH.ƒ!u‹Ó´èE Àu7‹¡V.‰G!º%Ó´è(‹X‹´'è Àu ‹ƒÃ%ÿãÿ6² é)UÍ!]ÃÇξ¿¥¹%üó¤ÆÐÆÓº–%¸#%èÍÿˤÎÖÞ¤‹SQRWVLÿ§éÖú²ÿëWƉ ÇŠ »è_Ã2ÒŠè©{}ØÇÖ3À‰>D£BÄ>B¹üó«èþèÜùèôù÷ÎtÆÈºç%¸%èëý÷Ît ºW%¸%èÖýú ´ èÊý´èÅýNot enough memory Program aborted $÷Îu´è“ýÿ6ʸã5PŽÌË Ày÷ØÃPè[Ñè™÷ó’Ë‹SQŠÇŠûŠÝŠé2ÉÐØÑÛÑÙXÈXظébȸ6؉‰‹Ãà Ày÷ØÆ-C2íº'èºèèºdè ² èŠÈë2ÉþÁ+ÂsúÂþÅþÉuþÍt€Á0ˆCÃ3À€?$º uºCPŠèþŠÈX€é0r%€ù rƒúu€é€ù r€ùsR÷âZr2íÁsÎë ƒút‹ÈÉÊ€ù-uCQè©ÿYr€ù-u÷ØøÃ[‹÷&Š 2íA+á‹üüó¤ÿã^.Š 2íA+á‹üüó¤ÿæZŠÁ‹Ü6Š2íÙC6‹?CC6ŽCC‹ô:ÈvŠÈ6ˆAüó¤‹ãÿâ[‹÷2í+áL‹ü6ˆ Güó¤ÿã[2í‹ô6Š2ä+Á‹þø Àt'y‹ç6Š Aüó¤ë6ˆ ùñAýó¤G‹çÿãè!éuèé‰èé�èé±è éÅèéÙ‹üƒÇ6Š 2íG‹÷ñ6Š2öF‹ÞÚŠÁŠâ;Êv‡Ê Ét üó¦u:àZY‹ãQÿâ�Ñ‹ü6Š2ö‹÷Fò6Š Ñr&6ˆ2í+ù‹çAVüó¤‹þ^NO‹ÊAýó¤G‹çÿ&Ѳéo�Ñè–ü‹ÈXènH‹ô6Š2ö‹üú+Ðvð;Ñvñ‹Ñýó¤ë3Ò‡÷6ˆ‹æÿ&Ñ[‹ü6Š2äàDÿã�Ñ‹ü6Š2öG‹÷ò6Š 2íF‹ÞÙ3À+Ñr@ ÉtBüQWVó¦^_Yt@GJuñ3À‹ãÿ&ш"£#[�'�)‰&+Œ-SÄ>'Wèøý¸P¡#HèBÿÄ>+èåýèõþÄ>'èÚýÿ6#¸ÿè%ÿèàþŠ"èõýéWÿ£%[�#�'�)SÄ>'Wè¨ý¸P¡#HèòþÄ>'è•ý¡#%P¸ÿèÜþè—þ±ÿè®ýÃ[XþÈu†Äÿã‰Ѳé/‹ô6Š\2ÿ6‹@Šà°6‰@Ã[â‹ô6Š:Át2äð‹ü2íù‘Aýó¤G‹çÿã äu Àtòéæ[Z‹÷ƒì ‹üQü ít2ÀªþÍuûŽÚó¤Y´ *å*át2ÀªþÌuûÿã[ƒì ‹ü¹3Àüó«ÿãèð6Ñ[XS*ÈrþÁŠáèÝŠÌ2í6ÐàsC°âôËôFF6‹| 6ŽD"ŠÕ2öò2íüó¤Â$[ŠÕ2ö2í‹ôòñ‹üƒÇ ;÷tNOýó¤G‹çÿã¸ë3Àè•ó§ŽÚt5 ÀÂ@3Àë¸è}Hu‡þ­ ¯uâø¸ë3ÀŽÚ ÀÂ@è_­ «âúŽÚ èQ­÷Ð#«âøŽÚ èA­#«âúŽÚ ‹Ü6‹G" ät3Àë è6"¸t@ ÀÂ"ŠØ2ÿ±ÓëƒÃÜŠÈ€á°ÒàËôƒÆ‹üƒÇ$ŒÚ¹üÃ;øu;Ñu@ ÀÃ;øu;ÑuH ÀÃÇò€ëÇò Ét3>ò Àu‹Á‹Þ‹×Ã:Áv‘‡Þ‡×ˆö*È€ù(rŠöë߉>ò€&ó€‰>ô06õ�Ï€€Î€€ùr Šç‹Ú3Ò€éëð€ùr ŠãŠßŠúŠÖ2ö€é Ét ÑêÑÛÐÜþÉuö ööõ€uåÞ×s^ÑÚÑÛÐÜþÀuTùÆå‡Þ‡×*åÞ×s€6ó€öÔ÷Ó÷ҀăӃұ öuŠòŠ×ŠûŠÜ2ä,rþÉuêëöÆ€uÐäÑÓÑÒþÈuñ3À3Û3ÒÀæ26óà Étk ÀtmÁè£à‰â‰ä2ä3Û3Ò¿æ±GŠ- íu ŠãŠßŠúŠÖ2öë¾ÐÝs &áâäÑÚÑÛÐÜNuçþÉuÍ‘ŸöÆ€u žÐÕÑÓÑÒþÉ‘26ó Àu3À3Û3Òà Àtû*Áõè�¢à¿å±¾;êu ;èu:&çr *&çèêõÐÕNu ˆ-þÉtO¾ÐäÑÓÑÒsÊ*&çèêøëÙÐäÑÓÑÒr;êu ;èu:&çõ‹à‹â‹äŸöÆ€u žÐÕÑÓÑÒëþÁuùÃéYÿr €v[3À3Û3ÒÀs[ùÉæ‹Ê3ÏöՀ倈.ó€Î€�Ï€‰6è‰>êÃWVQèÄýY^_ÃWVQè²ýY^_ÃWVQè£þY^_ÃWVQèÿY^_ÃR3×ZyRÑÒZÃöÆ€tètõÃ:Áu Àt ;×u;Þu:åà Àu3Û3ÒÊü‹Ð Òy÷Ú öu ¸ˆ†Ö Òë¸�þÈÒyú ÿx€æ3ÛÃ<¨sI‹È‹ó‹ú2ä3Û3Ò€é€v9€ùr Šç‹Úºÿÿ€éëï€ùr ŠãŠßŠúŠÖ¶ÿ€é Ét ùÑÚÑÛÐÜþÉuõ#×#Þ"åÃ2ÀÃRSPè©ÿ‹È‹ó‹úX[ZéÚü[&ÿu&ÿu&ÿ5ÿã[.ÿw.ÿw.ÿ7ƒÃÿã[XYZ_&‰&‰M&‰Uÿã�ÑY^_X[Zè¢ürRSPÿ&Ѳéó�ÑY^_X[Zèüëã�ÑY^_X[ZèkýëÔ�ÑY^_X[Z ÉtèÎýëÁ²é½‹Ü6€t6€w€Ã‹Ü6€gÃ�ÑY^_X[Zè˜þÿ6ѸtH ÀÃ�ÑY^_X[Zè~þÿ6ѸuH ÀÃ�ÑY^_X[Zèdþÿ6ѸsH ÀÃ�ÑY^_X[ZèJþÿ6ѸvH ÀÃ�ÑY^_X[Zè0þÿ6ѸwH ÀÃ�ÑY^_X[Zèþÿ6ѸrH ÀÃ�ÑX[Z‹È‹ó ‹úé ÿ�ÑX[ZèLþéîþ�ÑX[Zè�þéáþ=Úÿ|=%~²éÍ�ыȸ�3Û3Òèðé¿þèöº€° öÇ€u ÑáÑÓþÊþÈuñ2Ò€çXSQRÿàµÿë2í[XZZS’±�*Êr"€ùwþÁŠü€Ì€Óès ít@x öÇ€t÷ØÃ3Àòé_è‰ýYRSPÿá�ÑY^_XèxýRSPWVQÿ&Ñ�ÑX[Z‹È‹ó‹ú ÀtAöÆ€uC£ì‰î‰ð€Á€Ðù€Á€ŠÁ,¢÷¡ì‹î‹ðèüüèÛüþÈRSPè•ú:÷Y^_sÞWVQÿ&Ѳéç�ÑY^_¸�!»¢ÚºIèmúë�ÑX[Zðèò÷_YƒÇâÚ¹�3ö3ÿéîöSƒúr!‹Áèpð²öE€tþÂ*Âs2À< r° þÀŠÐŠðRè™ZŠÂþÀ öuÁyÆøë < r° è[¾øöÅ€t°-èjŠé ötµ íyèYëèKþÍyù Òt°.èIþÅtè@þÊuõþÊxè,ë÷ öuðEè+°+ ÉyöÙ°-è°/þÀ€é sùè€Á:ŠÁë Š ÀtFë°0ˆCË‹]‹U Àu¾øÇ00FF�þuô¹ÃŠî€æPR,€˜ºM÷êŠÌZX€ùÙuþÁQöÙèvY<�sèõþÉQ€Î€±„*Ȱt ÑêÑÛÑØþÉuö¾øŠî±Òí€Å0ˆ,€æRSPÑàÑÓÑÒÑàÑÓÑÒYÁYÙYÑÑàÑÓÑÒF�þuÍYÃ2仸Ø€?5ÆrþÈx Kþ€?:rÆëïÆ1ÆGþÁÊ€ù-uCQèYr€ù-u €=t€u€øÃ‹ó3À3Û3Ò3ÉÆ÷Š €ùar€ùzw€é è¥r&è6r2WVQRSPŠÁ2äèš÷Y^_è õY^_öÅ@tþ÷ë€ù.uöÅ@ùu€Í@F뵋ÞÀùEŠ÷u;èErïFŠ €ù+t€ù-u€Í FèErÙPŠÁFè<r ŠàÐàÐàÄÐàÁFŠÈXöÅ töÙè ‰‰]‰U묀ùÚ|€ù& QVWè_^YÃùÊ €ù0r €ù:õr€é0ÃRSPˆö ÉyöيـãüŠûÐëß2ÿ�¿y.‹.‹].‹U€átèVþÉuù‹È‹ó‹úX[Zöö€uéõé�õ�Ž@› ¼>¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@ ÀuÀ΀QRSPÑêÑÛÐÜÑêÑÛÐÜYåYÙYÑYs ÑÚÑÛÐÜþÀuùÀæðÿ¢ [è� _S€>ÐuA�ÿÇuŒÀŒÛ;ÃuÆРÀ> tè$r &Æ&ˆEÃèì&Æ&ÆEƒÇ ¾€¹%üó¤Ã¹»pQS¾¹Šè°ì.:t [YƒÃâçùÃFCâéYY€<:uó.ŠÃCONTRMKBDLSTAUXUSR°ÿë2À¢!�Ñÿ6Ñè‹€>ÐuO&€}u)èF€>Ðu>&ÇE&Æ€>!t&Æ&ÆEu"éŽ&Æ&€}u&Æ&€}u&Æ&ÆEÃ踀>!t¸Pèœ ÀXt¢ÐÃWƒÇ¹2Àüóª_Ã�Ñÿ6Ñ&€}u<&öt"°è&ŠM Ét2íèK ÀtÆÐ3Éè=ë&öt´èB ÀtÆÐ&ÆÃ�Ñÿ6ÑW¿Çè _Ã�Ñÿ6щ>Œ&öt&€}u &ÆEé8ÆÐÃ�Ñÿ6ÑW¿Çè _Ã�Ñÿ6щ>Œ&öuÆÐÊ.Ó€ý€rµÆÓ»‰Ô±è-ê< t4²<t<tþÊ<t< rå:ÍtáˆþÁCèÜäë×þÉxÑKèøä þÊtÇëîÆÃWÄ>&€}_Ãèïÿtè¦<uÃWÄ>è_ÃSQRW&ŠE<u‹ÔŠ<ttÿÔën<uè¦éP< rèqäë< uèaäXëS<uLÿ§ëH<uLÿ¯ë=<uLÿ³ë2&Š]2ÿ Ûu¹€èË Àt‹Ù&ÆA03Û&ŠA0<t &þEy&ÆEë_&ˆEZY[ÃWÄ>è_Ã&ŠE€>Ðt°Ãè5ÿèàÿ< t < t< t< uè,ÿëè»øèÅÿ< t< t< t<tˆC�ûtèÿëßèèþuèþþÆ»ø€?Ãr€?tÆÐ ùÃ[SèÅþu è|ÿ&ˆéÕþèÒþ&ˆñÿë2É[SQè|ÿYtQè‡ëYèÂÿr Éu&‰ë&ˆÃ[Sè\ÿtW¿Úè|ú‹÷_èžÿr¹üó¥Ã[Sèvþè!ÿ< uèyþëô3Ûèÿ< t<tC&ˆþÉtè_þëèè?þuèUþ&ˆÃÄ>&€}uéåâèáþ< t <t è5þëðèþu è+þ< ué$þ&€}t&ÆEÃWÄ>è_À>ÐubSQRW2äP&ŠE<t<uÿ©ëC<uÿ«ë9<uÿ­ë/<uÿ±ë%X&Š]2ÿ&ˆA0&þEy&ÆE¹€èì ÀtÆÐ_ZY[Ã[ZSèrè<v ‘I° èyÿâù‹Âérÿ‘[XSQ»è¾éXèQè�ë+Ãv‘° èUÿâù‹Ë»ŠèIÿCâøÃ’[X¿Ú ��E�ESP‘»è¡÷ëÅ[YS¿( Éu¿- èêè ÃTRUEFALSEè÷çZ‹Ü6*v ŠÈ2í° èøþâù6Š2íC Ét 6ŠèæþCâ÷‹ãÿâ[.Š2íC Ét .ŠèÎþCâ÷ÿã° èÄþ° é¿þ² ë²�Ñÿ6Ñ&ötèký:Ât<u¸ ÀÃ3ÀÃ2Àé?ú°ÿë2À¢!‰�Ñÿ6ÑèW€>Ðu#3À3Ò€>!u¡&‰E´#è¿ Àu&&‹E,&‹U.&‰E&‰Uèøú€>Ðu &Æ¡&‰EÃÆÐÃ�Ñÿ6Ñ&öuÃé5û[S¹Q‹×´èqÄ>Y´'èd Àt <tÆÐ Ã[S¹Q‹×´èKÄ>Y´(è> ÀtÆÐ &‹E,&‹U.&;Urw&;Ev&‰E&‰UÃ[ÿã´(ë´'PQ�U0´èYX�U èÃWèå_Ã3Ò[_S&;Urw&;Ew &‰E,&‰U.ÃÆÐÃèKëÚ[3À&‹U,&;Uu &‹U.&;Uu@ Àÿã[&‹E,ÿã[S&‹E,&‹U.éL[&‹Eÿã[S&‹E&‹Ué6^_ZY[WVöÇ€u€Ï€° *Âr< s ÀtÑëÑÙþÈëô‹Á‹ÓÃ3À3ÒøÿÿºÿÿÃ‹Ú‹È Âtº öÇ€uÑáÑÓþÊëó€çXSQRÿà‘[_Sé(þ‘[_Sé%þ‘�Ñ_��ÿ6Ñé‹þ‘�Ñ_��ÿ6Ñé›þ�Ñÿ6ÑèÌu´èØþ ÀtÆÐÃ�Ñè˜_ÿ6Ñè«uíèRäWƒÇ¾€¹üó¥_´è¦þ ÀuÎƒÇ ¾€¹%üó¤Ã¸h%ë3À�Ñÿ6Ñ÷ÎudèguâP´èrþ ÀXuQ&ÇE&‰E,&ÇE.W¿¾q&¹üó¥_ºh&´èKþ&‹M&+M,´'è2þ´è-þ¿q&¾¹üó¥éàéEÿÆÐÃ&€}tÆÐÃLÿ¥Ãˆ/‰>0[�2YXSQ»èÛåë#ˆ/‰>0[�2ZX¿Ú��E�ESP‘»èÒóYÄ>0WŠ/2ö“-+Èv G&Æ þÆ:òtâ󑻊CG&ˆþÆ:òtâñ_&ˆ5Ã2Àë°¢4‰>9[�;�5�7è?S»€>4uèßår#Ä>5&‰ë¿Úèåôr‹÷Ä>5¹üó¥3À8t“-ÿÿÄ>9&‰ÃX‹ô6Š2ö‹ÊBƒùv¹F¿üó¤ÆâÿàÃ[ŒÚ‹÷_üó¤ŽÚÿã[ŒÚ‹÷+á‹üüó¤ŽÚÿã[Y_üóªÿ㑌Ú[_^ü;÷sñùNOýó¤ŽÚÿã[WUS¹ &ÿ5GGâù_^]ZY[XÜWVURQSP‹ì‹~ŽF¹ &�GGâù[]_ÿã;ÁsòéÑ;Á|;Âò éËÄ+Ár=r±ÓèŒÑÁ;Ørò é¤[X�Sÿ6ÎÇÎLèÞ ÀtLèÞ�Î<tÃ�ÑèÛè¡Ü^C User breaké�÷ÎuÏûëÜ ÐÆÐ2äÀ>ÐuÃ�ñÿ™ð™ò™ð‘ !"�ÑŠÐ艊»µ%.׊ÐèFÜ I/Oë2[X�S²ë ’�‘ÿð�ÑèZŠÂ»ï%.׊ÐèÜ Run-timeƒ.ÑèÜ error ŠÂèçáÆAÿèïÛ, PC=¡ÑèÌáèàÛ Program aborted éÖâR�&ÎûÿèwàZÃèÏáj#!br@‹ìé‘> TUTORINS.MSG TUTORINS.DTA TUTOR.COMCOMU‹ìUéèH߉Fé‹F‹å]ÂU‹ìUéèl߉Fé‹F‹å]ÂU‹ìUé�~WèÝꆹè<þPèÈÿ¹Óèè”ìèëèÐêé‹å]ÃU‹ìUéé‹å]ÃU‹ìUéP¸PÄ~èãè–äY‘+È}é6A‰FüQÄ~W‹Fü_øWÄ~W‹Fü_ø&Š2äè„Ü_&ˆYItÿFüéÎÿé‹å]ÂU‹ìUéèþ=téèõèÝøèõèÁø*** FATAL ERROR: �~èƒâ¸èuøèµøènáé‹å]ÂQU‹ìUé‹F;F|é ‹F‰Fé‹F‰Fé‹F‹å]ÂU‹ìUé‹F;Fé ‹F‰Fé‹F‰Fé‹F‹å]ÂU‹ìUéÄ~èâè—ã=¸HPÄ~W¸_ø&Š2ä= ¸tHY#Á ÀuéÄ~W¸P¸èäé¶ÿÄ~WÄ~è·áèHã_ø&Š2ä= té(Ä~W¸_øWÄ~W¸_ø&Š2äH_&ˆé¸ÿé‹å]ÂU‹ìUéÄ~WÄ~úW¸ÿÿ_&‰E0Ä~úW¸_&ˆE2XXé‹å]ÂU‹ìUéÄ~W‹FPÄ~úX&;E0uéÄ~ú&ŠE22ä Àué6Ä~úWÄ~ú&‹E0èøèrüÄ~úWÄ~úƒÇ3W¸èUùè\üÄ~úW¸_&ˆE2‹FPÄ~úè¨ø-Y‘;ÁéwŠF2ä Àué$¹Wè°ûèÉàSeek read error±PèáèÞýé6‹FPÄ~úèaøY‘;Áé"¹Wèxûè‘àSeek write error±PèÙàè¥ýÄ~úW‹FèÐ÷èÃûé$Ä~úW‹Fè¿÷è²ûÄ~úWÄ~úƒÇ3W¸èøèœûÄ~úW‹F_&‰E0XXé‹å]ÂU‹ìUéÄ~WÄ~ú&ŠE22ä Àué(Ä~úWÄ~ú&‹E0èb÷èUûÄ~úWÄ~úƒÇ3W¸è8øè?ûÄ~úè öè5ûXXé‹å]ÂU‹ìUéP¹è§úÄ~W‹FP¸Pè[þ¸€PŠF2äY‘+Á‰FüÄ~WÄ~øWŠF2ä_øƒÇ3WÄ~ W¹ èdúP‹FüP‹FPèíüèåù‹Fü;F|éW¹èDúÄ~WÄ~ø&‹E0P¸PèñýÄ~øƒÇ3WÄ~ W‹Fü_øW¹ èúP¸€P‹F+FüPè—üè�ù‹Fü€‰FüéžÿXXé‹å]ÂU‹ìUéP¹èÚùÄ~W‹FP¸PèŽý¹ èÄùP¸€PŠF2äY‘+ÁP‹FPèCü‰FüÄ~WÄ~ WÄ~øWŠF2ä_øƒÇ3W‹FüèùÄ~øW¸_&ˆE2‹Fü;F|ée¹èiùÄ~WÄ~ø&‹E0P¸PèýÄ~ W‹Fü_øWÄ~øƒÇ3W¹ è6ùP¸€P‹F+FüPè¼ûè´øÄ~øW¸_&ˆE2‹Fü€‰Füé�ÿXXé‹å]ÂU‹ìUé�ìÄ~ è9ô4ué¶Ä~ è,ð�¾þþ±ÿèjòèŸò�¾þþèÍÝè^ß=éŒ�¾þþèºݸP¸ P�¾þþèªÝ¸ Pè¶ÞèAßHèñÞ�¾üþW�¾úþèl÷‹†úþ=¸tHP‹†üþ;F¸tHY#Á Àué3Ä~W�¾þþè\ݸ P�¾þþèPݸ Pè\ÞèçÞ@P¸ÿè“Þ±ÿè  hÝéé<ÿé‹å] U‹ìUéÄ~èeó4ué:Ä~èXïÄ~±ÿè—ñèÌñÄ~WÄ~èöܸ PÄ~èëÜè‰Þ@P¸ÿè5Þ±ÿè Ýé‹å]ÂU‹ìUé”U‹Äÿvþ‹èUé‹^þ6‹Gú@‹^þ6‰Gú‹^þ6‹Gú=€téG‹^þ6‹Gü@‹^þ6‰Gü¸‹^þ6‰Gú‹^þ6Ä¿ W‹^þ6‹Güèðó‹^þ6Ä¿ W‹^þ6�¿zÿW¸è¬ô‹^þ6‹Gú—‹^þ6Š�zÿ2äˆFéŠF2ä‹å]Â�쇸ˆ†yÿ¸ÿÿ‰Fü¸‰Fú¸—W¸—ŠC 2ä_ˆƒyþ¸P�¾yþèÜè’ÝY‘+È}é&A‰†wþQ‹†wþ—W¹ èàöLèÿ_ˆƒyþYItÿ†wþéßÿ�¾yþèÇÛ�~ èÀÛèqÜué ¸ˆ†yÿéA�¾yþW¸P¸èÛݸ—W¸—Šƒyþ2ä@_ˆƒyþ�¾yþè�ÛèÝ—W¹ èsöLè§þ_ˆƒyþľ è óPІyÿ2äY Á Àué…ÿІyÿ2䈆Ä~W‹Fü¹€÷éFúP�~ è2ÛèÃÜY‘+Á¹€™÷ù_&‰Ä~W‹FúP�~ è ÛèžÜY‘+Á€¹€™÷ù’_&‰銆2ä À‹å] U‹ìUéƒìŠF2ä¹€™÷ù’=|= ~!= |= ~=|=~ =|=~é*�~éWè¶ÚCtrl-ŠF2äP¸@YÁŠà°Pè–Û±è­Úéª= té�~éWè„Ú±è�Úé�= té�~éWègÚ±èsÚép=té�~éWèJÚ±èUÚéR= té�~éWè,Ú±è5Úé2=té�~éWè Ú±èÚé�~éWŠF2äŠà°P±èÚŠF2ä=é�~éW�~éè¸ÙèÎÙ(+128)è¾Ú±èÕÙ�~W�~éèšÙ±ÿèÄÙ麱ÿ‹å]é1ÜU‹ìUé˜U‹Äÿvþ‹èUé‹^þ6ÄèiÙèúÚ‹^þ6;G}鸈FèÇë¸P¸èÁîè¶ô鸈FéŠF2ä À‹å]ÂU‹Äÿvþ‹èUéyU‹Äÿvþÿvü‹èUé‹^ü6�÷èÙ‹^ü6�õW‹^ü6�óèÏò‹^ü6‹Gó=¸tHP‹^ü6‹Gõ=¸}HY#ÁP‹^ü6‹Gõ=ÿ¸~HY#ÁˆFéŠF2ä À‹å]ƒì �~÷W‹^þ6ŠGý2äŠà°P±èºØèþê‹^þ6ŠGý2äP¸èòíèçó¿»è¸ê‹^þ6�ýè˜ìèÒó�~÷W�~÷èTØ‹^þ6ŠGý2äŠà°PèVÙ±èmØ‹^þ6ŠGý2äPè?Û¸ èKÛ¸ èEÛèÜP�~÷èØè«Ù=¸tHY ÁP¹ èóLèáþ4Y Á Àuéiÿ‹^þ6ŠGý2äPèõÚ¸ èÛ¸ èûÚèÌÛu鸗W¸—ŠC÷2äH_ˆC÷¹ è·òLè—þuém‹^þ6ÄW‹^þ6Äè�׋FõŠà°Pè¥Ø±ÿè¼×‹^þ6ŠGý2ä= ué5èïé‹^þ6ŠGý2äP¸èãì¸ P¸èÙìèÎò¿»èŸé‹^þ6�ýèëè¹òéoè·é¸P¸è±ìè¦ò�~÷è-×è¾ØP¸Y‘+È~é3I‰FõQè‹é¸P¸è…ì¸ P¸è{ì¸P¸èqìèfòYAtÿNõéÑÿ¿»è-é‹^þ6�ýè ëèGò¹ èÌñLèKýP‹^þ6ŠGý2äPèËÙ¸$è×Ù¸0P¸9èÔÙèžÚ4Y Á Àuéûýé‹å]ÃU‹Äÿvþ‹èUé‹^þ6ŠGý2ä= ué‹èíè¹ènñ�ì‹^þ6ŠGý2äPèzû¸èRì¸ P¸èÊëè¿ñ‹^þ6ÄW‹^þ6Äè9Ö‹^þ6ŠGý2äŠà°Pè;×±ÿèRÖ¹ èñLè™üué ¸ ‹^þ6ˆGýé¿»èJè‹^þ6�ýè*êèdñédÿé‹å]ÃLÄ~WèøÕ±ÿèÖ¸ˆF ¿»èè�~ýèúéè4ñŠFý2äèlÏPèÄØ¸-èÐØ¸AP¸ZèÍØè—ÙuéŠFý2äèHψF éBŠFý2äè:ÏPè’Ø¸0P¸9è¡Ø¸$è”ØèeÙué ¹ècðè8üé ¹èWðèÀþèÊçèŒëèÀðéŠF 2ä‹å]ÂU‹ìUé*U‹Äÿvþ‹èUéuU‹Äÿvþÿvü‹èUéEU‹Äÿvþÿvüÿvú‹èUé�U‹Äÿvþÿvüÿvúÿvø‹èUé‹^ú6‹GøH‹^ú6‰Gø‹^ú6‹Gø=t鸋^ú6‰GøèBç¸*P¸è<êè1ð¹ è¶ï�~Wè™ñ¹ è¨ï�~Wè‹ñ�~èœÔ�~è•ÔèdÕˆF.éŠF.2ä À‹å]Â+�ì.‹F‰Fö‹F‰Fô�¾_ÿW‹^ú6ÄW‹FF¹™÷ùH¹•÷á_ø¹•è¥î¹9è:ïL‹^ú6ÄW‹FöH¹•÷á_øè"Ô±è”Ô�¾_ÿèÔ±è‡Ôèÿué ‹Fö@‰Föé»ÿ¹9èõîL�¾_ÿèïÓ±èaÔ‹^ú6ÄW‹FôH¹•÷á_øèÐÓ±èBÔè¼þué ‹FôH‰Fôé»ÿ‹Fö;Fô~é‰�¾ÊþW‹^ú6ÄW‹FöH¹•÷á_ø¹•èíí‹^ú6ÄW‹FöH¹•÷á_øW‹^ú6ÄW‹FôH¹•÷á_ø¹•è¸í‹^ú6ÄW‹FôH¹•÷á_øW�¾Êþ¹•è•í‹Fö@‰Fö‹FôH‰Fô‹Fö;Fôé×þ‹F;Fô|é¹>èî‹FP‹FôPèàý‹F;Föé¹>èêí‹FöP‹FPèÄýé‹å]ÂP¸‰Fø¹>èÉí‹FP‹FPè£ýé‹å]Â�ì�‹^þ6ÄWè€êP¸•¸•Y÷é‰Fö¹ è“íƒìè6︈èëÛèXÚ‹FöèâÛèÛué ¸ˆFéQ¸ˆF�~øW‹FöèÌ‹^þ6ÄW¹•èÈèèÀí¸‰Fô‹^þ6ÄWèáé4ué}‹Fô¹ ™÷ù’=téè—ä¸<P¸è‘çè†í‹^þ6ÄWèSä�¾_ÿèîèèpí‹^þ6ÄWè´é-‹^þ6;Gué(‹Fô‰FôÄ~øW‹FôH¹•÷á_øW�¾_ÿ¹•èìéqÿ¹è°ìÄ~øW¸P‹FôPèvü‹^þ6ÄW¹•èèèí¸P‹FôY‘+È}éXA‰FôQ‹Fô-¹ ™÷ù’=téèÛã¸>P¸èÕæèÊì‹^þ6ÄWèØãÄ~øW‹FôH¹•÷á_øèJèè¦ìYItÿFôé¬ÿ�~øW‹FöèËËéŠF2ä À‹å]Âè‚ã�~èѸè÷æ¸ P¸èoæèd칦èéëLè¯û4uéXèTãèçèJìèKãè÷æ9*** WARNING: Unable to sort Terminal names - Press RETURNèÐæèìèÄâèVåèûëèüâè¾æèòëé‹å]ÂWU‹ìUéõU‹Äÿvþ‹èUéLÄ~W¸_øW¸_&ˆ¿»è�â�~ûètäè®ëŠ  Fû2ä= uéMŠFû2äPè4Ó¸ P¸~èCÓè Ôué`è‡âŠFû2äP¸èåètëÄ~W¸_øWÄ~W¸_ø&Š2ä@_&ˆÄ~WÄ~W¸_ø&Š2ä_øWŠFû2ä_&ˆ龊Fû2ä=¸tHPŠFû2äP¸Y‘;Á¸tHY ÁPÄ~è‡ÏèÑ=¸HY#Á ÀuéLèäá¸P¸èÞä¸ P¸èÔä¸P¸èÊäè¿êÄ~W¸_øWÄ~W¸_ø&Š2äH_&ˆé/ŠFû2ä=¸tHP‹^þ6ŠGý2äY#Á Àué ¸‹^þ6ˆGüé¿»è9á�~ûèãèWêé¦þèUáèåèKêé‹å]ÂU‹Äÿvþ‹èUéè7á‹^þ6�¿4ýèµÎ¸è§ä‹FP¸è7ä¸-P¸èä‹FP¸è#ä‹^þ6�¿ãüè…θèwäèîéé‹å]ÂU‹Äÿvþ‹èUé‹F;F¸}HP‹F;F¸~HY#ÁˆF éŠF 2ä À‹å]ÂU‹Äÿvþ‹èUéPÄ~è$Îè:ÎèÑÎuéÄ~W¸_&ˆé6Ä~W¸_&ˆÄ~èôÍÄ~ W�~úèÆçÄ~W‹Fú=¸tH_&ˆé‹å]ÂU‹Äÿvþ‹èUé¹è´è‹^þ6�¿xþWÄ~Wè{ðé‹å]ÂU‹Äÿvþ‹èUé¹ è‡è‹^þ6�¿AüWè´ÿèðß‹^þ6�¿Aüèn͸è`㸠P¸èØâèÍèé‹å]ÃU‹Äÿvþ‹èUé¹ è?è‹^þ6�¿¤ùWèlÿé‹å]ÃU‹Äÿvþ‹èUé¸P‹FY‘+È}éA‰FQ¹èèè°ÿYItÿFéìÿé‹å]ÂU‹Äÿvþ‹èUéL¹èÛçè?ÿèNß‹^þ6�¿’üèÌ̸è¾â¸ P¸è6âè+è‹^þ6ŠGÀ2ä ÀuéEÄ~&Š2ä—èß‹^þ6ŠAÆ2äP¸è⸠P¸èýá‹^þ6�¿'þèw̸èi⸠P¸èááèÖç¿»è§Þ�~ûè‹àèÅç‹^þ6ŠGÀ2äPŠFû2ä= ¸tHY#Á ÀuéÄ~&Š2ä—‹^þ6ŠAÆ2äˆFûé ŠFû2äèÃňFûŠFû2äPèϸ—‹^þ6ŠAÆ2äèϸ—‹^þ6ŠAÆ2äèÏèÖÏuéyÿèPÞŠFû2äP¸èHáèâè:çÄ~WŠFû2äP¸—‹^þ6ŠAÆ2äY‘;Á¸tH_&ˆé‹å]ÂU‹Äÿvþ‹èUéƒìS¸ˆF©‹^þ6ŠGÀ2ä Àué9Ä~ èãÝ&‹P¸èõภP¸èÓà‹^þ6�¿'þèM˸è?ḠP¸è·àè¬æŠF©2ä4ué'¹ è%æ�~«Wè°ú‹^þ6ŠGü2ä Àuéé¹èæ�~«WÄ~ W�~ªW�~©Wè¸üŠFª2äP‹^þ6ŠGÀ2äY#Á Àué ¸ˆF©éÄŠFª2ä ÀuéHÄ~ W‹F_&‰¹è¬åLÄ~ &‹P‹FP‹FPè)üué ¸ˆF©é¹ è…å‹FP‹FPè­ûépŠF©2ä4ué-èáÜ‹^þ6�¿…ýè_ʸèQà‹^þ6�¿ãüèMʸè?àè¶åé7¹è8åLÄ~ &‹P‹FP‹FPèµû4ué¹ èå‹FP‹FPè@û¸ˆF©éÍþé‹å] U‹Äÿvþ‹èUéPÄ~ &Š2ä‰Fú¹eèÝä�~úW‹FP‹FP‹FPè4þÄ~ W‹Fú_&ˆé‹å] U‹Äÿvþ‹èUéP¸P‹FY‘+È}éA‰FúQèܸ_P¸èßèöäYItÿFúéåÿ¸P‹FY‘+È}éA‰FúQèØÛ¸P¸èÒÞèÇäYItÿFúéåÿé‹å]ÂU‹Äÿvþ‹èUéƒìT‹^þ6ŠGÀ2ä Àué ¸PÄ~èÉè©ÊY‘+È}éDA‰F©QèzÛ¹èûã�ìÄ~W‹F©_ø&Š2äPèÿí¸è×Þ¸ P¸èOÞèDäYItÿF©éÀÿÄ~èÁÈèRÊ=éqè)ÛèÕÞ (èä¸PÄ~èžÈè/ÊY‘+È}é7A‰F©QèÛÄ~W‹F©_ø&Š2äP¸èÞ¸ P¸èâÝè×ãYItÿF©éÍÿèÎÚ¸P¸èÈÝèpÞ) è·ãè¸Ú¸ P¸è²Ý‹^þ6�¿'þè,ȸèÞ¸ P¸è–Ýè‹ã¹èãL�~«W‹FPèîˆF¨�~«èüÇèÈè©ÈP‹^þ6ŠGÀ2äY#Á4uéÄ~W�~«èÕDZÿèÿÇé6ŠF¨2ä=-té)Ä~WèÑDZÿèáÇè%Ú‹^þ6�¿ýúè£Ç¸è•ÝèÕÝè ãé‹å]ÂU‹Äÿvþ‹èUé�줋^þ6ŠGÀ2ä ÀuéÄ~ &Š2ä=té ¸ˆFû鸈Fû¹ èFâ�~ûWèPúŠFû2ä4ué'Ä~ W¸_&ˆÄ~Wè9DZÿèIǹèâè½ùé$‹^þ6ŠGÀ2ä ÀuéÄ~ &Š2ä=té ¸ˆFû鸈Fû¹ èÖá�~ûWèàù¸ˆFú‹^þ6ŠGÀ2ä ÀuéSŠFû2äPÄ~ &Š2ä=¸uHY#Á Àué ¸ˆFúé)ŠFû2ä4PÄ~ &Š2ä=¸tHY#Á Àu鸈FúŠFû2ä ÀuéÄ~ W¸_&ˆé Ä~ W¸_&ˆÄ~ &Š2ä=téQŠFú2ä ÀuéÄ~Wè4ƱÿèDÆèˆØ‹^þ6�¿¬úèƸèøÛ¸ P¸èpÛèeá¹bèêàÄ~W‹FPèŸüéôŠFú2ä ÀuéÄ~WèãűÿèóÅè7Ø‹^þ6�¿[úèµÅ¸è§Û¸ P¸èÛèá‹^þ6ŠGÀ2äPÄ~è‘Åè§ÅèDÆY#Á Àué9Ä~èð×èvŸèhÛ¸ P¸èàÚ‹^þ6�¿'þèZŸèLÛ¸ P¸èÄÚè¹à¹ è>à‹FHPèƒû¹ è0à�¾XÿWèºôè�×è_Ûè“à�¾XÿèÅè/ÅèÌÅP‹^þ6ŠGÀ2ä4Y Á ÀuéÄ~W�¾XÿèïıÿèÅé‹å] U‹Äÿvþ‹èUéƒìÄ~WÄ~ð�Ç€èÂÄèØÄèoÅuéÄ~ðƒÇ6WèÄıèÔÄé#Ä~ð&ŠEF2ä Àué�~øW¸Šà°P±è¯Äé �~øWèŽÄ000¸PÄ~ð&‹…“è·Å±èŒÄÄ~ðƒÇ6WÄ~ð�Ç€èJÄ�~øèCÄèSÅÄ~ð�džè5ÄèEÅ�~øè+Äè;ÅÄ~ð�ÇŒèÄè-űèDÄÄ~ð�Ç€è Äè›ÅP�~øèÿÃè�ÅYÁ‰Fö‹FöPÄ~ð�džèçÃèxÅYÁP�~øèÙÃèjÅYÁ‰FôÄ~ð&Š…’2ä ÀuéÄ~ðW‹Fö_&ˆEGÄ~ðW‹Fô_&ˆEHéÄ~ðW‹Fô_&ˆEGÄ~ðW‹Fö_&ˆEHXXéXXéøÿ‹å]ÂU‹Äÿvþ‹èUéÄ~W¸•¸•P¸èÚÝÄ~WÄ~øW¸_&ˆE}Ä~øW¸  _&ˆE~Ä~øW¸_&ˆEFXXé‹å]ÂU‹Äÿvþ‹èUé‹^þ6�¿xþW‹^þ6� èûÂè¨ÓègÞ‹^þ6�¿xþè:ÔèMÞ=uéH¹WèÕÝèîÂ6File Containing messages for this program is not found±PèÃèÜß¹è�Ý‹^þ6�¿xþW¸eP‹^þ6�¿ýúWèsä¹ èlÝ‹^þ6�¿ðûWè™ô¹ èYÝ‹^þ6�¿NûWè†ô¹ èFÝ‹^þ6�¿'þWèsô¹ è3Ý‹^þ6�¿’üWè`ô¹ è Ý‹^þ6�¿¤ùWèMô¸—W¸—‹^þ6Š�¤ù2äè²»_‹^þ6ˆAƹ èïÜ‹^þ6�¿¤ùWèô¸—W¸—‹^þ6Š�¤ù2äè�»_‹^þ6ˆAƹ è¾Ü‹^þ6�¿[úWèëó¹ è«Ü‹^þ6�¿¬úWèØó¹ è˜Ü‹^þ6�¿…ýWèÅó¹ è…Ü‹^þ6�¿4ýWè²ó¹ èrÜ‹^þ6�¿ãüWèŸóé‹å]ÃU‹Äÿvþ‹èUé‹^þ6�¿(ÿW¹ èBÜ‹^þ6�¿AüWèoó¸‹^þ6ˆG‹^þ6ŠGÂ2ä4uéè‘Ó‹^þ6�¿AüèÁ¸è׸ P¸èyÖènÜ‹^þ6ŠGÀ2ä Àué9Ä~øè\ÓèâÀ¸èÔÖ¸ P¸èLÖ‹^þ6�¿'þèÆÀ¸è¸Ö¸ P¸è0Öè%ܹ èªÛÄ~ø¸HPèìö¹ è™Û‹^þ6�¿ÖýWèð‹^þ6�¿ÖýèƒÀè™Àè6ÁˆF‹^þ6�¿ÖýèmÀèƒÀè ÁP‹^þ6ŠGÀ2äY Á Àué8¸‹^þ6ˆG‹^þ6�¿Öýè<ÀèRÀèïÀuéÄ~øW‹^þ6�¿ÖýèÀ±èIÀééþ¸P‹^þ6�¹èãÂèöÃuéù¸P‹^þ6�¹èÉÂèÜÃué$¹¶èÚÚÄ~øƒÇ}WÄ~øƒÇWÄ~ø¸HPè4øé¸Ä~ø&ŠE}2ä=¸tH‹^þ6ˆG¾¹ è�Ú‹^þ6�¾Wè£ò‹^þ6ŠG¾2ä ÀuéUÄ~øW¸_&ˆE}èéÑ‹^þ6�¿¬úèg¿¸èYÕ¸ P¸èÑÔèÆÚ¹bèKÚÄ~øƒÇWÄ~ø¸HPèùõ¹è2ÚèÞñé(Ä~øW¸_&ˆE}Ä~øƒÇWè/¿±è?¿¹èÚè³ñé ¹ èûÙ¸PèÉñ¸P‹^þ6�¹èÃÁèÖÂuéù¸P‹^þ6�¹è©Áè¼Âué$¹¶èºÙÄ~øƒÇ~WÄ~øƒÇ&WÄ~ø¸HPè÷é¸Ä~ø&ŠE~2ä=¸tH‹^þ6ˆG¾¹ è}Ù‹^þ6�¾Wèƒñ‹^þ6ŠG¾2ä ÀuéUÄ~øW¸_&ˆE~èÉЋ^þ6�¿¬úèG¾¸è9Ô¸ P¸è±Óè¦Ù¹bè+ÙÄ~øƒÇ&WÄ~ø¸HPèÙô¹èÙè¾ðé(Ä~øW¸_&ˆE~Ä~øƒÇ&W辱边èçØè“ðé ¹ èÛØ¸Pè©ð¸P‹^þ6�¹è£Àè¶Áué±¹è´Øèð¹bè«ØÄ~ø�Ç€WÄ~ø¸HPèXôÄ~ø�Ç€è�½è¥½è<¾uém¹ èzظPèHðÄ~ø�džW能±蓽Ä~ø�ÇŒWèq½±è�½Ä~øW¸_&ˆEJÄ~øW¸_&ˆEIÄ~øW¸_&ˆ…’Ä~øW¸_&ˆEFé¹è Øèqï¹bèØÄ~ø�džWÄ~ø¸HPè±ó¹èê×èNï¹bèá×Ä~ø�ÇŒWÄ~ø¸HPèŽó¹ èÇ×Ä~ø�Ç’WèÍï¹èµ×èï¹è¬×Ä~øƒÇJW¸P¸ÿP¸Pèšò¹è�×èóî¹è†×Ä~øƒÇIW¸P¸ÿP¸Pètò¹ èi×Ä~øƒÇFWèpïÄ~ø&ŠEF2ä4ué*¹èH×è¬î¹eè?×Ä~ø�Ç“W¸P¸P¸Pè’ðéÄ~øW¸_&‰…“¹è×è»îé ¹ è׸PèÑî¸P‹^þ6�¹è˾èÞ¿uéÕ¹èÜÖè@î¹bèÓÖÄ~øƒÇMWÄ~ø¸HPè�òÄ~øƒÇMè¹»èÏ»èl¼ué|Ä~øƒÇS裻蹻èP¼‹^þ6ˆGŹ èŒÖ‹^þ6�ÅWè’î‹^þ6ŠGÅ2ä4ué%¹èjÖèÎí¹bèaÖÄ~øƒÇSWÄ~ø¸HPèòéÄ~øƒÇSWè\»±èl»¹è4ÖèàíéÄ~øƒÇSWè?»±èO»¹ èÖ¸Pèåíé ¹ èÖ¸PèÕí¸P‹^þ6�¹èϽèâ¾uéz¹èàÕèDí¹bè×ÕÄ~øƒÇuWÄ~ø¸HPè…ñÄ~øƒÇu轺èÓºèp»ué%¹è¨Õè í¹bèŸÕÄ~øƒÇoWÄ~ø¸HPèMñéÄ~øƒÇoW蚺±誺¹èrÕèíé ¹ èfÕ¸Pè4í¸P‹^þ6�¹è.½èA¾ué%¹è?Õè£ì¹bè6ÕÄ~øƒÇiWÄ~ø¸HPèäðé ¹èÕèÆì¸P‹^þ6�¹èæ¼èù½uéz¹è÷Ôè[ì¹bèîÔÄ~øƒÇ[WÄ~ø¸HPèœðÄ~øƒÇ[èÔ¹èê¹è‡ºué%¹è¿Ôè#ì¹bè¶ÔÄ~øƒÇaWÄ~ø¸HPèdðéÄ~øƒÇaWè±¹±èÁ¹¹è‰Ôè5ìé ¹ è}Ô¸PèKì¸ P‹^þ6�¹èE¼èX½uéO¹èVÔèºë¹èMÔÄ~øƒÇ|W¸P¸P¸Pè;ï¹è0Ôè”ë¹è'ÔÄ~øƒÇ{W¸P¸P¸Pèïé ¹ èÔ¸PèÕë¸P‹^þ6�¹èÏ»èâ¼PÄ~ø�Ç€èâ¸èø¸è•¹Y#Á Àué)¹èÈÓè,ë¹eè¿ÓÄ~øƒÇKW¸P¸'P¸Pèíé ¹èŸÓèKë¸P‹^þ6�¹èk»è~¼PÄ~øƒÇMè¸è•¸è2¹Y#ÁP¸P‹^þ6�¹è@»èS¼PÄ~øƒÇuèT¸èj¸è¹Y#ÁY Á Àué)¹è7Óè›ê¹eè.ÓÄ~øƒÇYW¸P¸'P¸Pè‚ìéÄ~øW¸_&‰EY¹èÓè¬ê¸P‹^þ6�¹è̺èß»PÄ~øƒÇièà·èö·è“¸Y#ÁP¸P‹^þ6�¹衺贻PÄ~øƒÇ[èµ·èË·èh¸Y#ÁY Á Àué)¹è˜Òèüé¹eè�ÒÄ~øƒÇgW¸P¸'P¸PèãëéÄ~øW¸_&‰Eg¹èaÒè êXXéŠF2ä À‹å]ÂU‹Äÿvþ‹èUéP¸P¸Y‘+È}éA‰FúQè ÉèbÍè–ÒYItÿFúéìÿè�É‹^þ6�¿Ÿûè ·¸èýÌè=ÍèqÒèrÉè4ÍèhÒé‹å]ÃU‹Äÿvþ‹èUéoU‹Äÿvþÿvü‹èUé|U‹Äÿvþÿvüÿvú‹èUé‹^ü6‹GîF‹^ü6‰Gî‹^ü6‹Gî‹^ü6;Gìé ¸‹^ü6‰Gîé‹^ü6‹Gî=|é‹^ü6‹Gì‹^ü6‰Gî¹ èkÑèÿ¸‹^ú6ˆGé‹å]ÂL¸ˆF‹^ü6‹Gì=é¾èµÈèwÌè  «Ñè¬È‹^þ6�¿ðûè*¶¸èÌè“Ñ¿»èdÈ�~ùèHÊè‚ÑŠFù2äP蹸è!¹¸è¹¸è¹¸ è¹èà¹uéÆÿŠFù2ä=té¹èÑиPèùþéF=té¹è¹Ð¸ÿÿPèáþé.=té‹^þ6ŠGý2ä4‹^ü6ˆGé= té èÈèÂËèöÐéŠF2ä À‹å]Â�춸ˆF¹ èaÐP¸P¡Z¹™÷ùPèÓ‰Fô¡ZP¸÷nôY‘+Á=é‹Fô@‰Fô¹ è)Ð�~—Wè[縗W¹ èÐP¸P�~—è µèž¶Pè˜Ò_ˆC—¹ èùÏ�¾FÿWè*縗W¹ èåÏP¸P�¾FÿèÛ´èl¶PèfÒ_ˆƒFÿ‹^þ6�Èè›Ì‰Fú‹Fú=é(¸‰Fî‹FúHP¸÷nôY‘™÷ù@‰Fì‹FúH™÷~ì@‰Fø‹FøH¹™÷ù@‰Fò‹Fî;Fìué‹Fî÷nøH‰Fö‹Fø‰Fðé‹FúH‰Fö‹FúP‹FîH÷nøY‘+Á‰Fð‹FðH™÷~ò@‰Fð¸P‹FðHY‘+È}é�A‰FêQ¸P‹FòHY‘+È}éfA‰FèQ‹FîH÷nøP‹Fè÷nðYÁFê‹^þ6‰GË^þ6‹GÃ;Fö~é-èYÆ‹^þ6‹GÃ@P¸èfÉèöÉ) è=Ï‹Fî;Fì¸uHP‹Fö‹^þ6+GÃ=¸}HY Á ÀuéN‹^þ6�ÈW‹^þ6‹GÃè Ëèý΋^þ6�ÈèÊÅ‹^þ6�¿(ÿèaÊèã΋^þ6�¿FúW‹^þ6�¿(ÿè[³±è…³éJ‹Fö‹^þ6+GÃ=té‹^þ6�¿FúW�~—è0³±èZ³é=té‹^þ6�¿FúW�¾Fÿè³±è8³è|Å‹^þ6�¿Fúèú²¸èìÈèc΋FèP‹FòHY‘;Á|é'èSÅèó²¸P‹^þ6�¿FúèɲèZ´Y‘+Áè´Èè+ÎYItÿFèéžþè"ÅèäÈèÎYItÿFêéuþ¹ è“ÍLè¯û4ué þéŠF2ä À‹å]Â�ìZ¸ˆ†¬�~ÈW�~[èd²èÏÈèÐÍ�~ȹ•èËÈè¸Í=ué �~ȹ•è²Èè®Í¹è3Íè︈Fý¸ˆFü�~Èè÷É=¸tHˆFú¸ÿ‰FøŠFú2ä Àué ¹èùÌè¥äé¹ èíÌ�¾ŸûWèä¹ èÞÌè�ú¹¿èÕÌLèåú4ué ¸ˆ†¬é¸ˆFÀŠFú2ä Àu鸉Fù è¢Ì¸PèpäéÜèÄèÐÇè͹è‰Ìèíã¹eè€Ì�~ÃW¸P�~ÈèJÉP¸ÿÿPèÐåŠFü2ä Àué ¸ˆ†¬é¬‹FÃH‰FËFÃP�~ÈèÉY‘;Á¸tHˆFú‹FÃP�~ÈèÿÈ@Y‘;ÁtéV¹èÌèyã¹eè Ì�~ÃW¸P�~ÈèÖÈP¸ÿÿPè_åŠFü2ä Àué ¸ˆ†¬é;‹FÃH‰Fø¸ˆFû¸ˆF¿éñé ¹è¿Ëèk㸈FýŠFú2ä Àué¹ è¤Ë�¾(ÿWè*í¹è•ËèAãé.�~ÈW‹FÃèÈèöË�~ÈèÇÂ�¾(ÿèbÇèä˹ èiË�~ÀWèsãŠFÀ2äPŠFú2äY Á Àué3¹ èFËLèäîˆFû¸ˆFÀ¹ è3Ë�~¿Wè=ã¹è%Ë�¾(ÿWè>ë鸈F¿¸ˆFû¹ è˸PèÕ⸈FÀŠF¿2ä Àué÷¸ P�~¹èÁ²èÔ³P¸ P�~¹诲è³Y Á Àué½Ä~Wè2ÂèôÅè(Ëè)ÂèëÅè˹è¤ÊèâèÂèÙÅè ËèÂèÐÅè˸ P�~¹èb²èu³ué*¹èsÊè×á¹èjÊľ ùƒÇW¸P¸P¸PèWåé ¹èIÊèõḠP�~¹è²è,³ué¹è*ÊèŽá¹ è!Êľ ùƒÇWè'âé ¹è Êè¸áXXé ¹ èþɸPèÌá�~ÈW‹FÃèkÆè^Ê�~ÈèpÁ�¾(ÿèðÅèLÊŠFû2ä Àué¹]èÅÉ�~ÈW�¾Nûè»®±Pè-¯‹FøPèoÙÄ~ƒÇ0Wľ ùƒÇW�¾(ÿWľ ùWľ˜ù芮±贮ľ ùWľ˜ù&ŠE{2ä_&ˆEľ ùWľ˜ù&ŠE|2ä_&ˆEľœùWľ˜ùƒÇèH®±èr®Ä¾œùƒÇWľ˜ùƒÇ&è/®±èY®Ä¾œùƒÇ Wľ˜ùƒÇ6è®±è@®Ä¾œùWľ˜ù&ŠEF2ä_&ˆE0ľœùWľ˜ù&ŠEI2ä_&ˆE1ľœùWľ˜ù&ŠEJ2ä_&ˆE2ľœùWľ˜ù&ŠEG2ä_&ˆE3ľœùWľ˜ù&ŠEH2ä_&ˆE4ľœùWľ˜ù&‹EK_&‰E5ľœùƒÇ7Wľ˜ùƒÇMè{­±襭ľœùƒÇ=Wľ˜ùƒÇSèb­±茭ľœùƒÇCWľ˜ùƒÇoèI­±ès­Ä¾œùƒÇIWľ˜ùƒÇuè0­±èZ­Ä¾œùWľ˜ù&‹EY_&‰EOľœùƒÇQWľ˜ùƒÇiè­±è-­Ä¾œùƒÇWWľ˜ùƒÇ[èꬱè­Ä¾œùƒÇ]Wľ˜ùƒÇaèѬ±èû¬Ä¾œùWľ˜ù&‹Eg_&‰EcXXXXXXŠF¿2ä Àuéjú�~ÈèyÃèÈ銆¬2ä À‹å]©U‹ìUé¿W¿cW¸°èÇé‹å]ÃU‹ìUé¹è]ÇèÒÿ¹èTÇ¿cW‹FP¿ÃWèDÎè¹¾¿Ãè<¬¸è.Âè¥Çé‹å]ÂU‹ìUé¹èÇ¿cW¿ÃWèæÎ胾¿Ã謸èøÁèoÇé‹å]ÃU‹ìUé¹èæÆ‹FPèuÿèU¾èÂèKÇé‹å]ÂU‹ìU鸈F¿[W¸ÍŠà°P¸«Šà°P辬èÁ«Copy賬±PèÊ«¿°W¿œ&è�«èúÁèûÆ¿°W¸€èÉÃèâÆ=ué2¹WèjÆèƒ«File ¿œ&è]«èm¬èp« not foundè\¬±P軫è‡È¹šè8ÆL¿°W¿[è.«±ÿè «¿¬W¿®WèJÎ4uéH¹Wè Æè%«You cannot install ¿œ&èñªè¬è« with this programè諱PèG«èÈ¿W¿~&èÁªèn»è-Æ¿è¼èÆ=ué:¹Wè Å蹪 Message file ¿~&苪蛫螪 not found芫±PèéªèµÇ¡® £®¡¬P¡®¹€™÷ùYÁ£¬¡®¹€™÷ù’£®¹ è=Å¿°WèÆÈéŠF2ä À‹å]ÂU‹ìUéµU‹Äÿvþ‹èUéP¸‰Fú‹FúPÄ~èªè”«Y‘;Á~é‚Ä~W‹Fú_ø&Š2ä=té_Ä~W‹FúP¸è ¬Ä~W¸_øWÄ~W¸_ø&Š2ä@_&ˆÄ~WÄ~èž©è/«_øWÄ~W‹Fú_ø&Š2ä_&ˆ‹Fú@‰Fúégÿé‹å]ÂP¸P¸Y‘+È}éA‰FüQèɻ苿è¿ÄYItÿFüéìÿ¿ÃWèT©  ±Pèd©¸P¸Y‘+È}é^A‰FüQè“»èU¿è‰Ä¹èÄèƒü¹èÄ¿cW‹FüP¿ÃWèõʹèîÿÃW¿ÃWèÃþèW»¿ÃèÚ¨¸è̾èCÄYItÿFüé¦ÿè:»¸ P¸è4¾è)Äé‹å]ÃU‹ìUéL¿»èëº�~ýèϼè ÄŠFý2äèA¢ˆFýŠFý2ä= |éŠFý2äP¸@YÁˆFýŠFý2äŠà°P¿Ãè_¨èý©=ué¬ÿèǺ艾è½ÃŠFý2äŠà°P¿Ãè:¨èØ©‰Fé‹F‹å]ÂU‹ìUé¹ èÃL¿�&許Pè…¨¿~&許Pèy¨è «¸è«¸è«¸è «¸è«¸è«¸èûª¸èõª¸ è視 è骹è(«¿®WèD×ué¹è­Â¿°W¿®W¡¬P¡®P¸­Pè¬Èé‹å]ÃU‹ìUéÿ�ìç¸P¸Y‘+È}éAˆ†þQèܹ螽èÒÂYItþ†þéëÿ¹èL¿cW¸ÊP¸0�è0¹Q÷á—�»þWè.ɸ1P¸5Y‘+È}é5Aˆ†þQ¹è¿cWІþ2ä�è0¹Q÷á—�»þWèÌÉYItþ†þéÐÿ¹èâÁ¸ÈPèèúèQ¹è½èG¸0P¸5Y‘+È}éLAˆ†þQè2¹Š†þ2äP¸è)¼èѼ) Іþ2ä�è0¹Q÷á—�»þè�¦¸è‚¼è¼èöÁYItþ†þé¹ÿèì¸è®¼èâÁ¹ègÁ¸ÉPèöù¿»覸�¾þ艺èÃÁІþ2äPèU©¸0P¸5èd©¸èW©¸QèQ©¸qèK©èªuéÀÿІþ2äPè'©¸0P¸5è6©èªuéu¿®WľþƒÇ0WІþ2ä�è0¹Q÷á—�»þèᥱè ¦Ä¾þWІþ2ä�è0—.Š…²b2ä_&ˆEH¹èµÀ¿°W¿®W¡¬P¡®P¿ø—P¿®—Y‘+Á@Pè©ÆXXé‹å]ÃU‹ìUéP¹ èzÀ¿€WèaøP£Z¿€èh¥¿ZW�~üè:¿‹Fü=¸uHP¡Z=¸tHY Á Àué¸P£Zé‹å]ùè#Àè˜ÿ¹èÀLèIùuéê¹è Àè€ø¹èÀ¿cW¸ P¿\Wèòƹèë¿¿cW¸eP¿…WèÛÆ¹èÔ¿¿°W¿®W¡¬P¡®P¸­PèŹ赿è�ú¹ 謿Pèûû=téV õ2ä=té ¹è�¿èeüé:=té ¹íèy¿èéüé&¹Wèm¿è†¤Unknown Video device±Pèʤè–Áé=té¹ è<¿¿°Wè&Äé ¸ Àuélÿéè£å ADDS 20/25/300PY  KPY ADDS 40/600PY  KMlPYADDS Viewpoint-1A0AY  KPYADM 3A= )(P= Ampex D80= )(TER(=ANSI;1mmP[;HBeehive (DM1, DM10) F000 EHKPFKBeehive (Euro FT-10)F EKLMPF DEC RainbowP[;HHazeltine 1500~~~~~~~P~HP 150 &s1A&jS &s0A&jR &a00c00YJ&d@&dHKLMQ&acYIBM DisplaywriterY L33IPQPY Kay pro +88 4 and 10= /-C1B1REP=Lear-Siegler ADM-20= )(TERP=Lear-Siegler ADM-31= *)(TERP=Liberty= )(TERP= Morrow MDT-20= )(TERP=Northstar Advantage= LMP=Otrona AttacheP[;HQume= )(TERP= RC-855 (ITT)  „€P Soroc IQ-120 (and up= *)(TP=Soroc new models= *)(TERP=SSM-UB300;002J1;17U0UKLMP;Tandberg TDV 2215P Teletex 3000= )(T-ERP=Televideo 912/920/92= )(TERP=Texas Instrument Pro3mP[;H Visual 200Y v34xLMPYWyse WY-100/200/300= )(TERP=Zenith, Victor 900000Cur[, Morrow Y0 EqpKLMPPYKLMååå 1 Turbo Pascal general installation System 2 Choose installation item from the following: 3 4 Screen installation | Quit 5 6 Enter S or Q: 13 -> 101 Nothing ^Q: Quit, ^R: Last page, ^C: Next page, : Select terminal: Wait Sorting Definitions Change to: (Y/N)? y n Text file name: Command: Numeric entry expected Legal range is , please re-enter: Choose one of the following terminals: None of the above ( Max. 20 Characters ) Delete a definition ( Max. 20 Characters ) Which terminal? (Enter no. or ^Q to exit): Delete terminal? (Enter no. or ^Q to exit): Do you want to modify this definition before installation?  Terminal type: Send an initialization string to the terminal? Initializaion defined as a command string? (No = a file) Send a reset string to the terminal Reset defined as a command? (No = a file) CURSOR LEAD-IN command: CURSOR POSITIONING COMMAND to send between line and column: CURSOR POSITIONING COMMAND to send after both line and column: Column first OFFSET to add to LINE: OFFSET to add to COLUMN: Binary address Number of ASCII digits (2 or 3): CLEAR SCREEN command:  Does CLEAR SCREEN also HOME cursor HOME command: DELETE LINE command: INSERT LINE command: ERASE TO END OF LINE command: START HIGHLIGHTING command: END HIGHLIGHTING command: Number of rows (lines) on your screen: Number of columns on your screen: Delay after CURSOR ADDRESS (0-255 ms): Delay after CLEAR, DELETE and INSERT (0-255 ms): Delay after ERASE TO END OF LINE and HIGHLIGHT (0-255 ms): Is this definition correct?  Hardware dependent information Operating frequency of your microprocessor in MHz (for delays): 101 Nothing 200 Choose one of the following displays: 201 Which display? (Enter no. or Q to exit): 202 Default display mode 203 Monochrome display 204 Color display 80x25 205 Color display 40x25 206 b/w display 80x25 207 b/w display 40x25 ååå{$C-,K-,A-} { Turn off Ctrl-C, stack checking, enable absolute code generation } program TurboTutor; { --------------------------------------------------------------------------- TURBO PASCAL TUTOR Version 2.0 Copyright (c) 1986 by Borland International, INC. DESCRIPTION This program is a "shell" that runs example sub-programs for the Turbo Pascal Tutor. To run this program, get to the DOS prompt, type TUTOR and hit . SYSTEM REQUIREMENTS  Turbo Pascal : Version 3.0 Hardware : Any computer that runs MS-DOS Turbo Pascal version 3.0 Operating systems: MS-DOS 2.0 or later Memory : 192K main memory COMPILING THE TUTOR TUTOR.COM comes already compiled on  disk 1 of the Turbo Pascal Tutor. If you wish to re-compile TUTOR.PAS, log onto the the disk drive containing disk 1, load the Turbo Pascal compiler and specify this file as the MAIN program. Type "R" to compile and run the shell. For more information about compiling TUTOR.PAS, please refer to chapter 1 of the Tutor manual. USING THE TUTOR When you load TUTOR, a menu of topics will display. Select a topic to study by using the instructions displayed at the bottom of the main menu screen. You can select, run, and take a quiz on each tutor example. MODIFYING THE EXAMPLES To make modifications to one of the examples, e.g. INTEGERS.EX, do the following: 1) Copy INTEGERS.EX to a new file, INTEGERS.PAS 2) Load Turbo Pascal, type "W" and specify INTEGERS as the work file you wish to modify. 3) Use the Turbo Pascal editor to make your changes to the program's source. Follow the instructions at the bottom of the file in order to modify the example to make it a standalone program; this will enable you to compile and test your changes without modifying the original tutor program. 3) Test your modifications by exiting from the editor and typing "R". PROGRAM OVERVIEW Source code is provided for every part of the tutor program. There more than 20 sample topics selectable via the main menu. TUTOR.PAS Contains the routines that manage all the examples WINDOW.INC Contains the routines that manage the windows QUIZ.INC Contains the routines that present the quiz DISPLAY.INC Contains the routines that manage the display TSCROLL.INC Contains the routines that scroll source text in a window TUTOR.LIB Contains routines used by many of the examples .EX files Each contain an example. The name of each .EX file is stored in the global array (a typed constant), Examples. The source code to the first example, INTEGERS, is stored in a text file called, INTEGERS.EX. The first part of the file name, INTEGERS, is displayed on the main menu. The  name of the procedure is also INTEGERS, and when it is selected on the main menu, the procedure is invoked by procedure RunExample. QUIZ.DTA Contains the quiz questions for each topic. TUTOR.HLP Contains one page of introductory text for TUTOR ----------------------------------------------------------------------------- } const Version = '2.00'; { displayed by LogOn screen } OperatingSystem = 'MS-DOS'; { The name of the operating system } DividingLine = 12; { y coord. of border between upper & lower windows } MaxExamples = 21; { total # of .EX files, menu selections } LastAnswer = 'D'; { Answers A..D } QuizFileName = 'QUIZ.DTA'; type ExampleStr = string[8]; { .EX file name } NameStr = string[14]; { for file names } FileNames = array[1..MaxExamples] of ExampleStr; { list of examples } QuestionStr = string[70]; { sized according to actual data } AnswerStr = string[66]; { " } HintStr = string[72]; { " } QuizRec = record { Each question is represented by this record } TopicNumber : integer; { c orresponds w/ Selection# in Examples } Question : QuestionStr; { the actual question } Choices : array['A'..LastAnswer] of { answer choices } AnswerStr; Solution : char; { A..LastAnswer }  Hint : HintStr; { an optional hint or tip } end; QuizFileType = file of QuizRec; QuizStatusRec = record { Contains relevant quiz file vars } QuizFile : QuizFileType; { file variable } QuizIndex : { 1st rec# for each topic } array[1..MaxExamples] of integer; FileOpened : boolean; { flag } end; var InstallString : string[20] absolute CSeg:$155; { The string that holds the name of the installed terminal } QuizStatus : QuizStatusRec; { contains all relevant quiz vars } {$I TUTOR.LIB } const { WINDOW DEFINITIONS: } LogOnWindow : WindowRec = (X : 1; Y : 1; { Log on screen } Height : 6;  Width : 38; CurrColor : HiColor); UpperWindow : WindowRec = (X : 1; Y : 2; { upper half } Height : 10; Width : 80;  CurrColor : HiColor); LowerWindow : WindowRec = (X : 1; Y : 13; { lower half } Height : 11; Width : 80; CurrColor : HiColor); { Each string in this array serves two functions: 1. It is the title displayed on the examples menu 2. It is the first half of the file name on disk associated with that example. In addition, the example procedure has the same name (although Pascal will not allow a program to pass a string variable in order to invoke an internal procedure). Example: INTEGERS ( as it appears on main menu ) INTEGERS.EX ( disk file containing source  code for this example ) procedure Integers; ( as declared in INTEGERS.EX )  1 : Integers; ( as invoked by procedure RunExample ) } Examples : FileNames = ('INTEGERS', 'CHARS', 'BINARY', 'HEX', 'IFCASE', 'FORDO', 'WHILEDO', 'REPUNTIL', 'REALS', 'SCALARS', 'SETS1', 'SETS2', 'STRINGS1', 'STRINGS2', 'ARRAYS1', 'ARRAYS2', 'RECFILES', 'WRITTEXT', 'READTEXT',  'STACK', 'RECUR'); { =============== MISC UTILITIES ================== } var Selection : integer; ExampleRun : boolean; { A flag to keep track of whether or not a selected example was run yet - used to position the quiz } {$I WINDOW.INC } { include file with window routines } {$I TSCROLL.INC } { include file that lets user scroll  } { through source text in lower window } const ULcorner = '+'; URcorner = '+'; { ASCII box chars } LLcorner = '+'; LRcorner = '+'; AcrossCh = '-'; DownCh = '|'; procedure DrawBox(X1, Y1, X2, Y2 : byte); forward; { Each of the following include files demonstrates a different TUTOR example topic. Each file is a procedure that is invoked b y the control routine, RunExample. Each .EX file may also be run as a stand-alone program--to do so, please make a copy of the .EX file you wish to run (so as not to destroy the original) and load the copy into the Turbo Pascal editor. Edit the file and follow the instructions at the bottom of the file. For more information about modifying an example, please refer to the READ.ME file and chapter 1 of the Tutor manual. } {$I INTEGERS.EX } {$I CHARS.EX } {$I BINARY.EX } {$I HEX.EX } {$I IFCASE.EX } {$I FORDO.EX } {$I WHILEDO.EX } {$I REPUNTIL.EX } {$I REALS.EX } {$I SCALARS.EX } {$I SETS1.EX } {$I SETS2.EX } {$I STRINGS1.EX } {$I STRINGS2.EX } {$I ARRAYS1.EX } {$I ARRAYS2.EX } {$I RECFILES.EX } {$I READTEXT.EX } {$I WRITTEXT.EX } {$I STACK.EX } {$I RECUR.EX } {$I QUIZ.INC } { include file to give the user a quiz } procedure InitProgram(var QuizStat : QuizStatusRec); { At startup, display LogOn screen, clear the screen, draw windows, help lines, etc... }  procedure CheckForInstall; { Checks to make sure that the program has been installed } begin if InstallString = 'No Terminal Selected' then begin Writeln; Writeln('Run TUTORINS to install the TUTOR.'); Halt; end; end; { CheckForInstall } procedure ShowHelp; { Shows information from the file TUTOR.HLP in the upper window } var Err : boolean; begin SetWindow(Upper); FillChar(TextStatus, SizeOf(TextStatus), #0); with TextStatus do begin FileName := 'TUTOR.HLP'; HelpText := true; end; { with } TextWindow(TextStatus, LoadFile, Err); SetWindow(Lower); end; { ShowHelp }  procedure DisplayLogOn; { Display LOGON screen, copyright notice } var TenthsSec : byte; Ch : char; begin SetWindow(LogOn); SetColor(HiColor); with LogOnWindow do begin DrawBox(X, Y, X + Pred(Width), Y + Pred(Height)); SetWindow(LogOn); GotoWinXY(X + 2, Succ(Y)); Show('TURBO PASCAL TUTOR'); GotoWinXY(Pred(Width) - Length(Version), Succ(Y)); Show(Version); GotoWinXY(Pred(Width) - Length(OperatingSystem), Y + 2); Show(OperatingSystem); GotoWinXY(X + 2, Pred(Height)); Show('Copyright (C) 1986 BORLAND Inc.'); TenthsSec := 0; while not KeyPressed and (TenthsSec < 20) do { 2 second delay } begin Delay(100); TenthsSec := Succ(TenthsSec); end; { while } while KeyPressed do { clear keyboard buffer } Ch := GetKey; end; { with } ClrWindow; SetWindow(Full); end; { DisplayLogOn } procedure DisplayDivider; { Draw a border between the upper and lower windows } var I : byte; begin SetColor(HiColor); GotoWinXY(1, DividingLine); Show(ULcorner); for I := 2 to 79 do { draw dividing window bar } Show(AcrossCh); Show(URcorner); GotoWinXY(1, DividingLine); SetColor(HiColor); CenterStr(' Turbo Pascal Tutor '); { paint program title } end; { DisplayDivider } begin { InitProgram } CheckForInstall; { Check to make sure that TUTOR is installed }  SetWindow(Full); { clear screen } ClrScr; DisplayLogOn; { Display LOGON screen, copyright message } DisplayDivider;  FillChar(QuizStat, SizeOf(QuizStatus), #0); ShowHelp; end; { InitProgram } {$I DISPLAY.INC } { include file to handle  displays } procedure RunExample(Sel : integer); { Control routine that "runs" an example in the upper window. This is done simply by invoking the procedure by name. The source code for each procedure is inside one of the INCLUDE files above (with the same name: procedure Integers; is contained in the text file INTEGERS.EX). } begin Interrupted := False; FirstRow := WhereY; { set global variable: first line avail. to example routine } ExampleRun := True; { set flag: place quiz in lower window if requested } case Sel of { perform requested task by invoking the procedure: }  1 : Integers; 2 : Chars; 3 : Binary; 4 : Hex; 5 : IfCase; 6 : ForDo; 7 : WhileDo; 8 : RepUntil; 9 : Reals; 10 : Scalars; 11 : Sets1; 12 : Sets2; 13 : Strings1; 14 : Strings2; 15 : Arrays1; 16 : Arrays2; 17 : RecFiles; 18 : WritText; 19 : ReadText; 20 : Stack; 21 : Recur;  end; { case } end; { RunExample } procedure ManageExample(Sel : integer); { Control routine: let's the user execute an example, scroll through the source code and take a quiz. When a menu entry was selected by GetMenuOption, the upper and lower windows get cleared, the code for the example is read into the text buffer and displayed by procedure TextWindow; the user can run the example (R), take a quiz on the example's topic (^Q), scroll through the source code (using arrow keys) or return to the main menu (ESC). } var Ch : char; Err : boolean; { error flag for TSCROLL module } QuizWindow : WindowList; { which window contains the quiz } begin { ManageExample } Err := False; { set flag: no errors occurred } PrepareWindow(Upper, Examples[Sel]); SetWindow(Lower); ClrWindow; DrawHelpLine(Scrolling); FillChar(TextStatus, SizeOf(TextStatus), #0); TextStatus.FileName := Examples[Sel] + '.EX'; TextWindow(TextStatus, LoadFile, Err); while (Ch <> ESC) do  begin Ch := UpCase(GetKey); case Ch of PgUpKey : TextWindow(TextStatus, PageUp, Err); PgDnKey : TextWindow(TextStatus, PageDown, Err); UpKey, ^W : TextWindow(TextStatus, ScrollUp, Err); DownKey, ^Z : TextWindow(TextStatus, ScrollDown, Err); HomeKey : TextWindow(TextStatus, TopOfFile, Err); EndKey : TextWindow(TextStatus, EndOfFile, Err); ESC : ; 'R': begin { run the example in the upper window } DrawHelpLine(Running); if not ExampleRun then SetWindow(Upper) else PrepareWindow(Upper, Examples[Sel]); RunExample(Sel); DrawHelpLine(Scrolling); SetWindow(Lower); end; ^Q : begin { give the quiz, use upper window unless .EX was run } DrawHelpLine(Quizzing); if ExampleRun then { give quiz in lower window } QuizWindow := Lower else { give quiz in upper window } QuizWindow := Upper; PrepareWindow(QuizWindow, 'Quiz: ' + Examples[Sel]); Quiz(Sel); { quiz on current topic } DrawHelpLine(Scrolling); SetWindow(Lower);   if QuizWindow = Lower then { restore lower window } TextWindow(TextStatus, TopOfFile, Err);  end; end; { case } end; { while } TextWindow(TextStatus, CloseFile, Err); PrepareWindow(Upper, ''); { clear execution window } DrawHelpLine(Empty); SetWindow(Lower); end; { ManageExample } { =================== PROGRAM BODY ==================== } begin InitProgram(QuizStatus); { set up windows, show help } Selection := 0; { init menu control variable } repeat GetMenuOption(MaxExamples, Selection); { call main menu } if Selection <> 0 then { Want to quit? }  begin ManageExample(Selection); { show source code, run example, etc. } ClrWindow; { clear lower window } end; until Selection = 0; ExitProgram; { clean-up } end. ååå{ ------------------------------------------------------------ WINDOW.INC - Include module for TUTOR.PAS Turbo Pascal Tutor 2.0 Copyright (c) 1986 by Borland International, INC. ------------------------------------------------------------ } procedure SetColor(NewColor : ColorList); { Given a color type, set the printing color } begin if NewColor = HiColor then  NormVideo else LowVideo; PrintColor := NewColor; end; { SetColor } const DoBeep = True; DoNotBeep = False; procedure ErrorMsg(Msg : AnyString; MakeBeep : boolean); { Display an error message at the current cursor position }  begin if MakeBeep then Beep; SetColor(HiColor); Show(Msg); end; procedure Error(Msg : AnyString); { Display an error message & wait for ESC to be typed } var Ch : char; begin ErrorMsg(Msg + '. Press ', DoBeep); Ch := GetLegalKey([ESC]); end; function IOerror(Msg : AnyString) : boolean; { Called after an I/O routine. Checks IOresult, if an error occurred, displays an error message. } begin IOerror := False; { no error occurred } if IOresult <> 0 then begin ErrorMsg(Msg, DoBeep); IOerror := True; end; { if } end; { IOerror } procedure ClrWindow; { Clear the active window } begin with ScreenStatus do begin Cleared[CurrWindow] := True; with ActiveWindow do SetColor(CurrColor); end; { with } ClearScreen; end; { ClrWindow } procedure SetWindow(Win : WindowList); { Select a new active window and update the global window status record. } begin with ScreenStatus do begin case Win of Full : ActiveWindow := FullWindow; Upper : ActiveWindow := UpperWindow; Lower : ActiveWindow := LowerWindow; LogOn : ActiveWindow := LogOnWindow; end; { case } with ActiveWindow do begin GotoWinXY(1, 1); SetColor(CurrColor); end; { with } CurrWindow := Win; end; { with } end; { SetWindow } type HelpLines = (Empty, Runni ng, Scrolling, BarMenu, Quizzing); procedure DrawHelpLine(HelpLine : HelpLines); { Draw the help line on the bottom of the screen } procedure WriteHelpKey(Key, Description : AnyString); { Display a and its description. Highlight the }  begin SetColor(HiColor); Show(Key); SetColor(LoColor); Show(Description); end; { WriteHelpKey } var SaveScreen : ScreenRec; begin { DrawHelpLine } SaveScreen := ScreenStatus; SetWindow(Full); if HelpLine = Empty then SetColor(LoColor) else SetColor(HiColor); GotoWinXY(1, MaxRows); ClrEol; Show(' '); case HelpLine of BarMenu  : begin WriteHelpKey('^E', '-'); WriteHelpKey('^X', '-move bar. Select by pressing letter' + ' or '); WriteHelpKey('Return', ' '); WriteHelpKey('^Q', '-quiz '); WriteHelpKey('ESC', '-exit'); end; Scrolling : begin WriteHelpKey('R', '-run program '); WriteHelpKey('^R', '-'); WriteHelpKey('^C', '-page through text '); WriteHelpKey('^Q', '-quiz '); WriteHelpKey('ESC', '-return to main menu'); end; Running : begin Show('Running... '); WriteHelpKey('ESC', '-exit example'); end; Quizzing : begin Show('Select answer by typing correct letter.  '); WriteHelpKey('H', '-hint '); WriteHelpKey('ESC', '-exit quiz'); end; end; { case } ScreenStatus := SaveScreen; SetWindow(Restore); end; { DrawHelpLine } procedure DrawTitle(Title : AnyString); { Draw the title on line 1 of the full window } var SaveScreen : ScreenRec; begin SaveScreen := ScreenStatus; SetWindow(Full); GotoWinXY(1, 1); ClrEol; if Title <> '' then begin SetColor(HiColor); CenterStr(' ' + UpperCase(Title) + ' '); end; { if } SetWindow(Restore); ScreenStatus := SaveScreen; end; { DrawTitle } procedure PrepareWindow(WhichWindow : WindowList; Title : AnyString); { Called just before a "windowed" procedure is executed. Sets up  execution window, paints title, etc... } begin DrawTitle(Title); SetWindow(WhichWindow); ClrWindow; end; { PrepareWindow } { ------------------------------------------------------------ WINDOW.INC - End of Include module for TUTOR.PAS ------------------------------------------------------------ } ååå{ ------------------------------------------------------------ QUIZ.INC - Include module for TUTOR.PAS Turbo Pascal Tutor 2.0 Copyright (c) 1986 by Borland International, INC. ------------------------------------------------------------ This  include module contains the declarations and routines that manage the multiple choice quiz for TUTOR.PAS. The quiz can be given in either window (upper or lower); the questions are read from a binary file, QUIZ.DTA. The first record in QUIZ.DTA (rec# 0) is a dummy record that is an index into the data file (see QuizIndex declaration below). The index is an array of integers--one for each quiz topic. Each element contains the record number of the first quiz question associated with a given topic: QuizIndex rec# of first question --------- ---------------------- 1 1 2 7 ...  ... MaxExamples 96 } procedure Quiz(CurrQuizTopic : integer); { This routine puts up a multiple choice quiz in the current window using the data file QUIZ.DTA. } procedure CleanUpQuiz; { Clean up quiz window before exit } begin DrawTitle(''); ClrWindow; end; { CleanUpQuiz } function OpenQuizFile(var QuizStatus : QuizStatusRec) : boolean; { Open the data file and read the index stored at the beginning of the file. Return true if the operation was successful, otherwise return false. } var Rec : QuizRec; Ch : char; begin { OpenQuizFile } with QuizStatus do begin FillChar(QuizIndex, SizeOf(QuizIndex), 0); { init index to zeros } Assign(QuizFile, QuizFileName); { open the file } {$I-} Reset(QuizStatus.QuizFile); {$I+} FileOpened := IOresult = 0; if FileOpened then begin if not EOF(QuizFile) then { get index from rec# 0 } begin Read(QuizFile, Rec); Move(Rec, QuizIndex, SizeOf(QuizIndex));  end; end else begin Showln(''); Error('Cannot find ' + QuizfileName); end; { else } OpenQuizFile := FileOpened; end; { with } end; { OpenQuizFile } function GetNextQuestion(var F : QuizFileType;  var QuizItem : QuizRec; CurrTopicNumber : integer) : boolean; { Given a topic number, this function reads the quiz file and returns true if the question read belongs to the current topic. } begin FillChar(QuizItem, SizeOf(QuizItem), #0); { init record } if not EOF(F) then begin Read(F, QuizItem); GetNextQuestion := QuizItem.TopicNumber = CurrTopicNumber; { this topic? } end else GetNextQuestion := false; { no more questions } end; { GetNextQuestion } function AskQuestion(QuestionNum : integer; QuizItem : QuizRec; var Response : char) : boolean; { This routine displays and asks the user a quiz question. } var X, Y : byte; MaxAnswer, Ch : char; procedure ShowQuestion(QuizItem : QuizRec); { Display the quiz question } begin with QuizItem do begin SetColor(LoColor); Showln(''); Showln(' ' + IntToString(QuestionNum, 1) + '. ' + Question); Showln(''); MaxAnswer := Pred('A'); for Ch := 'A' to LastAnswer do if Choices[Ch] <> '' then begin Showln(' ' + Ch + ': ' + Choices[Ch]); MaxAnswer := Ch; end else Showln(''); Showln(''); Show(' Solution: '); SetColor(HiColor); Show(' ' + BS); end; { with } end; { ShowQuestion } procedure ShowHint(HintLine : HintStr ); { Show the hint } begin X := WhereX; Y := WhereY; GotoWinXY(2, Succ(WhereY)); SetColor(HiColor); Show('HINT: ' + HintLine); SetColor(LoColor); GotoWinXY(X, Y); end; { ShowHint } begin { AskQuestion } AskQuestion := false; { assume incorrect answer } ShowQuestion(QuizItem); with QuizItem do begin repeat Response := GetLegalKey(['H', 'A'..MaxAnswer, ESC]); if Response = 'H' then ShowHint(Hint); until Response in ['A'..MaxAnswer, ESC];  SetColor(HiColor); if Response = ESC then CleanUpQuiz else begin Show(Response + ' ');  if Solution = Response then begin SetColor(LoColor); Show('Right!'); AskQuestion := true;  end end { else } end; { with } end; { AskQuestion } var Ch : char; QuizR : QuizRec; QuesCount : integer; MoreToAsk : boolean; procedure CheckNoQuestions(QuesCount : integer); begin if QuesCount = 0 then begin Showln(''); Error(' Sorry, no questions for this topic'); CleanUpQuiz; end; end; { CheckNoQuestions } function ReadyForAnother(var Ch : char) : boolean; begin Show(' Ready for another? '); Ch := GetLegalKey(['Y', 'N', ESC]); if Ch <> 'Y' then begin SetColor(LoColor); Show('No'); CleanUpQuiz; end; ReadyForAnother := Ch = 'Y'; end; { ReadyForAnother } procedure InitQuiz; begin SetColor(LoColor); QuesCount := 0; Ch := ESC; { assume error } with QuizStatus do begin if not FileOpened then { first time through? } if not OpenQuizFile(QuizStatus) then { can't find the file } begin CleanUpQuiz; Exit; end; { if } { Use index to get first question this topic } if (QuizIndex[CurrQuizTopic] > 0) and (QuizIndex[CurrQuizTopic] < FileSize(QuizFile)) then Seek(QuizFile, QuizIndex[CurrQuizTopic]) else begin Showln(''); Error('DATA ERROR: Re-copy QUIZ.DTA from your master disk'); CleanUpQuiz; Exit; end; { else } end; { with } Ch := ' '; { no error occurred } end; { InitQuiz } begin { -- Quiz -- } InitQuiz; if Ch = ESC then Exit; { error during init } with QuizStatus do begin MoretoAsk := GetNextQuestion(QuizFile, QuizR, CurrQuizTopic); while MoreToAsk and (Ch <> ESC) do begin QuesCount := Succ(QuesCount); if not AskQuestion(QuesCount, QuizR, Ch) then begin if Ch = ESC then Exit { user typed escape } else { wrong answer } ErrorMsg('The correct answer is ' + QuizR.Solution + '.', DoBeep); end; { if } SetColor(HiColor); MoretoAsk := GetNextQuestion(QuizFile, QuizR, CurrQuizTopic); if MoreToAsk then { more questions? } begin if not ReadyForAnother(Ch) then Exit; { user ready to quit } ClrWindow;  end { if } else begin ErrorMsg(' No more questions. Press ', DoNotBeep); Ch := GetLegalKey([ESC]); CleanUpQuiz; end; end; { while } CheckNoQuestions(QuesCount); end; { with } end; { Quiz } { ------------------------------------------------------------ QUIZ.INC - End of include module for TUTOR.PAS ---- -------------------------------------------------------- } å{ ------------------------------------------------------------ DISPLAY.INC - Include module for TUTOR.PAS Turbo Pascal Tutor 2.0 Copyright (c) 1986 by Borland International, INC. ------------------------------------------------------------ }  procedure DrawBox; { Draw a box on the screen } var I : integer; begin GotoWinXY(X1, Y1); Show(ULcorner); GotoWinXY(X2, Y1); Show(URcorner); for I := Succ(X1) to Pred(X2) do begin GotoWinXY(I, Y1); Show(AcrossCh); GotoWinXY(I, Y2); Show(AcrossCh); end; { for } GotoWinXY(X1, Y2); Show(LLcorner); GotoWinXY(X2, Y2); Show(LRcorner); for I := Succ(Y1) to Pred(Y2) do begin GotoWinXY(X1, I); Show(DownCh); GotoWinXY(X2, I); Show(DownCh); end; { for } end; { DrawBox } procedure GetMenuOption(MaxItems : integer; var Sel : integer); { Paint a menu, select a legal value. Returns selection in sel parameter. ItemList is an array of strings. CurrMenu indicates which menu is being displayed. MaxItems indicates the number of items to display. } const StartRow = 5; NumCols = 4; var StartCol, ItemWidth, NumRows : integer; procedure CalcMenuSize; { Compute the menu's dimensions: Number of rows (NumRows) Width per item (ItemWidth)  Leftmost column (StartCol) } begin NumRows := (MaxItems + Pred (NumCols)) div NumCols; ItemWidth := Pred(SizeOf(ExampleStr)); ItemWidth := (75 - ItemWidth * NumCols) div NumCols + ItemWidth; StartCol := 80 - ItemWidth * NumCols; end; { CalcMenuSize } procedure DisplayItem(Color : ColorList; Sel : integer; Item : AnyString); { Given a string and its selection number, go to correct coordinates and display it. } var LeftChar, RightChar, Ch : char; begin if Color = LoColor then begin LeftChar := ' '; RightChar := ' '; end else begin LeftChar := '<'; RightChar := '>'; end; SetColor(Color); GotoWinXY(Pred(StartCol) + (Pred(Sel) div NumRows) * ItemWidth, StartRow + Pred(Sel) mod NumRows); Item[1] := UpCase(Item[1]); Ch := Chr(Ord('A') + Pred(Sel)); Show(LeftChar + Ch + ': ' + Item + RightChar); end; { DisplayItem } procedure GetSelection(var Sel : integer; HighestSel : integer); { Get selection number from user; allow entry via letters (A,B..) or let the user move the highlighted bar and type to select an entry. } var Ch : char; LastSel : integer; procedure MoveBar(var Ch : char;  var Sel : integer; LastSel : integer); { Given a character, increment the current selection number, move the highlighted bar or allow the user to select an entry. } begin case Ch of ^Q : begin { Quiz }  DrawHelpLine(Quizzing); PrepareWindow(Upper, 'Quiz: ' + Examples[Sel]); Quiz(Sel); { quiz on curren t topic } DrawHelpLine(BarMenu); SetWindow(Lower); end; 'A'..'Z' : begin { allow selection by letter } Sel := 1 + Ord(Ch) - Ord('A'); if Sel > HighestSel then { invalid letter }  begin Sel := LastSel; Ch := NULL; end; end; ESC : Sel := 0; { exit program } CR : ; { they selected an entry } ^A : Sel := 1; { to first entry } ^E : if Sel > 1 then Sel := Pred(Sel) else Sel := HighestSel; ^S : begin if Sel - NumRows > 0 then Sel := Sel - NumRows  else begin if Sel = 1 then Sel := Succ(NumRows); Sel := Pred(Sel + (NumRows * Pred (NumCols))); if Sel > MaxItems then  Sel := Sel - NumRows; end; { else } end; ^D : if Sel + NumRows <= HighestSel then Sel := Sel + NumRows else Sel := Succ(Sel mod NumRows); ^F : Sel := HighestSel; { to last entry } ^X : if Sel < HighestSel then  Sel := Succ(Sel) else Sel := 1; ^C : while (Sel < HighestSel) and { to bottom of column } (Sel mod NumRows <> 0) do Sel := Succ(Sel); ^R : while (Sel > 1) and { to top of column } (Sel mod NumRows <> 1) do Sel := Pred(Sel); else Beep { error: illegal character input } end; { case } end; { MoveBar } procedure BarOff(LastSel, Sel : integer); { Turn the highlighted bar off (if it was on) } begin if (LastSel <> Sel) and (LastSel <> 0) then begin if LastSel > 0 then DisplayItem(LoColor, LastSel, Examples[LastSel]); end; { if } end; { BarOff } begin { GetSelection }  LastSel := 0; ExampleRun := False; if (Sel < 1) or (Sel > MaxItems) then Sel := 1; { out of range } repeat { Get a menu selection: } BarOff(LastSel, Sel); { turn off previous bar } DisplayItem(HiColor, Sel, Examples[Sel]); { display current bar } LastSel := Sel; { remember prev. bar } Ch := UpCase(GetKey); { get a keystroke } MoveBar(Ch, Sel, LastSel); { move the bar or select } until (Sel in [0..HighestSel]) and (Ch in [ESC, CR, 'A'..'Z']); end; { GetSelection } var I : integer; begin { GetMenuOption } CalcMenuSize; { determine menu dimensions } DrawHelpLine(BarMenu); { draw function bar } with ScreenStatus do begin SetColor(LoColor); GotoWinXY(1, 3); CenterStr(' List of Topics '); { title } for I := 1 to MaxItems do { show each topic } DisplayItem(LoColor, I, Examples[I]); Cleared[CurrWindow] := False; { set flag: menu is displayed } end; { with } GetSelection(Sel, MaxItems); end; { GetMenuOption } procedure ExitProgram; { Exit the program, clear the screen } begin SetWindow(Full); GotoWinXY(1, MaxRows); Chan geVideo(VLow); ClrScr; Halt; end; { CloseSystem } { ------------------------------------------------------------ DISPLAY.INC - End of Include module for TUTOR.PAS ------------------------------------------------------------ } { ------------------------------------------------------------ TSCROLL.INC - Include module for TUTOR.PAS Turbo Pascal Tutor 2.0 Copyright (c) 1986 by Borland International, INC. ------------------------------------------------------------  This include module contains the declarations and routines that manage scrolling through the source code for TUTOR.PAS. The source is displayed in the lower window of the TUTOR and the user can page or scroll through the text. It also reads and displays the TUTOR.HLP file when the program is first loaded. } const MaxTextLines = 300; { size of array: max file size in lines } type TextCommands = (LoadFile, CloseFile, TopOfFile, EndOfFile, PageDown, PageUp, ScrollUp, ScrollDown); RowType = string[79]; { LowerWindow: Pred(Width) } TextArray = array[1..MaxTextLines] of RowType; TextRec = record FileName : NameStr; TextF : text; TextLines : TextArray; Margin, LastLineRead, TopLine, BottomLine, TotalRows : integer; Found, HelpText : boolean; end; var TextStatus : TextRec; procedure TextWindow(var TextStatus : TextRec; Command : TextCommands;  var Err : boolean); { Main routine that manages scrolling through the text: TextStatus - the text file info (which file name, line, etc.) Command - the command to execute in the lower window Err - flag returned by this procedure: true = error occurred } procedure OpenFile(var TextStatus : TextRec); { Opens the text file to be displayed } procedure LoadArray(var TextStatus : TextRec); { Does the actual read of the text file into the array of strings } var Ch : char; I, LongestLine : integer; Stop : boolean; S : RowType; procedure CheckForSpecialComment(var s : RowType); { We placed special comments in the .EX files. This routine checks a line to see whether it contains our special comment marker, (**. If it finds one, if then looks for its corresponding end marker, **). } var FoundEndMarker : boolean; begin { Find a special comment? Skip lines until we find its end marker } if Pos('(**', s) = 1 then begin FoundEndMarker := false; repeat Readln(TextStatus.TextF, s); FoundEndMarker := (Pos('**)', s) > 0) or FoundEndMarker; until EOF(TextStatus.TextF) or ((Pos('**)', s) = 0) and FoundEndMarker and (s <> '')); if Pos('**)', s) > 0 then s := ''; end; { if } end; { CheckForSpecialComment } begin { LoadArray } LongestLine := 0; with TextStatus do begin Showln(' Loading text:'); LastLineRead := 0; Stop := EOF(TextF); while not Stop and { end of file } (LastLineRead < Pred(MaxTextLines)) do { buffer full } begin LastLineRead := Succ(LastLineRead); { increment line counter }   Readln(TextF, TextLines[LastLineRead]); CheckForSpecialComment(TextLines[LastLineRead]); if Length(TextLines[LastLineRead]) > LongestLine then LongestLine := Length(TextLines[LastLineRead]); if LastLineRead mod 16 = 0 then Show(CR + IntToString(LastLineRead, 6)); Stop := EOF(TextF); end; { while } Show(CR + IntToString(LastLineRead, 6)); Showln(''); Showln(''); if not EOF(TextF) then Error('Text buffer full'); case LongestLine of 1..78 : Margin := 78 - LongestLine; { 78 = rowtype - 2 } else Margin := 0; end; { case }  if Margin > 4 then Margin := 4; { Trim trailing blank lines } while (LastLineRead > 1) and (TextLines[LastLineRead] = '') do LastLineRead := Pred(LastLineRead); if not HelpText then begin { Add extra last line to indicate end of file on screen } LastLineRead := Succ(LastLineRead); FillChar(TextLines[LastLineRead][1], Pred(SizeOf(RowType)), #32); TextLines[LastLineRead][0] := Chr(LongestLine); S := '[ end of source ]'; I := (LongestLine - Length(S)) DIV 2; Move(S[1], TextLines[LastLineRead][I], Length(S)); { center it } end; end; { with } end; { LoadArray } procedure Init(var TextS : TextRec); { Initializes the text status record when a new file is read in } begin { Init } with TextS do begin TotalRows := ScreenStatus.ActiveWindow.Height; TopLine := 1; with TextStatus do  if TotalRows > LastLineRead then BottomLine := LastLineRead else BottomLine := TotalRows; end; { with } Showln(''); end; { Init } var Ch : char; begin { OpenFile } Init(TextStatus); { init vars } with TextStatus do begin  Assign(TextF, FileName); { open the new file } {$I-} Reset(TextF); {$I+} Err := IOresult <> 0; if Err then begin Found := False; { File was not found } Exit; end; Found := True; { File was found } LoadArray(TextStatus); end; { with } end; { OpenFile } procedure DisplayPage(var TextStatus : TextRec); { Display a page of text } var Counter, Row : integer; begin with TextStatus do begin if not Found then { Will only display a file that was read in } Exit; GotoWinXY(1, 1); for Row := TopLine to Pred(TopLine + TotalRows) do begin for Counter := 1 to Margin do Show(' '); if Row <= BottomLine then Show(TextLines[Row]); ClrEol; if Row < Pred(TopLine + TotalRows) then Showln(''); end; end; { with } end; { DisplayPage } procedure BeginFile(var TextStatus : TextRec); { Display the first page of the file } begin with TextStatus do begin if not Found then { special case: instead of text, give msg } begin if not HelpText then { not showing message if trying to display help } begin GotoWinXY(1, 3); ErrorMsg('Cannot find ' + FileName, DoNotBeep) end;  end else begin TopLine := 1; if (Pred(TopLine + TotalRows)) > LastLineRead then { set BottomLine }  BottomLine := LastLineRead else BottomLine := Pred(TopLine + TotalRows); DisplayPage(TextStatus);   end; end; { with } end; { BeginFile } procedure EndFile(var TextStatus : TextRec); { Display the last page of the file } begin with TextStatus do begin BottomLine := TextStatus.LastLineRead; if (Succ(BottomLine - TotalRows)) > 1 then TopLine := (Succ(BottomLine - TotalRows)) else TopLine := 1; DisplayPage(TextStatus); end; { with } end; { EndFile } procedure DownPage(var TextStatus : TextRec); { Display the next page down } begin with TextStatus do if BottomLine < LastLineRead then begin if (Pred(BottomLine + TotalRows)) > LastLineRead then BottomLine := LastLineRead else BottomLine := Pred(BottomLine + TotalRows); if (Succ(BottomLine - TotalRows)) > 1 then TopLine := (Succ(BottomLine - TotalRows)) else TopLine := 1; DisplayPage(TextStatus); end; end; { Downpage } procedure UpPage(var TextStatus : TextRec); { Display the previous page } begin with TextStatus do if TopLine > 1 then begin if (Succ(TopLine - TotalRows)) > 1 then { set TopLine } TopLine := Succ(TopLine - TotalRows) else TopLine := 1; if (Pred(TopLine + TotalRows)) > LastLineRead then { set BottomLine } BottomLine := LastLineRead else BottomLine := Pred(TopLine + TotalRows); DisplayPage(TextStatus); end; end; { UpPage } procedure UpLine(var TextStatus : TextRec); { Scroll up one line } begin with TextStatus do begin if TopLine > 1 then begin TopLine := Pred(TopLine); BottomLine := Pred(BottomLine); DisplayPage(TextStatus); end; { if } end; { with } end; { UpLine } procedure DownLine(var TextStatus : TextRec); { Scroll down one line } begin with TextStatus do begin if BottomLine < TextStatus.LastLineRead then begin TopLine := Succ(TopLine); BottomLine := Succ(BottomLine); DisplayPage(TextStatus); end; { if } end; { with } end; { DownLine } begin { TextWindow } case Command of LoadFile : begin OpenFile(TextStatus); { read from disk } BeginFile(TextStatus); { top of file } end; TopOfFile  : BeginFile(TextStatus); { top of file } PageDown : DownPage(TextStatus); { down 1 page } PageUp : UpPage(TextStatus); { up 1 page } ScrollUp : UpLine(TextStatus); { up 1 line } ScrollDown : DownLine(TextStatus); { down 1 line } EndOfFile : EndFile(TextStatus); { end of file } CloseFile : Close(TextStatus.TextF); { close disk file } end; { case } end; { TextWindow } { ------------------------------------------------------------ TSCROLL.INC - End of Include module for TUTOR.PAS ------------------------------------------------------------ } ååå { ------------------------------------------------------------ TUTOR.LIB - Include module for TUTOR.PAS Turbo Pascal Tutor 2.0 Copyright (c) 1986 by Borland International, INC. ------------------------------------------------------------ This include module contains declarations and routines that are used by many of the example routines (contained in .EX files). } type DummyType = char; { Used at the top of each .EX file to generate a compiler error so we can explain how to compile the .EX files separately. Look in one of the .EX files for more information. } AnyString = string[80]; { Generic string type } VideoType = (VLow, VNorm); CharSet = set of char; ColorList = (HiColor, LoColor); WindowList = (Full, Upper, Lower, LogOn, Restore); ClearedStatus = array[WindowList] of boolean; WindowRec = record X, Y, Height, Width : byte; CurrColor : ColorList; end; ScreenRec = record { record used to manage screen } CurrWindow : WindowList; ActiveWindow : WindowRec; Cleared : ClearedStatus; end; const ON = True; OFF = False; MaxRows = 25; { Maximum rows per screen } FullWindow : WindowRec = (X : 1; Y : 1; { full screen } Height : MaxRows;  Width : 80; CurrColor : LoColor); { Define some important keystrokes: } NULL  = #0; Bell = #7; BS = #8; LF = #10; CR = #13; ESC  = #27; HomeKey = ^A; EndKey = ^F; { cursor control keys } UpKey = ^E; DownKey = ^X; PgUpKey = ^R; PgDnKey = ^C; LeftKey = ^S; InsKey = ^V; RightKey = ^D;  DelKey = ^G; IntChar = #27; var Interrupted : boolean; FirstRow : integer; PrintColor : ColorList; { The current printing color } WhereX, WhereY : byte; { The current cursor location } ScreenStatus : ScreenRec; procedure GotoWinXY(Col, Row : byte); { Moves to a selected location within the current window } begin with ScreenStatus.ActiveWindow do begin GotoXY(Pred(X + Col), Pred(Y + Row)); WhereX := Col; WhereY := Row; end; { with } end; { GotoWinXY } procedure Show(S : AnyString); { Prints text in PrintColor at the current cursor position } var Counter : byte; begin for Counter := 1 to Length(S) do begin case S[Counter] of { Modify WhereX and WhereY for special chars } BS : WhereX := Pred(WhereX); CR : WhereX := 1; LF : WhereY := Succ(WhereY) else begin WhereY := WhereY + (WhereX div 80); WhereX := Succ(WhereX mod 80); end; end; { case } Write(S[Counter]); { Print the character } end; end; { Show } procedure Showln(S : AnyString); { Prints text + a carriage return/line feed at the current cursor position } begin Show(S + CR + LF); end; { Showln } procedure ClearScreen; { Clears the screen within the act ive window } var S : string[80]; Counter : byte; begin with ScreenStatus.ActiveWindow do begin FillChar(S[1], Width, ' '); { Prepare a blank string to fill each line } S[0] := Chr(Width); { Set the length byte of the string } for Counter := Y to Pred(Y + Height) do begin GotoXY(X, Counter); if Counter = MaxRows then Delete(S, Length(S), 1); Show(S); end; GotoWinXY(1, 1); { Move the cursor to the upper left corner of the window } end; end; { ClearScreen } procedure ChangeVideo(NewMode : VideoType); { Changes the text and background colors } begin case NewMode of VLow : LowVideo; VNorm : NormVideo; end; { case } end; { ChangeVideo } function UpperCase(S : AnyString) : AnyString; { Convert a string to all upper case letters } var I : integer; begin for I := 1 to Length(S) do  S[I] := UpCase(S[I]); UpperCase := S; end; { UpperCase } procedure CenterStr(S : AnyString); { Center a string } begin GotoWinXY(41 - (Length(S) div 2), WhereY); Show(S); end; { CenterStr } procedure Beep; { Sound the "bell" } begin  Write(^G); end; { Beep } function GetKey : char; { Read a character. If IntChar is pressed, set the global variable Interrupted in order to stop the program. } var Ch : char; begin Read(Kbd, Ch); if (Ch = ESC) and KeyPressed then { Check for an escape sequence } begin while KeyPressed do Read(Kbd, Ch); { Remove characters from buffer } Ch := NULL; { Transmit a null instead of ESC } end; Interrupted := Ch = IntChar; { sample program will be interrupted } GetKey := Ch; end; { GetKey } function GetLegalKey(LegalChar : CharSet) : char; { Keep reading a character until it is in the set of legal chars } var Ch : char; begin repeat Ch := UpCase(GetKey); until Ch in (LegalChar + [IntChar]); GetLegalKey := Ch; end; { GetLegalKey } function IntToString(Num, Width : integer) : AnyString; { Changes an integer into a string } var TempString : AnyString; begin Str(Num:Width, TempString); IntToString := TempString; end; { IntToString } function RealToString(Num : real; Width, Places : integer) : AnyString; { Changes a real number into a string } var TempString : AnyString; begin Str(Num:Width:Places, TempString); RealToString := TempString; end; { RealToString } function BoolToString(BoolExp : boolean) : AnyString; { Changes a boolean expression into a string } begin if BoolExp = True then BoolToString := 'TRUE ' else BoolToString := 'FALSE'; end; { BoolToString } function Pad(Pstring : AnyString; Len : byte) : AnyString; { Pads a string to a specified length } var StringLen : byte absolute Pstring; { Make a variable for Pstring's length byte } begin while StringLen < Len do { Pad Pstring with spaces on the right } Pstring := Pstring + ' ';  Pad := Pstring; end; { Pad } function RJust(Jstring : AnyString; Len : byte) : AnyString; { Right-justifies a string to a specified length } var StringLen : byte absolute Jstring; { Make a variable for Jstring's length byte } begin while StringLen < Len do Jstring := ' ' + Jstring; RJust := Jstring; end; { RJust } procedure Print(Pstring : AnyString; Vtype  : VideoType); { Prints a string in a particular video mode } begin ChangeVideo(Vtype); Show(Pstring); end; { Print }  procedure PrintXY(Pstring : AnyString; Vtype : VideoType; Col, Row : byte); { Prints a string at a screen position in a particular video mode } begin GotoWinXY(Col, Row); Print(Pstring, Vtype); end; { PrintXY } procedure PrintCommandXY(Pstring : AnyString; Col, Row : byte); { Prints a command string, highlighting any capital letters in the string } var Counter : byte; begin GotoWinXY(Col, Row); for Counter := 1 to Length(Pstring) do begin if PString[Counter] in ['A'..'Z'] then Print(PString[Counter], VNorm) else Print(PString[Counter], VLow); end; end; { PrintCommandXY } procedure ClearXY(Col, Row : byte); { Clears to the end of a line from a selected column and row } begin GotoWinXY(Col, Row);  ChangeVideo(VLow); ClrEol; end; { ClearXY } function GetString(Col, Row, Len : byte) : AnyString; { Reads in a string from the keyboard } var Strng : AnyString; Inp : char; CurrLen : byte absolute Strng; begin Strng := ''; PrintXY(Pad('', Len), VNorm, Col, Row); { Blank out input field } GotoWinXY(Col, Row); repeat Inp := GetKey; case Inp of ' '..'~': if CurrLen < Len then { Add new character to string } begin Strng := Strng + Inp;  Show(Inp); end; BS: if CurrLen > 0 then { Backspace one character } begin Show(BS + ' ' + BS); Delete(Strng, CurrLen, 1); end; IntChar: Interrupted := True; { Interrupt the program } end; { case } until ((Strng <> '') and (Inp = CR)) or (Interrupted); PrintXY(Pad(Strng, Len), VLow, Col, Row); { Print out the string in low video } GetString := Strng; end; { GetString } function GetChar(Col, Row : byte) : char; { Reads in a character at an x,y location } var TempString : AnyString; begin TempString := GetString(Col, Row, 1); GetChar := TempString[1]; end; function GetInteger(Col, Row, Len : byte; Low, High : integer) : integer; { Reads an integer within a specified range from the keyboard } var IntString : AnyString; Number, Result : integer; GoodNumber : boolean; begin repeat IntString := GetString(Col, Row, Len); Val(IntString, Number, Result); { Change string to integer } GoodNumber := ((Number >= Low) and (Number <= High) and (Result = 0) and (IntString <> '') and (IntString <> '-')) or (Interrupted); { Check for a legal number } if not GoodNumber then Beep; { Beep speaker if the number is bad } until GoodNumber; PrintXY(RJust(IntString, Len), VLow, Col, Row); { Print number right-justified } GetInteger := Number; end; { GetInteger } function GetReal(Col, Row, Len : byte; Low, High : real) : real; { Reads a real number within a specified range from the keyboard } var RealString : AnyString; Number : real; Result : integer; GoodNumber : boolean; begin repeat RealString := GetString(Col, Row, Len); Val(RealString, Number, Result); { Change string to real } GoodNumber := ((Number >= Low) and (Number <= High) and (Result = 0) and (RealString <> ''  ) and (RealString <> '.') and (RealString <> '-') and (RealString <> '-.')) or (Interrupted); { Check for a legal number } if not GoodNumber then Beep; { Beep speaker if the number is bad } until GoodNumber; PrintXY(RJust(RealString, Len), VLow, Col, Row); { Print number right-justified } GetReal := Number; end; { GetReal } function CheckInterrupt : boolean; { Checks to see if the user wants to stop the "current" routine } var Ch : char; begin CheckInterrupt := False; if not KeyPressed then Exit; Ch := GetKey; if Ch = IntChar then { user interruped: wants to exit } begin Interrupted := True; CheckInterrupt := True; end; end; { CheckInterrupt } procedure ClearLines(FirstLine, LastLine : byte); { Clears the lines from FirstLine to LastLine on the screen } var Counter : byte; begin ChangeVideo(VLow); GotoWinXY(1, FirstLine); for Counter := 1 to Succ(LastLine - FirstLine) do begin ClrEol;  Showln(''); end; end; { ClearLines } procedure Message(S : AnyString); { Display a message on the tenth line of the current window } begin ClearXY(1, FirstRow + 9); Print(S, VNorm); end; { Message } procedure InitExample; { Initializes variables for the example programs when they are run without the rest of the TUTOR. } begin Interrupted := false;  with ScreenStatus do begin CurrWindow := Full; ActiveWindow := FullWindow; Cleared[Full] := false; end; { with } ClearScreen; FirstRow := 1; end; { InitExample } { ------------------------------------------------------------ TUTOR.LIB - End of include module for TUTOR.PAS ------------------------------------------------------------ }  WELCOME TO TURBO TUTOR 2.0 -------------------------- This file contains important information not found in the Owner's Handbook. Included is information on how to get technical help, how to install the TUTOR program, corrections to the Owner's Handbook, answers to common questions, and a complete list of files on the distribution disks. Since this file contains information important to you, please read it in its entirety; hopefully it will answer any questions you may have. TABLE OF CONTENTS ----------------- 1. How to Get Help 2. Installing the TUTOR Program by Running TUTORINS 3. Changes to the Owner's Handbook. 4. Answers to Common Questions. 5. File List 1. HOW TO GET HELP ------------------ If you need help with the Turbo Pascal Tutor, please read this help file and the reference manual thoroughly. If you still have a question and need technical assistance, please have the following information ready before calling our technical support department: 1. Product name and version number. (The version number of Turbo Pascal appears above the "Include error messages?" prompt when the program is first loaded.) 2. Computer name, model and any additional hardware. 3. Operating system and version number. (The version number generally is displayed when your system is first booted.) Technical assistance is also available from the following sources: 1. Type GO BORLAND on the Comp! uServe bulletin board system. 2. Check with your local software dealer or user group. 3. Write to: Borland International Turbo Pascal Technical Support 4585 Scotts Valley Drive Scotts Valley, CA 95066 2. INSTALLING THE TUTOR USING TUTORINS -------------------------------------- Before loading the TUTOR program (TUTOR.COM), you must run the installation program, TUTORINS: 1. Make backup copies of all the disks. 2. Copy TUTOR.COM located on the "Program Disk" onto the "Source Disk". 3. With the "Source Disk" in the drive, at the DOS prompt, type TUTORINS and hit . 4. Pick "S" for screen installation and choose the terminal type on your system.  5. Type "N" when asked whether you wish to modify the terminal installation. 6. Specify the speed of your computer in megahertz (if you are not sure, press ). 7. Type "Q" to quit the installation program. 8. Copy this installed TUTOR.COM from the "Source Disk" back onto the "Program Disk". You have now installed the TUTOR program for your system. If you need help on how to use TUTORINS, refer to Appendix L of your Turbo Pascal Reference Manual. NOTE: TUTORINS was created using the GINST program from the Turbo Database Toolbox. GINST generates a screen installation program for any Turbo Pascal program. 3. CHANGES TO THE OWNER'S HANDBOOK ---------------------------------- IMPORTANT: Note that any changes to source code contained in the manual have already been made in the file MANUAL.PAS (on the SAMPLE PROGRAMS disk). Page xiv: Introduction ----------------------- Middle of page The body of this manual is set in a normal typeface, an alternate typeface is used in program examples, and italics are used to mark reserved words in the main text as well as in programming examples. should be: The body of this manual is set in a normal typeface, an alternate typeface is used in program examples, and italics are used to emphasize concepts and to draw attention to terms when they are first used. Boldface type is used to mark reserved words. Page 12: Central Processing Unit -------------------------------- Some popular CPUs are the 8088 and the Z80 (which are usually used in computers running the CP/M operating system) and the 8088 (used in the IBM PC to run PC-DOS or MS-DOS). should be: Some popular CPUs are the Z80 (which is usually used in computers running the CP/M operating system) and the 8088 (used in the IBM PC to run PC-DOS or MS-DOS). Page 35: Using TINST on the IBM PC and Compatible Systems --------------------------------------------------------- First example  Your computer has a graphics display board that is subject to "snow." By using TINST, you may be able to improve your screen's performance. should be: Your computer has a color graphics display board that is not subject to "snow." Run TINST, install the screen and select the default installation. Answer "N" to the question, "Does your screen blink when the text scrolls?" This will optimize the video output when you are using the Turbo editor. Page 58: Figure 7-3 --------" ----------- Note: The diagram is for a digit, not the word "digit." Page 82: Comments: The Rest of The Story ---------------------------------------- Bottom of page { Old_a := a; {Save the old value of a} Readln (a); {Read a new value for a} should be: { Old_a := a; {Save the old value of a} Readln (a); {Read a new value for a} } Page 94: Char ------------- Third paragraph Nonprinting characters are another matter, as are the characters prior to value 126 (those characters for which there is no key on your keyboard). should be: Nonprinting characters are another matter, as are the characters subsequent to value 126 (those characters for which there is no key on your keyboard). Page 105: Standard Functions for Scalar Type -------------------------------------------- Top of page If DayOfWeek has the value Sunday, NextDay is assigned the value Monday; if it's Monday, NextDay will become Tuesday, and so on. should be:  If DayOfWeek has the value Tuesday, NextDay is assigned the value Wednesday; if it's Thursday, NextDay will become Friday, and so on. Explanation: The author mistakenly assumed that the FIRST day of the week was Sunday and, naturally, the successor of the first day of the week equals the second day. Unfortunately, Sunday is the LAST day of the week and the successor of the last day of the week is UNDEFINED. Of course, as programmers, we simply wraparound by using the following  Logic: if DAY = then DAY := else DAY := Succ(  ); Page 129 : Subprograms, Page 136: Parameters -------------------------------------------- In procedure GetNumber  'Minimum, ' to ', Maximum, ': '); should be: Minimum, ' to ', Maximum, ': '); Page 130: Subprograms --------------------- Top of page for Index := 1 to 10 do should be: for Index := 1 to Ten do Page 138-139: Functions  ----------------------- Note: All references to the variable "Val" should be changed to "Value." "Val" is a predefined identifier, and should not be used for a variable name. Page 143: Forward Declarations ------------------------------ In procedure Test2 { We've commented out the parameter list; } should be: { We've commented out the parameter list; Page 144: Scope and Recursion ----------------------------- Function A if G > 1 then X := A(G 1) should be:  if G > 1 then X := A(G-1) Page 145: The Exit Procedure ---------------------------- Note: All references in the code to 1 or 1.0 should be changed to -1 or -1.0 (respectively). Page 164: Miscellaneous Character Functions ------------------------------------------- In program PrintASCII var 1 :integer; should be: var i :integer; Page 188: Set Equality and Inequality ------------------------------------- In program EqualityTest program EqualityTest should be: program EqualityTest; Page 209: Write Parameters and Output -------------------------------------- In program FormatDemo WriteLn( Pi:8); should be: WriteLn(-Pi:8); Page 213: The Assign Procedure ------------------------# ------ Bottom of page If a file name has no drive number preceding it, should be: If a file name has no drive letter preceding it, Page 217: Creating a Random Access File --------------------------------------- In procedure MakeCheckFile Writeln('Enter information for check #', Num:0, ': '); should be: Writeln('Enter information for check #', CheckNumber, ': '); Delete the next two lines after this line. Page 218: Creating a Random Access File --------------------------------------- In procedure MakeCheckFile { Got all the information, write it out } until False; should be: { Got all the information, write it out } CheckNumber := Succ(CheckNumber); until False; Page 221: The Append Procedure ------------------------------ Note: The Append procedure can be used only with TEXT (!) files, not random access files as stated in the text: Assign(FileVar, FileName); Append(FileVar); Writeln(FileVar, 'Append works on existing text files'); Close(FileVar); These four statements add text to the end of an existing text file. Page 225: Advanced Keyboard Handling ------------------------------------ In procedure CheckCommand UpCase(Cmd); { force to upper case } should be: Cmd := UpCase(Cmd); { force to upper case } Page 248: Queues ---------------- procedure GetValue(var Val : integer); should be: procedure GetVal(var Val : integer); Page 248: Queues ---------------- In procedure PutVal Header^.Next := NPtr; should be: Header^.Last:= NPtr; Page 289: Chaining ------------------ Middle of page One more caution is in order. When you select cHn mode on 16-bit systems, another menu will appear allowing you to set code and data segment sizes and specify minimum and maximum memory size required. You can ignore this for now. However, after each .CHN file has compiled, make a note of the code and data printout that comes up on the screen. When you have finished compiling all the .CHN files, select the Com option to compile your main, executable program. When the options menu appears, you must set should be: One more caution is in order. After each .CHN file has compiled, make a note of the code and data printout that comes up on the screen. When you have finished compiling all the .CHN files, select the Com option to compile your main, executable program. When the options menu appears, you must set Page 311: Using Untyped Parameters ---------------------------------- In procedure SwapVars V2[Count] := V1[Count]; { Move value from V2 to V1 } V1[Count] := Tmp; { Store original from V1 to V2 } should be: V1[Count] := V2[Count]; { Move value to V1 from V2 } V2[Count] := Tmp; { Move to V2 from original V1 } Page 315: Place Value --------------------- Note: In the second diagram, the number 00111001 should be shifted to the left two spaces. Page 325: Accessing Parameters From External Subprograms --------------------------------------------------------  Note: On line 2 of the example, indent the ASSUME statement (by one TAB) so it does not begin in column zero. Page 325:$  Accessing Parameters From External Subprograms -------------------------------------------------------- In procedure Simple ADD WORD PTR[DI],AX should be: ADD WORD PTR ES:[DI],AX Page 327: Allocating Local Variable Space ----------------------------------------- Note: Your program code should go just ABOVE the line: ADD SP,LOCALS Page 331: Syntax and Semantics of the Inline Statement ------------------------------------------------------ Middle of page  Parameter of current Offset of parameter value (address procedure or function or function for var parameters) relative to BP should be: Parameter of current Offset of parameter value (address procedure or function for var parameters) relative to BP Page 332: Syntax and Semantics of the Inline Statement ------------------------------------------------------ In procedure VInLine $26/$D0/$1D/ { RCR ES:WORD PTR [DI] } should be: $26/$D0/$1D) { RCR ES:WORD PTR [DI] } Page 388: IBM PC Only --------------------- Last question "Is Turbo Pascal as fast as the regular Turbo compiler?" should be: "Is Turbo-BCD as fast as the regular Turbo compiler?" 4. ANSWERS TO COMMON QUESTIONS ------------------------------ The following answers to common questions are in addition to those provided in Appendix F of the manual: 1. The KeyPressed function doesn't seem to work correctly. How can I get it to work? Answer: Set the C and U compiler directives to {$C-} and {$U-} 2. How can I get the logarithm of a base 10 number? Answer: Use the following function: function Log(Base, Number : integer) : real; { Returns the Base (Base) log of Number } begin Log := Ln(Number) / Ln(Base); end; For example, Log(10, 100) and Log(2, 4) will both return 2.0. 3. How can I take a number to a power in Turbo Pascal? Answer : Use the following function: function Power(X, Y : real) : real; { Returns the value of X to the Y power } begin Power := Exp(Y * Ln(X)); end; 5. FILE LIST ------------ PROGRAM DISK ------------ File Description -------------------------------------------------------------- READ ME - Explains that this file is on the "Source Disk" TUTOR COM - On-line Tutor program QUIZ DTA - Quiz data file for TUTOR.PAS TUTOR HLP - Contains a page of intro. text for TUTOR * EX - Example procedures for TUTOR.PAS SOURCE DISK ----------- File Description -------------------------------------------------------------- README COM - Helps you read the README file TUTORINS COM - Installation program for TUTOR.PAS TUTORINS DTA - Data file for TUTORINS.COM TUTORINS MSG - Message file for TUTORINS.COM TUTOR PAS - Source code for Tutor program WINDOW INC - Include file for TUTOR.PAS QUIZ INC - Include file for TUTOR.PAS DISPLAY INC - Include file fo% r TUTOR.PAS TSCROLL INC - Include file for TUTOR.PAS TUTOR LIB - Library routines for TUTOR.PAS and .EX files  README - This text file! SAMPLE PROGRAMS DISK -------------------- File Description -------------------------------------------------------------- FILEMGR PAS - Source code to DOS utility program FILEMGR INC - Include file for FILEMGR.PAS ANIMALS PAS - Source code to AI program ANIMALS DTA - Data file for ANIMALS.PAS TYPIST PAS - Source code to TYPIST.PAS TYPIST DTA - Data file for TYPIST.PAS LISTT PAS - Source code to file listing program LISTT DOC - Documentation for LISTT * LTP - Printer drivers for LISTT MANUAL PAS - Contains source examples from the manual TBOMOUSE PAS - Routines that show how to use the Microsoft Mouse with Turbo Pascal END ---åååååååååååååååååå& åååååååååååååååååååååååååå' åååååååååååååååååååååååååå( åååååååååååååååååååååååååå) åååååååååååååååååååååååååå* åååååååååååååååååååååååååå+ åååååååååååååååååååååååååå, åååååååååååååååååååååååååå- åååååååååååååååååååååååååå. åååååååååååååååååååååååååå/ åååååååååååååååååååååååååå0 åååååååååååååååååååååååååå1 åååååååååååååååååååååååååå2 åååååååååååååååååååååååååå3 åååååååååååååååååååååååååå4 åååååååååååååååååååååååååå5 åååååååååååååååååååååååååå6 åååååååååååååååååååååååååå7 åååååååååååååååååååååååååå8 åååååååååååååååååååååååååå9 åååååååååååååååååååååååååå: åååååååååååååååååååååååååå; åååååååååååååååååååååååååå< åååååååååååååååååååååååååå= åååååååååååååååååååååååååå> åååååååååååååååååååååååååå? åååååååååååååååååååååååååå@ ååååååååååååååååååååååååååA ååååååååååååååååååååååååååB ååååååååååååååååååååååååååC ååååååååååååååååååååååååååD ååååååååååååååååååååååååååE ååååååååååååååååååååååååååF ååååååååååååååååååååååååååG ååååååååååååååååååååååååååH ååååååååååååååååååååååååååI ååååååååååååååååååååååååååJ ååååååååååååååååååååååååååK ååååååååååååååååååååååååååL åååååååååååååååååååååååååå