IMD 1.06: 5/10/2005 16:27:23 Sage Utility disk åå UTILB摊;  FORTLIB4.CODEŠÕF BLIB.R4.CODEÀ§Fe KERNEL.CODE À§EemDISKCHANGE.CODE§7mp DISKSIZE.CODE§%p† REMTALK.TEXTÀŠ{†˜ DIR.INFO.CODE§‘˜œMARKDUPDIR.CODE€tœŸ BOOTER.CODE À¥%Ÿ¢COMMANDIO.CODE¥€¢¥ERRORHANDL.CODE€v¥¬FILE.INFO.CODE€¬µFINDPARAMS.CODE€tµº SYS.INFO.CODE€ºÀ WILD.CODEëž À€ÀÂREMINTEST.CODE¥ÂÆREMINTEST.TEXT¥ÆË IB.BUS.CODE ÀšË÷ IB.BUS.TEXT Àš÷ IB.LNK.CODE Àš IB.EX.CODEž Àš IB.UNIT.TEXTÀš IB.EX.TEXTž Àš. IB.DEF.TEXT Àš.@ INTERP.0.CODEŠ+@U INTERP2.CODEÀŠ+Ul INTERP.4.CODEŠ+lo RECEIVE.CODEÀ¥oqREMOUTTEST.CODE¥qw TEXTIN.CODE À¥w RECEIVE.TEXTÀ¥ƒREMOUTTEST.TEXT¥ƒ‰ SEND.TEXTëž À¥‰Œ SEND.CODEëž À¥Œš TEXTIN.TEXT À¥š¡ TOPSYS.CODE ÀŠ{¡Ç TOPSYS.TEXT ÀŠ{Çá PEDGEN.CODE À§áçCHKSUMOPS.CODE§!çï ASMLOAD.CODEÀŠ{ï÷REM.HAYES.CODE§‰÷ÿREM.VADIC.CODE§‰ÿ#MU4.FBOOT.TEXTŠ{#'MU4.FBOOT.CODEŠ{'IMU4.WBOOT.TEXTŠ{IMMU4.WBOOT.CODEŠ{MoMU.BOOTEXT.TEXT§©otMU.BOOTEXT.CODE§©tx MU.PBOOT.CODE§zx’ MU.PBOOT.TEXT§z’œMU.CONVERT.CODE§Jœ­ TRMDEF.DATA À©A­³ REMTALK.CODEÀŠ{³íMU4.BIOSàëž À©‚í$ MUTRMSET.CODEŠ{$6 MU.CONFIGëž Àš6> IB.UNIT.CODEÀš>B USERLIB.TEXTÀšB™ MU.UTIL.CODEÀ©™® FORTLIB2.CODEŠÕ®Õ BLIB.R2.CODEÀ§ÕçTELE.VADIC.CODEšçôTELE.HAYES.CODEšô DUMP.CODEëž ÀšÑ# RESTORE.CODEÀš±#' DUMPDIR.CODEÀ§Ü UTILB摊;  FORTLIB4.CODEŠÕF BLIB.R4.CODEÀ§Fe KERNEL.CODE À§EemDISKCHANGE.CODE§7mp DISKSIZE.CODE§%p† REMTALK.TEXTÀŠ{†˜ DIR.INFO.CODE§‘˜œMARKDUPDIR.CODE€tœŸ BOOTER.CODE À¥%Ÿ¢COMMANDIO.CODE¥€¢¥ERRORHANDL.CODE€v¥¬FILE.INFO.CODE€¬µFINDPARAMS.CODE€tµº SYS.INFO.CODE€ºÀ WILD.CODEëž À€ÀÂREMINTEST.CODE¥ÂÆREMINTEST.TEXT¥ÆË IB.BUS.CODE ÀšË÷ IB.BUS.TEXT Àš÷ IB.LNK.CODE Àš IB.EX.CODEž Àš IB.UNIT.TEXTÀš IB.EX.TEXTž Àš. IB.DEF.TEXT Àš.@ INTERP.0.CODEŠ+@U INTERP2.CODEÀŠ+Ul INTERP.4.CODEŠ+lo RECEIVE.CODEÀ¥oqREMOUTTEST.CODE¥qw TEXTIN.CODE À¥w RECEIVE.TEXTÀ¥ƒREMOUTTEST.TEXT¥ƒ‰ SEND.TEXTëž À¥‰Œ SEND.CODEëž À¥Œš TEXTIN.TEXT À¥š¡ TOPSYS.CODE ÀŠ{¡Ç TOPSYS.TEXT ÀŠ{Çá PEDGEN.CODE À§áçCHKSUMOPS.CODE§!çï ASMLOAD.CODEÀŠ{ï÷REM.HAYES.CODE§‰÷ÿREM.VADIC.CODE§‰ÿ#MU4.FBOOT.TEXTŠ{#'MU4.FBOOT.CODEŠ{'IMU4.WBOOT.TEXTŠ{IMMU4.WBOOT.CODEŠ{MoMU.BOOTEXT.TEXT§©otMU.BOOTEXT.CODE§©tx MU.PBOOT.CODE§zx’ MU.PBOOT.TEXT§z’œMU.CONVERT.CODE§Jœ­ TRMDEF.DATA À©A­³ REMTALK.CODEÀŠ{³íMU4.BIOSàëž À©‚í$ MUTRMSET.CODEŠ{$6 MU.CONFIGëž Àš6> IB.UNIT.CODEÀš>B USERLIB.TEXTÀšB™ MU.UTIL.CODEÀ©™® FORTLIB2.CODEŠÕ®Õ BLIB.R2.CODEÀ§ÕçTELE.VADIC.CODEšçôTELE.HAYES.CODEšô DUMP.CODEëž ÀšÑ# RESTORE.CODEÀš±#' DUMPDIR.CODEÀ§ÜÌ3RTIO RTMISC €€ª( ”Wnopr (c) 1980,81 Silicon Valley Software and 1981,82,83 SMS ËRTIO ÔŸ``á×Ä {zç‚€&¹ {zç‚€*¹ Ô yhŠà {jkab«! |£ic!×Äab«š‚€.s š {zçs š‚€3s š |sš‚€8s š z!Œ£sšs–ؚsš‚€>s š X¢sš‚€Ms šs p–ûi1h ˜±!¡Ô j"y#ÒiŠ"xhŠé l–^$Ò`t ç š;Ċ*2˜Ò `t ç €Pujat æ !rŠ2h2x¥ k#ç$Ä#1Ä#çÄ#çÄ#çÄ ¥ m–‘"1Ò"x¥Š1h ˜Ó i!x"Ò!"xÄ!xhŠì"4Ó"2Ä"¥˜¥–©…€ˆÔ€@‘0}Ô€/‘–j!‘!¥0˜Ò€C‘0h æ æÔ9 }Ô ç æ §° æ ³  æ æ 泡jŠ æ æ æ³ æ æ 泡j {Ôj | z±¡Ôj–90h æ ç  æîvÓ€0‘ ç Ė’0h! æ æ³Ô! ç p æ ç!íÄ }ñ æ çĊ æ ç !vÓ€1‘ ç Ä ç!íÄ ç Ė0€£h ²Ÿ‡ç § ±¡Ô îhŠë‡ç § Ó€2‘‡ç ía £îp‡ç í £îp‘%‡æ‘&a‡ç  £îp‡ç ćç  £îˁ¬…€ˆÔ!…€‹…€Š²Ô…€‰…€‹î!ȅ€‹í¥€‹Š€B‘Šl0h ç íÄ æ æÔ@ æ ³Ô æ Ô } æå¡Ô‘'Š‘% æ‘&Š æ‘& ç æ !È ç æ íÄ ç Ċ04Ò š!vŠ æ x!È æ s–"0h ç íÄ æ æÔO ç æ §Š æ ³­° Ô( æ æ æ³ÔŠŠ æ Ô‘% æ‘& ç æ §Š­Ó ç æ íĊ æ s æ x§Š–Ë…€í¥€…€ˆÔ#…€‹…€Š²Ô…€‰…€‹î§h…€‹í¥€‹Š¥€ hŠq5Ô6†§²Ô †6§h6í¥Š€ hŠV0j"æ ²ñ€ h"ç "æ îĊ=i* Ґ* € ²ñ"ç € £îĀ hŠiŠ °¥ °3 Ô € h"ç ŒÄ!ÔÃ# ĖY0i!ç!íÄ!æ æÔe!æ ³Ÿ!æ !æ æ³Ÿ!æ!æ æ³Ÿ ¡Ô!ç !æ §h!ç !æ íĊ/!æ!æ æ³Ô¥hŠ!æ Ô‘%!æ‘&!ç !æ §h!ç !æ íĊ!æ s!æ x§h" Ėt…€Ših !²Ô €*‘( íhŠò–Œ"ih !²Ô € ‘( íhŠò–Ii¥€`‘) € ±…€$° Ôñ €-±j €-° €+° Ô#ñ‘…€$Ò‘`‘) € ±…€$± Ôk € Ò…€©Ô!Ì á³ñ€3‘ !ŒiŠ5 €0³Ÿ €9²Ÿ Ô‘!Ì á²Ô €8"£²Ÿ!Í á² Ô€3‘ !Œ€0¢ £i…€$³ñ`‘)Š…€í¥€…€$²ñ•"Ô!ái%!Ė<…€ˆÔ2…€‹}³Ô€A‘…€ŒÔ}¥€‹Š…€‹…€Š²Ô€ ‘(Šñ}¥€‹‹µ0i!|ñ?!æ €>²ñ€4‘!!~!}£²ñ€4‘!!~!}£³ñ…€ŒÔ!}Ô`‘)Š`‘+Š€ ‘(ŠÝ…€ŒÔ4!}Ô.5Ôš†€ÿs šs ¥Š!æ €>³ñ`‘)Šñ3ñ!ç ÄŠ$!}Ô !æ æ!æå¡!æ î°¡Ô ‘'!ç !æ îÄ!|ñ!!~Ó€5‘!çĖ{…€“…€’²ñ‘…€…€“î§Š…€“í¥€“­€ ÓÜ­€a³­€z²¡Ô­€ £Š–ê1!ƒ€PÚÔ!¥€ŽŠV!€BҐ1!€N°!€Z° Ô!¥€ŽŠ‘Š9!ƒ€VÚÔ,€0¥€Ž¥€…€ Œ!¢€0£¥€…€“h1!ƒ€ZÚñã ¥€“Š‘– …€“…€’²ñ‘…€…€“î§h…€“í¥€“– E…€¢²ñ …€¢î¥€¢‹"i‘0…€Ž€0Ò…€i!²Ô‘l‘0Šl…€Ž¥€£…€Ž‹ô‘0…€Ž€0Ó‘!¥€¢…€¥€Š…€Š²Ô‘¥€ ¥€¡…€£€F°…€£€E° Ô\‘0…€Ž€.Ó ‘‘0…€Ž€0Ó ‘…€¥€¥…€£€EÒ7…€“h‘0…€Ž€EÒ"‘0…€Ž€0Ó ‘…€¥€€¥€§…€€²Ô ‘Š ¥€“¥€§‹a!¥€¢…€“h‘0¥€ ¥€¡…€Ž€0Ò¥€š…€¥€Š…€Š²Ô ‘Š¥€š ¥€“‹'…€ŒÔ‘$ñ‘!nj"&²Ô 3‘("íjŠñ‹áþ‹$ñ‘…€ŒÔ!nj"&²Ôe‘)"íjŠóŠ!nj"&²Ô € ‘("íjŠò‹«þ‹Ê$ñ‘!¥€ª‹›þ‹º$Ô‘‘0…€Ž€0Ó‘…€£€+Ò…€¥€ªŠ…€á¥€ª‘0…€Ž€PÓ‘‹aþ‹€…€œ³Ô‘…€œÒ¥€¡…€œí¥€œ†€”…€œî×!ƀ˜…€œî×…€“Ä‹(þ‹G$Ô‘…€œ°…€¡¡Ô'…€†€˜î×xÓ†€˜î×x¥€†€”î×x¥€ž¥€Ÿ†€”…€œî×x²ñ%†€”…€œî׆€”…€œî×xîƀ˜…€œî×x¥€“‹ºý…€œ²ñ …€œî¥€œ‹©ý…€ Ô+‘/…€Ÿ¥€œ…€¥€“†€”…€œî×…€žÄ†€˜…€œî×…€Ä‹yý‹˜$Ô‘‹mý‹Œ‘‹†…€ŒÔ‘$Ô‘k3m%€'Ó!%‘(…€“…€’²ñ‘…€…€“î§m…€“í¥€“ŠÚ3m%€'Ò€'‘(Š …€““k#Ô»‹ ýŠ,$Ô‘‘/‹ÿüŠ$Ô‘Š$Ô‘…€£€Z°¥€©‹ãüŠր^– î0€‡æ æՓ‡zÒ ¥€Œ‘/‡çćzÓx‡ç ‡æ ‡æ £p‡}ñ‡æ 燁æ đ%‡æ‡}¡Ô2‡æ 燁æíÄ`p‡æ `‡ævÓ€0‘Їæ 燁æˁ %0h Ó‘/ }å æ æ æ°¡ æ æ 沟¡Ô æ ç æ Ė º‡‘!¥0˜±Õ€0€‡|Ô‘4ŠH‘5‡æ 懁}¡Ô7‡æ ç‡æ æíÄ`p‡æ `‡æ æîvÓ€0‘‡æ æ‡æ ¡Ô‘%‡Ô 0æ rŠ0æ r0‘#– p„„!« ‡#‘a‚€–ë‡ ²ñ€ ‡ €€-.²Ôa-„-î§È-퀊í‡#‘"h €.ç‡Ä.ç‡Ä.ç‡Ä.çćÔ .æ a˜rŠ .æ a˜r ¥.æ æÔ&.æ çÉÒ.çĊ.çÄ.ç Ä.ç Ċ.|ñ€6‘.ç Ä–# »!‘!¥0˜Ò‘0{04±¡Ô€7‘˜¥€ ¥€Œ Ô0|Ô‘404Ò¥¥š†€ÿs šs ¥– ݘ¥€¥ ¥€Œ¥€ˆ"¥€‰!¥€Š¥€‹–`…€ˆñ0}ñ‘…€‘¥€"îih !²Ô…€ ×c«d$çÄ íhŠè"¥€’¥€“‘0…€Ž€(Ó€ ‘¥€¢¥€©¥€œ†€”î×ƀ˜î×…€“Ä…€“¥€¥€ž¥€Ÿ¥€ ¥€ª–e&în&³ñ€8‘0m%|Ô€9‘‹æ%æ æñ€:‘‹×%}Ô(ÿ%~l&$j"Œi&$%~Œh ³Ô £h!íiŠY&%~Œ&%~Œ¢&%~€@Œ&%~€@Œ€@¢¢íi&%~€ Œ&€ Œ%~€ Œ¢h%æ çÉÒ!¢i‘5…€Œ!%æ æ³!%æ æî° %æ æ³¡ ¡Ô€;‘%æ!íÓ %æ Ô‘%!‘&%ç Ä%ç˰0h æ çÉÒ æ ° æ°¡ æ ° æ°¡ iŠ æ ° æ°¡ æ ° æ°¡ i–ÿ0hï6Ô iŠ> æ Ò/ æ Ô‘% 棑& ç Ä æñ ç æ î§Ò ç æ îĊë ç æ î§i–ï6ñ0ç 0æ îĖÚ$‘!¥0˜±ÕŽ0k#{Ô#çċŠ#æ æñ€<‘#|ÔB#}ñ€=‘#z°#z°#æ €>²Ÿ¡ Ô ‘47h8Š‘47 Ӑ8Šö87 Òø#çĊT#æ çÉÒjŠj#}Ô$ÿ#~#æî"£Œ#æîŒ#æ ¢#~¢iŠ#æî"£Œ#æ ¢#~i!²ñ!‘–!‘!¥0˜Ó,0h |ñ Ó‘/ çÄ zÒ çđ4 çÄ |Ô çĖÞ‡‘!¥0˜±ÕŽ0€‡|Ô‘4ŠH‘5‡æ 懁}¡Ô7‡æ ç‡æ æíÄ`p‡æ `‡æ æîvÓ€0‘‡æ æÔ7‡æ Ô‘%‡æ çÉÒ ‡çĊ‡çćç ćç ćçćçćç ćçˁ…€˜Ò‘$`‘+aî È`‘+aî Èa"pŠ‘2…€£€IÓ€!‘"…€Š‘.–7"ih !²Ô # îב íhŠï–ä…€˜Ò)‘$o'€€ ).²Ô`‘+„ )î È)í€ Šì„ /'p‹w‘2…€£€F±…€£€E±¡Ô€"‘aÌô¥€ÿဠ`‘) € ±…€…€Š° Ôï €-°n €-° €+° Ô…€…€ŠÒ€ hŠ`‘)m € ±…€…€Š± Õœ € Ò…€©Ô aò€aóÂô(í€ Š €.Ò(³Ô€#‘€ Šl €E° €D°  €e°  €d° Ô„ …€Š…€£‘.mŠG €+° €-° Ô„ …€Š…€£‘. €-Ò)ဠmŠ# €0³Ÿ €9²Ÿ Ô€$‘aò€aó €0£ÌÀô(í€ …€…€Š³Ÿ%å¡Ô`‘)Š…€í¥€…€…€Š²Ÿ% ÕCÿ&Ôaaóäô(³Ôaaó(p ÃôŠaa󅀥p Ãô%ñ…€ª€ )³ñaaó)áp ÃôŠ aaó)p Âô/aóô–ÿ"ih !²Ô # îב íhŠï–”…€˜Ò‘$`‘+aî È`‘+aî Èa"pŠm‘2…€£€LÓ€%‘¥€`‘) € ±…€…€Š° Ôï €.Ò…€…€ŠÒ€&‘Š`‘) €T± €F±¡ €t±¡ €f±¡3å¡Ô€'‘" €T° €t° Ä…€…€Š³ñ`‘)Šò–¯"ih !²Ô # îב íhŠï–n…€˜Ò6‘$'îlj"$²Ô("&Œh&Ô "¢h&mi!%²Ôc‘+( !¢î#È!íiŠì"íjŠÓŠ|'îlj"$²Ôr‘2…€£€AÓ€(‘…€šñ&¥€Š¥€…€Š&£mi!%²Ôc‘)!íiŠó"&Œh&Ô "¢h…€Šmi!%²Ôc‘)( !¢î#È!íiŠì…€Ší&mi!%²Ô ( !¢î€ È!íiŠî"íjЉ– è…€ˆÔ…€˜Ò€@‘¥€ ‘2…€£€\Ó‘/¥€ˆŠN0h…€˜Ò‘$‘/Š2¥€ ‘2…€£€\±5å¡Ô‘/3Ô ç Ä5Ô¥šs¥3Ôšr |Ô ç3Ä çÄ3i–…€˜Ò‘$g`p`î§‘(`(‹ƒ‘2…€£€IÓ€)‘'ÿáîÒ `‚€¢ÅkŠ8`‚€¥Å'³ñ'áomŠmk`#î' €0¢È' o#îk'Òë%Ô `#î€-È#îk#£…€Š²ñ‘,Š…€Š#££‘-#ínl$&²Ô `$($ílŠð–¬"ih !²Ô # î×x‘ íhŠî–Э튭­ ²Ô ˆ­î×x‘(Š€0‘(–Í.o'Ò€ Š€ …€˜Ò'‘$„/„%'p'€.€/‡.²Ô „%/(/퀊틌‘2„/óÌÏñ j„/„/óäôŠj€ c„/óôcóò€ ÏÔ,€có/p ÏÔ,/¢€ c„/ó,p ÃôŠ/€/Ò×cóÌÍñ=cóò€Ïñ1€cóÌ/îp ÃÏñ,/£€ c„/ó,áp ÂôŠ/€/ÒÒ,í€ …€£€FÒ ,…€ª¢…€¥¢€ Š/…€ª²ñ…€¥í€ Š …€ªÒ…€¥€ Š…€ª…€¥á²ñ …€¥…€ª¢€ )³Ô')(³Ôccóò€(p ÃÀôŠccóò€)p ÃÀôcóò€ÏÔ,í€ ccóò€Ãô…€£€FÒ)í€ i(€.€/‡.²Ô,cóŸ€ +±/)²¡Ôi„/î×+€0¢Äccó+ÌÁò€"Âô/퀊Î!Ôj…€£€F°Õ·,…€ª¢€ !,²Ÿ¡Ô€ …€Š…€¥£î€.³ñ€*‘,²Ô."£€Š.,£"£€…€¥°,²¡Ô-î€-³ñ‘,Šd-‘-"Ô€-‘(€…€¥°,²¡Ô€0‘(Š ,²ñ9,î€ Šó€.‘(…€¥€,³Ÿ‡²Ÿ¡Ô€0‘(,í€ ‡î€Šå‡€.€/‡.²Ô9/퀊ò‹˜…€£€E°Õ‹…€ª…€¥á²…€ª…€¥í²Ÿ Ô€+‘!Ô€ Š,…€ª£€ h…€§Ô,à̅€€p ÏÔh…€Š…€€££€ Š,àè³Ôh…€Š£€ …€¥í…€ª³¢"¢€ *)³ñh Ô‘,‹*)£‘-"Ô€-‘(€…€ª€.€/‡.²Ô!/…€ª±¡Ô€ ‘(А9/퀊ã€.‘(ᅀª€.€/‡.³Ô €0‘(/î€Šð…€ª³…€ª…€¥í³Ÿ¡Ô9…€¥…€ªà£€.€/‡.²Ô9/퀊ò…€§Ô€E‘(Š,à€d³ñ €E‘(¥€€Š¥€€,³ñ ,ဠ€-‘(Š€+‘(„%‚€šÅ (€„%‡î, €0¢È, € ‡î€,Òæ…€€(‡££€.€/‡.²Ô €0‘(/퀊ð‡í(€.€/‡.²Ô „%/(/퀊튀,‘–2ê"ih !²Ô # î×ó‘ íhŠî–-…€˜Ò‘$bapa(a(Š ‘2…€£€LÓ€-‘…€Šî‘-"Ô€T‘(Š€F‘(–J"ih !²Ô # î×x‘ íhŠî–î­ŠŠ­¢hŠ­ ²Õƒˆ ˆ«­Ò;ˆ  °ˆ î§° ˆ  ±ˆ î§±¡¡Ô ˆ (Šˆ (Š2iŠ­!²Ô­­³ñˆ ­(­íŠ­íŠŠÜˆ­çĭ튋vÿ–j‡íi…€˜Ò‘$‡î€j"‡²Ô:„ !×Ä"íjŠìŠK‡î€j"‡²Ô>‘2…€£€AÓ€.‘…€šñ‡¥€Š…€Š‡£‘-…€Š‡³ñ…€ŠoЇo:„ !×Ä"íjŠŒ–Â…€ˆÔ…€˜Ò€@‘¥€ ‘2…€£€\Ó‘/¥€ˆŠ.0h…€˜Ò ‘$‘/ çĊ¥€ ‘2…€£€\Ò çĊ‘/ çĖô†€‘Jt˜¥€˜¥˜¥˜¥‚€±‘1¥¥¥€ˆ–ˆ1˜±Õˆ1¥0€‡|Ô‘4ŠH‘5‡æ 懁}¡Ô7‡æ ç‡æ æíÄ`p‡æ `‡æ æîvÓ€0‘‡æ æ‡æ ¡Ô‘%‡æ š;Ó ‡æ r‡x¥‹rÿ–—! Ž‘–¥‘” ‘– ÿÿdÿÿÿÿdÿÿÿÿdÿÿÿÿ ÿÿÿÿ2ÿÿÿÿ2ÿÿÿÿdÿÿÿÿdÿÿÿÿdÿÿRTIO RTMISC Segment  Proc# Offset# **** Fortran Runtime Error ## ****û€bÿÿ'\ÿzþ€þ¹þFÿhþFÿtÿÔÿtýŸý ý ýÙý ý ÿéþ6þÿéÿá -32768 CONSOLE: § XÚµú¥÷ À'ÈŒ¯hØŒK ˱€n ×Çc` ¹7 Z ù L ™ ô i  J  w  jò öo 2ñàº|RÎ:*** REALOPS EXTRAIO EXTRAHEAHEAPOPS PASCALIOFILEOPS  2RTMISC ”Ž€€‡€’¢€€€€ƒ‡€ƒ‡€²ÔN„€…„€•«„€–‡€–çÄ€€Ž€€‚‡€‚‡€Ž²Ô„A‡€‡€‚¢„€…‡€‚î§È‡€‚퀀‚ŠÜ‡€¢€€‡€ƒí€€ƒŠ©€€‡€‘¢€€€€ƒ‡€ƒ‡€²ÔM„€…„€“«„€”‡€”çÄ€€Ž€€‚‡€‚‡€Ž²Ô`‡€‡€‚¢„€…‡€‚î§È‡€‚퀀‚ŠÝ‡€¢€€‡€ƒí€€ƒŠª‡€’‡€‘³ñ'„A‡€’í€ ȄA‡€’í„A‡€’¢‡€‘‡€’£p‡€‘€€„Š"`‡€‘í€ È`‡€‘í`‡€‘¢‡€’‡€‘£p‡€’€€„„A‡€„È`‡€„ȇ€ŠK‡€„A`èĊB‡€„A`êĊ6‡€„A`éŸÄŠ)‡€„A`éĊ‡€„A`êŸÄЇ€„A`èŸÄŠրW–€–Ûi#Ó/#²ñjŠj#ák$h#Ô! Œi#k#²ñ Œh#Òè"Ô!i!m–0 dò€ô)Ó@)²ñ€ Š€ )ဠ`„ óô)Ôddó`óÂô)€ )²ñ``ó`óÂô)Òá(Ôdò€dóÃô„dóô–J„ dós`óÂsô–[! ³ñ!jŠ j–udó`óÏñ„ dóôŠ„ `óô–‡! ²ñ!jŠ j–¡dó`óÎñ„ dóôŠ„ `óô–Ë`dósô`óãò€ Ïñp#„ dós`óÃô–dóãò€Îñ€>rŠ>`ò€dódóÂÁô`óÌÎñ„ dó`ósÃsôŠdóÌÏñ „ ò€äôŠ„ ò€ô–4dò€`ó‘ Áô–§ „ óÌÍÔ€ Š`„ó„ óÃô`óãò€"Ο€ (Ô„óÌÏÔ„ò€'ôŠ„ò€+äôŠ1d`ósô„ óÌÏñ„óÌÏÔ ddóò€/ÀôŠddóò€3Áô„dóô–È`dósô„ ò€7`óò€;`óÃÁÂô–è`dósô„ ò€?`óò€C`óÃÀÂô–2„ óãò€GÏÔ„ óÌÎñ„ ò€KôŠ„ ò€OäôŠ!d„ ósô`ò€SdóÃô„ dó`óÁdó`óÀÃô– K ³ñiŠ ÒiŠi–j`óÌÏñlŠ `óÌÍÔlŠl– štp‡Ôš‚€bt pŠ š‚€et p/Ô4h,€ i!+²Ô( ³Ôc„«„.çÄhŠ íhšc î§up!íiŠÓštp‡Ôš‚€it pštppŠ!š‚€st pšbt pštp"€ Òߖ–&‘v–ÿÿ ÿÿÿÿ ÿÿÿÛ ÿÿÿÿ ÿÿÿÿ ÿÿÿù"ÿÿÿù"ÿÿÿù"ÿÿÿü0ÿÿÿù"ÿÿÿù"ÿÿÿù E*ÿÿÿù E*ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿý#3ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿãÿ×ÿ²ÿðÿŸÿÊStop Pause Program terminated.,Please press or to continue..(öæÖœ’hSF=0'7ðÑ *** EXTRAIO PASCALIOREALOPS RTIO  a ·BLIB BLERR €€€€€€€€€€€€€€€€< BLIB 1‚2BASIC LIBRARY COPYRIGHT 1981 SOFTECH MICROSYSTEMS þ çÒæ¢úÂ` Äþ n>  USES "{$U KERNEL.CODE } KERNEL " ( {const} MAXUNIT, MAXDIR, VIDLENG, TIDLENG, FBLKSIZE, .EOL, DLE, STACK_SLOP, P_LOCKED, SEG_FAULT, HEAP_FAULT, & POOL_FAULT, &{type} IORSLTWD, DATEREC, UNITNUM, VID, DIRRANGE, TID, FILEKIND, .DIRENTRY, DIRP, DIRECTORY, WINDOWP, WINDOW, FIBP, FIB, INFOREC, & INT_P, TIB_P, SIB_P, E_REC_P, E_VEC_P, SEM_P, MSCWP, .P_MEM_CHUNK, VIP, BYTE, MEM_CHUNK, ALPHA, MEM_PTR, MEM_LINK, .VINFO, POOLPTR, SIB, E_VEC, E_REC, MSCW, TIB, SEM, .FAULT_MESSAGE, FULL_ADDRESS, UTABLENTRY, UTABLE, .SYSCOMREC, POOLDES, &{var} SYSCOM, USERINFO, IPOT, THEDATE $), $ {$U COMMANDIO.CODE } COMMANDIO $( {type} BIGSTRING, &{proc} EXCEPTION $), " "{$U SCREENOPS.CODE } SCREENOPS $( {proc} SC_CLR_SCREEN $), " "{$U FILEOPS.CODE } FILEOPS $( {proc} FINIT, SCANTITLE $); " "  TYPE 'RFILE=FILE; 'TFILE=TEXT; " SPTR=^BIGSTRING; ' 'FMODE=SET OF ( MINPUT,MOUTPUT,MUPDATE, *MAPPEND, MRELATIVE,MDEVICE ); # ' ' ' #{ 2 } FUNCTION BSPN(S1,S2:BIGSTRING):INTEGER; #{ 3 } FUNCTION BRPT(S1:BIGSTRING; N:INTEGER):SPTR; #{ 4 } FUNCTION BVAL(S:BIGSTRING):REAL; #{ 5 } FUNCTION BVAL1(S:BIGSTRING):INTEGER; #{ 6 } FUNCTION BPOS(S1,S2:BIGSTRING; N:INTEGER):INTEGER; #{ 7 } FUNCTION BSEG(S1:BIGSTRING; Position, Leng : INTEGER):SPTR; #{ 8 } PROCEDURE Dummy1; {formerly BLEN not used now} #{ 9 } FUNCTION BBRK(S1,S2:BIGSTRING):INTEGER; #{ 10 } FUNCTION BTIM:SPTR; #{ 11 } FUNCTION BDAT:SPTR; #{ 12 } FUNCTION BCHR(N:INTEGER):SPTR; #{ 13 } FUNCTION BASC(S1:BIGSTRING):INTEGER; #{ 14 } FUNCTION BSTR(X:REAL):SPTR; #{ 15 } FUNCTION BUPR(S1:BIGSTRING):SPTR; #{ 16 } FUNCTION BRND:REAL; #{ 17 } PROCEDURE BRDZ(X:REAL); #{ 18 } FUNCTION BPCH(S1:BIGSTRING):INTEGER; #{ 19 } FUNCTION BFSP(XUNIT:INTEGER):INTEGER; #{ 20 } PROCEDURE Dummy2; #{ 21 } PROCEDURE Dummy3; #{ 22 } FUNCTION BTAN(X:REAL):REAL; #{ 23 } FUNCTION BCONCAT(S1,S2:BIGSTRING):SPTR; #{ 24 } PROCEDURE BEXITPROG; # #{ 25 } FUNCTION BSDN(N:INTEGER):BOOLEAN; #{ 26 } PROCEDURE BRDN; #{ 27 } PROCEDURE BTAB(N:INTEGER); #{ 28 } PROCEDURE BISTART; #{ 29 } FUNCTION BISTART1(N:INTEGER):SPTR; #{ 30 } PROCEDURE BISTART2; #{ 31 } FUNCTION BISTRING(VAR S:BIGSTRING; MaxLength:INTEGER):BOOLEAN; #{ 32 } FUNCTION BIINUM(VAR N:INTEGER):BOOLEAN; #{ 33 } FUNCTION BIRNUM(VAR X:REAL):BOOLEAN; #{ 34 } FUNCTION BIDNUM(VAR X:REAL):BOOLEAN; #{ 35 } FUNCTION BASTRING(VAR S:BIGSTRING;N:INTEGER):BOOLEAN; #{ 36 } FUNCTION BIEND:BOOLEAN; #{ 37 } PROCEDURE BPSTART; #{ 38 } PROCEDURE BPSTRING(S:BIGSTRING;ZONE:INTEGER); #{ 39 } PROCEDURE BPINUM(N:INTEGER;ZONE:INTEGER); #{ 40 } PROCEDURE BPRNUM(X:REAL;ZONE:INTEGER); #{ 41 } PROCEDURE BPDNUM(X:REAL;ZONE:INTEGER); #{ 42 } PROCEDURE BPEND; #{ 43 } PROCEDURE BCLS; #{ 44 } PROCEDURE BSNZ(N:INTEGER); #{ 45 } PROCEDURE BPMT; #{ 46 } FUNCTION BBSZ(N:INTEGER):INTEGER; #{ 47 } PROCEDURE BGOTOXY(Y,X:INTEGER); #{ 48 } PROCEDURE BDFI(S:BIGSTRING); " #{ FILE OPS } # #{ 49 } PROCEDURE BFCR; #{ 50 } PROCEDURE BFDL; #{ 51 } PROCEDURE BFOP(N:INTEGER; S:BIGSTRING; NUMRECS, RECSIZE:INTEGER; ;MODE:FMODE); #{ 52 } PROCEDURE BFCL(N:INTEGER;DFLAG:INTEGER); #{ 53 } PROCEDURE BFCA; #{ 54 } PROCEDURE BSFL(LOC:INTEGER); #{ 55 } PROCEDURE BSRN(N:INTEGER); #{ 56 } FUNCTION BGFT(S:BIGSTRING):INTEGER; #{ 57 } FUNCTION BEFX(N:INTEGER):INTEGER; # #{ 58 } PROCEDURE BVTST(NEWFLAG:INTEGER; TSCODE:INTEGER; V:FIBP); #{ 59 } FUNCTION BSGN(N:REAL):INTEGER; #{ 60 } FUNCTION BERR:INTEGER; #{ 61 } FUNCTION BEXPI(N1,N2:INTEGER):REAL; #{ 62 } FUNCTION BEXPR(X1,X2:REAL):REAL; #{ 63 } FUNCTION BEXPD(D1,D2:REAL):REAL; #{ 64 } FUNCTION BDFC(D1:REAL):REAL; #{ 65 } FUNCTION BFDC(X:REAL):REAL; #{ 66 } FUNCTION BDIC(D:REAL):INTEGER; #{ 67 } FUNCTION BIDC(N:INTEGER):REAL; #{ 68 } PROCEDURE ERROR(N:INTEGER); #{ 69 } FUNCTION BINT(X:REAL):REAL; #{ 70 } PROCEDURE BPUNC(S:BIGSTRING); #{ 71 } PROCEDURE PERROR; " "  IMPLEMENTATION ¶BLERR )㭀‚‹Àˆ‚€ëÿ‹·ˆ‚€ëÿ‹«ˆ‚€)ëÿ‹Ÿˆ‚€6ëÿ‹“ˆ‚€Fëÿ‹‡ˆ‚€\ëÿŠ|ˆ‚€nëÿŠqˆ‚€‡ëÿŠfˆ‚€™ëÿŠ[ˆ‚€ŽëÿŠPˆ‚€ÌëÿŠEˆ‚€ÚëÿŠ:ˆ‚€âëÿŠ/ˆ‚€óëÿŠ$ˆ‚ëÿŠˆ‚ëÿŠˆ‚ëÿŠց%–Ora‚8ëÿšvšvšw‡€‚€2³Ô'š‚9w š‡€‚€2£wš€:všw‹æš‚Bw š‡€‚wš€:všw‡€‚³Ô‹¹‡€‚‹°a‚Këÿ‹©a‚Tëÿ‹Ÿa‚_ëÿ‹•a‚hëÿ‹‹a‚qëÿ‹a‚ƒëÿŠxa‚‹ëÿŠoa‚ëÿŠfa‚ŠëÿŠ]a‚¯ëÿŠTa‚¿ëÿŠKa‚ËëÿŠBa‚ÛëÿŠ9a‚÷ëÿŠ0a‚‚ ëÿŠ'a‚‚ëÿŠa‚‚.ëÿŠa‚‚@ëÿŠ a‚‚RëÿŠւeša˜w šwšwš‚‚zw š`w šÒp € Òꖀ‚$You cannot write on a read-only filee&You cannot read from a write-only fileeYou cannot close file #00You cannot close a closed filee+You cannot open-for-output an existing file#You cannot open-for-output a device0Relative record number is too large or too smalll#You cannot restore an "APPEND" file4The number of records in the "OPEN" statement is badd.The record size in the "OPEN" statement is baddToo many returns from GOSUBToo many GOSUBS "FREESPACE" argument is not zeroo"Attempt to write past end-of--filee Attempt to read past end-of-fileeBad file titlee Missing Quote$=ÿIÿUÿaÿmÿyÿ„ÿÿšÿ¥ÿ°ÿ»ÿÆÿÑÿÜÿçÿòÿPascal I/O error Execution error String size errorMissing or bad numberFile is not opennNot enough inputt#Bad number (conversion from string)Too much inputt"Too many variables for print imageeIMAGE field errorEnd of DATA listtWrong type of data in DATA listFile types don't matchhYou tried to open an open filee7You cannot restore a sequential file to a record number%Read record overflow of relative file&Write record overflow of relative fileeBad arguments to SEG$ functionn#Number too large for exponentiation#Negative argument in exponentiation%"ON" statement index is out of boundsMÿWÿaÿkÿuÿÿˆÿ‘ÿšÿ£ÿ¬ÿµÿŸÿÇÿÐÿÙÿâÿëÿôÿ (continue), (terminate)) t`BLIB ‘%! ³Ô!jŠ j–7! ³Ô jŠ!j–Cp–_š‚€<w šwp–h‘–p‘–œ€`„€¬ÿš€<vš`˜w š‚€Mw šw–€‚ª ¥ u–¹…Ó…u–Õ=Ò¥Š=í¥† =×x¥–,„€…„¬ÿd„¬ÿij!„€…§³Ÿ"¡Ô#!íijd§kh #²Ô„€…!§d §Òj íhŠêŠÑ"Ô„€…§íi! –ˆ‚b„€„¬ÿb§h‡€ƒ Œi!³Ÿ!€ÿ²Ÿ ‡€ƒ³Ÿ Ô‘Di‘K7bëÿ7!È!²ñ Ò 7!b§pŠ 77 í! £p7€€†–€…íl(Ìôjihnm'Ä))§íÈ))§€?È)$§€ Ò$ílŠô)$§€+Ò$ílŠ)$§€-Òn$ílŠ )$§€ Ò$ílŠô)$§ƒ€XÚÔ((ó ÌÂ)$§€0£ÌÀô$íl(óÌÎñ"íjŠÖ)$§€.Ò&$íl)$§ƒ€\ÚÔ((ó ÌÂ)$§€0£ÌÀô íh$ílŠÝ)$§€EÒF$íl)$§€+Ò$ílŠô)$§€-Òm$íl)$§ƒ€`ÚÔ! Œ)$§€0£¢i$ílŠä!³ñôi%Ô!ái! £i!"¢îk#3²ñ 'Ä(ò€ôŠ.#3á³ñ(ÌôŠ !³ñ((ó!áp ÃôŠ ((ó!p Âô&Ô((óäô)$§€ Ò$ílŠô$)§³ñ'Ė …e„€†¬ÿea`‘L Ô‘D„€ˆaóô–€‡+…e„€†¬ÿea`‘L Ô€€ˆŠကˆ–€‡i€„„„¬ÿ„€„‚¬ÿ„€˜„˜`‡„§‡£í” `˜” ‡¢î€†–…É€`„€ƒ¬ÿ‘K7‚€dëÿ‡€‚²‡€³Ÿ Ô‘DŠ3‡€‚`§²Ô*‡€‚‡€¢î`§²ñ `§‡€‚£í€€`‡€‚7‡€p7‡€È7€€…–€„„€…„¬ÿd„¬ÿij!„€…§³Ÿ"å¡Ô!!íid§kh #²Ô„€…!§d §Òj íhŠêŠÒ"ñ„€…§íi! –b Ä$x"²Ÿ$x"°#x!²Ÿ¡ Ô'$$x"£Ä#x!³Ô##x!£ÄŠ$$xîÄ##xÿ!£í¢Ä ĖÙ&³Ô %‚€eëÿjŠ&àn&²Ô %‚€iëÿŠP%‚€mëÿjkli!$³Ô,&›O!×xh# ± k#Ô "íj%" €0¢È&›O!×xn!îiŠÏ#Ô%"Ȋ%‚€qëÿ–º†‘K7‚€dëÿdcp$$¢l#³ñ $ílÿ#¢ík$³ñÿ$¢ílájm%ñdcÀKe‘M"íjŠï"€djmái%ñdce‘M!íiŠï#€<h f‘Nf§³ñ ‚€rf€ÿ” 7fëÿ‚€s7€ÿ” !f‘Nf§³ñ ‚€tf€ÿ” f˜7€ÿ” ‚€u7€ÿ” "f‘Nf§³ñ ‚€vf€ÿ” f˜7€ÿ” 7€€‡–€†R€‘K7‚€dëÿ›D É`‘N`§³ñ ‚€w`€ÿ” 7`ëÿ‚€x7€ÿ” ›DÉ`‘N`§³ñ ‚€y`€ÿ” `˜7€ÿ” ‚€z7€ÿ” ›DÉ`‘N`§³ñ ‚€{`€ÿ” `˜7€ÿ” 7€€–€€m‘K7‚€|ëÿ7 È7i–‹€`„€¬ÿ`§Ò‘DŠ`§€€ƒ–€‚ç€7§³ñ‚€}7€ÿ7§í” Šè‚€~7€ÿ” ­îà`‘N­³ñ ‚€`€ÿ” ‚€€`€ÿ” `˜7€ÿ7§í” –€€òŠ‘K7‚€dëÿ„ ‚€ëh„€‹óÌÏñh„€‹„€‹óãôl„€‹óÿÌÏñ„€‹óŸj„€‹ó"ÌÍÔ"7‘Nl$åՔk„€‹óÌÏñ5„€‹ó3p ÂÌÏñ„€‹ÌôŠ„€‹ó#£p ÂÌÏñ#îkŠèŠ„€‹ó#p ÏÔ#íkŠí#£i!3¢³ñ„€‹„€‹ó3p Âô!3¢iŠÝ!³ñ„€‹„€‹ó!áp ÂôŠ„€‹„€‹ó!p Ãô„€‹„€‹ó‘Eô„€‹óp ÏÔ„€‹„€‹ó ÌÃò€À‘Eô#íkŠØe„€‹ó ÌÑEô„€‹ó ÌeóÂÁ¿i„ !€0¢È„ ˜7€ÿ” „€‹eóô„€‹óÌÏñÄ77§§€0Ò 77§” Ší#¢²Ÿ#³Ÿ7§#£¢²Ÿ¡ ÔOŠQ#³ñ#ík‚€‚7€ÿ” Šê#7§²ñ 7€ „ 7˜€ÿ” „ ‚€ƒ€ÿ” „ ëÿŠÙ#7§³ñ ‚€„7€ÿ#í” 7§Ò 7‚€…ëÿŠ Ô ‚€†7€ÿ” 7€€–€Ž1 ƒc„€„¬ÿ‘K7cëÿc§ji!"²Ô7!§h €a³ €z²¡Ô7! € £È!íiŠà7€€†–€…p ††óã́É'ÌÃÀô††ó̆óÌÑEÂÁô`†óÌÃô–ó bóÌÎÔVa`p!à à¢h Ò5š‚€‡w šb” šw bbóãôbóÌÍñÝbóÌÎñ bbó ÌÃôŠðŠb 'Ìôbbó'ÌÃôŠbóÌÏÔ bbó ÌÃôŠð†bóÌ‘Eô– €`„€¬ÿ‚€’‘J–€‚0 Ó€ ‘DŠ‚€”” ‚€›” ‘IŒi–“ d„ ó” ô`„ ó” ô`óÌÏñဠŠ€ dóÌÏñဠŠ€ )(Œ€ `óãò€ ÂdóãÎÔ „)Ìò€ÂôŠ„dó`óÃô–ß „€„„¬ÿc„¬ÿ„€„§ic§h! ¢j"€ÿ²ñ‘Dj‘K7„€„ëÿ7"È"²ñc7!í p7€–ý l`óÌÍñ`óÌÏñálŠl–( 2i!~Ô!æ‚!ç!æ vh Ó€2p¢¥–§ 2k#ç$Ä%#æ Ól‘P#ç Ä#ç %Ä#çÄ#|Ú#|Ú Ô&#æ‚#ç#æ vhpj"° ± Ô#ç Ċ(#Ô$#zÒ#æ #}²ñ#ç#æ Ä#灁p#ç ĖÖ 2h ç æ!¢Ä æ³Ô æ æ¢ 恏‘Q–‹ 2h |ÚÔI zŠ@š!w çšwĊ1š!w çšwĊ! æ‚x§Ä æ‚w ç æ‚wĊր¢Š] æ Ô çÄ!€ Ċ2! ç æ§Ä çÄ!x Ò çÄ!€ Ä‘RŠ!xÒ‘R!‘SŠ‘R!xÓ¹ ç æ§° æ å¡Ô‘RŠê–¥ 2i!æñ`‘SŠö!ç!æ Ė® ‘T–ž 2æh–ú 2h |ÚÔ" zŠš!vŠ æ‚x!È æ‚wŠրšŠ ç æ!È çÄ‘R– 2zÒšwŠ ‘W– ¥0¥–r k¥"Ò‘ŠC"Ò ¥1¥Š3˜h4i!˜± ˜°¡Ô!y"Ò!hŠ!ziŠé ˜Ò ¥0¥"¥kŠ"¥ x¥–À 2i"‚€dëÿ!zÒ#š"€ÿw šw ‚€¯"€ÿ"§í” !çĊ!æñ`‘S""§íÈ""§ Ȋé–S¥išç"Éh2m%|Ú%|Ú ñ¥‹j%z±ÕQ%æ°ÕG%ç %æ Ä%æ Ô€"¥%沟%z°%z° ¡Õá%æÒ%ænk#&²Ô € ‘W#íkŠò%æ%æ‘/%瀘‚€dëÿkl$å՚#%æ³Ô0šbw "€ °šw¡ÔlŠ " Óš!v%ç$Ä$" ° ÔҊb‘S‘Vl$ñV" Ò9#Òš!v%æ%æ‘/Š"š vš€ vš v%瀘#” #îkŠ#ík‚€°%瀘€ÿ#” %瀘#"ȋaÿ‚€±%瀘€ÿ#í” Š%瀘Y%çÀ²%瀘€ÿ%瀘§í” %瀘%瀘§ È%ç%瀘§Ä%ç%æ%梣Ċ%æ %æ³Ô %ç Ā"¥–oš`w ‘K7‚€³ëÿ7 È7j–}‚€Ž‘J–Î¥2i"!{!æ £²ñ¥Š6"²ñ1!æ£h" ³ñ"h!ç!æ$# p!ç !æ ¢Ä ‘R# ¢k" £jŠÊ–E‡€€Š2€€‡‡€‰‚€dëÿ‡€‡z±Õ3‡€‡æh‡€‡|Úñ& ²‡€‡æ å¡Ô‘U‡€‡ç怇çđ‡€‡æhŠÚ Ò%‡€‡|ÚÔš‚€žw šw€€Šp‹Ó Ò ‡€‡çċŠî€ ‡€‡ç€˜pík‡€‡ç€˜#§€"Ò#ík€"mŠ€,m# #£%‡€‡ç€˜#p¢i!#²ñn%€"Ò+!îj‡€‡ç€˜!§€"Ó€$¥Š! !£€,‡€‡ç€˜!p¢iŠ!î!ဠ‡€‡ç€˜!îp¢j"#£íl$‡€ˆ²Ô‡€‰$ȇ€‡ç€˜#‡€‰$pŠ¥€€Š‡€‡ç€˜!”  !£h‡€‡ç Ċ$f‘Zf§lf$‘Z$‡€ˆ²Ô f‡€‰$ípŠ¥–€‰Ñ€‡Ìô2€‡zÓb„€ƒ€þ‘i!€!ñ€!p„€ƒ‚€dèÔ,‡|ÚÔ!š‚€Áw šw‡çÄ€€!pŠ„€ƒ‡`‘L Ô‘D€Šb‘Zb‡p–„€€†2zÓ(`‘!Ô`óãÿÌÎÔ ‡€…`ó¿ÄŠ‘D€€†Š€€†Šd‘Zd‡€…p–€…# ‘!i–y‚€€…2i!zÓ8!棇€ƒ³ñ!检€ƒ‡€„!瀘˜b‡€ƒ” bëÿ!瀘‚€dëÿ!çĊ ‡€„‡€ƒ‘€€…–€„ìi2h zÓ] æ²ñ 瀘§€ Ò 瀘”  ç æîÄŠã æ²Ÿ |Ú¡Ôš‚€Éw šwi€$p çđU çÄ çĊ æ í‘7–C¥2j#"{"æ £²ñ¥Š=i#²ñ6"æ£h# ³ñ#h$!"ç"æ p"ç "æ ¢Ä ‘R! ¢i# £k"çĊŖ¬¥2h |Ú |Ú  |Ú ñ¥ŠE zÓ. æ²ñ‘D æ²ñ‘U çÄ ç‚€dëÿ ç€—Ä çĊ æ æ³Ô ç Ā!¥–Ó2h zÓ‘X çÄ æ æ³ñ ç æíĊ–2zÓ52i#²ñ,#î!æík#!æ³ñ‘\#!æ£jh "²Ô € ‘W íhŠò!ç#Ċ–`Šb‡€ŒÅ€ˆ€€‡€‹"²Ô3„ ‡€‹§i€ h‡€‹í"²Ô„ ‡€‹í§h!€#° €#°!€+°!€-° ¡ Ô€€–€Œþ‹c‡€Å€ˆ€€Ž€ j€ i€ h‡€Œ#²Ô„ ‡€Œ§j‡€Œí#²Ô„ ‡€Œí§i‡€Œ¢#²Ô „ ‡€Œ¢§h"€<Ò c‡€Œí^€€ŽŠ?"!°"ƒ€ÑÚ¡Ô'"€*° €$°¡Ôc‡€Œ¢^€€ŽŠ c‡€Œ¢^€€ŽŠ c‡€Œ^€€Ž–€Lˆ`‡€‹Å€ˆŠ‡€‰‡€ŠÄ‡€‰x ²„ ‡€‰x§ƒ€ÔÚ¡Ô„ ‡€‰x§€#ҭ튇€‰‡€‰xíĊ͖€‹š"#Ä$i!çÄ"x!x²Ô5!ç"x§h""xíÄ €+Ò!çĊ €-Ò!çĊ""xîÄ$"x"ï`!ç­ĖÉ$i$#"ïa"xh !x²Ô!ç"x§€.Ò$ í"ï`!ç"x í£Ä–&k$%Ä$x#x²Õ3%i#çÄ#çÄ#çÄ#çÄ#çÄ#ç%§h €*Ò'#çÄ#çÄ!¢i#ç!§€$Ò#çÄ!íi&!$b‹Þ €$Ò/#çÄ#çÄ&!¢$b$x#x²Ô#ç$x§€-Ò $$xíÄ#çċª €<Ò2#çÄ&!í$b$x#x²ñ‘DŠ#ç$x§€>Ó‘DŠ $$xíÄ#çĊs&!$a$xi$x#x²Ôd#ç$x§€.Ò&!í$`#çÄ#ç$x!í£Ä$xi€^h €^Ò!#x²Ô#ç!§hŠ€ h!íiŠå!îi!$x£Ò#çĊ !$x£Ò#çÄ#~Ó$!Ä#ç$x%£Ä–>$#"‘_!"xÄh!x$x² å¡Ô$!x‘]ñ!!xíĊhŠã–‚‡€„怄‡€„xí怅‡€„x‘]i!‡€„x‡€…x³ Ôß!ñ ‡€„‡€…xí怃‡€…ç˜b‡€„xî” bëÿ–€…KŠ„€‹‡ëÿ‡§€€ƒb‚€dëÿ‡ŒxÒ „€ƒ‡Œb‘d‡Œx‡€ƒ²ñ ‘\„€ƒ‡Œb‘d„€ƒ‡Œxa`‘c!‡Œx£‡‹§²ñ‚€×‡‹€ÿ‡‹§í” ŠÝ!‡Œx£‡‹§³ñ‡‹‡‹§” Šäb˜‡‹€ÿ” ‡˜„ ! !£” „ ˜‡‹€ÿ‡‹§í” ‡Œ ˁ| -‚€dëÿe‚€Øë„óÌϟ€ „„óãô.€ +~Ó+} ÚÔ+ç+îÄl„óÌÏñ8„ó3p ÂÌÏñ „ÌônŠ„ó$p ÂÌÏñ$ílŠë£$£nŠ„ó$p ÏÔ$ílŠî$£n&³ñ„„ó&áp ÂôŠ„„ó&p Ãô„„ó‘Eô„óp ÏÔ„„ó ÌÃò€À‘Eô&ínŠÛ„óÌÍÔ€ Š&+£¢€ +}Ò*Ô -‚€ÙëÿŠ-‚€Úëÿ.+}Ò*Ô -‚€ÛëÿŠ-‚€Üëÿ.î€+~±Õ‚(ào'€d³Ô€ Š ' ³Ô€ Š€ +~£€ l$,²Ô*)+~£²ñe€*Ȋ e' €0¢È' oe˜-€ÿ” $ílŠÑ(³ñ e‚€ÝëŠe‚€Þëe˜-€ÿ” ‚€ß-€ÿ” .+~£€+~Ó+£n+{&¢³ñ"„„ó+{&¢áp Ãô„„óò€À‘Eô„óÌÏ+{³ Õ…+ç.§ƒ€àÚÔ%+ç.§€,Ò †˜-€ÿ” Š †˜-€ÿ” .Í.î€+{&¢²ñ‚€ã-€ÿ” Š.`„ó ÌÑEô„ó Ì`óÂÁ¿le$€0¢Èe˜-€ÿ” „`óô+ç+{îċmÿ+| ÚÔ †˜-€ÿ” *Ô&+}Ò‚€ä-€ÿ” Š+}Ó ‚€å-€ÿ” Š+}Ò ‚€æ-€ÿ” -§+z²ñ%-‚€dëÿ+z€ l$,²Ô‚€ç-€ÿ” $ílŠêŠ-e€ È+|ÚÔe€*È-§í+z€ l$,²Ôe˜-€ÿ” $ílŠí– „‹„‚¬ÿ„€‹„‹ëÿ„‹§€€ƒb‚€dëÿ‡‚ ‚€dëÿ‡‚ xÒ „€ƒ‡‚ b‘d‡‚ x‡€ƒ²ñ ‘\„€ƒ‡‚ b‘d„€ƒ‡‚ xa`‘c„€ƒ„‚ ó!‡‚ gb˜‡‚ €ÿ” „‹˜„ ! !£” „ ˜‡‚ €ÿ‡‚ §í” ‡‚ Ė‚³2k#|ÚÔ1#zÒ š%˜w Š %§lj"$²Ô#æ‚x%"§È#æ‚w"íjŠæŠY#çÄ#æ%§¢³ñ%#ç#æ%§p%§‘RŠ2#æ£i%#ç#æ!p!‘R%§!£h%!í#ç#æ p#çÄ ‘R–2€‡z±Õ$‡€ÿÒ‚€è‡€ÿ‡§í” €‡§k‡æ²ñ2‡æ퇁æ£i‡æ!²ñ‡ç!Ä#‡æ²ñ ‡æk‡#ȇæ#¢‡æ²ñ‘\‡æ²ñ‡æ€‡²ñA‡#£h ³ñ ᇁí‡Œ ¢h ‡Òh# ¢€ÿ²Ô‡#í € p# ¢k‡#ÈhŠh‡i ²ñ‡zÒ š€ vŠd € pd Èdi# ¢j‡ç‡æ"¢Ä‡ç‡æ"£Ä‡æ³ñ‡çĊ‡„€…‡§íp„€…‡§í‘[–7a„€ƒ¬ÿ2h zÓ ç§Ó ç 瀗a‘e€€‚a‡€‚‘h–€„º„€‚‚€dëÿ2€‡zÓ[‡ç§Ó‡ç˜„ó‡瀗„€‚‘f„€‚‘hŠ2„ó‘h„óÌÏÔ ‚€é €ÿ” ‚€ê €ÿ §í”  ‡‘hŠ „apa‘[–x2€‡z±Õ˜‡ç§°Õ‡`‘N‡³Ô```§p``§íÈ`€ ȇz°‡æ°¡‡°¡‡æ¢‡æ²¡Ô%``§í€ p`Ț`˜w ‡ç‡æ¢ÄŠ``§íÈ``§€ È`‡‘hŠ ‡̇‘(Š„„€p„€‘[–…aó ‘(–7 ƒ2€€ƒ‡€ƒzÓG‡€ƒæ‡€ƒæÒ ‘X‡€ƒçĊ'‡€ƒæ‡€ƒæ²Ô€ ‘W‡€ƒç‡€ƒæíĊᇀƒæ‘/‡€ƒçĊY‡€ƒ{‡€ƒæ £i!²ñA‡€ƒÔ!‘RŠ6!€ÿ²ñ€ÿhŠ!hb p!²ñb ‘[‡€ƒ{‡€ƒæ £i!€ÿ²ñ€ÿhŠ!hŠÝ‡€ƒæ í‘7–€ƒR 2h zÒ çÄs æ‘/–q 2h ç!àÄ!³ñ çĊ çĖ€ ‚€ë‘&–Ž `p$ € –Õ 2h"î æíj!³ñ! æi! æ²ñ zÒ‘X! æ£iŠê zÒ!î"î”  ç!Ä ç"Ėö a„€‚¬ÿ2zÓ2h çaëÿ 瀗Ė€ƒ!‚€í‘J–!‚€ó‘J–#æ‚çÉÒ‘QŠ‘Q#ç Ä#ç Ä#ç Ä#çÄ#çÄ#çÄ#瀘‚€dëÿ‹Å#ç Ä#ç Ä$³Ÿ$#æ³ Ô,#ç Ä$#æ²ñ#ç Ä$#æÓ¥$³ñl$#æ²ñ#æl$ÿ#{³ñ$#{Œj"i"hŠX$#{Œ$#{Œ¢$#{€@Œ$#{€@Œ€@¢¢i$#{€ Œ$€ Œ#{€ Œ¢h! ‘Q#ç Ä#ç $ĖÜ)€`„€¬ÿ€€ƒ–€‚'*j!Ò šwÔjŠ1!³ñ*j4h ˜Ó" y!Òj xæ Ô xæ ÔjŠj˜hŠ zhŠÚ–W*¥`"È`"È#Ó !x`¹ñ ¥!x`Å–a*…h–Œ*d„ ó ÌÑE ÌÂô`„ ó‘Eô`ódóÁ¿€ – Á*Š `dó„ ó” Âô`óò€ Îñ„ ò€$ôŠ ‘DŠ„ `óô– , „ óÌÍÔ„Ìô‹E„óÌÍÔ„ óÌÏÔ„ÌôŠ ‘D„ò€*ô‹"„óÌÍÔ„Ìô‹„óÌÏŸÕ€dÌô„ óÿÌÎñ8„óáÌÍÔ„ ónÔdáÌôŠdÌôŠ‘D„ ónÔdò€0äôŠdò€6ôŠ\„ ó„ óŸÌÍñ‘DŠL„ óŸ€ (²ñ'd„óä„ óoô*Ô ddó” ô(ÔddóäôŠ(ဠ€ )+²Ôddó„óÃô)í€ ŠíŠd„ó„ óoô*Ô ddó” ôdóãÿÌÎÔ9„óãÿÌÎÔ.„ óÿÌ΄ óÌΟ¡Ô„óŸ̄óÍÔ„ óŸÌ„ óÍÔddó¿Ìô„dóô–1,„ dó`ó‘>ô–O, „ -Ìôd,Ìô„„ ódó‘>ô–Z,d`óô–d,d`óô–n,`ó¿l–x,a Ìô–á,„ eóôeó¢p Îñ€EpaÌôeóã@ÌÏÔaeó@ÌÑEôeeóaó@ÌÂÁôeóÌÏñ eóÌÁŸhŠeóŸh„ Ìaó@ÌÂÀô– -¥¥=…²Ô† =×€€” =í¥Šê¥†Ìô¥‘m‘+‚^‘F”‘5– ''''(#ÿÿÿÿ ''''(# ''''(#ÿÿÿÿÿÿÿÿûÿ¹@ÿÿ ''''(# ''''(# ''''(# ''''(#!Compiler/Library Version Mismatch> NOT YET IMPLEMENTEDÿÿÿ -327688-  00:0:00/0/0 0.-E 00.0-ENTER RANDOM NUMBER: RUN PROGRAM,BLIBB BLIB,FILEOPSSœÿÏÿáÿäÿíÿíÿ 0  0ISTART2NOT ENOUGH INPUTTMISSING NUMBERRTOO MUCH INPUTT  > - -+EP0<-+*,  ? FILE CREATE FILE DELETELP011PRINTER::PRINTER#11CONSOLE#22KEYBOARDD#66PRINTER#77REMIN#88REMOUTTCONSOLEPRINTERKEYBOARDDREMINREMOUTTKEYBOARDDCONSOLEPRINTERREMINREMOUTTCONSOLE::PRINTER::   SETFILELOCC$.,H3ˆ± Œ\( À É ¡ Š Ï © ‚ ç 3 Ø x Á»^YUHíÖ–H3Ç_: W¬>Q94/*c.rñèPI-Óœ…~mIB;+Å¿`€ ?   ¥ë麬âì ŠL62üº›|v9,àoç$·˜ˆy™mso*** HEAPOPS GOTOXY EXTRAHEA STRINGOP REALOPS PASCALIOEXTRAIO FILEOPS SCREENOPCOMMANDI KERNEL €€€€€€€€€€€€€€€€ódcÖ vëvë0MýO@~ëÀ7—ª2   ×þ  þ Ìë’ëGÿR ×þ n1   CONST "VERSION = '[IV.13]'; {if changed, recompile initialize & getcmd} "MMAXINT = 32767; { MAXIMUM INTEGER VALUE } "MAXDIR = 77; { MAX NUMBER OF ENTRIES IN A DIRECTORY } "VIDLENG = 7; { NUMBER OF CHARS IN A VOLUME ID } "TIDLENG = 15; { NUMBER OF CHARS IN TITLE ID } "MAXSEG = 15; { MAX CODE SEGMENT NUMBER } "FBLKSIZE = 512; { STANDARD DISK BLOCK LENGTH } "DIRBLK = 2; { DISK ADDR OF DIRECTORY } "AGELIMIT = 300; { MAX AGE FOR GDIRP...IN TICKS } "EOL = 13;  { END-OF-LINE...ASCII CR } "DLE = 16; { BLANK COMPRESSION CODE } "NAME_LENG = 23; { Number of characters in a full file name} "SWAPPING = 0; { Swapping segment status} "P_LOCKED = -1; { Position locked segment status} "STACK_SLOP = 40; { Number of words of temp for procedure stack} "MEM_LINK_SIZE = 4; { Number of words in heap record}  "sys_error = 0; { Unknown system error} "proc_error= 3; { Unknown procedure error} "stk_error = 4; { Stack overflow error} "sys_io_error = 9; { System I/O error} "halt_error = 14; { Programmed halt } "heap_error= 15; { Heap operation error} "seg_fault = 128; { Segment fault} "stk_fault = 129; { Stack fault} "heap_fault= 130; { Heap operation fault} "pool_fault= 131; { Used to consolidate pool after purge}   TYPE  "IORSLTWD = (INOERROR,IBADBLOCK,IBADUNIT,IBADMODE,ITIMEOUT, .ILOSTUNIT,ILOSTFILE,IBADTITLE,INOROOM,INOUNIT, .INOFILE,IDUPFILE,INOTCLOSED,INOTOPEN,IBADFORMAT, .IBUFOVFL, i_write_prot, i_ill_block, i_ill_buf, .i_ill_size);  5{ COMMAND STATES...SEE GETCMD }  "CMDSTATE = (sys_boot, sys_init, sys_halt,UPROGNOU,UPROGUOK,SYSPROG, .COMPONLY,COMPANDGO,LINKANDGO,sys_debug); " E{ CODE FILES USED IN GETCMD } E "SYSFILE = (ASSMBLER,COMPILER,EDITOR,FILER,LINKER);  E{ ARCHIVAL INFO...THE DATE }  "DATEREC = PACKED RECORD .MONTH: 0..12; { 0 IMPLIES DATE NOT MEANINGFUL } .DAY: 0..31; { DAY OF MONTH } .YEAR: 0..100 { 100 IS TEMP DISK FLAG } ,END { DATEREC } ;  E{ VOLUME TABLES } "UNITNUM = 0..127; "VID = STRING[VIDLENG];  E{ DISK DIRECTORIES } "DIRRANGE = 0..MAXDIR; "TID = STRING[TIDLENG];  "full_id = STRING[name_leng]; "file_table = ARRAY [sys_file] OF full_id; " "FILEKIND = (UNTYPEDFILE,XDSKFILE,CODEFILE,TEXTFILE,INFOFILE, .DATAFILE,GRAFFILE,FOTOFILE,SECUREDIR,SUBSVOL);  "DIRENTRY = PACKED RECORD /DFIRSTBLK: INTEGER; { FIRST PHYSICAL DISK ADDR } /DLASTBLK: INTEGER; { POINTS AT BLOCK FOLLOWING } /CASE DFKIND: FILEKIND OF 1SECUREDIR, 1UNTYPEDFILE: { ONLY IN DIR[0]...VOLUME INFO } 4(filler_1 : 0..2048; {13 bits} 5DVID: VID; { NAME OF DISK VOLUME } 5DEOVBLK: INTEGER; { LASTBLK OF VOLUME } 5DNUMFILES: DIRRANGE; { NUM FILES IN DIR } 5DLOADTIME: INTEGER; { TIME OF LAST ACCESS } 5DLASTBOOT: DATEREC); { MOST RECENT DATE SETTING } 1XDSKFILE,CODEFILE,TEXTFILE,INFOFILE, 1DATAFILE,GRAFFILE,FOTOFILE,SUBSVOL: 4(filler_2 : 0..1024; {12 bits} 5status : BOOLEAN; {Filer kludge temporary} 5DTID: TID; { TITLE OF FILE } 5DLASTBYTE: 1..FBLKSIZE; { NUM BYTES IN LAST BLOCK } 5DACCESS: DATEREC) { LAST MODIFICATION DATE } -END { DIRENTRY } ;  "DIRP = ^DIRECTORY;  "DIRECTORY = ARRAY [DIRRANGE] OF DIRENTRY;  E{ FILE INFORMATION }  "CLOSETYPE = (CNORMAL,CLOCK,CPURGE,CCRUNCH); "WINDOWP = ^WINDOW; "WINDOW = PACKED ARRAY [0..0] OF CHAR; "FIBP = ^FIB;  "FIB = RECORD *FWINDOW: WINDOWP; { USER WINDOW...F^, USED BY GET-PUT } *FEOF,FEOLN: BOOLEAN; *FSTATE: (FJANDW,FNEEDCHAR,FGOTCHAR); *FRECSIZE: INTEGER; { IN BYTES...0=>BLOCKFILE, 1=>CHARFILE } *f_lock : SEMAPHORE; *CASE FISOPEN: BOOLEAN OF ,TRUE: (FISBLKD: BOOLEAN; { FILE IS ON BLOCK DEVICE } 3FUNIT: UNITNUM; { PHYSICAL UNIT # } 3FVID: VID; { VOLUME NAME } 3FREPTCNT, { # TIMES F^ VALID W/O GET } 3FNXTBLK, { NEXT REL BLOCK TO IO } 3FMAXBLK: INTEGER; { MAX REL BLOCK ACCESSED } 3FMODIFIED:BOOLEAN;{ PLEASE SET NEW DATE IN CLOSE } 3FHEADER: DIRENTRY;{ COPY OF DISK DIR ENTRY } 3CASE FSOFTBUF: BOOLEAN OF { DISK GET-PUT STUFF } 5TRUE: (FNXTBYTE,FMAXBYTE: INTEGER; must be read in without breakpoints} "{ added for the breakout of initialize } "menupresent , { true if System.Menu present } "realsref , { true if reals are being used by user } "pooloverflow : Boolean ; " "heapptr : ^Integer ; { used to mark userprog assoc. structures } "{ added for the breakout of getcmd } "use_prog_slot : integer ; { sys_evec index of userprog } " " "procedure exec_error(bad_e_rec_p:e_rec_p; n_words,err:integer); "procedure loadseg(segerec:erecp); "procedure rlocseg(segerec:erecp); "function ptr_add (p : mem_ptr; n_words : integer) : int_p; "function ptr_sub (p_0, p_1 : mem_ptr) : integer; "function ptr_less (p_1, p_2 : mem_ptr) : boolean; "function ptr_gtr (p_1, p_2 : mem_ptr) : boolean; "function ptr_geq (p_1, p_2 : mem_ptr) : boolean; "procedure print(s:string); "procedure printint(i:integer); "procedure writestr(s:string); "procedure checkunit(lvid:vid; lunit:unitnum); "procedure moveseg(segsib:sibp; srcpool:poolptr; srcoffset:memptr); " implementation KERNEL –  :ŠDISKCHANINITSTUF €€€€€€€€€€€€€€€€™DISKCHANE#@Copyright (c) 1980, 1981, 1982, 1983 SofTech Microsystems, Inc. Ü` Žþ n>¥INITSTUF’E#†ih⌃€ÛÇqj"ƒ€ÚÔ íh! Œ"¢€0£iŠ,"Ò( ²ñ#šspš€ spšsp îh! i"€ ° ²Ÿ¡Ô¡!kštp–æ=îi¥5!²Ô#5×áĈ5×áÄ5í¥Šåh=îi¥5!²Ô,ˆ ×xáÓ í=hŠî#5× Ĉ ×Ä "¢=h5í¥ŠÏ–¬„€„„€­¬P†‚1‡€¯€€ƒštpš„€„˜t pštpš‚€ t pïh =îŒÚÔ燀ƒ š‚€t p‡€ƒç€€ïć€ƒæ€€=îŒÚÔܚ‚€/t p‡€ƒç€ïć€ƒæ€8îŒÚÔܖ€¯!štpštpš‚€Ct pš‚€Rt pštpštpš‚€Ut pštpštpštpš€‡æ î¥ š‚€_t pš9tpš‚€ut p¥ ; 9Œ€0ÛÚÔ͚‚€wt pš9tpš‚€t p¥ : 9Œ€0ÛÚÔÍ;:Ò'š‚€‘t pƒ€±Çq€N°¥‚štpŠ¥‚;`p$`×x¥ `×x¥`×x¥ :`p$`×x<±`×x=± `×x8± Ôštpš‚€·t pštpqš‚€Öt p¥1=îŒÚÔæ†€‘‚€ú†‚……€³…‚ ;:± ¥‚7Œ=Œî¥–ÿÿ" What is the interleaving ratio? % What is the sector skew per track? ' What is the first interleaved track? FLOPPY INTERLEAVING CHANGER [B6]] Type "!" to exitt* What is the source unit number? (4,5,9...) / What is the destination unit number? (4,5,9..) ? Are you writing onto the same diskette you are reading from? @< Both source and dest units must have same characteristics..F What is the interleaving ratio of the drives used for the transfer? SOURCE DISK TYPE:DESTINATION DISK TYPE::Eu Ã9DISKCHANOE#Fš‚€t pƒ€ Ç‘¥‚—štpÔèštp–’p"€ÿh aÐÚñ#š`t p €!Ò‘ ƒ€ÚÔ €a£€A¢hŠÕ €!€~ŒÚÔ š sp €–ï„€„‡ŀ‚=ƒh ‡€ƒ²Ô7„€„ ×x‡‡Œ¢=i‡Òb!׆ ×xĊ b ׆!×xÄ íhŠÂ†bŀ€–4îih !²Õœ=îj¥2"²ÕŠ:…ׁ†‚2×x =Œ¢Œ= 6¢…€¢Œ†‚2×x¢ppÓQštpš‚€t pš 6¢…€¢tpš‚€#t pš†‚2×xtpštp;:±…‚ Ô‘2í¥‹pÿ íh‹^ÿ–“štpštp…‚ñ8š‚€)t pš;tpš‚€8t pš:tpš€,sp‘7Œ=Œî¥……€²ñ 8…£¥ Š8…€£¥ …‚Ô¥Š8¥…‚Ô64¢8²ñ86£¥Š 64£³ñ6¥4²ŸÕ9…‚Ôš‚€Ct pš;tp‘…‚ñ64£¥4îh¥3 ²Õ݆†”Å€€=îi¥2!²Õ‚;††‚2×x×x=6…¢3¢Œ†‚2×x¢ppÓQštpš‚€Rt pš6…¢3¢tpš‚€^t pš†‚2×xtpštp;:±…‚ Ô‘2í¥‹xÿ†€‘63¢‘†63¢‘3=Œ¥=îi¥5!²Ô†5×x…0ׁJDISKSIZEätDph Ó"š‚€s pš spšspp–Æšspšspšspš‚€ s pšspšspš¥„ü…„üæ …„üçɢ‚€s pš1spš‚€-s pš†spšspñšsp2 1Œ€0ÛÚÔž¥2†ìp‘†„û†Ɓ€MË× y@Úñ†„ûr¥†€MË× y@ÚՔš‚€/s pš†€MË× spš‚€9s pšspš‚€=s pš†spšspñšsp2†0îp‘0 ²ñƆ€MË× ç0Ä3Ô†„ûr2†ìp‘Šš‚€Ws pšsp– I/O Error #DISK SIZE CHANGER [A4]]. Change directory size on what unit? (4,5,9...)  Current size is  blocks2 What is new directory size in 512 byte blocks ?  No directory on volumee $PASCALIOFILEOPS  O^£2Š{ (*$R-,I-*)  PROGRAM REMOTETALK;   { This item is the property of SofTech Microsystems, inc. }  { and it may be used, copied, or distributed only as permitted }  { in a written license from that company. }  !{ This is an unpublished work copyrigh1977, 78, 79 } !{ by the Regents of The University of California a 1980, 81, 82 } !{ by SofTech Microsystems, Inc. } !  { *Source and object code for the REMTALK utility are provided "in "as is" condition. No warranty is made, particularly with respect "to fitness for a particular purpose. *Copies of source and object code for the REMTALK utility may "be used for any lawful purpose providing each copy retains all markings "and legends that appear on or in the source and object code items. Failure "to include such markings and legends is a violation of U.S. Copyright Laws. !} ! !{$C Copr (c) 1977,78,79 Regents UC, 1980,81,82 SofTech Microsystems} ! !{Modified to Pack and Unpack data onto printable characters "0" "through "?" and to transmit minimum length messages of 2 bytes, "detect using incompatible versions of this program, and initialize "buffers sent over the remote port to spaces. "July 2, 1983}    CONST version='IV.0 a2'; &res_segs='fileops,pascalio,extraio,heapops'; {resident segments} &slop=2000; {extra slop for buffer allocation} &  REMIN=7; &REMOUT=8; &FINALBLOCK=50; &NOTLASTBLOCK=51; &SENDAGAIN=52; &SENDNEXT=53; &ABORT=54; &UNSLAVE=55; &CLOSEFILE=56; &RECEIVEFILE=57; &SENDFILE=58; &OPENFILE=59; &FILEOPENED=60; &BUMFILE=61;  FILECLOSED=62;   TYPE BYTE=0..255; %BLOCK=PACKED ARRAY[0..511] OF BYTE; %TWOBYTES=PACKED ARRAY[0..1] OF BYTE; %SETOFCHAR=SET OF CHAR; %BLOCKARRAY=ARRAY[0..0] OF BLOCK; %BLOCKPTR=^BLOCKARRAY;   VAR BUFF,FOON:BLOCKPTR; $PACKBLOCK:BLOCK; $FILENAME:STRING; $INCH:CHAR; $F:FILE; $COMMAND:PACKED ARRAY[0..81] OF BYTE; $FIRSTBLOCK,UNITNUM,LASTBLOCK,UNOCNTR,BUFFSIZE:INTEGER; $incompatible: boolean;  "PROCEDURE rpt_incompatibility; $BEGIN &WRITELN; &WRITELN('You are using incompatible versions of REMTALK'); $END; {rpt_incompatibility} $ "PROCEDURE send_cmmd; $BEGIN &command[1] := command[1] + 128; &UNITWRITE(remout,command,82,0,12); $END; {send_cmmd} $ "PROCEDURE get_cmmd; $BEGIN &UNITREAD(remin,command,82,0,12); &IF command[1] >= 128 THEN (command[1] := command[1] - 128 &ELSE (incompatible := true; $END; {get_cmmd} $ "PROCEDURE SIGNAL(COMMAND:INTEGER); "VAR WART:TWOBYTES; "BEGIN $WART[0]:=COMMAND; $wart[1] := ORD(' '); $UNITWRITE(REMOUT,WART[0],2,0,12); "END;  "FUNCTION WAIT:INTEGER; "VAR WART:TWOBYTES; "BEGIN $UNITREAD(REMIN,WART[0],2,0,12); $WAIT:=WART[0]; $IF wart[1] <> ord(' ') THEN &BEGIN (rpt_incompatibility; (exit(program); &END; "END; " "PROCEDURE UNO(CH:CHAR); "BEGIN $UNOCNTR:=UNOCNTR+1; $WRITE(CH); $IF UNOCNTR=40 THEN $BEGIN &WRITELN; &UNOCNTR:=0; $END; "END; " "FUNCTION GETCHAR(OKSET:SETOFCHAR):CHAR; "VAR CH:CHAR; "BEGIN $REPEAT &READ(KEYBOARD,CH); &IF CH IN ['a'..'z'] THEN (CH:=CHR(ORD(CH)-ORD('a')+ORD('A')); $UNTIL CH IN OKSET; $WRITELN(CH); $GETCHAR:=CH; "END; " "PROCEDURE RECEIVEIT; "VAR INBLOCK:PACKED ARRAY[0..1025] OF BYTE; &JUSTONE:TWOBYTES; &BADOUTPUT:BOOLEAN; &BYTENUM,CHECKSUM,BUFFPTR,BYTE0,BYTE1,ANSWER:INTEGER; " $FUNCTION PUTBLOCK(VAR ONEBLOCK:BLOCK):BOOLEAN; $BEGIN &PUTBLOCK:=TRUE; &BUFF^[BUFFPTR]:=ONEBLOCK; &BUFFPTR:=BUFFPTR+1; &IF BUFFPTR=BUFFSIZE THEN &BEGIN (PUTBLOCK:=BLOCKWRITE(F,BUFF^,BUFFSIZE)=BUFFSIZE; (BUFFPTR:=0; &END; $END; $ "BEGIN $BUFFPTR:=0; $UNOCNTR:=0; $BADOUTPUT:=FALSE; $REPEAT &ANSWER:=WAIT; &IF ANSWER=NOTLASTBLOCK THEN &BEGIN (UNITREAD(REMIN,INBLOCK,1026,0,12); (CHECKSUM:=0; (IF inblock[0] < 48 THEN *BEGIN ,rpt_incompatibility; ,exit(program); *END; (FOR BYTENUM:=0 TO 511 DO (BEGIN *{Pack data from characters "0" through "?"} *byte0 := inblock[bytenum + bytenum]; *byte0 := byte0 - 48 {subtract out the "1" added during unpacking}; *byte1 := inblock[bytenum + bytenum + 1]; *byte1 := byte1 - 48 {subtract out the "1" added during unpacking}; *checksum := checksum + byte0 + byte1; *PACKBLOCK[BYTENUM]:=BYTE0*16+BYTE1; (END; (checksum := checksum + 48; (IF CHECKSUM=ORD(ODD(127) AND ODD(INBLOCK[1024]))*128+ +ORD(ODD(127) AND ODD(INBLOCK[1025])) THEN (BEGIN *IF PUTBLOCK(PACKBLOCK) THEN *BEGIN ,UNO('.'); ,SIGNAL(SENDNEXT); *END ELSE *BEGIN ,BADOUTPUT:=TRUE; ,SIGNAL(ABORT); *END; (END ELSE (BEGIN *UNO('?'); *SIGNAL(SENDAGAIN); (END; &END ELSE (IF ANSWER=ABORT THEN *BEGIN ,WRITELN; ,WRITE(' ERROR in input file'); *END; $UNTIL ANSWER IN [FINALBLOCK,ABORT]; $BADOUTPUT:=BADOUTPUT OR (BLOCKWRITE(F,BUFF^,BUFFPTR)<>BUFFPTR); $CLOSE(F,LOCK); " IF (IORESULT<>0) OR BADOUTPUT THEN $BEGIN &SIGNAL(ABORT); &WRITELN; &WRITE(' ERROR in output file'); $END ELSE &SIGNAL(FILECLOSED); "END; " "PROCEDURE SENDIT; "VAR ANS,BYTE0,BYTE1,BYTENUM,CHECKSUM,BLOCKSREAD,BUFFPTR:INTEGER; &BADINPUT:BOOLEAN; &UNPACKBLOCK:PACKED ARRAY[0..1023] OF BYTE; &JUSTTWO:TWOBYTES; " $FUNCTION GETBLOCK(VAR ONEBLOCK:BLOCK):BOOLEAN; $BEGIN &BUFFPTR:=BUFFPTR+1; &IF BUFFPTR>=BLOCKSREAD THEN &BEGIN (BLOCKSREAD:=BLOCKREAD(F,BUFF^,BUFFSIZE); (BADINPUT:=IORESULT<>0; (BUFFPTR:=0; &END; &GETBLOCK:=(BLOCKSREAD<>0) AND (NOT BADINPUT); &ONEBLOCK:=BUFF^[BUFFPTR]; $END; $ "BEGIN $BADINPUT:=FALSE; $UNOCNTR:=0; $BUFFPTR:=-1; $BLOCKSREAD:=0; $ANS:=SENDNEXT; $WHILE GETBLOCK(PACKBLOCK) AND (ANS<>ABORT) DO $BEGIN &CHECKSUM:=0; &SIGNAL(NOTLASTBLOCK); &FOR BYTENUM:=0 TO 511 DO &BEGIN ({unpack data onto characters "1" through "?".} (BYTE0:=PACKBLOCK[BYTENUM] DIV 16; (checksum := checksum + byte0; (byte0 := byte0 + 48; {add in the character "0"} (UNPACKBLOCK[BYTENUM+BYTENUM]:=BYTE0; (BYTE1:=ORD(ODD(PACKBLOCK[BYTENUM]) AND ODD(15)); (checksum := checksum + byte1; (byte1 := byte1 + 48; {addin the character "0"} (UNPACKBLOCK[BYTENUM+BYTENUM+1]:=BYTE1; &END; &UNITWRITE(REMOUT,UNPACKBLOCK,1024,0,12); &checksum := checksum + 48; &JUSTTWO[0]:=CHECKSUM DIV 128; &JUSTTWO[1]:=ORD(ODD(CHECKSUM) AND ODD(127)); &UNITWRITE(REMOUT,JUSTTWO,2,0,12); &ANS:=WAIT; &CASE ANS OF (SENDNEXT :UNO('.'); (SENDAGAIN:BEGIN 4BUFFPTR:=BUFFPTR-1; 4UNO('?'); 2END; &END; $END; $CLOSE(F); $IF BADINPUT THEN $BEGIN &WRITELN; &WRITE(' ERROR in input file'); &SIGNAL(ABORT); $END ELSE &SIGNAL(FINALBLOCK); " IF WAIT<>FILECLOSED THEN &BEGIN (WRITELN; (WRITE(' ERROR in output file'); &END; "END; " "PROCEDURE DOCOMMAND(SENDORRECEIVE:CHAR); "VAR CH:CHAR; &I,TRANSFERUNIT:INTEGER; &ANSWER:TWOBYTES; &S:STRING; "BEGIN $FILLCHAR(COMMAND,82,' '); $IF SENDORRECEIVE='S' THEN $BEGIN &COMMAND[0]:=SENDFILE; &REPEAT (WRITE(' Send what file? '); (READLN(S); (IF LENGTH(S)=0 THEN *EXIT(DOCOMMAND); (RESET(F,S); &UNTIL IORESULT=0; &REPEAT (WRITE(' Send to what remote file? '); (READLN(S); (IF LENGTH(S)=0 THEN (BEGIN *CLOSE(F); *EXIT(DOCOMMAND); (END; (FOR I:=0 TO LENGTH(S) DO *COMMAND[I+1]:=ORD(S[I]); (send_cmmd; &UNTIL WAIT=FILEOPENED; &SENDIT; $END ELSE $BEGIN &REPEAT (WRITE(' Receive what remote file? '); (READLN(S); (IF LENGTH(S)=0 THEN *EXIT(DOCOMMAND); (COMMAND[0]:=OPENFILE; (FOR I:=0 TO LENGTH(S) DO *COMMAND[I+1]:=ORD(S[I]); (send_cmmd; &UNTIL WAIT=FILEOPENED; &REPEAT (WRITE(' Write to what file? '); (READLN(S); (IF LENGTH(S)=0 THEN (BEGIN *FILLCHAR(command,82,' '); *COMMAND[0]:=CLOSEFILE; *send_cmmd; *EXIT(DOCOMMAND); (END; (REWRITE(F,S); &UNTIL IORESULT=0; &FILLCHAR(command,82,' '); &COMMAND[0]:=RECEIVEFILE; &send_cmmd; &RECEIVEIT; $END; "END; " "PROCEDURE DOSLAVECOMMANDS; "VAR I, &cmmd:INTEGER; &S:STRING; " "BEGIN $REPEAT &get_cmmd; &{check for incompatible versions here} &IF (incompatible) AND (command[0] <> unslave) THEN (BEGIN *rpt_incompatibility; *exit(program); (END; &IF not incompatible THEN (BEGIN *FOR I:=0 TO COMMAND[1] DO *S[I]:=CHR(COMMAND[I+1]); (END; &WRITELN; &CASE COMMAND[0] OF (CLOSEFILE :CLOSE(F); (SENDFILE :BEGIN 6REWRITE(F,S); 6IF IORESULT=0 THEN 6BEGIN 8WRITE('Opening new file: ',S); 8cmmd := FILEOPENED; 6END ELSE 6BEGIN 8WRITE('ERROR opening new file: ',S); 8cmmd := BUMFILE; 6END; 6signal(cmmd); 6WRITELN; 6IF cmmd = FILEOPENED THEN 8RECEIVEIT; 4END; (RECEIVEFILE:SENDIT; (OPENFILE :BEGIN 6RESET(F,S); 6IF IORESULT=0 THEN 6BEGIN 8WRITE('Opening old file: ',S); 8cmmd := FILEOPENED; 6END ELSE 6BEGIN 8WRITE('ERROR opening old file: ',S); 8cmmd := BUMFILE; 6END; 6signal(cmmd); 4END; &END; $UNTIL COMMAND[0]=UNSLAVE; "END; "  BEGIN "incompatible := false; "buffsize:= 1 + ((varavail(res_segs)-slop) div 256); "if varnew(buff,buffsize*256) = 0 $then &begin & writeln('program error allocating buffer'); (exit(program); &end; "WRITELN('REMTALK [',version,'] - press S(lave first'); "REPEAT $WRITE('M(aster S(lave Q(uit '); $CASE GETCHAR(['M','S','Q']) OF &'M':BEGIN ,REPEAT .FILLCHAR(command,82,' '); .WRITE(' S(end R(eceive Q(uit '); .INCH:=GETCHAR(['S','R','Q']); .CASE INCH OF 0'S', 0'R':DOCOMMAND(INCH); 0'Q':BEGIN 6COMMAND[0]:=UNSLAVE; 6send_cmmd; 4END; .END; .WRITELN; ,UNTIL INCH='Q'; *END; &'S':DOSLAVECOMMANDS; &'Q':EXIT(REMOTETALK); $END; $WRITELN; "UNTIL FALSE;  END. ¢ DIRINFO €€€€€€€€€€€€€€€€#D9H12FMUš<£$Ö t58ç20<Æ<# ¶þ „çLçú2Q ãþ *4 "uses $(*$U WILD.CODE*) wild; " "Type $D_DateRec = Packed Record 2Month : 0..12; 2Day : 0..31; 2Year : 0..100; 0End; $  $D_NameType = (D_Vol, D_Code, D_Text, D_Data, D_SVol, D_Temp, D_Free); $ $D_Choice = Set of D_NameType; . $D_ListP = ^D_List; $D_List = Record /D_Unit : Integer; { Unit # of entry } /D_Volume : String[7]; { volume name of unit } /D_VPat : D_PatRecP; { volume pattern info } /D_NextEntry : D_ListP; { Next entry in list } /Case D_IsBlkd : Boolean Of 1True : (D_Start, { Starting block of entry } 9D_Length : Integer; { Length (in blocks) of entry } 9Case D_Kind : D_NameType Of ;D_Vol, { Everything but D_Free } ;D_Temp, ;D_Code, ;D_Text, ;D_Data, ;D_SVol : (D_Title : String[15];{ File name } ED_FPat : D_PatRecP; { name pattern info } ED_Date : D_DateRec; { File date } ECase D_NameType of { # of files on vol } GD_Vol : (D_NumFiles : Integer))); -End; + %D_Result = (D_Okay, { Mission accomplished } 1D_Not_Found, { Couldn't find name and/or type } 1D_Exists, { Name already exists; no name change made } 1D_Name_Error, { Illegal string passed } 1D_Off_Line, { Volume not on line } 1D_Other); { Miscellaneous error } %  "Function D_Dir_List(D_Name : String; D_Select : D_Choice; ;Var D_Ptr : D_ListP; D_PInfo : Boolean) : D_Result; "{ Creates pointer to list of names of specified NameTypes $(D_Select), matching specified D_Name (wildcard characters allowed). In- $cludes information about pattern matching that occurred if requested $(by D_PInfo) } $ "  "Function D_Scan_Title(D_Name : String; Var D_VolID, D_TitleID : String; 4Var D_Type : D_NameType; Var D_Segs : Integer) : D_Result; "{ Parses D_Name } & "Function D_Change_Name(D_OldName, D_NewName : String; D_RemOld : Boolean) : D_Result; "{ Changes file name in D_OldName to name in D_NewName, removing already $existing files of name in D_NewName if D_RemOld is set } " "Function D_Change_Date(D_Name : String; D_NewDate : D_DateRec; ND_Select : D_Choice) : D_Result; "{ Changes date of directory or file name in D_Name to date specified by $D_NewDate. D_Name may contain wildcards } " "Function D_Rem_Files (D_Name : String; D_Select : D_Choice) : D_Result; "{ Removes file of specified name (wildcards allowed) } " "Procedure D_Lock; "Procedure D_Release; "{ Provide means to limit use of DirInfo routines to one task at a time " in multi-tasking environments } $ "Function D_Krunch (D_Unit, 5D_Block : Integer) : D_Result; "{ Collects all unused space on a volume around D_Block. This unit must $not be in use when this operation is performed. } $ "Function D_Mount (D_File_Name : String) : D_Result; "Function D_DisMount (D_Vol_Name : String) : D_Result; "{ Provides a means of mounting and dismounting subsidiary volumes. $Wild cards may be used. } " $ "  {*************************************************************************} "  Implementation ¡ DIRINFO 9 D9H7›€Ðߛ€ÐÞ`áÄ2  ¥3í¥–L3î¥3Ò˜¥†ޖ™jh% ì§i!›ZÐÚÔ ##x Œ!€0£¢ÄŠj íh $°"å Ô× °$°¡Ô% î지*Ò#áÄj"n–sW„/„[¬Pk‚€„/˜ti!²ñ!îiŠ„/§i!²ñ€] p!²ñ‡Z„/˜e!teëP„/!t„/§ÒlŠ"‚€„/˜th °l$å ²Ÿ¡Ô „/ ‡Y l$ñk$‡Z§²Ÿ¡ÔJ„/‡Z˜e‡Z§£teëP„/‚€è„/‚€è Ô‡XĊ„/‚€ èÔ‡XĊ„/‚€ èÔ‡XÄ#€]–\}[„3„`¬P‡_‚€ëP‡^‚€ëP‡]ć\Äik€ oml!„3§²Õ®„3!ì§j"€ Ò(ño„3!t‹’(Ô€ 'Ô€b‡_‚€ëP‡^‚€ëP‡\Äp"ƒ€ÚñIn"Š"%ÔmnŠ$ÔlnŠ!ÒnŠ !ÒnŠր&ñ€b‡_‚€ëP‡^‚€ëP‡\Äp"€a³"€z²¡Ô „3!ì"€a£€A¢È!íi‹Iÿ„3§²ñ„3지*Ò‡_›@ëP„3t‚€3„3˜ti!²Ô‡_›@èñ‡_›<ëP!Ò„3tЇ_„3˜„ !ît„ ëP„3!t„3§²ñg„3지#Ò^n„3§€ h )²Ô„3 짃€4Úñn íhŠæ„3§³ñn&Ô‡_„3ëP„3‚€ëPŠ€b‡_‚€ëP‡^‚€ëP‡\Äp„3‚€èÔ‡]ć_§²ñk#°„3§²Ÿ¡Ô „3˜‡^‡\‡] k#€b#Ó‡_‚€ëP‡^‚€ëP‡\ĖaŒ+b„,¬Phi å!b§³Ÿ¡Ô!!íib!지%Ò!íiŠb!짃€8ÚÔhŠÔ €.–-ä+b„,¬Phi b§²!¡Ô b 지=°i íhŠê!€.–-\h$%ìppi!Ó !  ÒhŠhŠP%€MË× k#y±#y ±¡Ôb%Äbs#çɁÚ#ç§²¡#惀@Ú¡Ôšæ$€Ë× #çëŠh n–Â-d„2¬Pkd§²ŸÕMd지#°d§²Ÿ¡ÕŽjd"짛ZÐÚi!Ô‡/‡/x Œd"ì§¢€0£Ä"íj!å"d§²Ÿ ÔÓ!ñkŠ@‡/xš€‡²Ô6šæ‡/x€Ë× |Ô ‡4‡/x‘kŠšæ‡/x€Ë× §²ñkŠk#°‡0¡Ô/šæ‡/x€Ë× ˜šæ‡/x€Ë× ˜‡.‡0rh‡.xd§ÄЇ.˜Ä‹ˆhk‡/‡/xíĚæ‡/x€Ë× |Ô ‡4‡/x‘kŠšæ‡/x€Ë× §²Ôk#Ò2‡1Ôd˜šæ‡/x€Ë× ˜‡.‡0rhŠdšæ‡/x€Ë× èh ‡/xš€‡° Ôƒ ÔkŠk#€5–4}+b„0¬Ph‡3€MË× æ²Ÿb§²Ÿ¡Õ…‡/x‡3€MË× æ³Ÿ å¡Ôn‡/‡/xíć3‡/x€MË× i!ç  ɀdÒ‡-Ċ1!çÉÒ‡-Ċ"!çÉÒ‡-Ċ!çÉ Ò‡-Ċ‡-ć-x‡.ÚÔb˜!瘇,‡2rh‹}ÿЇ/‡3€MË× æÄ €4–3,c„1¬Pb‡0Å`u i!­Ä!çšæ­€Ë× ë!ç­Ä!ç˜Ä!çšæ­€Ë× |Ä!Ô9!ç ‡/Ä!ç‡.‡/£Ä!ç ‡3ć3Ó!ç cë!ç‡4Ä!çbŇ3Ò!ç‡-Ä­„x˜Ò­„ Ċ­ç Ä Š–4j(' Õš"lˆ^­„~ˆ5˜b­„€`a‘m(ÔL$"înk#&²ÔBˆ^#€MË× yˆ^#í€MË× xÓ$˜‚€ˆ ˆ^#€MË× yˆ^#í€MË× xï#íkй%'¡Ôˆ^"€MË× n! &ç˜&ç &x&yï"ˆ^€MË× æ°­å Õfÿ(Ô8ˆ^€MË× nˆ^&æ€MË× y&Ó˜‚€ˆ ˆ^&æ€MË× y&ï–  }„„U„„¬P„ u‡„˜Än„„U˜„ „5„ g‘m%°ÕÁ„ ˜‘i„5˜‘j„5˜‘k„^„ ˜‡„~fd‘m%°Õ…‡„€¶ÔmŠym‡„€Ú#¡ÔHšæ&€Ë× |Ô)„^€MË× €„T˜‚€‡„Tç ‡„Tx‡„T‡„T搊˜‚€„ ÿšæ&€Ë× |Ô‡„€Ú#¡€>‡„€€AÝž&š€‡°!å %Úå ÕTÿ‡„x˜ÓmŠ%Òm%€„ƒ–„‚S #€MË× ç#€MË× æî€MËÄ"#€MË× æih !²Ô# €MË× # í€MË× Å íhŠâ–| }„„U„„¬Peuh€ ‡„~¶Ô€ ‹„„U˜„5„ „ c‘€ )°Õê„5˜‘n„ ˜‘ol‘„_„5˜`„^‘€ )°Õž€ šæ €Ë× |„ §²Ÿ¡€>‡„~€AÝž¡ÔS„_„ ˜d‡„~„ „^‘Ô € „_$‘$îl$„_€MË× æ°'å ÔÐ)Ò „_ìppj"Ó " Ò€ Š€ ‡„~ڄ ˜‘¡Ô€ šæ €Ë× ‚€ë‘()° € š€‡°&å )Úå Õ.ÿ()°¡Ô€ )€„–„€Í *a„,¬P‡+Äha§²ñ4‡+xˆ€­€MË× æ³Ÿ å¡Ô‡+‡+xíÄaˆ€­‡+x€MË× çèhŠÌ €.–-. W„/„\¬Pe„Z¬Ph„/˜dïÔAhe˜cïÔ&‡YÔˆ€­$€MË× çeë#$Óˆ€­#‘ŠhŠˆ€­$€MË× çeë €^–]u õ„„Í„„ù¬P„„€„„÷¬P„€«u€€š€€§„„͘„,„~a„€ª‘h Ò„„€˜b„Ua„€ª‘h °Õ÷‘„€­„,˜„€§„€¬‘h °Õۚ懀§€Ë× €„£„~§Òm‡€ší€€ššæ‡€š€Ë× bèÔh‡€šš€‡° ° ÔÕ Ò‡„öÔh𿇀š€Ë× ‚€ë Ó‡„£b뇄£|Ô„€­€MË× çbëŠ&„U§²ÔhЇ„£|Ô„~˜„U˜‡„ö‡€§hŠh °‡„£|¡Ô&‡€§„€­ìpp€€©‡€©Ó ‡€© ÒhŠh‘ €„û–„úÆ /f„2¬Pe‡1Åjf˜‘lh‡4f˜b‡0ca‘Ôh‡4"€MË× ç eÅ"‡4€MË× æ°$å ÔÎ €5–4ó {„„S„„~¬P„„R‡„}Å„Wu€Y€T‡„|¶Ôh„„R ɀd³Ôh‹î„„S˜„+a„[„V‘h °Õل+˜‘€X‘„\„+˜„T„Z‘h‡„|€`ÝÇ€„| ÒRšæ‡T€Ë× |ÔB‡„|Ýža§²Ÿ¡Ô„\a˜„„R‡„|h‡„|Úa˜‘¡Ôh„\€MË× ç „„RÅ °šæ‡T€Ë× |¡Ô!‡T„\ìpp€U‡UÓ ‡U ÒhŠh‘‡Y ° €Y‡Tš€‡°‡Xå  Úå Õ9ÿ‡Y °¡Ôh €„€–„i š€‡²ñiŠšæ €Ë× |Ói–q‚€EvÐ£h ³ñŠƒúŠ4 ?²ñ?hŠ Œhˆƒù vŠƒú­ƒúŠƒú–‘ Š„ˆƒù­ƒúŒv p–¬ph Ó ÒïŠï–Xˆ$€MË× çɱmˆ$€MË× çÉ °Õ€­ƒúŒì³ñmŠob­ƒùÄ­„"ìˆ$€MË× x¢ppÓmp"€MË× k#y±#y ±¡Ôbsi"€MË× ækh #²Ô!" €MË× çɰ i íhŠä!åm–o +ïÕ ˆ+€MË× o'y'x£k'y*²ñ 'xi*jlŠ'yi*íjl­ƒú#²ñ#hŠ­ƒúh$Ò" £j! £i­„­ƒù Œ!pï­„­ƒù Œ"pï$Ò" ¢j! ¢i# £k#²Ô¬'xi$Ò'ç*'y'x£¢Ä'*Ċ '"Ä'ç*íÄ­„ˆìpï'çÉ ÒUmšæ šæ šçÉ n&(²Ô"šæ&€Ë× € )~­„°)!°¡Ô&m&ínŠÙ%Óšæ%€Ë× ç'xĖ ”þ‡„€ƒü‡ƒü°Õ`‡„‘€ƒü‡ƒü°Õõ‡ƒúÒ €„ p€ƒ÷‡ƒ÷`€MË× æ³Ÿ`‡ƒ÷í€MË× y‡ƒÿ²¡Ô ‡ƒ÷퀃÷ŠÕ‡ƒ÷€ƒý€ƒø‡ƒø‡ƒý²Ô:`‡ƒø€MË× €ƒþ‡ƒþx`‡ƒøî€MË× y²ñ‡ƒø`‡ƒøî€MË× y‡ƒøí€ƒøŠœ`€MË× û`€MË× æ‡ƒ÷퀃ý€ƒø‡ƒø‡ƒý³Ô0`‡ƒø€MË× €ƒþ‡ƒþy‡ƒû²Ô‡ƒø‡ƒû‡ƒþxû‡ƒøî€ƒøŠÇ„ƒù‡ƒúŒv‡ƒü€„–„<„„=¬P„u„˜Ç„‘h °‡˜±¡ÔZ€‡˜ÓM‡€‡æ i‡æ ‡æî¢jc Êd‡ç 끁ˀ „‡çÅa‡x€Ës€/.¡€‡~€Š®/ñh €?„u–>X,c„-¬P`uc˜Çb‘i!°"˜±¡Ô"˜Ó "ç˜s"~jŠñ`u!€/–.o˜¥¥†âÄç˜Äw–[].TEXT.BACK.CODE.SVOL ðÿ£þÿÿ—þÿÿo#:õÿäÿíÿÛÿ:ÿ ÿÿÿÿÿÿÿÿÿ?dir_infoo®XK;ü=iA†‘Aã0ôàÁ(O Í: ¬e™Œ. *** EXTRAHEAHEAPOPS STRINGOPFILEOPS WILD   IDUPLICAT €€€€€€€€€€€€€€€€v6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc. *Ÿíjý€@]¬`êxTÀ2HDUPLICAT9v3š`r pšrp €Y° €y° i–pš spšrpš‚€r pšrpšrpš‚€r pš†r pšr pšrp†§²ñ †지0£¥Šp1€0ÚÔ»1†p†Ëîׁÿ˧¥„…„²Ÿ…„² Ôš‚€.r p‘ñp†Ëîׁ€ÿË×x ±Õïš‚€Ir p¢¥„¥„…„…„²Ô$š†Ëîׁ…„ÿ˧sp…„í¥„ŠÓš‚€br pšrp†Ëîׁ€ÿË×xÒ#š‚€dr pšrpš‚€‚r pŠ š‚€”r p‘ÔHš‚€®r p‘Ô6†Ëîׁ€ÿË× Ä1†p1†pš‚€År pŠhš‚€Ûr p¢¥„¥„…„…„²Ô$š†Ëîׁ…„ÿ˧sp…„í¥„ŠÓš‚€÷r pšrpš‚€ùr pš‚r pšr p–-Duplicate Directory Marker { July 13, 1978 } ) Enter drive # of user's disk [4 or 5]: 4Illegal volume name. Do you want to mark it anyway? 1A duplicate directory is not being maintained on : .;WARNING! It appears that blocks 6 - 9 are not free for use." Are you sure that they are free? 3 Are you sure that blocks 6 - 9 are free for use? , Do you want the directories to be marked? + Directories are now marked as duplicate. 6 A duplicate directory is already being maintained on : . Mark not done. Type to exit. EXTRAIO PASCALIO ÔBOOTER €€€€€€€€€€€€€€€€HAr6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc.(3Žíjý# ‘š’ª¯TÞ;ÓBOOTER 4Arµ+b„.¬Pšæ î¥Hš‚€r šb˜r š‚€ r š…Hrš‚€r š`ršr …HŒ€1ÛÚÔž Ó7 p"p°i!ñ$š‚€r š rš‚€r šrŠ ‡-‡,p$! ° Õuÿ €0–/fšrš‚€"r šršr‚€.†%‘¥5±Õh‚€2†‘¥4±ÕU†%×x€€¥†×x€€¥3†%×xŒ¥2†×xŒ¥01²ñ1¥DŠ0¥D†F…D€€Œs¥E¥C5…F…C†%×xŒ…Cp…Cí¥C…C3Œ…D³p± ÔÚp°Õޚ‚€8r š…Cršr45Ò"š‚€@r š4rš‚€Qr šr ¥C4…F…C†×xŒ…Cp…Cí¥C…C2Œ…D³p± ÔÚpÒš‚€[r š…CršrŠ+š‚€dr š…Cîrš‚€sr š4ršrŠ+š‚€wr š…Cîrš‚€†r š5ršršrš‚€Šr šr –What unit is the  disk (0,4,5,9...) ? Drive not on-lineeBootstrap Copier [A2]]sourcee destinationSectors read: Put destination disk into drive  and type >Sectors written: Error writing logical sector , driveError reading logical sector , drive$Put in system disk and type > ]EXTRAHEAPASCALIO COMMANDI €€€€€€€€€€€€€€€€ !V6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc.(3Ÿíjý#~0ˆn T <   type bigstring=string[255];  var havechain,inredirect,outredirect,monitoropen,inmonitor:boolean; "function redirect(command:bigstring):boolean;  procedure exception(stopchaining:boolean); "procedure chain(command:bigstring); " "procedure initcommand;  procedure startmonitor; "procedure stopmonitor(saveit:boolean); "procedure getchainline(var command:bigstring); "  implementation COMMANDI!Vr– ***  uERRORHAN €€€€€€€€€€€€€€€€x6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc. Nç çFúÔb ¿þ ¢< "  type "drive_range = 4..127; "  procedure set_error_line (line : integer);  procedure set_user_message (drive : drive_range; mess : string);   implementation tERRORHANox Ù–*a„+¬P‡-²‡-šæ ³ ÔŠUa§Ò'š‡-£×x˜Óš‡-£×€)sš‡-£×˜ÄŠ(š‡-£×x˜Ò š‡-£×€)tš‡-£×xaëP–-ۛšæ £íŒsÒ˜Ùšæ 01²Ôš0£×˜Ä0í¥ŠëušÙ˜Ù– J*** HEAPOPS EXTRAHEASCREENOP {FILEINFO €€€€€€€€€€€€€€€€$ d†6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc.ú‹»Î'FñX;€ÎÄ.   "Type F_File_Type = file; 'F_Date_Rec = Packed Record 6 Month : 0..12; 7Day : 0..31; 7Year : 0..100; 5End; { F_Date_Rec } ' " "Function F_Open (var fid: F_File_Type):boolean; " "(* returns true if the file is open and false if not open *) " "Function F_Length (Var Fid : F_File_Type) : Integer;  ${Returns the length of the file attached to the Fid identifier. %If the file is not opened result is returned as zero}   "Function F_Unit_number (Var Fid : F_File_Type) : integer; $ ${Returns the unit containing the file attached to the Fid %identifier. If there is no file opened to Fid, the function %result is Zero.}   "Procedure F_Volume (Var Fid : F_File_Type; 5Var File_Volume : String);  ${Returns the name of the volume containing the file attached %to the Fid identifier. If there is no file opened to Fid, %the file_volume is set to a null string.}    "Procedure F_File_Title (Var Fid : F_File_Type; 9Var File_Title : String);  ${Returns the title (with suffix) of the file attached to the %Fid identifier. If there is no file opened to Fid, %the File_title is set to the null string.}   "Function F_Start (Var Fid : F_File_Type) : integer;  ${Returns the block number of the first block of the file %attached to the Fid identifier. If there is no file opened %to Fid, the function result is returned is zero.}   "Function F_is_Blocked (Var Fid : F_File_Type) : Boolean;  ${Returns a boolean that is TRUE if the file attached to the %Fid identifier is located on a block-structured unit. If there %is no file opened for the Fid or if the device is not block structured %, the function result is set to false.}   "Procedure F_Date (Var Fid : F_File_Type; 3Var File_Date : F_Date_Rec);  ${Returns a record indicating the last access date for the file %attached to the Fid identifier. If there is no file opened to %Fid, the File_Date is unchanged.}    Implementation zFILEINFOmd†( †Hp†i–= ‘Ô†æiŠi–S ‘Ô†æ iŠi–q!‘Ô †ç ëPŠ ‚€ëP–!‘Ô †çëPŠ ‚€ëP–¥ ‘Ô†æiŠi–» ‘Ô†æiŠi–Ð!‘Ô †çÅ–Ør–`UJ;,! j ***  †HELPTHES €€€€€€€€€€€€€€€€& W6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc. *Ÿíjý]¬`êxTÀ2…HELPTHES®WCšrpš‚€r pšrpšr pšrp–§+€-š`€Pr pšr p`§Ó>‡,Ä`§€+€*‡*‡+²Ô)`‡*짃€Úñ€-‡, ‡,xŒ`‡*ì§¢€0£Ä‡*í€*ŠÐЇ,áĖ,Üš‚€r pšrpš‚€*r pšrpš‚€>r pšrpš‚€Qr pšrpš‚€cr pšrpš‚€xr pšrpš‚€Šr pšrpš‚€r pšrpš‚€²r pšrpš‚€Är pšrpš‚€Ør pšrpš‚€ìr pšrpš‚€ÿr pšrpš‚r pšrpš‚'r pšrp‘–¬š‚1r pšrpš‚Er pšrpš‚Wr pšrpš‚kr pšrpš‚r pšrpš‚r pšrpš‚£r pšrpš‚¶r pšrpš‚Èr pšrpš‚Ür pšrp‘–hš‚ár pšrpš‚ôr pšrpš‚‚r pšrpš‚‚r pšrpš‚‚,r pšrpš‚‚?r pšrpš‚‚Rr pšrpš‚‚fr pšrpš‚‚yr pšrp‘–šš‚‚„r pšrpš‚‚˜r pšrpš‚‚«r pšrpš‚‚Ÿr pšrpš‚‚Нr pšrpš‚‚ãr pšrpš‚‚ör pšrpš‚ƒr pšrpš‚ƒr pšrpš‚ƒ/r pšrpš‚ƒCr pšrpš‚ƒVr pšrpš‚ƒir pšrpš‚ƒ|r pšrpš‚ƒr pšrp–š‚ƒ›r pš2rpšrp€.ji kh #²ÔC†!pbp!2¢i!1³Ô!1£i†!1¢pbp!2¢i!1³Ô!1£i íhŠžšrpšrp–€š‚ƒžr pš2rpšrp€.kj lh $²ÔI mi!%²Ô3†"p"2¢j"1³Ô"1£j†"1¢p"2¢j"1³Ô"1£j!íiŠÈcp íhвšrpšrp–š‚ƒ¡r pš5rpšrp€.jikh #²Ô#†!pbp!5¢i!1³Ô!1£i íhŠØšrpš rp–vš‚ƒ¥r pš5rpšrp€.kjlh $²Ô1mi!%²Ô†"p"5¢j"1³Ô"1£j!íiŠàcp íhŠÊšrpšrp–Zšrpšrp‘‘†p$†Ë×x¥†Ë×x¥¥1&¥5…&²Ô‘ 5í¥Šñšrpš‚ƒ©r p†‘5±¡51³Ÿ¡Ôã5²ñ‘ 5áÒךrpšrp‘1&¥2…&²Ô‘2í¥Šñšrpš‚ƒ»r p†‘21³Ÿ¡Ôç2³Ô‘ 2áÒۚrpšrp‘– Press return to continueeÿ& This program is intended to help youu&find the fastest interleaving and skeww$arrangement for your disk drives. Iff#your drives need some delay after a)DSKSTRT or before a DSKSTOP (i.e. turning"the motor on or off or loading andd%unloading the head), this program may(not operate correctly. If the program iss#running properly, some interleaving'ratios will be much faster than others.&Dots will be written to the console att%the rate the disk reads complete. The&best interleaving and skew will be thee&ones for which dots are written to theescreen the fastest.& First you will be shown all possiblee#interleaving ratios in a short test&execution. You should watch the screenn&and remember approximately which ratioo!results in dots being put out the$fastest. After this is finished, youu$will be able to run a longer test onn#the ratios of your choice to aid in&determining exactly which ratio is theefastest..$ Now you will be shown all possiblee$skews in a short test execution. Youu$should watch the screen and rememberr#approximately which skew results in%dots being put out the fastest. After%this is finished, you will be able to&run a longer test on the skews of yourr$choice to aid in determining exactlyywhich is the fastest.& If all ratio and skew tests executedd%at the same speed, then you will have%to guess at the proper values and try"them out by running the diskchangee$program, rebooting, and seeing whichh%accesses the disks the fastest (steps#2 through 4 in the adaptable system'user manual). Start your guesses with a$skew of 0 and interleave ratio of 2..'Keep trying larger ratios until you see$a large speed up. Then increment thee%skew until the speed increases again.%The speed increase from the skew will%be not be very large so you will haveto observe it closely..SKEW=SKEW=RATIO==RATIO=="Ratio to test ( to exit) !SKEW to test ( to exit) ԐO¶XðV$ = PASCALIO uSYSINFO €€€€€€€€€€€€€€€€ TaLCopr (c) 1978,1979 by Regents, UC and 1980,1981,1982 by SofTech Microsystems.  "Type SI_Date_Rec = Packed Record 7Month : 0..12; 7Day : 0..31; 7Year : 0..99; 5End; { SI_Date_Rec } " " "Procedure SI_Code_Vid (Var SI_Vol : String); ${ Returns name of volume containing current workfile code } " " "Procedure SI_Code_Tid (Var SI_Title : String); ${ Returns title of current workfile code } " " "Procedure SI_Text_Vid (Var SI_Vol : String); ${ Returns name of volume containing current workfile text } " " "Procedure SI_Text_Tid (Var SI_Title : String); ${ Returns title of current workfile text } " " "Function SI_Sys_Unit : Integer; ${ Returns number of bootload unit } " " "Procedure SI_Get_Sys_Vol (Var SI_Vol : String); " { Returns system volume name }  " "Procedure SI_Get_Pref_Vol (Var SI_Vol : String); " { Returns prefix volume name } " "  "Procedure SI_Set_Pref_Vol (SI_Vol : String); ${ Sets prefix volume name } " " "Procedure SI_Get_Date (Var SI_Date : SI_Date_Rec); ${ Returns current system date } "  "Procedure SI_Set_Date (Var SI_Date : SI_Date_Rec); ${ Sets current system date } "    {**********************************************************************} " "  Implementation tSYSINFO dTa! ›ëP–/ ›ëP–= ›ëP–K ›&ëP–Wšzh–e ›@ëP–s ›<ëP–¢)`„*¬P`‚€è`‚€è Ô ›<›@늛<`ë–+¯ ›DÅ–œ›D Å–Ær–**::ZS<5.(! a ***  ÝWILD €€€€€€€€€€€€€€€€DF6Copyright (c) 1981, 1982 by SofTech Microsystems, Inc.hl»Î'FñX;€ÎÄ. "  Type $ $D_PatRecP = ^D_PatRec; $D_PatRec = Record 1CompPos, { starting position of pattern in subject string } 1CompLen, { length of pattern in subject string } 1WildPos, { starting position of pattern in wild string } 1WildLen : Integer; { length of pattern in wildcard string } 1Next : D_PatRecP; { next pattern } /End; { D_PatRec } $ " "Function D_Wild_Match(Wild, Comp : String; Var PPtr : D_PatRecP; TPInfo : Boolean) : Boolean;  { Compares two strings (one containing wildcards) and returns true if they $match. Includes information about pattern matching that occurred if re- $quested (by PInfo) } "  {*************************************************************************} "  Implementation ÜWILD hDF5+b„,¬Pb§Ó bb§ì§€=°€.Š€.–-k`r$x˜Ó$xi!ç#!{£Ä!"!y£Ä i!ç#Ä!ç"Ä ç$xÄ$ Ėž*a„,¬Ph å‡+x‰'²¡Ôa‡+x지 ±h ñ‡+‡+xíÄŠÞ €.–-*a„.¬Ph‡-‡-xíć,a˜‡-ïåć,xñ8a‡-x지%Ò%h‡-x¢‰'²Ô‡-‡-xíć+a‡-xì§ÄЇ,Ċ ‡+a‡-xì§Ä‡,xñ‡+xˆÐÚ å¡Ô‡,ć-‡-xíĖ/®€€€€‡‡xíćˆQ˜‡åćxåÕˆQ‡x짃€ڇå¡Ô$ˆQ‡x지~°€ˆQ‡x지%°€‡‡xíċäˆQ‡x질Ðڇå¡Ô‡ċ€ˆQ‡xì§j‡‡xíćˆQ˜‡åćxñHˆQ‡x짃€ Úñ‡Ċ1ˆQ‡x지-Ò ˆQ˜‡‡aŠ"i"!²ñ‡ćˆQ˜‡åćxñP‡Ô!‡Ô c€ÿŒÇŽccЀÿŒ"!ŒÝÜÇŽŠ‡ÔcÇŽccÐ"!ŒÛÇŽˆQ‡x지}°€‡‡xíÄ€€‡‡x ÕÆþ‡xñ<‡cÐÚñ‡Ċ-‡‡xíćx®'²®z¡ÔˆQ‡x질ÐÚñ ‡‡x‡xï–%%xíÄ%x®'²ñ$®&íĊ>ˆr!xŠ$xh%x #!ð íh ®&²ñ"Ä#xå"xå¡Ôˆr!­Ĉr#x"x Ôϖ3)Äjk­'²ŸÕ­zˆQ+질ÐÚå¡Ô(*+*­&²Ÿl$­"å¡åÕ¡ˆQ+ì§h$ñˆ(*ì§i €%°#å¡Ôk+í€ Š$å !°¡Ô#å!ƒ€Ú¡ÔjŠ+í€ *í€ ŠZ ˆÐÚñjŠL­zÔ(*+ Š=+í€ *í€ +­'²­z¡ÔˆQ+질ÐÚñ(*+Š„ „ b!(Š„ „ )b( Šրk"å#å¡*­&²Ÿ¡+­'²Ÿ¡Ô)Ċ*­&²Ÿ+­'²Ÿ ­"å¡Ôj")x Õÿ­z(x˜±¡Ô(xo'ç­&'{£íÄ'­''y£íĖ Æy„Q„~¬P„(„|¬P`ƒ€[ÇŽ„ƒ€cÇŽ„%r‡{˜Ä„Q˜€"„Q§€'„(§€&„!‡{‡z‡{x˜±¡Ô*‡{x|€#‡{xç˜Ä‡#˜Ó‡#|€$‡#ç‡{xć{‡#ć$€#Šã‡!ñ‡{˜Ä„%r‡!€€€–Îs– @0 0h={òÿÀÿçÿ 0 h YQ8… e *** HEAPOPS   FREMINTES €€€€€€€€€€€€€€€€íí&ýLRAMDISKBìÆÆD í*ÿF ZÆD&EREMINTESB†p$†Ë×xÓ(†Ëp†˧€Q°†˧€q° Ôp†p$†Ë×xÓ†Ëp†Ëpԙ–  O^€Ö¥ { Program to test Remote Input Serial Channel }  { Version 1A 16-Jul-82 }   PROGRAM RemInTest;  VAR "TwoChar:PACKED ARRAY[0..1] OF CHAR; "Status:ARRAY[0..29] OF INTEGER;   BEGIN {RemInTest} "REPEAT $UNITSTATUS(1,Status,1); $IF Status[0] <> 0 THEN &BEGIN (UNITREAD(1,TwoChar[0],1); (IF (TwoChar[0]='Q') OR (TwoChar[0]='q') THEN EXIT(PROGRAM); &END; $UNITSTATUS(7,Status,1); $IF Status[0]<>0 THEN &BEGIN (UNITREAD(7,TwoChar[0],1); (UNITWRITE(2,TwoChar[0],1); &END; "UNTIL FALSE;  END.   {Alternate version for pre-Version IV systems  BEGIN {RemInTest}  REPEAT $UNITREAD(7,TwoChar[0],1); $UNITWRITE(2,TwoChar[0],1); "UNTIL FALSE;  END.  }  FIBBUS ‹IBBUS IV.13 [a.1]E Cÿÿp0<Aö0!Hà|CúN"ˆ8:p0Kö0Iö0pNNCú("`4p`Cú.Q|ßÿCú QLØ>À X?NÐCúÿò"QÌ`øQÌ`PQÌ`QÌ`öQÌ`–QÌ`¬QÌ`šQÌ`¶QÌ`QÌ`p`€`ÿxx8<EöH8*QÌÿþNuap0<Eö5E5T0CøÀ|€@p@@@ @ |“|0<EöJjEøÀgfŒ`ÿŒ| ||pdQÈÿþ||aÿd)`þÒp0<CöpüQÈÿúNup0<CöpÜQÈÿü`þŠp0<EöJjg&CøÀ| |?aÿ )|_aþþ)<Fp0<Cö0ÒÀfp `þVCøÀg |‰aþÆ`À@aþž)QÎÿžp0<CöÒÅfp`þCøÀg|Šaþ„)| `ýìÅEaþj)| `ýÒa6<FCøÀ@)faQÎÿæ|\a`ýšCøÀrHA2<ÿÿ)VÉÿöf HAQÉÿèp`ýzNu<F:ŒCúýˆ"ŒpCøÀ)f rHA2<ÿÿ)VÉÿöf HAQÉÿèp`éVÎÿÈfpEúýB"R™É:Œ`ý CøÀ0ãHÒÀQÍ Q`¬`üö`üòCøÀ)güâp `üâCøÀ| | |?aýL)|_aý>)|aý0)|‰p0<Aö vCøÀ g\fTÃCaüø)| ƒ)f"rHA2<ÿÿ)VÉÿöf HAQÉÿèp`ü:)f&| QËÿ|aüž)<8ƒp`ü | |aü~))8ƒ`ûæàø6†œ²î2Œ  IBBUS IBBUS BUSTBL ²6øàDEVSTAT Œ2MYSTACK STACK  A $CURSOR $EQUAL $SYNTAX C Z2ÆO.€Öš ;SAGE II IEEE-488 support package  ;  ; File: IB.BUS.TEXT  ; Date: 16-DEC-83  ; Version: 2.1  ;  ;Copyright (c) 1982 Sage Computer Technology  ;ALL RIGHTS RESERVED  ;*****************************************************************************  ; History:  ;  ; 1 17-Jul-82 Initial release.  ; 2 13-SEP-82 Reserved A3 for ATTACH  ; 2.1 16-DEC-83 Forced reset state in INIT.  ; Cleared data buf to & fixed timeout prob.  ;  ;*****************************************************************************  ;FUNCTION IB_BUS(VAR B,BLNG:INTEGER;CARG:INTEGER;CD:BUSCMD):INTEGER;EXTERNAL;  ;  ;This assembly routine directly access the TMS9914 chip so the supervisor mode  ;of the 68000 is enabled using TRAP 14.  ;  ;  ; LONG JSR MACRO: (.MACRO LJSR ;used for calling PROM routines if (.WORD 4EB9H ;necessary. NOT normally called by (.WORD 00FEH ;this routine. (.WORD %1 (.ENDM  ;***************************************************************************** (.RELFUNC IB_BUS,4 ;relocatable, FUNC= integer E;values must remain between IBUS calls.  ;***************************************************************************** (.PRIVATE MYSTACK:24 ;Save reg on user built stack (.PRIVATE DEVSTAT:16 ;Device status table, use reg A1 bits E;0 = can talk E;1 = can listen E;2 = can control  E;3 = has control E;4 = can SRQ E;5 = expects parallel poll E;6 = self (.PRIVATE BUSTBL:4 ;Local variables CONTROL AND CMDTIME  (.INCLUDE IB.DEF ;Register and cmd definitions  .PAGE  ;*****************************************************************************  ;Procedure start-up saves registers, finds address of pascal arguments, goes  ;to supervisor mode using TRAP 14, saves the stack pointer in case of an error.  ;  ;General register usage:  ; A7 stack pointer  ; A6 reserved for Pascal location pointer to Pascal variables  ; A5 reserved for p-system program counter  ; A4 address of start of the data array  ; A3 reserved for p-System break key feature  ; A2 cmdtime counter  ; A1 work register  ; A0 work register  ;  ; D7  ; D6  ; D5 CARG/CMDTIME  ; D4 CMD  ; D3  ; D2  ; D1  ; D0  ;*****************************************************************************   START MOVEQ #0,D0 ;Calculate MYSTACK's true location. (MOVE.W #MYSTACK,D0 ; (LEA 48(A6,D0.L),A0 ;Start at end of stack (MOVE.L (SP)+,-(A0) ;Save return address (MOVEM.L D6/D7/A1-A5,-(A0) ;Save selected registers (LEA SAVSTK,A1 (MOVE.L A0,(A1) ;Save pointer  (MOVE.W (SP)+,D4 ;CMD (MOVE.W (SP)+,D5 ;CARG/CMDTIME (MOVEQ #0,D0 (MOVE.W (SP)+,D0 ;LENG (ptr to) (LEA 0(A6,D0.L),A5 ;ADDR OF LENG/IB_SAGE (MOVE.W (SP)+,D0 ;ARRAY (ptr to) (LEA 0(A6,D0.L),A4 ;ADDR OF START OF ARRAY (MOVE.W (SP)+,D0 ;One word of junk tossed away  (MOVEQ #19.,D0 ;Enter Supervisor mode (TRAP #14. (LEA SAVESP,A1 ;Save supervisor stack PT (MOVE.L A7,(A1) ;for return of D0 (ERR OR DEV FOR SRQ) (BRA DOWHAT ;Find and do cmd   EXIT MOVEQ #0,D0 ;No error, Normal exit (BRA DORET  ERREXIT LEA SAVESP,A1 ;Restore stack pointer (MOVEA.L (A1),A7 ;D0 contains err code  DORET ANDI.W #0DFFFH,SR ;Back to User mode (LEA SAVSTK,A1 (MOVEA.L (A1),A0 (MOVEM.L (A0)+,D6/D7/A1-A5 ;RESTORE user REG (MOVEA.L (A0)+,A0 ;setup return address (MOVE.W D0,-(SP) ;Return ERR/func val (JMP (A0)  .PAGE  ;*****************************************************************************  ;The TRAP puts processor in supervisor mode so that we can now execute the  ;IEEE- processed specified by the CD -reg D4- argument.  ;*****************************************************************************  (.ALIGN 2  SAVESP .BLOCK 4,0 ;Saves stack pointer  SAVLOC .BLOCK 4,0 ;Used by IHEAR  SAVSTK .BLOCK 4,0 ;Save the POINTER TO THE USER STACK  TRAP0 LEA SAVESP,A1 ;Save stack PT in case of err (MOVE.L A7,(A1) E;DOWHAT rets to EXIT or ERREXIT  DOWHAT  ;Re-write as a jump table when assembler is fixed.  ;See the bug list in the SAGE II manual for details of assembler problems.  ;  ;ITALK and IHEAR were put first in order to speed calls up a bit.  ; (DBF D4,$5 (BRA ITALK ;1=SEND data  $5 DBF D4,$10 (BRA IHEAR ;2=rcv data  $10 DBF D4,$20 (BRA SESSION ;3=set up who is to talk and listen.  $20 DBF D4,$30 (BRA SETSTAT ;4=setup status of a device.  $30 DBF D4,$40 (BRA DIRECT ;5=read/wrt to TMS9914 reg directly.  $40 DBF D4,$50 (BRA TRANS ;6=Transfer control to another device.  $50 DBF D4,$60 (BRA CHKSRQ ;7=CHk for SRQ  $60 DBF D4,$70 (BRA SPOLL ;8=Serial poll devices  $70 DBF D4, $100 (BRA PPOLL ;9=Parallel poll, not implemented  $100 DBF D4,BADA (BRA INIT ;10=initialize TMS9914 if controller  BADA MOVEQ #BADARG,D0 ;bad arg (BRA ERREXIT ;error return   ;*****************************************************************************  PPOLL BRA EXIT ;Not implemented yet.  ;*****************************************************************************   .PAGE  ;*****************************************************************************  ;Wait for device setups - 1.5 US x cmdtime  CMDWAIT (MOVEQ #0,D4 (MOVE.W #BUSTBL,D4 (LEA 0(A6,D4.L),A2 ;Set up to reference local var (MOVE.W CMDTIME(A2),D4 !$10 DBF D4,$10 (RTS   ;*****************************************************************************  ;IEEE 488 BUS INIT ROUTINE  ;  ;On power-up, the TMS9914 chip should be locked in a passive state until  ;a software reset/clear SWRST is done.  ;  ;Before the software SWRST is sent, the address register must be loaded  ;with the device TALK/LISTEN address and the interrupt mask set. The SAGE  ;powers up setting the chip with interrupts off.  ;  ;*****************************************************************************  INIT (BSR ZEROTBL ;zero the device status table. (MOVEQ #0,D0 (MOVE.W #BUSTBL,D0 (LEA 0(A6,D0.L),A2 ;Set up to reference local var (MOVE.W D5,CMDTIME(A2) ;Max CMD setup time (MOVE.W (A4),CONTROL(A2) ;load control word (MOVE.W (A5),D0 ;Self addr is usually set from switch (LEA BASE,A1 ;Base of TMS9914 chip (MOVE.B #SWRST,AUXCMD(A1) ;Force to init state, added vers 2.1 (MOVE.B D0,ADDRSS(A1) ;load SAGE II device addr into TMS9914 (MOVEQ #0,D0 (MOVE.B D0,INTMK0(A1) ;CLR interrupts mask 0 - DO NOT READ (MOVE.B D0,INTMK1(A1) ; 1 (MOVE.B D0,SERPOL(A1) ;CLR Serial poll reg (MOVE.B D0,PARPOL(A1) ;CLR Parallel poll reg (MOVE.B #DAI,AUXCMD(A1) ;DISABLE ALL INTERRUPTS (MOVE.B #RHDF,AUXCMD(A1) ;Release data hold off (MOVE.W #BUSTBL,D0 (LEA 0(A6,D0.L),A2 ;Set up to reference local var (TST.W CONTROL(A2) ;is this the controller? (LEA TXCONT,A2 ;controller xmits, slave rcvs (BNE.S $10 ;controller must clear bus (MOVE.B #TXOFF,(A2) ;slave rcvs control signals (BRA EXIT   $10 MOVE.B #TXON,(A2) ;Controller xmits control signals (MOVE.B #TCA,AUXCMD(A1) ;TAKE CONTROL (MOVE.B #SIC,AUXCMD(A1) ;SETUP to send interface clear. (MOVE.B #CLRST,AUXCMD(A1) ;Start it, IFC line goes low, #23 (MOVEQ #100,D0  $60 DBF D0,$60 ;delay >10us for all devices to synch. (MOVE.B #SICCLR,AUXCMD(A1) ;end interface clear. (MOVE.B #SRE,AUXCMD(A1) ;send remote enable (BSR CMDWAIT (MOVE.B INTST0(A1),D0 ;Clear BO as now in control mode. (BRA EXIT   .PAGE  ;*****************************************************************************  ;zero the device status table:  ;*****************************************************************************  ZEROTBL MOVEQ #0,D0 (MOVE.W #DEVSTAT,D0 (LEA 0(A6,D0.L),A1 (MOVEQ #1FH,D0 ;32 BYTE TABLE  $10 MOVE.B #0,(A1)+ (DBF D0,$10 (RTS    ;*****************************************************************************  ;load the status of the devices into the table  ;*****************************************************************************  SETSTAT MOVEQ #0,D0 (MOVE.W #DEVSTAT,D0 (LEA 0(A6,D0.L),A1 (MOVEQ #1FH,D0 ;32 BYTE TABLE  $10 MOVE.B (A4)+,(A1)+ (DBF D0,$10 (BRA EXIT   .PAGE  ;*****************************************************************************  ;Set up talk and listen devices.  ;*****************************************************************************  SESSION (MOVEQ #0,D0 (MOVE.W #BUSTBL,D0 (LEA 0(A6,D0.L),A2 ;Set up to reference local var (TST.W CONTROL(A2) ;Am I the controller? (BEQ.S SETMLA ;NO (LEA BASE,A1 (MOVE.B #TCA,AUXCMD(A1) ;YES -TAKE CONTROL (MOVE.B #UNL,DATOUT(A1) ;Unlisten all devices (BSR CMDWAIT (MOVE.B INTST0(A1),D0 (MOVE.B #UNT,DATOUT(A1) ;Unlisten all devices (BSR CMDWAIT (MOVE.B INTST0(A1),D0  SETMLA MOVE.W (A5),D6 ;D6= how many devices will listen (SUBI.W #1,D6 ;LNG too big by 1 (MOVEQ #0,D0 (MOVE.W #DEVSTAT,D0 (LEA 0(A6,D0.L),A1 (MOVE.W (A4)+,D0 ;find device listen status (ADDA.W D0,A1 (BTST #1,(A1) ;can it listen? (BNE.S $5 (MOVEQ #NOHEAR,D0 ;ERR, it can't hear (BRA ERREXIT  $5 BTST #6,(A1) ;self? (LEA BASE,A1 (BEQ.S $10 (MOVE.B #LON,AUXCMD(A1) ;LON (BSR CMDWAIT (BRA.S $20  $10 BSET #5,D0 ;MLA=BIT 5 + listen address (MOVE.B D0,DATOUT(A1) ;set listen device(S) (BSR CMDWAIT ;Wait for slowest device (MOVE.B INTST0(A1),D0  $20 DBF D6,SETMLA ;D6=number of devices  ;Set my talk address  SETMTA MOVEQ #0,D0 (MOVE.W #DEVSTAT,D0 ;get status of device (LEA 0(A6,D0.L),A1  (ADDA.W D5,A1 ;TDEV=D5 (BTST #0,(A1) ;can he talk? (BNE.S $5 (MOVEQ #NOTALK,D0 ;NO!-exit to error return. (BRA ERREXIT  $5 BTST #6,(A1) ;Is it SELF? (LEA BASE,A1 (BEQ.S $10 ;NO - (MOVE.B #TON,AUXCMD(A1) ;yes-SELF talks (BSR CMDWAIT ;Wait for slowest device (MOVE.B DATIN(A1),D2 ;Clear data reg. vers 2.1 (MOVE.B #GTS,AUXCMD(A1) ;release ATN line (BRA EXIT   $10 BSET #6,D5 ;MTA=bit 6 +talk address (MOVE.B D5,DATOUT(A1) (BSR CMDWAIT ;Wait for slowest device (MOVE.B DATIN(A1),D2 ;Clear data reg. vers 2.1 (MOVE.B #GTS,AUXCMD(A1) ;release ATN line  $30 BRA EXIT (  .PAGE  ;*****************************************************************************  ;This device talks.  ;*****************************************************************************  ITALK  BSR WAITBO ;Vers 2.1 (MOVE.W (A5),D6 ;D6=how many bytes to send -1 (SUBI.W #1,D6 ;LNG too big by 1 for all routines  $10 MOVE.B (A4)+,D0 (LEA BASE,A1 (MOVE.B D0,DATOUT(A1) ;send a byte from PASCAL array (MOVE.B INTST0(A1),D4 ;LOOP UNTIL WE HAVE A BYTE (BTST #4,D4 (BNE.S $20 ;Fast devices ok here, (BSR WAITBO ;Wait around for slow ones  $20 DBF D6,$10 ;all but one sent? (MOVE.B #FEOI,AUXCMD(A1) ;send EOI with last byte (MOVE.B (A4)+,DATOUT(A1) ;  BSR WAITBO  $30 BRA EXIT (  ;Wait for a byte handsake completed. ;This routine gives a very long timeout to insure that slow devices can  ;respond without causing a timeout err. The check for a fast device is  ;no longer than necessary, an exit occurs as soon as the BYTE OUT flag  ;is found. Routine will timeout in about 5 sec.  WAITBO (LEA BASE,A1 (MOVEQ #012H,D1  $10 SWAP D1 (MOVE.W #0FFFFH,D1 ;max wait count (+ 1) for data.  $20 MOVE.B INTST0(A1),D4 ;Chk for byte out flag (BTST #4,D4 (DBNE D1,$20 (BNE.S $40 ;Slow devices exit loop asap (SWAP D1 (DBF D1,$10 (MOVEQ #XTMOUT,D0 ;TRANSMIT Timeout error returned. (BRA ERREXIT  $40 RTS   .PAGE  ;*****************************************************************************  ;This device listens  ;*****************************************************************************  IHEAR (MOVE.W (A5),D6 ;Max number of bytes to receive -1 (SUBI.W #1,D6 ;LNG too big by 1 (MOVE.W #0,(A5) ;Zero count in case of error (LEA SAVLOC,A1 (MOVE.L A4,(A1) ;save org loc so we know how much was sent (MOVEQ #0,D0 ;Clear listen error code  HRCHK LEA BASE,A1 (MOVE.B INTST0(A1),D4 ;chk for byte-in handshake (BTST #5,D4 (BNE.S STORE ;Fast device sent byte already  WAITER ;Wait for slower devices up to 10 sec (MOVEQ #012H,D1  $10 SWAP D1 (MOVE.W #0FFFFH,D1 ;max wait count (+ 1) for data.  $20 MOVE.B INTST0(A1),D4 ;Chk for byte IN flag (BTST #5,D4 (DBNE D1,$20 (BNE.S STORE ;Slow devices exit loop asap (SWAP D1 (DBF D1,$10 ;Times out if no answ within 10 sec. (MOVEQ #RTMOUT,D0 ;Set error code to show receive timeout (BRA.S ENDHR ;exit with what data we have  STORE MOVE.B DATIN(A1),(A4)+ ;Store data, move to next position (BTST #3,D4 ;EOI bit usually set by talker when done. (DBNE D6,HRCHK ;Exit if array is full OR EOI (BNE.S ENDHR ;Was really the last one. (MOVEQ #FULL,D0 ;Array full, ?more data being sent?  ENDHR LEA SAVLOC,A2 ;Get loc of start of data (MOVEA.L (A2),A1 (SUBA.L A1,A4 ;calculate how much data sent: MAX=1 WORD (MOVE.W A4,(A5) ;return number of bytes accepted in LNG. (BRA DORET ;Leave D0 set with error code.     .PAGE  ;*****************************************************************************   ;DIRECT  ;The user is allowed to directly access the TMS9914 registers.  ;In this way, an application can be done without resorting to  ;assembly code  ;  ;The first WORD of the array B must be the register # (AUXCMD=3)  ;The next WORD is the cmd to be written/read.  ;Warning: no error checking is done on DIRECT ACCESS commands.  ;  ;*****************************************************************************   W1 .EQU 3 ;to return rd in low byte.  DIRECT (LEA BASE,A1 ;Which register do we want? (MOVE.W (A4),D0 ;Get reg # (LSL.W #1,D0 ;Mul by 2 (ADDA.W D0,A1 ;create reg address (always odd/high) (DBF D5,$10 ;0=READ (MOVE.B (A1),W1(A4) ;READ REGISTER. (BRA $20  $10 MOVE.B W1(A4),(A1) ;WRT VALUE TO REGISTER.  $20 BRA EXIT   ;*****************************************************************************  TRANS BRA EXIT ;not yet implemented  ;*****************************************************************************   .PAGE  ;*****************************************************************************  ;CHK for SRQ  ;*****************************************************************************  CHKSRQ (LEA BASE,A1 (MOVE.B INTST1(A1),D0 ;Chk for SRQ flag (BTST #1,D0 (BEQ EXIT ;No service request.  $10 MOVEQ #HAVESRQ,D0 (BRA ERREXIT    ;*****************************************************************************  ;Serial poll devices and find out who requested service.  ;*****************************************************************************  SPOLL ;Set serial poll (LEA BASE,A1 ( (MOVE.B #TCA,AUXCMD(A1) ;Grab bus again (ATN) (MOVE.B #TONCLR,AUXCMD(A1) (MOVE.B #UNL,DATOUT(A1) (BSR CMDWAIT ;wait for slow devices (MOVE.B INTST0(A1),D0 ;Clear first byte prompt (MOVE.B #UNT,DATOUT(A1) ;Send universal unTALK out (BSR CMDWAIT ;wait for slow devices (MOVE.B INTST0(A1),D0  ;Clear first byte prompt (MOVE.B #SPE,DATOUT(A1) ;Serial poll enable,get ready to poll. (BSR CMDWAIT ;wait for slow devices (MOVE.B INTST0(A1),D0 ;Clear first byte prompt (MOVE.B #LON,AUXCMD(A1)  (MOVEQ #0,D0 (MOVE.W #DEVSTAT,D0 (LEA 32(A6,D0.L),A0 ;Start at highest WORD address (MOVEQ #31,D3 ;check includes dev #0  DEVPOL (LEA BASE,A1 (MOVE.B -(A0),D0 ;Get device status, set for next dev. (BTST #4,D0 ;Get device status. (BEQ NXTDEV ;not him, can't send SRQ (BTST #6,D0 ;chk for self (BNE NXTDEV ;of course, I did't send it.  (BSET #6,D3 ;set other talker control bit (MOVE.B D3,DATOUT(A1) ;address dev to send poll status (BSR CMDWAIT ;wait for slow devices (MOVE.B DATIN(A1),D2 ;Clear data reg. vers 2.1 (MOVE.B #GTS,AUXCMD(A1) ;release ATN line  HRCHK2 BCLR #6,D3 ;clear talk bit (MOVE.B INTST0(A1),D4 ;chk for byte-in handshake (BTST #5,D4 (BNE.S RDSTAT ;Fast device sent byte already  WAITR2 ;Wait for slower devices up to 10 sec (MOVEQ #012H,D1  $10 SWAP D1 (MOVE.W #0FFFFH,D1 ;max wait count (+ 1) for data.  $20 MOVE.B INTST0(A1),D4 ;Chk for byte IN flag (BTST #5,D4 (DBNE D1,$20 (BNE.S RDSTAT ;Slow devices exit loop asap (SWAP D1 (DBF D1,$10 ;Times out if no answ within 10 sec. (MOVEQ #RTMOUT,D0 ;Set error code to show receive timeout (BRA ERREXIT ;exit with what data we have  RDSTAT MOVE.B DATIN(A1),D2 ;READ STATUS (BTST #6,D2 ;Was it you? (BNE XSPOLL ;YES,exit serial poll  NXTDEV MOVE.B #TCA,AUXCMD(A1) (DBF D3,DEVPOL (MOVE.B #SPD,DATOUT(A1) ;Disable serial poll (BSR CMDWAIT ;wait for slow devices (MOVE.B DATIN(A1),D2 ;Clear data reg. vers 2.1 (MOVE.B #0,D3 (MOVE.W D3,(A4) ;return zero for address (MOVEQ #NOBODY,D0 ;nobody did it?? (BRA ERREXIT  XSPOLL MOVE.B #TCA,AUXCMD(A1) (MOVE.B #SPD,DATOUT(A1) ;Disable serial poll (BSR CMDWAIT ;wait for slow devices (MOVE.B DATIN(A1),D2 ;Clear data reg. vers 2.1 (MOVE.B INTST0(A1),D0 ;Clear first byte prompt (MOVE.W D3,(A4) ;return culprit's address (BRA EXIT ( (.END    ( IBUNIT ‹€€€€€€€€€€€€€€€I IV.13 [a.1]  VAR IB_SAGE, {The bus address of the SAGE II as set by switches} $IB_ERR:INTEGER; {If <>0, an error has occurred }  IB_CHK:BOOLEAN; {Chk,if true then wrt any error msgs from this unit}  IB_X,IB_Y:INTEGER;{Wrt any error msgs at screen postion X,Y}   {NOTE: arguments are defined in implementation section}   FUNCTION IB_SWITCH:INTEGER;  PROCEDURE IB_INIT(VAR CNTRL,ADDR:INTEGER;CMDWAIT:INTEGER);  PROCEDURE IB_STAT(BDEV,STATUS:INTEGER);  PROCEDURE IB_TALK(LDEV:INTEGER;VAR TBUF:INTEGER;LNG:INTEGER);  PROCEDURE IB_TALKS(LDEV:INTEGER;S:STRING);  PROCEDURE IB_HEAR(TDEV:INTEGER;VAR LBUF,LNG:INTEGER;MORE:BOOLEAN);  PROCEDURE IB_HEARS(TDEV:INTEGER;VAR S:STRING);  PROCEDURE IB_DIR(RDW,REG:INTEGER;VAR VAL:INTEGER);  PROCEDURE IB_SPOLL(VAR PDEV:INTEGER);  FUNCTION IB_CHKSRQ:BOOLEAN;  IMPLEMENTATION ŽIBUNIT TV)`„*¬P43rš‚€s pš0spš€ tpš`˜s pš†s p–+Ì2Ôm0Ói0Šc‚€‘ Š]‚€‘ ŠT‚€%‘ ŠK‚€+‘ ŠB‚€1‘ Š9‚€N‘ Š0‚€j‘ Š'‚€‡‘ Š‚€•‘ Š‚€¢‘ Š ‚€ª‘ Šր¿–ð Nr¢i€ÿh€‚b! p"åjb˧k–"! ‘ ¥‘–*† #Ë"€ÿËÈ¥† Ë׆‘ ¥‘–N¥b†1‘ ¥‘0Ò !`‘ ¥‘–¥T„,„U¬P€'€+€*‡*‡+²Ô`‡*€'Ë×ć*í€*Šç„,§€)„,ì`‡)p`‡)€OË €ÿËȇW`€'Ëׇ)‘–WÓ ñ¥††#‘ ¥‘Š¥0Ò "!‘ ¥‘–+€P€+‡-`€)Ëׄ+‘‡+€P²ñ€2¥‘Ї,‡+È`€Sˇ,ì‡+p–-L† Ë×!Ć Ë× xÄ¥† Ë׆"‘ ¥‘ † Ë×xĖciha`‘ ¥0 °j–‚ Ä¥ †‘ ¥‘ x¡Ä–Š¥¥6…²Ô† 6Ë×Ä6í¥Šêu–IB_ERR=Bad call to IB_BUS routinee Please accept data, more to comee RCV timeout XMT timeout8Control timeout - Talker did not give EOI (end-of-input))6Status table indicates device is not equipped to talk..8Status table indicates device is not equipped to listen..Nobody answered serial pollNo SRQ - service requesttUnexpected SRQQ(Input greater than 80 char string lengthh2ÿšÿ£ÿ¬ÿµÿŸÿÇÿÐÿÙÿâÿëÿôÿÿp0<DAö0!Hà|CúN"ˆ8:p0Kö0Iö0pNNCú("`4p`Cú.Q|ßÿCú QLØ>À X?NÐCúÿò"QÌ`øQÌ`PQÌ`QÌ`öQÌ`–QÌ`¬QÌ`šQÌ`¶QÌ`QÌ`p`€`ÿxx8<tEöH8*QÌÿþNuap0<tEö5E5T0CøÀ|€@p@@@ @ |“|0<tEöJjEøÀgfŒ`ÿŒ| ||pdQÈÿþ||aÿd)`þÒp0<|CöpüQÈÿúNup0<|CöpÜQÈÿü`þŠp0<tEöJjg&CøÀ| |?aÿ )|_aþþ)<Fp0<|Cö0ÒÀfp`þVCøÀg |‰aþÆ`À@aþž)QÎÿžp0<|CöÒÅfp`þCøÀg|Šaþ„)| `ýìÅEaþj)| `ýÒa6<FCøÀ@)faQÎÿæ|\a`ýšCøÀrHA2<ÿÿ)VÉÿöf HAQÉÿèp`ýzNu<F:ŒCúýˆ"ŒpCøÀ)f rHA2<ÿÿ)VÉÿöf HAQÉÿèp`éVÎÿÈfpEúýB"R™É:Œ`ý CøÀ0ãHÒÀQÍ Q`¬`üö`üòCøÀ)güâp `üâCøÀ| | |?aýL)|_aý>)|aý0)|‰p0<|Aö vCøÀ g\fTÃCaüø)| ƒ)f"rHA2<ÿÿ)VÉÿöf HAQÉÿèp`ü:)f&| QËÿ|aüž)<8ƒp`ü | |aü~))8ƒ`ûæ- H(4 ìÕ©—ƒzhCþfª4Xp®*– *** EXTRAIO PASCALIOGOTOXY  ÆIBEX €€€€€€€€€€€€€€€€í~í~0ýLAàØ‰\Þ\Þ’íšÿF#è\Þ‚ÅIBEX ª\ÙÙÙrh ¡Ùia`ršÓp𢢢€@¢r¥0¢¢r–Ò€€€0`„‡r€‡‡¢€šÓâšÓš‚€s pššspšspš‚€s pš‡spšsp–+h íhr €d²Ÿ Ôòar !0Óš‚€ s pšspŠš‚€s pšsp–+R‘0‚€ršÓp0‚€ršÓp‘Ù‘–ERR:=TOTAL== other SRQ FOUND SRQRU;DSSl0 PASCALIOIBUNIT  A $CURSOR $EQUAL $SYNTAX B «ËO.¥š` {*******************************************************************}  {* SAGE II/IV IEEE-488 support procedures: *}  {* *}  {* File: IB.UNIT.TEXT *}  {* Date: 16-Dec-83 *}  {* Version: 1.1 *}  {* *}  {* This unit provides software interfacing to the IEEE-488 bus. *}  {* *}  {* COPYRIGHT (c) 1983 SAGE Computer *}  {* ALL RIGHTS RESERVED *}  {* *}  {* Development History: *}  {* *}  {* 1 17-Jul-82 Initial Release *}  {* 1.1 16-DEC-83 IB_HEARS Buffer indx chng from 0 to 1 *}  {* *}  {* *}  {*******************************************************************}  UNIT IB_UNIT; {Link with IB.BUS.CODE to form IB.LNK.CODE}  INTERFACE  VAR IB_SAGE, {The bus address of the SA