IMD 1.18: 23/09/2013 10:55:00 II.0 utility  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ߋtv ?B-NO BOOT ON VOLUME @w p@w wP׭ ׭ w f& XT:[a FORMAT.CODE:[ REMOTE.TEXT:[ CALC.TEXT:[ CALC.CODE:[ COMP2.TfwW#w v   @ @wP  @& 7 "  BLOCK@   IS BAD   EXT:[-̂@ &   # p@ zw 7 P7 R & B g wD ѕ  Rì     s   p x] \Z 1  d s  -2&w*  UTILITY~`C  YALOE.CODEjCJL2.CODEjJQ LIBMAP.CODEjŸQUMARKDUPDIR.CODE7UXCOPYDUPDIR.CODE7X^EDITTORT11.CODEȟ^hRT11TOEDIT.CODECho LIBRARY.CODEZsoDISASM.II.CODEZ4 OPCODES.II.0Z`4 BASICIO.CODE:kBASIC.COMPILERk SC.GEN.CODE:[PATCH.DOC.TEXT[֞ PATCH.CODE:[DREC.DOCUM.TEXTZ7RECOVER.G.CODEZ$ 11.ERRORSlß$' 11.OPCODES UTILITY~`C  YALOE.CODEjCJL2.CODEjJQ LIBMAP.CODEjŸQUMARKDUPDIR.CODEl'W ASM11.CODElW[ READ.ME.TEXTZ[{ XXREF.TEXT:[{ XXREF.CODE:[ FORMAT.TE7UXCOPYDUPDIR.CODE7X^EDITTORT11.CODEȟ^hRT11TOEDIT.CODECho LIBRARY.CODEZsoDISASM.II.CODEZ Lost workfile sourceEצ Workfile .š. צread in*צNo workfile to read 23r"  $áɡ|  ؂؂؀ $ˡ5!צOutput file error: Help$؂ɡ_ꕕ $4 OPCODES.II.0Z`4 BASICIO.CODE:kBASIC.COMPILERk SC.GEN.CODE:[PATCH.DOC.TEXT[֞ PATCH.CODE:[DREC.DOCUM.TEXTZ7RECOVER.G.CODEZ$ 11.ERRORSlß$' 11.OPCODES dnPASCALSYSEDITOR l'W ASM11.CODElW[ READ.ME.TEXTZ[{ XXREF.TEXT:[{ XXREF.CODE:[ FORMAT.TE XT:[a FORMAT.CODE:[ REMOTE.TEXT:[ CALC.TEXT:[ CALC.CODE:[ COMP2.TEXT:[;COPYRIGHT (C) 1979, REGENTS OF THE UNIVERSITY OF CALIFORNIAš@$á ەš ۞%צnot enough space  $$ "ˍ܍.$צnot enough spaceYš7 ނš $۞ꂫ@\ <YALOE:%צ - ?  for details ڕLjڕńܓܡɡ}2 ȡ 2 ȡ " , , $:&*צ r is  צ bytes,  צ of which are filled, leaving  צYour 'save' text is gh spaceš'צ'save' area deleted.ڂڂڞڂڂګ ءڂ צ bytes@   +  á ɶɄ ōt: ȡؕؕؕꕕ ٓáǀáǀ١álšg# %<D ȡ ؕ ,ɶ ō# á 2 dō áȡ ág orܡ צ macro haltedثګ٫ܡZ  ńؿ؞$"á ˡ7!Output file error. HELP!$!$٫s .$ $  (^X).á  áá 0ؓÄ(צ please finish[%Fצ@Quit: U(pdate work file, E(xit without update, R(eturn to editorP'UuÍwצ*SYSTEM.WRK.TEX  ġ܂$;|+<  : IS IN ERROR, COMMAND STOPPED.T$?&SYSTEM.WRK.TEXTת*SYSTEM.WRK.CODEת$$צ.  D ȡ2 ڂɍ' ڂÍ*^ n %צ!Yet Another Line Oriented Editor.5Advance Beginning Change Delete Get Insert Jumpá  ꕸɡɡؕث$ɍ ؕꕕl ɡ! צ5Kill List Macro Now 8Quit Read Save Unsave Verifȡ " ġ 9nvɡ y Write eXchange ?elp%Ctrl-X (can) to cancel command input.צ The؂ˡfġ!צ Find too long9؞9ؿؿڍڡ'9צ no macros you have defined are:צ -  ȡ&ˡ צ - צYour text buffet foundɡ؂؂ث Z  ڂš@%insertion truncated, not enou (.TEXT-(ؾ.á$"áSFile: .צ is in error. Write not done.KywusqoqnHFyFDB@:<>@BD ! Illegal title؂(x ɡ 񗜳Ʉ < d + EDITOR -۳( , 쾂0ǀ ō۳ $ˡ =á INITIALIOUT COPYFILEENVIRONMPUTSYNTAEDITCOREǼܡڑġ۳I۹   %  Unimplemented ۳ $?zx{ywusqoqnHFyFDB@:<>@BD ɡ š    ڶ˄Oڶ(á6<$ƁP* $.t|XBl  \  44 Nb2$ˡ =á(á%ڶ'áڶ'á ڤpڳ * Ǽܡڑġ۳I۹   %  Unimplementedˡ عI٢L?٢0٢!٢ QD9, ۳ $?zx{ FP    x$(.TEXT-"á DFile: צ is in error. Not readywusqoqnHFyFDB@:<>@BD $File name error.؂,Z  ȡٕؕȡ1צNot enough room to save 3(߲ZhgV[^?`%2^j|~rN8bR**DXV+ Nb2$ˡ =á inȡ ؞؞táS؂ڂɡڞ؞؂$צnot enough Ǽܡڑġ۳I۹   %  Unimplementedspaceh Ȅؿ؞ؾ.ؾ]˄צ.TEXTÄ ۳ $?zx{ á<& Please press to continue. áR۾5۾á۾ ߂߂܂܂  iZ6^ ٪Pצ what mar۾ á ܕeP ^ۥ   ڞker? -P,-V,Vȡ-,-, ,,-- -- C צBad disk tranڂ ˡ  !Uقčs^  á ܂áũsfer. $ۓMá%oˡ$#oˡ$ۓh"ؓɍš  ٚáء  d  ݂ɡ ݂éȄéĄۓMá%oˡ$#oˡ$ۓt!šەݕ : X-š 0ۍáǸ ބu!ޡio oٞȡ/FݤáFݤZݤZݤ܂ۡ צRepeatfactor > 10,000 \ á 킫6ڕ ق.ܫǸ ބ{!ޡoo oٕٕٞȡ1FݤkKThere is no room to copy the deletion. Do you wish to delete anyway? (y/n)תP Yá(ڕ񩁠áFݤZݤZݤ܂.ܕۂ镫ܑ۫۞hPpġۥoە ڂ ٕ ݞ݂ ˡ !U܂oەە "ȡTFܤåZܤĄZܤȄ-á Fܤ FܤZܤZܤە.Zfڡ?١ 1ۥ č%`ȡ3k %á   ۂɡ.%ߡצRan out of disk roomFڤá ZڤġZڤZڤ؂ ĩɄ ؂ Tfګ ء6ÍɡɄ ڕڕ ȡ*FޤáZޤZޤڕ ڕ꾩 꾩 쩃áܕܕ    á ۂɡ.%ߡRan out of disk roomߓá  -á á@  Äە߂ũńɄ٫  š2ꕞꕚꕫ FP&  ٪P&áצERROR: ȍ, á  ߞ á7á + 꾩Í ߂  á DFIJLM N P Q R SVXZ,>.+-?/=<á,('(but workfile not updated)1 R(eturn to the editor without doing anything $ ('+   09̂GʂGȡ *    Ʉ?Í RáEá{šc"á=-Backup file not present (tried to remove it).D#ƁƂƁƂ   šá á  á ƁƁɡ צ>Edit:V ̂GƂGƂG:ƂG&ƂGP "ˡWYB~8NP" < x  v p H . F J%ޤڕ ڕorkfile lost.4No workfile is present. File? ( for no file ) תP P á *SYSTEM.WRK٤ؚٳ قؚ.  ȡض ض    .TEXTĄ .TEXTתP   צP"ˡ System volume not on line5Pצ.TEXTUPP.BACKUPV ˡd ~^򫃂 ˡ!צFile system terminal error?&SYSTEM.WRK.TEXTתצ*SYSTEM.WRK.CODEצ ȡn   CCP: vتP:,,š,*á.:צ*SYSTEM.WRK.TEXTJ צNot present. File? P"á𥁤  Í .&--- d-.8.:l5$55(Ɓ3"ˡ >%̂GʂGʂGʂGʂGʂG ʂG צCan't open backup file! کɡ$Not enough room for backup! צ Copying to ک̂GʂGȡܤܚAẐGʂGȡܤAaẑGʂGȡܤA09̂GʂGȡܤA    oVˡReading Page Zero / /ȡ"F F   ˡ F PL4Rp>rLLzh  &SYSTEM.WRK.TEXTתצ*SYSTEM.WRK.CODEצצWriting Page Zero"ˡצBad input file.ˡCˡRan out of room."ˡצOצ*SYSTEM.WRK.TEXTJ צNot present. File? P"á𥁤  Í n backup file.ققáîګ^צ>Edit:צتP:,,š,*á.:.&--- d-.8.:l Readingˡצ Reading file.!n  ABC$F>Quit:תPF# U(pdate the workfile and leaveצ% E(xit  צImproper marker specification.  2肶##>צMarke ׷ U=ˡ ׷     ׷     Ƃ=ƃir exceeds file bounds. :蕕*צ[á$ צ& Copy: From what file[marker,marker]? P ƂPƂá Ƃ=Ƃ# Copy: File not present. Filename ר  צ]ɍٲˍ.ڕ.P..P,á? תP"áצ CopyP  Ⓞ ڕɄ čⓄ% Ʉ ؕ     ە ..ȡ۲۾ ..بáNONE Äצ ChristmasÄצ New Years Äצȡ ۲ ۾ ..ȡ۲۾ צ.TEXT˲ȍ.˄#.. HalloweenJanuaryתPFebruaryתPצMarchPצAprilPצMayPצJunePJulyתPrצAWriting Cáš LPAGE+1>RPAGE*P.צ.TEXTU.P.áȡHٕڂġ&Buffer overflow."ˡˡˡ"ˡ܂܂á̂2ʂ2ȡ,FۤġFۤ  ڞڂV= ˸ "ˡ%Bad disk transfer . Fۤ򥁤ˡצThe workfile, צ, is    ĶɄd, ڨ߶ߤ  blocks long.š'The backup file is צWriting out the filee |_`ߤ Marker not there. ٲgߤزSߤá h x   ׷  jp Writing Cáš LPAGE+1>RPAGE* ׷ U=ˡ ׷     ׷     Ƃ=ƃi"ˡˡˡ"ˡ܂܂á̂2ʂ2ȡ,FۤġFۤצ& Copy: From what file[marker,marker]? P ƂPƂá Ƃ=Ƃ# Copy: File not present. FilenameFۤ򥁤ˡצThe workfile, צ, is  ? תP"áצ CopyP  Ⓞ ڕɄ čⓄ% Ʉ  blocks long.š'The backup file is צWriting out the filee |_`"ˡ Disk Error.Ƃ=Ƃ=fV^x0v*  ׷   nnanT-RL?  "$&(*,.C2468:<>mBFHJl ).r>  צ+ Environment: {options} to leaveP    צNSet tabs: C(ol# {N(o R(ight L(eft D(ecimal stop} ȡIn(Jצ Not option ~  {-.L$RD0( צColumn #    eU >0AT(A q"Q< AP aCá   ?á ؕ -á ؂ á  "Tv|dF  Created צ; Last updated צ (Revision $  A(uto indent ~צ F(illing  L(eft margin Syntax Error #תP צ . Type @Ƃ ƃ7Ƃ צ*SYSTEM.SYNTAX"ˡ mȡ-  R(ight margin   P(ara margin   C(ommand ch  ǃȡ ǜȡ ȡ Ƃ ˡ á d d   0 0 0 S(et tabstops  T(oken def  צ bytes used, 0 :  ؕ؞ق ق   پÍ پáG ؕDؕ   available.צ There are  צ pages in the left stack, and  צ pageצ . Type  á   Ƃ #%dast updated צ (Revision ugustPc SeptemberתPQOctoberתPANovemberתP0צDecemberP ~sh[K=. s in the right stack.צ You have   pages of room,צ and at most   צ,  l !#%DeT  ȡ,ءצTrue pages worth in the buffer. צ Patterns:2צ = 'צFalse0 ڳ@@צT or Fȡǀ'. , = '[ǀ'šצ Markers: TáTrue צFalse Z  # צ ȡצ Fá  !Fȡ <>˶ ڳɡ ڂ0   ع7-n{nÄ  Created צ; Last updated צ (Revision   t, E(nd of the file. תP  ةdةˡ Fá  cBá  TSáG~o< eXchange: TEXT { a char} [ escapes; accepts]תP #š ,Eá'ɡ ةˡ =g &! Copyá2š+ؾZ áM ˄9 : B(uffer F(rom file תP  fDBá򩁡驁 ũĄצ Invalid copy.驁?辿á٫؞ǀ.蕀PšrL WARNING! You aġNo room{詁ĩɄ詁 詁驁詁#詁#re about to zap more than 80 chars, do you wish to zap? (y/n)תP  Yˡ   A   Fá 8 LeapingFȡ-ťF˄š 蕞 蕕ɡ"צNo room to in /ɥF˄ 1` Jump to ׷ ٩sert.  f~˄&  肫٤ ٤ צ Not there.WF٤ˡ F٤ˡMarker all messed up. Z٤ 肶~Ä  Í  ڶ $ JUMP: B(eginning E(nd M(arker תP  Bá)Eá6No insertion to back over.   oڶġd5Please finish up the insertion   ڶMá ةˡة $ Zi ~ צInappropriate environment š Buffer Overflow!!!!  á( nɄض  R  áȡGaق) ٤ áB V ~  á \áצEMarker overflow. Which one to replace? (Type in the letter or ) P H Íɡd ġ ꕞ"á><A&% Banish: To the L(eft or Right תP  ةAtצSet Pȡ٤ ؤZؤ蚥Fؤةáةˡ Lá Rá ةˡ _ J Next: F(orwards, B(ackwards in the file; S(tarIwI v Set: E(nvironment M(arker תP  EáMá ةˡة      ˄ "ń nɄnń۶ >á&%}6T ,  M(<)8ꕞ 삿Vá"4! á   ɡ"T b# Ȅ4 ɡáš-!~ō? !         Ķ "       $ń7 á      á   ǀd ؂ȡ ؂ġ  ؂š!     ɡ"gr% Ʉ9  ؂  P  ɡ          š   ˡZá šĶ "   &<áRń/ á-    ٕةġ-á- ؕ  ؕ ؞؞  肫ġ  ø ɡ"yɄ1 ɡáĸ~٫ګ    U ؂ \   צH In š#Ķ Í "    '(sert: Text { a char, a line} [ accepts, escapes]P  ˡPš)؂ɡÄ؂ eš ꕞ.dšצBuffer overflow* ꕞˡǀ3á ǀ }á$ȡ ꕫ؂ +  K Adjust: L(just R(just  á ĄÄ˄Ąۄx á  gáNȡ$C(enter { to leave}תP  á   ˡܡ    á áث4 (á   0á<>  ȩd' Tá+J ܹ-+2ڕ+%   Ʉګ ڂ٥ č9ڕ앩+5.#á+vá +d!O á +- áڕg  ^ġ)š !(š  ) <öÍ+ڕ앩+ ˡá۫l *ȡu >á&%>á)   O ٕ܄ɡ 蕞 ٕٕ  ث ٕ٫ 4 H9.۪PڪP.P [ / צ]: ء% áL(itT(ok ݓ0á0 á*- á  ö oz<  Replaceצ' aborts, 'R' replaces, ' ' doesn't<áD1 12 Lá 1Vá 1 Tá 1 VTÍLÍ2SsÍV Rr˄ šYš9Buffer full. Aborting Replace  蕞^32L(Invalid delimiter. 1á*۾ ń ɡ 蕞[ˡ 驁詁@=̀̀  áצ Fi<á()+ $ .,20. 46E%l&h<á%&[#W$S'N čġ.צYour pattern is too long Ä 4۶ۂ۾ÄšToo many'/,+ $* IGb`% Of Í }á1á۶#.5  á,46ǀ ٶo á  Cá1á  á    /ġ   ض á 8 ؂    á   5  zt 7-ȡEھ á-ń ۂھM X.ȡˡǀ ڶo š á 8ض     á   ˡȡ ȡ 4` x! š5  zt 8   á X: ɡ/ń šٮ! ݮ. Ʉ öɄ  /    @ Delete: < > { to delete, to abort}תP  Ʉ á ? ;     á:;>á8  á   vK%e&a<á%&T#P$L'Gá<>7v  b á:;   6ǀ  š 5",13B@[YH_ٕ /˄ ápÄ  áxAáje  ˄ ȍ  á ȥ  Ä  tplh HD ˡ>  `  2 >v|Hd~n 2~R J @ 4!"L#j#ference W>% ˡ)+צ (+ +צ times)+ (once)++ 5+5ȡ , ++#j%2'l&% '')J**z|>D^צL Edit: A(djst C(py D(lete F(ind I(nsrt J(mp R(place Q(uit X(chng Z(ap [L.2]P #h +# c+ completely linked segment++צ Pascal host outer block zá  á   l  ~|x++ Pascal segment+s p+ library unit+s @+ separate proc LIBMAP edure segment+@ l>́ʁʁZ䍡 [<Ɓ́́ʁʁȡƁʁ ʁ́Ɓˡ߹ZM+ + global addr P #+ +צ, I #+ +Z6+ + public var base = + +Z5+ +צ constant value of + +Y5+ndצ =><(צ Replace V(fy =><123ʀ 4 á12̀3ʀ [4?COPYRIGHT (C) 1979, THE REGENTS OF THE UNIVERSITY OF CALIFORNIAé é ȩل9١ ߂ á=<á  >éɄ<éńۡYb4End oٚ@.ȡ$ˡ@,f Buffer encountered. Get more from disk? (Y/N)תP @YáAFindingתP>á  TȡAݢܢ`ܢ`ښܢpH \ȡ"    Oٓ1ń'ۡPattern not in the fileNo old pattern.   - >ō  ˡ,+Interface read error+ 3lnrt$D^צL Edit: A(djst C(py D(lete F(ind I(nsrt J(mp R(place Q(uit X(chng Z(ap [L.2]P |   4  á á  ō+ + zá  á   l  ~|x+ áI ١%+library read error!+ ١  -----------------------------------------K++  [צenter library name: ,YyÍb$" -Duplicate Directory Marker { July 13, 1978 } P,צ +,*,*SYSTEM.LIBRARYתP,"ˡ.CODE,P,,ˡצצ) Enter drive # of user's disk [4 or 5]: š 00bad file[UUȡ]ɥɍ,ō#!not a code fileũȍKצ4Illegal volume name. Do you want to mark it anyway?  list linker info table (Y/N)? ٳ@@ٳZ1A duplicate directory is not being maintained on ̄ʄȡ'ZZolist referenced items (Y/N)? ٳ@@ٳ YYXצ: .á;WARNING! It appears that blocks 6 - 9 are not free for use.צmap output file name: PׯצCONSOLE:P.á  :ˡ.TEXTP" Are you sure that they are free? ?צ3 Are you sure that blocks 6 - 9 are free for use? , Do you wa+"á++צ LIBRARY MAP FOR +,++š+ ++++ gKMnt the directories to be marked? b צ+ Directories are now marked as d.6 Ɓ+ƂWƁƂ/Ղ1Library map utility [II.0]X XƁ+Ɓlruplicate. 6 A duplicate directory is already being maintained on ̄ʄȡ'l ~^  ^  ferenced items (Y/N)? ٳ@@ٳ YYX: .צ Mark not done. צType to exit. +  DUPLICAT Z`re that they are free? ?צ3 Are you sure that blocks 6 - 9 are free for use? , Do you wa +צ external proc P #+ ++ + separate proc P #+ +{ global m public  _ constant O separate ? unit 3 private $s#aUKWKMás 6 Nb,tȡš+צ Segment #+ +: ++צF----------------------------- nt the directories to be marked? b צ+ Directories are now marked as dctory of ̄ʄȡ': {blocks 2-5}? uplicate. 6 A duplicate directory is already being maintained on ̄ʄȡ' EDITTORT b DUPLICAT   ۡ (ۡ*(3 ġ((((ȡ;á ȡYyÍb$' -Duplicate Directory Copier { July 12, 1978 } @ġ ٿB٨ ȡOAġ@)0ġ צ) Enter drive # of user's disk [4 or 5]: š 00(@{ TITLE SIZE STARTũȍ?צ1Illegal volume name. Do you want to copy anyway? .Are you sure you want to zap the direGˡGá[ .  ctory of ̄ʄȡ': {blocks 2-5}?     GݓGáp ˡ to exit.  Qb 06 sure you want to zap the dire 4GˡGګGFč:No space at end of RT11 disk  ؿ>   ;  ˡȡצ P ר C  Enter title of output Tex ˡ_ | ƃƄ;Ձ9@Place RT11 disk in drive, indicate unit number [4,5], tt file:PšצEnter unit # of Pascal disk : #4:V RT11TOTE SPצ#5:SP#9:SPצ#10:TP^צ#11:GGGGGG ݢ  ݢ   ݢ File established at block  Z nצNew File Length =  צ BlocksGGؕGؚG ;COPYRIGHT (C) 1979, REGENTS OF THE UNIVERSITY OF CALIFORNIA"Enter title of new RT11 text file:Pšצ.ˡ..ȡۡ (ۡ*(3 ġ((((ȡ;á ȡ P ר A#File Exists - May Not Be Re-written@ġ ٿB  ( @ Dz?$ TITLE SIZE STARTX צEnter title of input Text file:PšT` áGˡGá[ ׷ . ؿ>   ;    צ   @ G ˡ_ | ƃƄ;Ձ9@Place RT11 disk in drive, indicate unit number [4,5], tړGáu   ׯ  ȡ  .hen (C/R)  0"ÄDisplay the directory? (y/n)x  ړ ڡeG  SIZE: צ, START:  ƃr:6D~" T` á @o& :%Enter title of wanted RT11 text file:PšZ.ץ o) n( n צ'Place RT11 Disk In Drive and Type  ġ nZ"  E   צ)Place Pascal Disk In Drive and Type   ȡn(w (Put system disk in drive, then type [Y]: Q3The RT11 directory on the Pascal disk was náo)  P= á/o)o) ؂ o)߿o)߿jnot foundƯjZ!_Z X h $ dv Ajo݂ˡ6 THERE WAS AN ERROR IN TRANSFER!!ݡjn !Eצ RT-11.DIRPE0"ÄˡġDisplay the directory? (y/n) j_ H2 šצ'Place RT11 Disk in Drive and Type  ġZ"  E    nצ)Place Pascal Disk in Drive and Type  jn(Put system disk in drive, then type [Y]: Q3The RT11 directory on the Pascal disk was nTP<צ#12:TP  zZ:j (Transfer Option? B(inary R(tڂˡ6 THERE WAS AN ERROR IN TRANSFER!! j G& 4 ȡn11 edit :س@ BáRá X *Place PascajnˡJצ OUTPUT ERROR, program terminatedj l disk in drive then Type "á Enter title of output Text file:P تP!-̄/+.-ʄ/m.-á̄/--,+̄1,ʄ1ȡ%,.-ˡ̄/--,,šj צ(Transfer Option? B(inary R(t11 edit :س Báʄ/ -+- -+--š---.-.-` ƯjưՁצRá * 2jnn T, n n jn(Are you using a standard RT11 disk[Y,N]? צ,Are you using a Single floppy drive machine? ȡnȡn á#n Ǭš Pޡ= áצAPlace RT11 disk in drive, indicate unit number [4-12], then (C/R) A/nn ؂nݿnݿ j% š !Eצ RT-11.DIRPE0"ÄˡġDisplay the directory? (y/n)  ٚ@$ȡܾۤˡ@&  Bȡ(٤ڤšګ-צSeg to link into? P Y,ˡV-צá-٢D""d. Please Reconfirm (y/n) - P)Bš?[á ˡ#"- I/O error # תP 8-Link Code File -> תPP*צ*SYSTEM.LIBRARYP$"- Read error # תP  :"-צIncompatible byte sexP -צš P[Íx ȡ -ۢ ڤڤ  7Segment # to link and , N(ew file, Q(uit, A(bortP  c@@[5  -ۢ   -ۢ    -ۢ   -צPascal System Librarian [II.0]P,-צOutput code file -> P  P * צ*SYSTEM.LIB -Code file length - תP  (  á[ ˡ#-Link info read errתPRARYP á  ˡ', ,VWWȡV  ר G ˡ#-Code file overflowתP    سس-צNotice? P,O,,á !C- Bad link infoתPۓ3>`&š ۡode write error @K Ɓ[ƂƁƂƁ[ƁT2^VB L  X  ōٍؕ-צInterface errorP,p[ڂˡ"-צInterface-צPascal System Librarian [II.0]P,-צOutput code file -> P  P * צ*SYSTEM.LIB LIBRARIA  read errPDˡ#-צInterface write errPۡ,pآ`  آp[ˡ'-צError reading seg P ˡ(-צI/O error - no room on diskPj, آ ,,آ`آ`ōآ`,`آ`آ`ˡ?COPYRIGHT (C) 1979, THE REGENTS OF THE UNIVERSITY OF CALIFORNIA , @  , -תPá  0 ˡ سس-צNotice? P,O,,á !C,0̅ʅȡR,0š,0,0ٻ, `d!^%  CODESTAT UCSD P-CODE DISASSEMBLER צ II.0 [a.6]Input code file: Pl INIT DISASSEMGATHER DATACOUN ̅ƅPƅ.CODEUƅ"ˡ llá̅ʅȡRˡ!Ǘ.   צ(Is this code file designed for a machine צ9where byte zero is the most significant byte ?YyÍ צ*Dis-assembly output f(ȡ.press spacebar to continue...ile ( for none): PP׷צCONSOLE:#1:ׯ /'#"!  áhƂlƃƁ/Ƃ[Յ    ׷ /ƂlƁ/ؒX^+\ רd0123456789ABCDEFר ,7d  ˡ!צCONSOLE:#1:ׯ//P/š///צ sǗ.   צ(Is this code file designed for a machine orry but there were no accesses/צ3 to this data segment from dis-assembled procedures/! Z ۂ(ڂ(() Ʉl(á= Jɡ %%  %% ع// / / //-s/b/> š  +ɡF \+d\+d++1Q/*@/// teVK<-/ع٢  |š"ǀ>٢ ٢  ٢8 w٢ j٢ ٢ U٢ ٢ ٢! 8٢R +٢  Jɡá*//áǀɡK##RARYP á  ˡ', ,VWWȡV  ר e\I2'u",ƁX0 ,צ OPCODES.II.0"ˡ4 *OPCODES.II.0 not on system disk ۢÄÄÄńɄWۢۢ8/8؂44/ /\/44)/ / /\/ ۢۢ/aڡ(ǖǖ3/ / / /\/ ۢ ۢ ȡT+\ )/) / /\/\ $ %%@/44/ / /\//44šɡE"" f//44)/ / /\/ ٢-/ / /\/ɡD!!-/ / /\/6 ٢//44  ۢۢ -/ / /\/"/ /\/ /6:   ۢۢڕ ۢ!ۢ!ǀɡ ?c=  áءGd //4/ / / / /\/ڕȡ`+\ ؕ)/4ǭÍǡǹǀɡ@ 0/ / /\/) / /\/h //448/V`?c :/?c / /\/Ǯ44/ /\/آ(آ( //44١(ǖǖ)/ / /\/ / ڢڢ٢٢ Í/צREAL/ /\//STR   /$ǥǧǫ/44 ۢ/ /\//צBOOL/ /\//POWR/ /\/ۢڡخ١خ)/ / /\/ //4/צBYTE/ / /\/X/WORD/ / /\/ A4 /  ڢڢ ڢ ڢ ؕٮ)/  V# //44/ /צ '/ /\/ //44á ۢ ڢڢ!ȡ/ȡ /'//*M / 3)/-?=KZ4ǖ́3ʁ3ȡƀǖ4ǖ́3ʁ3ȡ4ǖ צ proceduresꓡ2( )4ǖ́4ʁ4ȡ&ǖġǖǖǖǖƀǖƀǖƀQ09Ȅ009Ȅ 04ǖōG$I didn't say you had THAT procedure!4ǖ́3ʁ3ȡ;ǖ2Ä G4ǖ́3ʁ3Mצdis-assembling procedure  d.2Äצ 7KD'zh5)ȡ  4ǖȡcQqÍÍX6cXrצ$Segme&1)&)(& š & & 4ǖ 4ǖnt guide: #(of segment),Q(uit)צyou have these segments:ȡV $$?$cؕ?$cũ$cÍ?c$%ɡ%  4ǖġ4ǖ) ٥۩cĄá<c۩c% $?c$ȡ!?$c?$c$$) 4ǖá+Procedure not in fileš۩á ؤؤ?ń4šکá ؤؤ6y  *&4ǖ ɡ!&4ǖ  š  % á؂(؂l 24ǖáN Procedure   is written in Assembly./ /BLOCK #4ǖȡ%צ # LL SIZE4ǖȡH/( / OFFSET IN BLOCK=/ //צSEGMENT PROC OFFSET#/ #/צ :  4ǖȡ" HEX CODE/8*[ ] .x/ / / צ"Procedure guide: #(of procedure),&צL(isting),Q(uit)*צA(ll),L(isting),Q(uit)/(/d/d/d/צ): 0.2áצ to segment: ȡ ?قצwhich procedure $ +\ ר'', EA= 951 - )%! צdata segment to watch?צto dis-assemble?LlÍAaÍdis-assembling all T  1 Do you wish to keep track of referencesצ2 to a parš//צ5 Positive jumps Negative jumps//ȡw/ /ticular procedure's data segment?YyÍ צ&Do you wish control over dis-assembly? /d/ /d/3//Sorry no juYyÍ;*** WARNING - - STATISTICS ARE GATHERED ON DIS-ASSEMBLEDצ PROCEDURESmps today!/r6 z//Procedure call statistics/ȡˡǖ ONLY ***q /*** THIS INCLUDES DATA SEGMENT WATCHING ***ȡǖšz/ Segment:/ / Procedure:/ / Calls:/| ȡU(( )ǖ / 􊉇ȡ/*2ئSLDˡe` 2 P l l f JD* n  L !: ol over dis-assembly?C OPCODE: 0..127 TOTAL:ة# ة#'dئ % ##ˡ ȡ :YyÍ;*** WARNING - - STATISTICS ARE GATHERED ON DIS-ASSEMBLEDצ PROCEDURESإ/ إ/#d  :إ/  إ/ #d@ :عצ Parameter oneצ Bits used Total Percentageצ7 Parameter one إ/@ إ/@#d` :إ/` إ/`#d ȡ ?؂which segment to look at  Parameter two ٦7Bits used Total Percentage Total Percentageצ. Para(צto decide on DATA SEGMENT?&צfor possible DIS-ASSEMBLY?Qq˄09Ȅ00meter one Parameter twoצ Case table sizeצ7Bits used Total Percentage Total9Ȅ 0ōL"I didn't say you had THAT segment!  Percentage٦ Total Percentageצ*Flavor Total Percentage Flavorצ TotalˡAQqÍÍ&4QqÍi 7have you changed your mind about data segment watching? Percentage٦2 # Total Pct # Total Pct # Total٦ Pct # Total PctYyÍéQȡFˡ dc3C~ //Jump statistics on the/ /צ Total jumps/ "d :إ/ إ/"d  :إ/  إ  /٢ d/á䥁//áȡ/8؂44/٢/ "d "JئSLDO OPCODE: 232..247 TOTAL:ة!  // /8؂44/٢ //ة!'dئ % !!ˡ ȡ :إ/ إ/!dȡ襁/8؂44/٢ /٢d/צ /8؂44 :إ/ إ/!d :إ/ إ//٢ /٢d/z / / !d  :إ/  إ/ !d צSIND OPCOD/'d/צ % ˡ/////ȡI/ /٢ /E: 248..255 TOTAL:ة  ة 'dצ %   ˡ ȡ :إ/d// \ / / /'d/צ %  إ/ d :إ/ إ/ d ://///ȡw/ /٢ /٢d/٢  / إ/ d :إ/ إ/ d  /٢ d/ȡI/ /٢ $ /٢ d/ (\ // / / /'d/ % // \ Z/ / /'d/צ % ˡ////L / / /'d/צ % ˡ/////ȡI//ȡ/ /٢ /٢d/٢ /٢d/ /٢ /٢d// \ // /'٢! /٢!d//  4// /'d צSLDL OPCODE: 216..231 TOTAL:ة" ة"'dצ % ""ˡd/צ % /////ámȡ`/ /٢ / ȡ :إ/ إ/"d :إ/ إ//٢  //ȡw/ /٢ /٢d/ ' צ Total operators TT "ɍ -   $X  8Output file for data segment statistics( for none): P/צ % ///áȡ/V؂44/٢( //  $ ݞ$' ݑ$ $݂ō $݂ġ ݂$ /j؂44/٢( ///~44,/٢((  $ $ȡ%  0 ފ$čV   .ˡ:  Eɡ //ȡ/V؂44/٢( /٢(d/j؂44  -ݑ š 0 0 ߿`ġ(   ݂. ݕ ؂݂3  ݕ 0 . ݑ0 /٢( /٢(d//~44,/٢(( /٢((ݕ݂ ؂ ɡ  |,  j  ,. o look at (צto decid/RGP/ / /'d/צ % ///de on DATA SEGMENT?&צfor possible DIS-ASSEMBLY?Qq˄09Ȅ009Ȅ 0ȡˡ]/3؂44/٢ /٢󊉇d/ N/3؂44ōL"I didn't say you had THAT segment! ˡAQq/٢ // á// 6 ǀ ȡ/Í&4QqÍi 7have you changed your mind about data segment watching?Tš dš Xš Lš @š 4š (š / \FT>4fh.$ɡ=ˡ/آ;ˡ/آV   3Output file for opcode statistics ( for none): Pةؕؤ ؤšؤؤةġ= dצCONSOLE:ׯצ#1://Pǀ **ȡ//44ئData Segment size:ة צ Data references:ة ئ Lex levelإ۩c /צ Opcode:/ / Total: : 6 2 .*&" ("(" ,צ For segment ȡإ?قצ Procedure #ة ئO. 8 ////' / Total operators/ffset(word) Total %u8ˡ3/ / /d /ˡ  ȡ :إ/ إ/"d :إ/ إ/SLDO SLDO SLDO SLDO SIND SIND SIND SIND SIND SIND SIND SIND REAL STRING BOOLEAN POWER BYTE WORD EXEC-ERRINIT RESET OPEN CLOSE GET PUT SEEK EOF EOLN READINT WRITEINTREADREALWRITREALREADCHARWRITCHARREADSTR WRITESTRWRITBYTSREADLNN WRITELN CONCAT INSERT COPY DELETE POS BLOCKIO GOTOXY IOCHECK NEW MOVELEFTMOVERGHTEXIT UREAD UWRITE IDSEARCHTREESRCHTIME FILLCHARSCAN DRAWLINEDRAWBLOC    ׷צCONSOLE:#1:ׯ//P/š///צ s TRUNC ROUND SIN COS LOG ATAN LN orry but there were no accesses/צ3 to this data segment from dis-assembled procedures/! Z EXP SQRT MARK RELEASE IORESULTUBUSY PWROFTENUWAIT UCLEAR HALT MEMAVAL SLDC ABI ABR ADI ADR pɍ -   $ $ ݞ$' ݑLAND DIF DVI DVR CHK FLO FLT INN INT LOR MODI MPI MPR NGI NGR LNOT $ $݂ō $݂ġ ݂$ $ $ȡ%  0SRS SBI SBR SGS SQI SQR STO IXS UNI LDE CSP LDCN ADJ FJP INC IND  ފ$čV   .ˡ:  Eɡ  -ݑ š 0 0 ߿`ġ(  IXA LAO LSA LAE MOV LDO SAS SRO XJP RNP CIP EQU GEQ GTR LDA LDC  ݂. ݕ ؂݂3  ݕ 0 . ݑ0 ݕ݂ ؂ ɡ  |, pLEQ LES LOD NEQ STR UJP LDP STP LDM STM LDB STB IXP RBP CBP EQUI t  إ/#d  :إ/  إ/ #d@ :GEQI GTRI LLA LDCI LEQI LESI LDL NEQI STL CXP CLP CGP LPA STE BYT EFJ إ/@ إ/@#d` :إ/` إ/`#dNFJ BPT XIT NOP SLDL SLDL SLDL SLDL SLDL SLDL SLDL SLDL SLDL SLDL SLDL SLDL  צSLDL OPCODE: 216..231 TOTAL:ة" ة"'dצ % ""ˡSLDL SLDL SLDL SLDL SLDO SLDO SLDO SLDO SLDO SLDO SLDO SLDO SLDO SLDO SLDO SLDO  HEN FGET(F); *WHILE (FWINDOW^[0] = ' ') AND NOT FEOF DO FGET(F); *IF FEOF THEN GOTO 1; *CH := FWINDOW^[0]; *IF (CH = '+') OR (CH = '-') THEN ,BEGIN NEG := CH = '-'; FGET(F); CH := FWINDOW^[0] END; *WHILE (CH IN DIGITS) AND NOT FEOF DO ,BEGIN XVALID  Type  word = Packed Array[1..16] Of Boolean; "otherword = Packed Array[0..15] Of 0..1; "stackra = Array[0..30] Of Integer;:= TRUE; .X := X*10 + (ORD(CH)-ORD('0')); .FGET(F); CH := FWINDOW^[0] ,END; *IF FEOF THEN GOTO 1; *IPOT := -1; *IF CH = '. " "PROCEDURE BREADREAL(VAR F: FIB; VAR X: REAL); "PROCEDURE BWRITEREAL(VAR F: FIB; X: REAL; W, D: INTEGER); "Procedure Bgos' THEN ,BEGIN IPOT := 0; .REPEAT FGET(F); CH := FWINDOW^[0]; 0IF CH IN DIGITS THEN 2BEGIN XVALID := TRUE; IPOT := IPOT + 1; ub(Var stackptr: Integer; Var substack: stackra); "Procedure Breturn(Var stackptr: Integer; Var substack: stackra); "Procedure4X := X + (ORD(CH)-ORD('0'))/PWROFTEN(IPOT) 2END .UNTIL FEOF OR NOT (CH IN DIGITS); .IF FEOF THEN GOTO 1 ,END;  Bgetchar(Var s: String); "Function Bopenfile(Var donefile: word; 3Var FIBPTR:FIB;WINDPTR:WINDOWP;FILENUM:INTEGER; 3VAR TITLEá +-Í-ڲzؼ 0:STRING;OLD:BOOLEAN):REAL; "Function Brandom(Var seed: Integer):Real; "Procedure Bautoinits(Var stackptr: Integer; 7Var donef.áBڲzؼ0ݞ$ڲzjeEÍɍEáޢ >ۓile: Integer; Type  word = Packed Array[1..16] Of Boolean; "otherword = Packed Array[0..15] Of 0..1; "stackra = Array[0..30] Of Integer; " "PROCEDURE BREADREAL(VAR F: FIB; VAR X: REAL); "PROCEDURE BWRITEREAL(VAR F: FIB; X: REAL; W, D: INTEGER); "Procedure Bgosub(Var stackptr: Integer; Var substack: stackra); "Procedure Breturn(Var stackptr: Integer; Var substack: s7Var seed: Integer); "Procedure Bautorandomizedinits(Var stackptr: Integer; AVar donefile: Integer; $  4PASCALSYBASICIO  Var seed: otherword); "  IMPLEMENTATION " "PROCEDURE BREADREAL(*VAR F: FIB; VAR X: REAL*); $LABEL 1; $VAR CH: CHAR;  NEG,XVALID: BOOLEAN; IPOT: INTEGER; "BEGIN $WITH F DO (BEGIN X := 0; NEG := FALSE; XVALID := FALSE; *IF FSTATE = FNEEDCHAR T ɡ  -ݑ š 0 0 ߿`ġ(   ݂. ݕ ؂݂3  ݕ 0 . ݑBRANDOM BWRITERE BWRITERE  &0 ݕ݂ ؂ ɡ  |, &$*P   ٿ<"$*P   ٿ<"\|'PASCALSYBASICCOMNUMBER2 NUMBER3 NUMBER4 NUMBER5 NUMBER6 NUMBER7 >ޕݕۄ݄ޕݕۄ݄ޚTǐTNUMBER8 NUMBER9 COMPINITCOMPCLOSPROG  ȡە4 N VpPz ݕ 0 . ݑ II0D0 Copyright(c)1979 Regents of the University of California, San DiegoTION I0 ݕ݂ ؂ ɡ  |, &$*P   ٿ<"٨SAáSASAGSAˡߢ ޢ ޢߚߚ BASICIO BGOSUB BGOSUB BAUTOINI BAUTOINI BAUTORAN BAUTORAN BGETCHAR ؚS AZȡSAATN BY CAT$ COS COP$ BGETCHAR BOPENFIL BOPENFILBREADREA BREADREA BRETURN BRETURN BRANDOM DEF DEL$ DIM DATA END )EXP FOR FN GOSUB GOTO BRANDOM BWRITERE BWRITERE  &GET$ INPUT IF INS$ INT LET !LEN LOG LN MOD ɡ ؼ݀$ ؼݞ$ۡܡ ؼ$ Dɍ -   $*P   ٿ<"$ $ ݞ$' ݑ$ $݂ō $݂ġ A ZZY3b3LX&OINI BAUTOINI BAUTORAN BAUTORAN BGETCHAR ݂$ $ $ȡ%  0 ފ$čV   .ˡ:  EBGETCHAR BOPENFIL BOPENFILBREADREA BREADREA BRETURN BRETURN BRANDOM  NEXT "NEW ON #ORD OLD PRINT $POS RETURN &READ %REM  .ۨڤˡ/  ȡ ڤ,  J BWRITERERND STEP SIN STR$ THEN TO - @ǃǞ BREADREA BGOSUB  BRETURN  BGETCHAR BOPENFIL BRANDOM  BAUTOINI BAUTORANLJNJǡǤ Ǜ ǥ Ǧ dz ǼǶǎǐǒ ȡ @ˡ/ BˡBB́ʁˡ,ǭǪǖǽǚǹǬǾP77ǰP87ǷP97ǴP:7DZʁʁġʁʁ.ʁʁʁB BáP;7ǵP<7ǯ>     ,2"X ڤ,  J BWRITEREǎ'æOUTBUFSIZE MOD 512 <> BREADREA BGOSUB  BRETURN  BGETCHAR BOPENFIL BRANDOM  BAUTOINI BAUTORAN 0 ˡ"צWORKFILE EMPTY ˡ"WORKFILE EMPTY ȡ @ˡ/ BˡBB́ʁˡ,;ȡȡؤȡڤ򥀍$yڤáڤ999OOڤ8Ȅؾ áȡؾu {yqm@n q@ m}B R+PRESS SPACEBAR TO CONTINUE OR ESC TO ESCAPE Íá `تP@EEFCCDABKJIHGONM?ȡ @ǿȡ ȡ צ <--R.;٩????=š?=/Iá  IIIڢKګKV 9 צUCSD BASIC Compiler [D0]Ecrtz4xx WORKFILE EMPTY;??$ȡKKK٢I٫I :;ک??)??=š?=/Há)  HHH;ȡȡؤȡڤ򥀍$yۢJ۫JV;>?JˡJJJآHثH. ǀ  H( P7OˡOáOOO9   ˡ\ dȡڤˡ P7 ؕ  ( ٕȄ "M@áNNؚM  ˡ $%š EXP TOO BIG׮3%ɡ EXP TOO SMALL׮ġ ڞ$ ڑ$R%09Ȅ 0-ޚš ޮ ܟ f--؟˄#+-؟ˍצ WRO"(&ۼ ꊃ0" , >'צPˡ'P*QNG # DIMSD L.#  + ١ڢ-ܚڢ  .ܮ 3ˡ) #P꿮!!ˡȡ/P*QP> á"Igl/٤áٮ٤ء٤٤٤٤/V0٤áٮ٤MMM BکDȡICښDˡݩCáDIDN'T FIND LINE NUMBER׮ء EEFš T("-ø-+Í"09č צEXPONENT  &   %R)'"˄"! ۢښۢٚءۢݚݩFá۫Fۚ< خ ء C٩DȡצLINE #'S NOT X2á < >.á!!09Ȅ &?"^ōNצORD(c)= IN ORDERڢٚڢؚکDګDE٩FáFɡ Fخ FخF ' t  !CHARACTER DOES NOT BEGIN A SYMBOL׮ٹ=á:$ >á<$7=á;$ <á<$9<á:$ >á;$8>  تP +,+,ȡ+*á1$61./02345- ˡ!( 0'.á" ' %Eá)=++VBء; (;09ō צFRACTION ' %Eá)=AZō009ȄA 0"A$á("'FNÄ ؤؤ٢ٟ٢٢٢٢6:+áL LݟˡÄ "SASA 2ˡ áצ RESERVED WORD  "0ˡ  áצ RESERVED WORDF% Pá B٤áٮ;%٩Lé:* " ݢˡݢɡܢ Äá= ˡ!#?ˡצ END OF LINE צ RESERVED WORDÄ'Dá) @٤áٮ 'Ac = צ!CHARACTER DOES NOT BEGIN A SYMBOLP"^z&DVXZ0XU;&٩Lé:+Ä ک<(FتPצ <--EXPECTED R8 뾫hLqk>@BDFHJLNPoo   PREAL,Q ˡ+UNEXPECTED END OF INPUT뾫j!! ˡ "ث!STR,INT FUNC OR FNEND׮ *+, ')(VXZ\.0(t|#-áS#+  INT MUST BE IN 1..16׮ե ˡ צFILE #'S MAY NOT BE CHANGED , ե ٚ    =ؕOO9bI#u צFN IDS L:#BCDG  #8"=#ع59:7=787EFFEˡצUNRESOLVED FORWARD JMP(S)IHnA?>+ JتPצ <--?ˡ 78b;^KتPצ <--EXPECTED ?ˡ# *RFL#'ˡ VARIABLE׮L#8ˡeس 3ˡ) #L 4'á!#2á0  E=á #62=L#  JˡצTOL# J á#J?ˡ END OF LINE׮L##+3ˡ) #!*á2q4 צFACTOR t>>1á #>( 2??A  9  "ˡ*?ˡ END OF LINE׮L##   ڮ#?6á*4@/á# .á#@#@/á١#0 P 'ˡצ VARIABLE NAMELˡIMPROPER FOR-NEXT NESTING׮K# pM#?>+, Cء٤٤٤٤)/V1؟á2áצ NO ARGUMENTS j2ˡצ ARGUMENTS #(ˡ+,+m42(á#2á1  +á2 >á#H,LáL:+á?LˡFN ALREADY DE؟-ˍ؟ˡצMORE ARGUMENTS -áצLESS ARGUMENTS 3ˡ) #Z 3#٤á UNDEF FN׮+áB٤FINED׮LL9=LˡצFN ALREADY DEFINEDLL9B9š'צ EXCEEDED á UNDEF FN׮) ٤3٤ 7٤á UNDEF FN׮٤3٤2MAX NUMBER OF FUNCTIONS99>C:*á2áw#y ARGUMENT׮ á ظ آ)ض ض 2ˡ( #,Pض -ˡ $ R5á,+á  $62ˡ٢٢(á#-ˡ3ˡ) #آ:+á < D):+á( #خ6 7-ˡ, #خ6 8)ض 7Pض 88<97)ض؟ˡ>(á' Pښ)ٚ:+áLLl  ض 8Pض 88F:)ض 7Pض *;)ض E;)??=8á0#:+á,+:*á P.?ˡצEND OF LINE OR = #,ˡ*,á#;ض *<;"צOLD AND NEW NOT ALLOWED IN FN2ˡ( #=ˡ INT CONST׮  צ INT CONST  3FFEFDCDNNMM*GFDCˡD DNM,H:*á ˡ(L#Q ^ˡצARRAY PREEXISTSK2ˡ(L#its: stackptr's offset <> 5 צ$genautoinits: substack's offset <> 6]OO#]   Q 3ˡ)L#-ˡ  PREAD STMT NOT IMPLEMENTED#4á#=ˡ FILE NUMBER׮L#y)?ˡ LINE NUMBER #)ˡ(áA*?ˡצ END OF LINE #FEˡUNRESOLVED FORWARD JMPS\#-á"#y VARIABLE NAME׮L#* Ryצ VARIABLE NAMEL??>(á3 @ٕؕ:.JD.j   4 d H8 @#2á1 P+#2á0   RT#4ás#N>B8XV`JX">VN  (!~!!!! "8""""#z##B$$$$$%R%%%J&~&&<' ]toin=ˡצ INT CONSTL  FRACTION NOT ALLOWED׮Kե áצ UNDEF FILEKե #T-á#Tits: stackptr's offset <> 5 צ$genautoinits: substack's offset <> 6]OO#]    S?>+ , FV#4ás#=ˡצ INT CONSTL  ٩@@؂@ Gá ةGGGٚ (GGٚGġ ؿBBۢٚۢFRACTION NOT ALLOWED׮Kե áצ UNDEF FILEKե #}ل!V ١ؚ'á*'' \   ؾ5#ۡ ڮ< UDATA STATEMENT NOT IMPLEMENTED"#+,-á#+,ȡǀ',O9ġ צ FILLINDICTؚ)> fW#=ˡ LINE NUMBER׮L #2X#=ˡ LINE NUMBER׮L   Aá ةAAٚ&AAٚ á  á " Nˡ NNOMPARATOR׮L#١+خ ,خ @ THEN OR GOTO׮L#=ˡ LINE NUMBER׮L #N#J#,HY  # Z!á#y VARIABLE׮L?>(á-#2á1  8ˡ=L#ˡ צGOTOL# dž=ˡ LINE NUMBER׮L #-á)#=ˡ LINE NUMBER׮L #,P+#2á0  8ˡ=L#+ [COMMAND KEYWORDL0[RRNMJNFOBP>U  KO=ˡ DIMENSION׮Lڢ #-á#ڢQ):W6X2Y.Z*S&(&4 6F:4J(RT*ȡ(ˡ B0ڢbQ#yצARRAY VARIABLELá(#ءeˡARRAY ALREADY EXISTS׮K2 >\ æ genautoinits: seed's offset <> 3 צ$genautoinits: donefile's offset <> 4 æ$genautoin    ,/\Fh2\   ؾ   TYPE $   TYPE $   TYPE $ ȡǀ',O9ġ צ FILLINDICTؚ)>   TYPE $   TYPE $   TYPE $ Aá ةAAٚ&AAٚ á  á " Nˡ NN   TYPE $   TYPE $   TYPE $ تPٓX,d-,-ȡ,,"ASSERTION FAILED, REPORT MESSAGE: UV l   TYPE $   TYPE $   TYPE $   TY   ,/\Fh2\   ؾPE $   TYPE $   TYPE $   TYPE $ ȡǀ',O9ġ צ FILLINDICTؚ)>   TYPE $   TYPE $   TYPE $ Aá ةAAٚ&AAٚ á  á " Nˡ NN$SCDATETYPE = PACKED RECORD 6MONTH: 0..12; 6DAY: 0..31; 6YEAR: 0..100 4END; $ $SCCHSET = SET OF CHAR; $ $SCEDITORUNSCONTROL LONGSTRING = STRING[255]; $ $SCSCRNCOMMAND = (SCWHOME,SCERASS,SCERASEEOL,SCCLEARLNE,SCCLEARSCN, 5SCUPCURSOR,SCDOWNCURSOR,SCL EFTCURSOR,SCRIGHTCURSOR); 5 $SCKEYCOMMAND = (SCBACKSPACEKEY,SCDC1KEY,SCEOFKEY,SCETXKEY,SCESCAPEKEY, 4SCDELKEY,SCUPKEY,SCDOWNKEY,SCLEFTKEY,SCRIGHTKEY,SCNOTLEGAL); 0  SCCHOICE = (SCGET,SCGIVE); $  VAR "SCVERSION : STRING; "SCDATE : SCDATETYPE;   PROCEDURE SCUSEDATE(DOWHAT:SCCHOICE; VAR TDATE: SCDATETYPE);  PROCEDURE SCERASETOEOL(X,LINE: INTEGER);  PROCEDURE   TYPE $   TYPE $   TYPE $   TY SCINIT;  PROCEDURE SCLEFT;  PROCEDURE SCRIGHT;  PROCEDURE SCUP;  PROCEDURE SCDOWN;  PROCEDURE SCGETCCH(VAR CH: CHAR; RETUR  تPٓX,d-,-ȡ,,"ASSERTION FAILED, REPORT MESSAGE: UV lPE $   TYPE $   TYPE $   TYPE $  ٢ ٢$٢ ٢$٢#٢$٢#٢$٢Ɓצ:ƁPצ:ƀ̀ʀƀ̀ƶƀʀ¾ áʀ̀ʀʀ•!٢$ ٢"٢$٢!٢$٣.٣.ʀƕ̀ʀ•ʀƕšʀđ ʀʀĂ ̀ʀʀẦƀʀĿʀƀʀĞƀړ ?  צ NONMATCH: SCCHSET);  PROCEDURE SCCLRSCREEN;  PROCEDURE SCCLRLINE(Y: INTEGER);  PROCEDURE SCHOME;  PROCEDURE SCERASEOS(X,LINE٢/ ٣.٢)٢)٢/ ٢-٢-٢: INTEGER);  FUNCTION SCSCRNHAS(WHAT: SCSCRNCOMMAND): BOOLEAN;  FUNCTION SCHASKEY(WHAT: SCKEYCOMMAND): BOOLEAN; / ٢,٢,٢/ ٢,٢,٢/ ٢'٢' FUNCTION SCMAPCRTCOMMAND(VAR KCH: CHAR): SCKEYCOMMAND;  FUNCTION SCPROMPT( 3LINE:SCLONGSTRING; XCURSOR,YCURSOR,XPOS,WHERE:٢/٢'٢'٢/٢(٢(٢/٢(  ٢(INTEGER; 3RETURNONMATCH:SCCHSET; NOCHARBACK: BOOLEAN 2): CHAR;   IMPLEMENTATION  CONST "SCEOL = 13; SCLF = 10; SCDC1 = 1 ٢/á#For use with SYSTEM.MISCINFO [S.5b]תPV " š " 7;  SCMAXSW = 84; {Maximum allowable screenwidth} "  VAR "TRANSLATE : PACKED ARRAY[CHAR] OF SCKEYCOMMAND; "SCFILLIT : ST"F áزC Cبب"٢ ٢ؾ6RING[11]; (*For writing in front of controls*) "SCSCREEN : PACKED RECORD (* For sending to screen *) 0PREFIX: CHAR; 0HEIGHT,7إáٕٕP   WIDTH: 0..255; 0CANUPSCROLL,CANDOWNSCROLL,SLOW: BOOLEAN; 0HASPREFIX: PACKED ARRAY[SCSCRNCOMMAND] OF BOOLEAN; 0CH: PACK ھ ھ˄  ˡܓݢݢED ARRAY[SCSCRNCOMMAND] OF CHAR .END; {screen} ) "SCKEYBRD : PACKED RECORD (*For recieving from keyboard *) 1PREFIX: CHAR; \     1CANBREAK: BOOLEAN; { Valid break key } 1HASPREFIX: PACKED ARRAY[SCKEYCOMMAND] OF BOOLEAN; 1CH: PACKED ARRAY[SCKEYCOM-ȡH    ?MAND] OF CHAR /END; { Keyboard } !  SCBLANKAREA : PACKED ARRAY[0..SCMAXSW] OF CHAR; " "PROCEDURE SCINIT; "CONST L" Tɡ ڡ̀ȡ/ġړƀʀȡ ٢ڢ٣%٣&ڢ ڢ ٢-٢٢$?ˡ̀̀ƀתPƀȦתPצ[ˡAƀƁ[צ[ƁPƀƀצ:ˡ-ƀ! T&SCINIT SCINIT SCCLRSCR SCCLRSCR SCCLRLIN SCCLRLIN SCDOWN SCDOWN SCHOME SCHOME %SCUP SCUP SCERASET SCERASET JFpSCERASEO SCERASEO )SCPROMPT SCPROMPTSCUSEDAT SCUSEDAT TRANSLAT @i5bCONTROL CONTROL  JZjz!?aMIN MIN  SCCLRSCR SCCLRLIN SCCLRLIN  ƀʀʀẰʀġ̀ġړ ƀʀ?ʀʀ/<0<BdSCDOWN SCDOWN SCHOME SCHOME %SCUP SCUP SCERASET .Rp(:NתPצ[ˡAƀƁ[צ[ƁPƀƀצ:ˡ-ƀSCERASET JFpSCERASEO SCERASEO )SCPROMPT SCPROMPTSCUSEDAT Ɓצ:ƁPצ:ƀ̀ʀƀ̀ƶƀʀ¾ áʀ̀ʀʀ•SCUSEDAT TRANSLAT @i5bCONTROL CONTROL  JZjz!?aʀƕ̀ʀ•ʀƕšʀđ ʀʀĂ ̀ʀʀẦƀʀĿʀƀʀĞƀړ ?  צ IMIN  SCCLRSCR SCCLRLIN SCCLRLIN SCONTROLSCDATE SCHASKEY SCHASKEYSCMAPCRT SCMAPCRTSCSCRNHA SCDOWN SCDOWN SCHOME SCHOME %SCUP SCUP SCERASET SCSCRNHA:\SCSCREEN#^k} +8JW*LzSCGETCCH SCERASET JFpSCERASEO SCERASEO )SCPROMPT SCPROMPTSCUSEDAT SCGETCCH |FSCKEYBRDRt~#CPp}!SCLEFT SCUSEDAT TRANSLAT @i5bCONTROL CONTROL  JZjz!?aSCLEFT SCVERSIO)SCFILLIT\ySCRIGHT SCRIGHT SCBLANKA+ C ^" contains a generous helping of very explict error ,messages to explain what is wrong. This document is ,intended to be on han,corresponding to the first character of the option. ,All characters not explicitly shown on the prompt ,line are ignored. d and read along with the user's ,first few uses of PATCH. It will not necessarily ,describe exactly what will appear on the Throughout the program Upper and ,Lower case characters are considered the same. $ ,All error messages appear on the bottom lscreen partly ,because such description is tedious and partly ,because a picture is worth a thousand words. $ ,PATCH uses a ine of the ,screen. The symbol that appears after each ,message is to remind the user that the program will ,not conSCREEN CONTROL MODULE ( section ???.? ) ,to do most of the displaying on the screen. It is ,thus terminal ( those that have 8tinue until the user types a . This is ,to signify that the error message has been read. ,Occasionally an error will 0 character lines ,and 24 lines per screen ) independent. ( If compiled generate several error ,messages that will come out one after the other. $ ,All numbers wanted by the program are first read ,with the proper Module. ) The program has also been ,written to be machine independant. $ ,PATCH is a utility program that as ,strings and then converted to integers. Only the ,first five characters of the string are considered. ,If there are anygives the user two ,very useful capabilities that are not available ,elsewhere in the system. $ ,One capability is the abil non-numeric characters in the string ,the integer is defaulted to zero. If integer overflow ,occurs the integer will be defaity to edit files on a byte ,basis. What this means is that instead of treating ,files as text files they are treated as fileulted to MAXINT. ( ,Since integer overflow can only be dectected by the s of ,bytes. This allows the user to edit not only text ,files, but also to do quick fixes to code files and ,to create specialized test data. This is the EDIT ,mode of PATCH. $ ,The other capability is the "dumping" of files out to ,a text file i PRELIMINARY *** PRELIMINARY *** PRELIMINARY ***PRELIMINARY *** PRELIMINARY , ,The PATCH program that this document describesn various numeric data types, so that ,user can see his non-text files in formats that are ,more meaningful to him. This part ,contains most of the features of previous releases of ,the PATCH program. Several new features have been ,added and the use of PATCH also has ,the ability to read from core memory. ( This is ,primarily so that Interpreter and BIOS can be seen at ,r interface of the program has been ,given a complete overhaul. $ ,The program itself is reasonably self-documenting and ,run time. ) This is the DUMP mode of PATCH. $ $GLOBAL CHARATERISTICS $ ,All prompt lines expect single characters #  for EDIT are : $ $  EDIT : D(ump, G(et, R(ead, S(ave, M(ix, T(ype, I(nfo, F(or, B(ack, ? II.0   EDIT : V(iew, W(ipe, Q(uceeding block in the file, if 8already at the beginning does nothing, but does 8put out message to that effect. 8 it, ? * ,( theses prompt lines only appear one at a time. The ,question mark allows one to toggle back and forth ,between t*V(iew - displays the current block according to MIXED * *W(ipedisplay - cleans the display of the block off the screehem. All commands are valid regardless of ,which prompt is being displayed. ) , * * *D(ump - calls DUMP * *G(et n. :( no need to ever use this ) : *Q(uit - quits the PATCH program 9 *T(ype - goes into the "typing" mode, t - gets the file that one wishes to edit * does an initial read of block zero if the file 8was opened. * *Rhis is the mode 8through which the block can be changed. : : -The prompt line for TYPE is : : "TYPE : C(har, H(ex, F(ill(ead - reads the specified block number of the gotten file * *S(ave - writes the contents of the buffer out to the, U(p, D(own, L(eft, R(ight, , Q(uit 2 2C(haracter - Exchanges the next characters that are ?typed for the byt 8current block, if any block has been read in 8successfully. 8 e at which the cursor ?is pointing to. The cursor is auto- ?matically moved to the right one byte. ?Only printable character*M(ixed - a toggle that changes the mode that current block 8will be displayed in. There are two modes : ; ;Mixed - whis are accepted. ?This mode is terminated by typing . ? 3H(ex - Puts the next hexadeciaml digits typed in the ?buffch displays the printable ASCII Ccharacters, or the corresponding CHexadecimal if they are not printable. C ;Hex - displer at the position the cursor is pointing ?to. The cursor is advanced one to the right. ?This mode is terminated by typing a ays the block in Hexadecimal. < 7 *I(nformation - displays the known information about the current :file that the EDIT mod'Q'. ?( lowercase letters are accepted ) ? 3F(ill - This mode allows the user to fill large parts e is using. This :includes the File name, the length of the file, the :current block being accessed, if it is open, are :?of the block with the same byte pattern. ?It will accept either characters or hexadecimal ?digits for the pattern. When finunitreads being done, the unitnumber ( -1 if UNITIO :is FALSE ), and the byte sex of the machine. :The byte sex makes no diffished the ?cursor will be positioned after the last ?byte filled. There is a particular syntax ?required for telling Fill ,precesence of a negative number, integers in the range ,65536 .. 98303 will come out modulous 32768. ) $ $ $ $ & $ $Terence to the user or :the program. ( see section 3.6, BYTE - SWAPPING, :in the document ) : *F(orward - gets the next HE EDIT MODE $ ,EDIT allows the looking at and the editing of files or ,Units one block at a time. & & ,The prompt linesblock in the file, if already at 8the end does nothing but puts out message to that 8effect. 7 *B(ackward - gets the pre$ t. This is specified by the number of words the ,user wants across one line. 15 fills an 132 character ,line. 9 fills an 80 isplay each word as two bytes in decimal format. In byte 3order. - -O) : Display each word as two bytes in octal format. Iwhat to do. The ?syntax is displayed in the prompt and the ?errors messages tell the user exactly what ?part of the syntaxcharacter line. ( (The Specifications ( *A) : This is the input disk file or Unit.   failed when the error ?was generated. ? 2The following commands move the cursor around within the 2block of data being di*B) : This is the starting block number of the file or Unit. 0If it is a Unit, there is no range checking on the block 0numbsplayed. The cursor will never point 2to an undefined point on the screen. There is complete 2wraparound ( side to side, toer. 0 *C) : The number of blocks to print out, can be over specified. * *D) : When specifications are set, this says Do itp to bottom ) on cursor movement 2 6U(p - moves the cursor up one row 6 6D(own - moves the cursor down one row 6 6L(ef. * *E) : If true then reads from core, if false reads from File 0specified in A). * *F) : Offset from byte 0 to start att - moves the cursor left one column 6 6R(ight - moves the cursor right one column 6 6 - these are the vecto. Limit is MAXINT. * *G) : Number of bytes to print, limit is MAXINT * *H) : Output file, opened as a text file * *I)r arrows designated Hby SETUP. They will do the same Hrespective action as U,D,L,R. H  : Width in words of output line. 1 <= Width <= 15 * * *The following have three booleans that have to be specified. *The2Q(uit - Quits the TYPE mode and returns to the >EDIT mode. ? ? 2 2 (THE DUMP MODE ( ,The DUMP mode is used to cre USE variable ( the untitled first column ) tells DUMP *whether or not to even consider printing out in that format. * *The Fate "dumps" of files out ,to a text file. It does so in the following formats : ,Decimal, Hexadecimal, Octal words, CharacterLIP column tells DUMP whether or not to flip the bytes *before displaying the word in that format. * *The BOTH column is for s ( if ,printable ), Decimal bytes, Octal Bytes. In addition ,to the variety of formats, DUMP is also capable of ,flipping thsimultaneously displaying both Flipped *and non-Flipped versions of the line. If BOTH is true, it does e bytes in a word before displaying it and ,displaying both flipped and non-flipped lines ,simultaneously. ( ,DUMP has two d*not matter what FLIP is. * -J) : Display each word as a decimal integer - -K) : Display each word in hexadecimal digits ifferent ways to read input. One is ,from a diskfile or Unit specified by the user. The ,other is to read directly from corein byte order - -L) : Display the word as an Octal integer. This is the octal 3equivalent of J. 3 -M) : Display each wo ( this is ,primarily to see the Interpreter and/or the BIOS ). ( ,DUMP also has a specification for the width of the ,outpurd in characters in byte order. If the 3characters are not printable the hexadecimal digits will 3be displayed. 3 -N) : D% ȡ.ٛ ٛٛaA6 F FILENAME : < c/r for Unit I/O > Pš"ˡ4צ!Error opening file. Ioresult is "ۢB////P///צ File opened. Unitnumber : 2 ..   ( 0 quits ) P@ PATCH ...š.&"ˡ5צ"Error clearing unit. Ioresult is "ۢ-- áT vتP(( note - Some users might notice that although DUMP 1can read from core EDIT cannot. This is done to 1encourge better progrRتPR)ܹUDLR 8amming habits. ( i.e. To prevent 1the user from modifing his system at run time. ) 1Should the user wish to change his run tim۳  aA۳ZڪPš  --š----e system all 1he has to do is change the system disk files. )        .-ġs-&.-0-.--6צ)Error in string. Value defaults to zero..-.ɡ'צInteger constant overflow.Z áئ-32768תPlá0Paצ Pɡ ّšۛ  ڡ ۛ-ەەC&  Gצ| GEGG썡E ȡe/؂/؂E/؂`E/؂/؂Eǀ"G G| GEGGE/؂G Gצ| GEGG䩁㍡5?h#ꓩ鍡E ȡE/؂E/؂E ȡ/؂E/؂`E/؂E/؂E/؂E/؂/؂E/؂`E/؂G Gצ| GEGGꩁ鍡E ȡE/؂E/؂G G| GEGE/؂E/؂EG B~D&ᩁ!E ȡi/؂E/؂G G| GEGGB2q?h$ǀ"/؂Eǀ"G G| GEGGᩁ/P File opened.  V Filename: Pš"瓩捡E ȡ/؂EE E Eˡ4צ!Error opening file. Ioresult is "ۢ?.......Pצ File opened.EEG Gצ| GEGGTG/"ˡ2#Error reading block.U Ioresult is מ"Eڥ/ˡ2צ#Error reading b穁捡E ȡ/؂/؂Elock.B Ioresult is "ë֩֡VE E EEETۓڄړG G| GEGGB*L3\%䓩㍡E !؛"퓩썡E ȡ-/؂Eǀ"Gȡ/؂E/؂`E/؂E/؂'  EG G| GEGGީ!ݍE C) Number of Blocks צ E) Read from Memory  F) Starting Byte  ȡ/؂EE EE צ G) Number of Bytes  H) Output File צ I) EEG G| GEGGBRWidth in words @ Flip Both  J) *(E#$%&'ߡ(: ȡة󏩁 šDecimal צ K) Hexadecimal  L) Characters  8 N)G ȡ7ȡ&G Gצ: eȡ&G צ M) Octal  N) Decimal bytes צ O) Octal bytes G: ȡ%G Gצ: G4k *š S) Space between Lines צ T) Space between Groups ȡ/GCORE DUMP Startbyte : G G Number of valid bytes :   צTrue False   yG G*)š/ڞ/ڕ GCORE DUMP Startbyte : G   ......צTrueצFalseTrueG Number of valid bytes : G G*)9`+٩Ʉ򥃢fGצ Block numbFalse-ڳ @@ڳTrueצFalseer [ G Gצ ] of the file GG*)zError occurred reading block ש!Do f n/-ٳٹá𩃦wP!E ȡi/؂Eǀ"/؂Eyou want to continue ? ( y/n )س@@YyÍ7 ,٨ܡצTrue"G G| GEGGE'ީ!ݍE צFalse'ۡTrueFalse8ڡצTrueצFalse. DUMȡ/؂EEEEEP : D(o, Q(uit  A) Input File צ B) Starting Block ( ةȄث5,Value out of range. Maximum block number is ש 'צ Input file must be opened fir0/"/ V//st.Pšث(!Number must be greater than zero. x+),-.8C 1צBlocknumber : P***ō@/B צInput file is not opened.yCONSOLE:ׯ񍄡H#Type < space > to redisplay prompts locknumber is out of range. Highest value is ש**ѥХצRead was successful.OT2ѩ-!צOutput file is not opened./P Pɡ1ѥХRead was successful.1 צHave reached end of file.d3š1ѥХRea  tG  y PȄث+צ Value out range. Defad was successful.1צAlready at block # 0.\4ӡSХ/"ˡ+צ!Error saving block. Ioresult is "ults to 15.   /' /8 //'/8//' Block saved.S/ˡ,צ"Error saving buffer. Ioresult is "צ Block saved.5//8//'/8/n/'/8/ݹI/<//File : צ Length :  צ Current :  ֡+צ Byte 0 : HIGH AT(z\b "$E:Qá /Z18"$UPeVLצ: 0: 2: Byte) Byte 0 : LOW Byteԡ Open : True  Open : Falseӡ%4: 6: 8: 10: 12: 14: 16: 18: 20:צ 22: 24: 26: 28:ȡ$ |צ Unit I/O : True # Unit I/O : Falseצ Unitnumber :  צ +00ȡȡق 0/ /  á/Z1* 6ȡ $7.š ..j-š1V/؂/؂0/ /.-I--.-á -I-3-š-.-I--.-á -I- 9.ɩ-ɩ.Ä V/؂/؂0 ..3-Iɡ-.-I--.-á -I-\:-š -I--á -I- .šII-/"/ V//..-.N;-Iɩ.Ʉ.é-Ʉ%-I--é.Ʉ -I- -IáI-..-.) <-- ֡إ3/0Bس~/A  open. 9?W2 ;=, "$&.QáAƂGƁƂ"$_ #/a aA-.<צ Invalid input-.á-.: h@ȡC ٢ڢ٣%٣&ڢ ڢ ٢-٢٢$٢ -.س $XLع?E@A==99:5;1<-CU&#! )!)"$;Qá/Z٢$٢ ٢$٢#٢$٢#٢$٢!b<.--šەȡ/ڂٿP>צNumber of bytes : P1~8G$A Zצ!EDIT : D(ump, G(et, R(ead, S(ave,!צ. M(ix, T(yp+++ō,+צ Number of bytes is out of range.What pattern : Pɡצe, I(nfo, F(or, B(ack, ? II.0 OP1!EDIT : V(iew, W(ipe, Q(uit, ? !. Invalid format.++>1.+.ɡצInvalid format.+# OPLTYPE : C(har, H(ex, F(ill, U(p, D(own, L(eft, R(ight, , Q(uitתPHValid format : C<#O~A *3~a * 0*~printable char> or H תP0/3#~~A **6~a ** 0***+>1.+.@צ6Invalid format. Hexdigits ::= 0 ..  d' ȡ0؂ȡ A؂9 , A .. F, a .. f +TChLk \ "$&(*,.02468:<>@DFHJAצ7Invalid forI-.٫弄צmat. Must have prefix character, 'C' or 'H' +-.,+.,.ȡ <<,,57z~\"=PХתPyצPxwvutT BƂGƃsƁƃ#Ƃצ2CHARACTERS : , quits -é-Í -I--.ˡz٥M/KՉHBZOճ aAթճ"չХԡ Х.--ٿ -.<<.é-Ä;#Invalid character-.á-.0006צ/The display will be in characters if printable./צ*The display will be in hexadecimal digits.67 ?צ6HEXADECIMAL : 0 .. 9 , A .. F , a .. f , Quits-.ˡإ#Ä./1Z//ԡPչ2E5A8=394511BV*  ?=;(3צError. File not* ھھ˄ C ˡܓݢݢ \C  C  C C-ȡ H    ?L" T ɡ Dڡ̀ȡ/ġړƀ ʀ?ˡ̀ƀתPƀȦתPצ[ˡAƀƁ[צ[ƁPƀƀצ:ˡ-ƀƁצ:ƁPצ:ƀ̀ʀƀ̀ƶƀʀ¾ áʀ̀ʀʀ•ʀʀ٢$ ٢"٢$٢!٢$C٣.٣.٢D̀ʀ•ʀƕšʀđ ʀʀĂ ̀ʀʀẦƀʀĿʀƀʀĞƀړ ?  צ / C٣.C٢)٢)٢/ C٢-٢-٢/ ƀʀʀẰʀġ̀ġړ ƀ ʀ?ʀʀ/<0<B z xC٢,٢,٢/ C٢,٢,٢/ C٢'٢'٢/4 $N0T"$'z"'(8*++-/2.57 9$9l+B9::;r====>?@6@X@h(B"pfxb@DM} C٢'٢'٢/C٢(٢(٢/C٢(  ٢(-˫  áٮ%M- &?ö;}R ˡ(á!9á "  ٢/á#For use with SYSTEM.MISCINFO [S.5b]תPV " š " "Fá ˄ۮ%&؟ˡ#š á$ á% &ˡ ˡ  á ١ áزC Cب,ب"٢ ٢ؾ6CC7إE^áٕٕPC C C C 77+  read single sectors and to  override CRC errors. The II.0.g version uses the UNITREAD primitive.  In the II.0.g each of the  directories 4 blocks uses a separate unit  read, while in the II.0.terak each sector is a separate read. In  both cases this enables the recovery of partial directories.   Action: %First the directory is read. Each entry is checked for  validity. Entries with errors are removed. Entries found valid  are listed as "ENTRY.NAME found". The user is then prompted: M آآآآآMצ%GO AHEAD AND UPDATE DIRECTORY? (Y/N) @ "Are there still IMPORTANT files missing? (Y/N)". If the user  answers N (no) then a directory write is performed. If the usYáe쩁"áצWRITE OK9צ)SECTOR ID ERROR--DISK MUST BE REFORMATTEDer  answers Y (yes) then the area of the disk not occupies by "found"  files is searched. Text and Code files are detected aá  ˄   o ġ  nd inserted.   Non-action:  %Datafiles, Infofiles, Fotofiles, Datafiles and Xdskfiles are  not detected. Text files may  צ.9š0  צDUMMYNNX  0contain an odd number of blocks, this  probably means that the back portion of the file was overwritten,  however determinat  06 ás צ ion of validity is left to the user. Unlinked code  files will not contain their linker information. NOTHING will be  writte Ʉ ٛ _ "á-Ʉ0Recover versions II.0.terak and II.0.g 0  Differences:  The version II.0.terak is specific to the II.0 LSI-11  inten to the user disk until after the "GO AHEAD AND UPDATE"  prompt is answered. rpreter as configured for the Terak microcomputer. The II.0.g  version will run on all machines having standard UCSD Pascal  systems. The difference between the versions is confined to the  section which tries to read the existing, and possibly damaged,  directory.  %The II.0.terak version makes modification to the I/O drivers at  the BIOS level. They are reconfigured to RECOVER , ܡښ@Ǿܓ>Ǧȡˡܡڤ ábܢÄܢńܢȄܣĄܣMȄ5ܢܢ۾G@ܢšvܢ܍ܡ  W*ܩ˄کM ȡ۩ȡ٩ܢȄܢńܢȄĄܣ Ȅܣ ńܢ  dɄ6ܢܢ۾G@ܢš5 M ġ M ġM M M ښݢݢػݢ ݢá!   ڣAצHow many blocks on disk ?  "áMةȡa'.TEXTá!  .CODEݢ ݢ ݢ צFile   inserted aؤ  found,ȡ٤  k0 Ձצ/Are thet blocks  - ` r @ۓFقre still IMPORTANT files missing? (Y/N) @ Yá?8 ɄÄ š @ۓ؝m ǦR~lP  $Ȅܣ ńܢ  dɄ6ܢܢ۾G@ܢš5 ȡˡخ ܓ٥ک o @ ڣAצHow many blocks on disk ?  "áMةȡa'ǾĚ@ ȡiۏۏۏؤ  found,ȡ٤  k0 Ձצ/Are theۏš݂ɡ݂٥ک   ȡ)M ĶɄ A' or 'B' expecteddexed addressingPROCtBundefined labelcteddexed addressingPROCtBoperand out of rangeexed addressingPROCtBm1 D MġM á ȡF > ٓ ١MMšust have procedure name addressingPROCtBnumber of parameters expectedessingPROCtBextra garbage on lineexpectedessingPROCtBinpMv<  ut line over 80 charactersessingPROCtBnot enough .IF's80 charactersessingPROCtB&must be declared in .ASECT before usedCtBident   dTRecover - Version II.0.g02תצPROGRAMEifier previously declaredore usedCtBimproper formatiously declaredore usedCtB .EQU expectedatiously declaredore usedCtB&must .Eá,@۹ȡ6 ܍NTER TODAY'S DATE MM-DD-YY:צUSER'S DISK IN DRIVE: USER'S VOLUME ID:- rracters 1eBstring expectedrdn .ASECTmeterracters 1eBbad block, parity error (CRC)rracters 1eBbad unit numberty error (CRC)rrMTPD MFPD @MTPS MFPS PC SP R7 R6 R5 R4 acters 1eBbad mode, illegal operationC)rracters 1eBundefined hardware errorionC)rracters 1eB$lost unit, unit is no longer on-lR3 R2 R1 R0 MARK SOB ~TRAP EMT BPT IOT RTI QU before use if not to a labelCtBmacro identifier expectedot to a labelCtBword addressed machinetedot to a labelCtB#backward ines 1eB(lost file, file is no longer in directorBbad title, illegal file name in directorB#no room, insufficient space on disk.ORG currently not allowedbelCtBidentifier expectedntly not allowedbelCtBconstant expectededntly not allowedbelCtBinvalid strectorBno unit, no such volume on-linediskectorBno file, no such file on volumediskectorBduplicate filech file on volumediskecuctureedntly not allowedbelCtBextra special symboltly not allowedbelCtBbranch too farsymboltly not allowedbelCtBvariable not torB(not closed, attempt to open an open fileB(not open, attempt to access a closed filB(bad format, error in reading real or inPC relativenot allowedbelCtBillegal macro parameter indexllowedbelCtBnot enough macro parametersexllowedbelCtBoperand not abstB nested macro definitions illegall or intB'=' or '<>' expectedions illegall or intBmay not EQU to undefined labelsll or intBoluteametersexllowedbelCtBillegal use of special symbolslowedbelCtBill-formed expressionl symbolslowedbelCtBnot enough operan'must declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB dsonl symbolslowedbelCtB&cannot handle this relative expressionCtBconstant overflows relative expressionCtBillegal decimal conust declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB usstantive expressionCtBillegal octal constantntive expressionCtBillegal binary constanttive expressionCtBinvalid key wordonstat declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB ust nttive expressionCtB%macro stack overflow - 5 nested limitnCtBinclude files may not be nested limitnCtBunexpected end of inputdeclare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtB ust declare .ABSOLUTE before 1st .PROCtBclose pe nested limitnCtB(this is a bad place for an .INCLUDE fileB'only labels & comments may occupy col 1eBexpected local labelts maaren ')' expectedefore 1st .PROCtBregister expectedxpectedefore 1st .PROCtBtoo many special symbolsefore 1st .PROCtBunrecogniy occupy col 1eBlocal label stack overflow occupy col 1eB#string constant must be on one lineol 1eB%string constant exceeds 80 zable operandlsefore 1st .PROCtBregister reference onlysefore 1st .PROCtBfirst operand must be register1st .PROCtBcomma ',' echaracters 1eBillegal use of macro parameterracters 1eBno local labels in .ASECTmeterracters 1eBexpected key wordn .ASECTmetexpected be register1st .PROCtBunimplimented instructionister1st .PROCtBmust branch backwards to label1st .PROCtB. IؤD󄓡)>>>>>ؤؤ*,* áu)ɡm>6 H) fɡH)#H)#f, H) fɡH)# H)#fDN&6 B %. TLA @[( ]<! >#PDII I IPAGE - I INITIALISYMTBLDUPROCEND ASSEMBLEPRINTERR " I IoIצ FILE:IDIIצ IIII "" !!D.!2á  7á  ɡCcc cIצ|  RTT RESET WAIT HALT CLR CLRB COM @ COMB @INC INCB CCOPYRIGHT (C) 1979 REGENTS OF UNIVERSITY OF CALIFORNIA AT SAN DIEGODEC DECB NEG NEGB TST TSTB ASR ASRB ASL ASLB ROR II#ffIIERROR #I IءEI"I11Iצ.ERRORS" file not aroundI RORB ROL @ ROLB @SWAB ADC @ ADCB @SBC SBCB SXT MOV  MOVB ڂ D󄓡#ffERROR # ءD"11.ERRORS CMP CMPB ADD ` SUB BIT 0 BITB BIC @ BICB BIS P BISB " file not around ,(šE(dit,,ٶ/BR BNE BEQ BPL BMI BVC BVS BCC BCS BGE BLT <ȄooEeÍ:<% & ) '  oo á 7Ʉ BGT BLE BHI BLOS BHIS BLO CLC CLV CLZ CLN SEC " Iצ*  I  7á 8٨ǀɍm SEV SEZ SEN SCC CCC NOP JMP @JSR RTS MFPI @  Location H HHHH8MTPI XOR xMUL p DIV r ASH t ASHC v FADD zFSUB zFMUL zFDIV zHH87  "ˡ."ء&*,ȡxؤˡf&IIצ>>>>>/ 0c0c0c  ڨ؍áfȡ_c)# H)#fG 19ō1š^G˩Gپ ˄Gپ;˄Gپ,á* ɡc쥈H cHˡ cHcHc ázȡsc* ɡ(c0f G ڂGپ ;Í GB˥Hپ ˄Hپ;˄Hپ,áf H ڂHپ ;˄c 0c 0ˡ*c0c0c0c ؓB  B @٫>l > >Gá,G ëCeɡ##G  4*?r$˄8á$oؚo٨o 4J%á J éA*f G ؂fɡ# ؂؂ ˡfɡ# á > >š G n0o5ppˡ  0s?0ssˡH %éń, Í;ÍZšF G F H ؂Gá >]   0T&LG  "$&(*,.0246s:<>@BHsˡ0sABfɡ# š G H ˡ fɡ# á >))>)ġH)é:stt4tssts.|&/-u! (,$. W|gknVH) ëC))H) ;áf H) )؂) 0 éA:f H) )؂) ˡ á C $ 434r%á qr%á ^*ō˄ J(ˡII| Iceše#áI#III IInǀĶȄ<r%á qqr%á ácX #3*j& ءUá"IHIHá'I I :n١qo7ppˡ  s1ssI áDIH IHIHIHáNI I  I ˡ  T&L9  "$&(*,.0246k:<>@B{}HHIIs I I I   5šGHá6 2š2HH5D󄓡s B#nV #^ L#3<GH'( H566H5ؿ5565443š43B{á2ȡ+c쥈HcHc á<ȡ5c'()'('(á><0&'%) H'(E.ڹšMɡXX.P$$Äޢە$ˡ$ܡ ޢۍܡ ޢۄzܡޢۓۄbܡ ޢۏQܡ ޢۆXǠXPW WWWWšyɡXX.PXǠXPXXȡ"پ@ܡ ޢێ/(tT-  ^$á{1ޢ š   پ ń ÄɡXX.PXǠXEޢ6ޢ$) ASH$XnVPXXȡپš WW W WWWWšZɡXX.P;;x}?뻹ˡ %;á áI**áXǠXPXXȡ%پš   WٕپW&Nq *] 5á n%Hš 뚹 뻹á nV nP  רɡá-EE Ʉؤ EE-nánV%HšEá 6ȡ+ȡ۾$H><! 'ؤ>Gáš%GG ˡH) ˡšo+&á+&áon+p+%HšnHš))(á#3@󓄩Ä DAá<#橂ˡ%<0 P P ˄ 0YY%o onꫂs%onꫂs%onꫂssPY0ǠYP á'&)%G ')(D󄓡#ffRonꫂsV&NC  "$&(*,_acegHš! רɡEȡڂؾړلٓǀړلٓ 뚶á#á  òHÄ&rq뚹áˡܤܤܤܤHˡšFOHÄf_!뚹 %rqQSUWi$od,u0>@BDFHJLNPTVXZ\^`dfhjlnprtvxz|~1 XF,zT#$J 2x| p!!P""# $H$H$+áá>-áOڡWWۚWW٤٤ꚲWW WÍW=&'ڤE˄ EEh𩂒 %   !$!u(á>>á>!~3?Bz ngV'N'  "$&(*,.0246O:DdHJc "$&(v\EL 468:<>@BDFHJLNPRTVXZ\^`bdfVxA~ڤڤꚹ'áá"vš  ) ˡ *,*GáGwƄoƅƄGƅsIƁu  $ũ@  ?áƄoƄGI- D(C :áBȄ#F>(*<V" רء$ALIGN ר'$ASCII 'BLOCK ר'%BYTE ''CONST רۤ+á* *+,ɡá'EE+Ʉ+ E++E'8EQU '3FUNC ר'>PUBLIC '6PRIVATE ר'7 PROC},á (nءH++,+** ȡ٤٤򥂳+ &,,C ' = WORD ר' & INTERP ' 0 MACRO ר' 1 ENDM ' GC:Ä>R @#DA PתP"PɄ ˄5򿥁,,P,Ǡ,PáIF ר'2ENDC ')ELSE ר'*REF '4DEF ר'5A١ؑ ؂ á()Pš*w $(ëC áC á( "!  ORG '"INCLUDE ר'ALIST '9NOLIST ר':ASECT    (*$á09ō>##$+áá>-á' PSECT ר'!TITLE '<END ר'?PAGE ';MACR(á>>á>!~3?Bz OLISר'+NOMACROL',PATCHLISר'-NOPATCHL'. ABSOLUTEר' / "$&(v\EL 468:<>@BDFHJLNPRTVXZ\^`bdfVxA~ë9  ȡƶWWWE ȡ"قٓ؄wƄoƅƄGƅsIƁu  $ũ@  ?áƄoƄGI-ǀٓ؄ؓ٤E˄ EE2Opcode declared twice=2 Wn ;A:<FBo ר" P)IPAGE - I" I""o--- 6PI   ! .4 __ȡzܤˡeV'N  Wh-jPV  áٿצCONSOLE:#1:ׯDצDPRINTER: "$&(*,.0246C:GIKMOQSUWY6ǪPǦSYMBOLTABLE DUMPתP I>AB - Absolute L#6:ׯצREMOUT:#8:ׯ Ib.TEXTá+ÍƁPƁצ.TEXT[*]XƁ$ÍƁPB - Label UD - Undefined MC - MacroII=RF - Ref DF - Def PR - Proc FC - FuncƁ[*]SƁ"ءצ @87? ́ʁȡVX[&ZYnVIIצ,PB - Public PV - Private CS - ConstsIII  áצ------ áצ->)(,* FRB*LINKER.INFO[*]ת.11צ.OPCODES PW*Wn ;A:<FBo ר" P)IPAGE - I" I""o.Q"ˡW#4:.S"ˡW#5:.S"ˡW#9:.ب 'áߢꚹ%áߢꚹޡ]rˡS"ˡuW#10:.T"ˡLWצ#11:.T"ˡ#W#12:.TI  AB תP  LB תP  PR תP  FC תP  PB תP  PV תP  RF תP  DF תP"ˡ8. not on any vol on line&@BDV WƁf #3צ11r  UD תPd  MC תPV'Nx  "$&(*,.0246Z:>tnbI צ Assembler צ II.0 [d.4]́ʁȡ X cX H0123456789ABCDEFר5!o4 IéDéDI  7á I| ˡ$ .á v&v.v @2Output file for assembled listing: ( for none) á  ?á  #3  רݢݢ__ȡzܤˡeV'N  @á$ġ  ˡ áٿצCONSOLE:#1:ׯDצDPRINTER: "$&(*,.0246C:GIKMOQSUWY6ǪPǦSYMBOLTABLE DUMPתP I>AB - Absolute L#6:ׯצREMOUT:#8:ׯ Ib.TEXTá+ÍƁPƁצ.TEXT[*]XƁ$ÍƁPB - Label UD - Undefined MC - MacroII=RF - Ref DF - Def PR - Proc FC - FuncƁ[*]SƁ"ءצ @87? ́ʁȡVX[&ZYnVIIצ,PB - Public PV - Private CS - ConstsIII  áצ------ áצ-3 kVaV WV M#F  "$&(*,.02468:uogUVVH "áá6@DIIAssembly complete:I! Iצ lineVVVˡ;VáVV ˡVVsII Iצ" Errors flagged on this AssemblyII IƁ.&צAssembly complete:V$VVá V V VVVVVVVN#F[!  lines צ" Errors flagged on this Assembly쥈n $$  "$&(*,.02468:9;=?T&L  "$&(*,.0246 0 /| .u -$šƁVoo 41=á#Fˡ:468:<>HJ nrV ˡ V ȡ/V>$áso$áEˡcX  (ˡ(ˡ #3&ƁVVáVܮܩ67 l (š(@FICurrent minimum space is I I words./! ݢݣÄɡ3ڕġ$ڕšI@DMצCurrent minimum space is  צ wordso 36545 nš"šޣ Ąޣ ݣ ˡRݣ &ݢ ݢݢ!ݣ "ˡ9!ȡڤڤV- Bة6ɡf4šHɡ6ق2šV41w$41#41#ƥFn!ثHFƨȡH2 "áHá65ة6š4šHɡ6ق2šق2 2ġ( WI I blocks for procedure code I( Iצ words leftID_  blocks"áH222ɡ62"áHá65ة65 ?ˡgV for procedure code ( צ words left643 25#w Há6ȡNVVá5ȡ*Vܤˡ4Vܤȡ ܤˡ4ܤ$ F ƁVƂƁ.ƂZƂ@#$š ?á$̂ʂġ٥wڤ $ ٫#5-m u| ˡ Vȡ䥃ؤˡ'IIHɡ6ڂ ʁV ʁV רʁVƁVƁ."áƁ.HáH>>>>>I  D󄓡$>>>>>V FVVVuV "áHɡ6 #@ǀ Ɓ II.0 [d.4]תPƁ HÔʂȡڥs4  ۯX(ˡ(ˡ eš á#3.á Ä ˡ8X á Eǀ Ä ˡE b  Ʉ>IF ׯ (ENDC ׯ ɡ  ةUGá;é? (ɡȡ   h)# ELSE ׯ ةENDC ڡH eš á#3.á!48 #-FˡCˡ 5 á+áEáآآˡ&\ רɄ>IF ׯ (ENDC ׯ ɡ  ةDá ǥP."á.áˍáENDC ׯ ڡ ٟˡc6٢؂٢Ʉoo٨oJåÄ݂FÄ ˡLMvá `á.á ٢٫jrBáZF꫄Fٟ˄á"+&áá $% á)á åÄNá˥ÄFÄd áRáFNFá,>+&ˡ ,+%+++Bá3ˡ٩> ݂>ġá ݂Oá LMáO  Ǡ0ššٕȡ   RDá<ȡ(˄  # Ǡ qq,Ǡ hnnV ڻ 3ؾ  9 VF xo?5F"ˡ-á F$F0 FFٻܡnhۡ \Ǡ á P4Ǡ á  FˡF%éF"Í FF F 'ˡ=@ 'GGQˡRhnnV ڻ ٻܡnhۡ ~S Ǡ ݣ ˄ݢ!ۂ"ˡ\ݣ ݣ šݢ ݣ ݢݣݣ ݣ ݣݣńݢݣݢݢݢˡݢݢ ۚݢܚ á>G7 ר: šGešG á (.á ɡ   / x^ ` > f  cX  (ˡ(ˡ #3&ƁVENDM ׯ  ȡG GG &: aSá AáDáAPړ ˡ>Dáۯ.S;Eo8á+ǀȡ  v á 65  áR á=3%á*@nV TRQvǠ "ˡ8́mƁmצ#9:Ɓm11Ɓm.ERRORS Ɓm"ˡ9́mƁmצ#10:Ɓmצ11Ɓmצ.ERRORS Ɓm"   ݻ ܻhnnVˡR ڻ ٻbnnVnhߡnb9́mƁm#11:Ɓm11Ɓm.ERRORS Ɓm"ˡ9́mƁmצ#12:Ɓmצ11Ɓmצ.ERRORS ƁmƁC ޡǠ ˡRá QhnnV ڻ ٻ"ˡw0II#ffIII  D󄓡/#ffܡnhۡ ~Ǡ ǀ :(@<840,r ݢݣÄɡ3ڕġ$ڕš($  0.,*(&$" P  D @2٩؄٤ءš"šޣ Ąޣ ݣ ˡRݣ &ݢ ݢݢ!ݣ "ˡݣ   2 D@#5IצCurrent memory available:I( IBCÍ˄ݢ!ۂ"ˡ\ݣ ݣ šݢ ݣ ݢݣݣ ݣ ݣݣńݢݣݢݢݢˡݢݢ ۚݢܚ  ȍ@č$(Ʉ(ˡ 7788$š@?/ x0II#ffIII  D󄓡/#ff  (ɡ( qmieɡNJ?Bk|YO^ykig7=$QY[]_a~|~ˡ(ˡ(ˡ Fy2~G"`(b^ ` b \  < צCurrent memory available:I( IBCÍȍ@č$(Ʉ(ˡ 7788$š@?  (ɡ( qmieɡNJ?Bk|YƁ.́mƁmצ#4:Ɓm11Ɓm.ERRORS Ɓm"ˡ8́mƁmצ#5:Ɓm11Ɓm.ERRORS Ɓm6 O^ *) (* *) (* THIS PROGRAMɞ PRODUCES A CROSS-REFERENCE LISTING FOR ANY *) (* PASCAL PROGRAM. OCCURENCES ONLY ARE LISTED. NO DISTINCTION IS *) (* MADE BETWEEN DEFINITIONS AND REFERENCES. *) %THE FILE BASICIO.CODE MUST BE PLACED IN THE SYSTEM LIBRARY USING THE  PROGRAM LIBRARY IN ORDER TO RUN THE BASIC COMPILER. THE FILE SC.GEN.CODE MUST  BE PLACED IN THE SYSTEM LIBRARY IN ORDER TO RUN PATCH. FOR MORE DETAILS ON  THE USAGE OF THE LIBRARY PROGRAM OR THE BASIC COMPILER READ THE REFERENCE  MANUAL, CATALOG NUMBER U380. (*$LC.LST.TEXT*)  (*====================================================================*) (*  *) (* PROGRAM TITLE: PASCAL CROSS-REFERENCING PROGRAM *) (*  *) (* PROGRAM FILE: XREF.TEXT *) (* *) (* LAST UPDATE: 29-SEP-77 10:25  *) (* OCT-79 R.L.P. *) (* PROGRAM SUMMARY: 7 ; ITEMPTR = ^ITEM; WORD = RECORD KEY: ALFA; FIRST, LAST: ITEMPTR;  '; KEY[10] := 'END '; KEY[11] := 'FOR '; KEY[12] := 'FUNCTION '; KEY[13] := 'IF '; KEY[1 FOL: INDEX END ; CHARSET = SET OF CHAR; NUMREFS = 1..REFSPERITEM; REFTYPE = (COUNT,4] := 'IN '; KEY[15] := 'MOD '; KEY[16] := 'NIL '; KEY[17] := 'NOT '; KEY[18] := 'OF  PTR); ITEM = RECORD REF : ARRAY[NUMREFS] OF 0..MAXLINES; CASE REFTYPE OF  '; KEY[19] := 'OR '; KEY[20] := 'PROCEDURE '; KEY[21] := 'PROGRAM '; KEY[22] := 'RECORD '; KEY[23] : COUNT: (REFNUM: NUMREFS); PTR: (NEXT: ITEMPTR) END ; VAR TOP: INDEX; (*TOP OF CHAIN = 'REPEAT '; KEY[24] := 'SET '; KEY[25] := 'THEN '; KEY[26] := 'TO '; LINKING ALL ENTRIES IN T*) N: INTEGER; (*CURRENT LINE NUMBER*) CH: CHAR; (*CURRENT CHAR SCANNED *)  KEY[27] := 'TYPE '; KEY[28] := 'UNTIL '; KEY[29] := 'VAR '; KEY[30] := 'WHILE '; KEY[31] := 'W C1, C2: INTEGER; (*FREQUENCY COUNTERS*) T: ARRAY [INDEX] OF WORD; (*HASH TABLE*) KEY: ARRAY [1..NK] OF ALFAITH '; NUMERICS := [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ]; ALPHAS := [ 'A'(* *) (* ; (* RESERVED KEYWORD TABLE *) ERROR, (* ERROR FLAG *) LISTING: BOOLEAN;  *) (*====================================================================*) PROGRAM XREF; (*CROSS REFERENCE G(* LISTING OPTION *) I: INTEGER; (* YOU-KNOW-WHAT *) INFILE, PRINTER: TEXT; ALPHAS, ENERATOR FOR PASCAL PROGRAMS. N.WIRTH, 7.5.74*) (*'QUADRATIC QUOTIENT' HASH METHOD*) (* ORIGINAL CODE ASSUMED 48 BIT INTEGER OALPHANUMERICS, NUMERICS, SPECIALCHARS: CHARSET; LINECOUNT: INTEGER; EMPTYFILE: BOOLEAN; $ F CDC 6000 MACHINES *)  (* MODIFIED BY R. L. PALASEK SEPT/OCT 1979 TO RUN ON U.C.S.D PASCAL *)  (* ON AN LSI/11 PROCESSOR . TH$UCSDLST: BOOLEAN; (*THE FILE TO BE CROSS REFERENCED IS A LISTING BGENERATED BY THE UCSD COMPILER *) $ PROCEDUREE HASH METHOD WAS CHANGED TO  (* PREVENT INTEGER OVERFLOW *)   CONST P = 749; (*SIZE OF HASHTABLE*) N INITIALIZE; BEGIN (* INITIALIZE *) ERROR := FALSE; FOR I := 0 TO P DO T[I].KEY := ' '; C1 := 0; K = 31; (*NO. OF KEYWORDS*) MAXLINES = 10000; ALFALEN = 10; REFSPERLINE = 15; REFSPERIT C2 := 0; KEY[ 1] := 'AND '; KEY[ 2] := 'ARRAY '; KEY[ 3] := 'BEGIN '; KEY[ 4] := 'CASE '; KEM = 5; PAGESIZE = 55; TYPE ALFA = PACKED ARRAY[1..ALFALEN] OF CHAR; TEXT = FILE OF CHAR; INDEX = 0..PEY[ 5] := 'CONST '; KEY[ 6] := 'DIV '; KEY[ 7] := 'DOWNTO '; KEY[ 8] := 'DO '; KEY[ 9] := 'ELSE 8 (', '/', '{' ]; N := 0; TOP := P; CH := ' ' END; (* INITIALIZE *) PROCEDURE OPENFILES; VAR NUMBLOCKS: INTE (* WRITEOLN *) PROCEDURE NEWLINE;  VAR I: INTEGER; DUMMYCH: CHAR;  BEGIN (* NEWLINE *) (*COMPLETELY REDONE OCT 79. R.GER; OPENOK: BOOLEAN; OPENERRNUM : INTEGER; LISTOPTION: CHAR; FILENAME: STRING; BEGIN (* OPEN *) L.P. *) IF LISTING THEN BEGIN # &WRITEOLN; # IF UCSDLST THEN BEGIN # READ(INFILE,N); *WRITE(PRINTER,N:6); *F REPEAT WRITELN; WRITE( 'INPUT FILE NAME - ' ); READLN( FILENAME ); IF LENGTH(FILENAME) >0 OR I := 7 TO 23 DO BEGIN -READ(INFILE,DUMMYCH); -WRITE(PRINTER ,DUMMYCH) END END &ELSE BEGIN )N := N + 1; )WRITE(PRINTER , THEN (*$I- DISABLE I/O CHECKS *) OPENOLD( INFILE, FILENAME ); (*$I+ ENABLE AGAIN *) N:6, ' ') END END $ #ELSE &IF UCSDLST THEN BEGIN )READ(INFILE,N); )FOR I := 7 TO 23 DO READ(INFILE,DUMMYCH) END &ELSE )N OPENERRNUM := IORESULT; OPENOK := ( OPENERRNUM = 0 ); IF NOT OPENOK THEN WRITELN( '*** I := N + 1; ) # IF N MOD PAGESIZE = 0 THEN BEGIN WRITELN; )WRITELN( 'Running...' ); NPUT OPEN ERROR #', OPENERRNUM ); UNTIL OPENOK; OPENNEW( PRINTER, 'XREF.LISTING' ); IF LENGTH(FILENAME) > 0 TH)WRITE('<',N,'>') END; # #WRITE('.') # END; (* NEWLINE *) PROCEDURE GETNEXTCHAR; BEGIN (* GETNEXTCHAR *) IF EOLN(IEN BEGIN ,WRITELN; (* RLP SEPT 79 *) ,WRITELN('WAS ', FILENAME, ' GENERATED AS A'); ,WRITELN('NFILE) THEN IF N < MAXLINES THEN NEWLINE ELSE BEGIN LISTING FILE BY THE '); ,WRITE('U.C.S.D. PASCAL COMPILER? (Y/N)? ' ); , ,READLN(LISTOPTION); ,UCSDLST := (LISTOPTION = 'Y'); PAGE; WRITELN( PRINTER, ' **** TOO MANY LINES' ); ERROR := TRUE EN , ,LISTING := FALSE; , ,{IF NOT UCSDLST THEN BEGIN}  /WRITELN; /WRITE( 'LISTING OF INPUT FILE (Y/N)?' ); /READLN( LISTD; #READ( INFILE, CH );(*CODE MOTION HERE. RLP OCT 79 *) # #IF LISTING &THEN )IF CH = CHR(12) ,THEN /BEGIN 2P, 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', OPTION ); # /LISTING := NOT(LISTOPTION = 'N'){ END}; # ,EMPTYFILE := FALSE END ELSE  'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' EMPTYFILE := TRUE END; (* OPEN *) PROCEDURE PAGE; BEGIN (* PAGE *) WRITELN( PRINTER ); WRITELN( PRINTER, CH, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'R(12) ); WRITE( PRINTER, ' ' ); LINECOUNT := 0 END; (* PAGE *) PROCEDURE WRITEOLN; BEGIN (* WRITEOLN *) WRITELN(y', 'z', '#', '$', '%', '&', '_' ]; ALPHANUMERICS := ALPHAS + NUMERICS; SPECIALCHARS := [ '''', ' PRINTER ); WRITE( PRINTER, ' ' ); LINECOUNT := LINECOUNT + 1; IF LINECOUNT = PAGESIZE THEN PAGE END;9 EAN; VAR I,J,K: INTEGER; BEGIN I := 1; J := NK; REPEAT K := (I+J) DIV 2; (*BINARY SEARCH*) I; X^.REFNUM := 1; X^.REF[1] := N; T[H].KEY := ID; F KEY[K] <= X THEN I := K+1; IF KEY[K] >= X THEN J := K-1; UNTIL I > J;  T[H].FIRST := X; T[H].LAST := X; T[H].FOL := TOP; T NOKEY := KEY[K] <> X END (*NOKEY*) ; FUNCTION ORDALFA(ID: ALFA): INTEGER; VAR I, J: INTEGER; BEGIN J := 0; OP := H END ELSE BEGIN (*COLLISION*) H := H+D;  FOR I := 1 TO ALFALEN DO J := (J*10 + ORD(ID[I]) ) 8MOD (MAXINT DIV 11);(*RLP SEPT 79*) ORDALFA := ABS(J) END; (* D := D+2; IF H >= P THEN H := H - P;  ORDALFA *) PROCEDURE SEARCH( ID: ALFA ); (*MODULO P HASH SEARCH*) (*GLOBAL: T, TOP*) VAR H,D : INTEGER;  IF D = P THEN BEGIN PAGE; X : ITEMPTR; F : BOOLEAN; BEGIN H := ORDALFA(ID) MOD P; F := FALSE; D := 1; C2 := C2 + 1; REPEAT  WRITELN( PRINTER, ' **** TABLE FULL' ); ERROR := TRUE  IF T[H].KEY = ID THEN BEGIN (*FOUND*) F := TRUE; IF T[H].LAST^.REF END ; END UNTIL F OR ERROR END (*SEARCH*) ; PROCEDURE PRINTWORD(W: WORD); NUM = REFSPERITEM THEN BEGIN NEW(X);  VAR L: INTEGER; X: ITEMPTR; FUNCTION NEXTREF : INTEGER; VAR THISREF: NUMREFS; BEGIN THISREF := (L-1) MOD REFSPX^.REFNUM := 1; X^.REF[1] := N; T[H].LAST^.NEXT:= X; ERITEM + 1; NEXTREF := X^.REF[ THISREF ]; IF THISREF = X^.REFNUM THEN X := NIL ELSE IF THISR T[H].LAST := X; END ELSE WITH T[H].LAST^ DO EF = REFSPERITEM THEN X := X^.NEXT END; (* NEXTREF *) BEGIN WRITE(PRINTER,' '); WRITE( PRINT BEGIN REFNUM := REFNUM + 1; REF[REFNUM] := N ER, W.KEY ); X := W.FIRST; L := 0; REPEAT IF L = REFSPERLINE THEN BEGIN L  END END ELSE IF T[H].KEY = ' ' THEN := 0; WRITEOLN; WRITE( PRINTER, ' ' ) END ; L := L+1; WRITE( PAGE; 2WRITE( PRINTER, N:6, ' ' ) /END ,ELSE /WRITE( PRINTER, CH )  END; (* GETNEXTCHAR *) FUNCTION NOKEY(X: ALFA): BOOL BEGIN (*NEW ENTRY*) F := TRUE; C1 := C1 + 1; NEW(X): TNUMBER *) PROCEDURE GETCHARLIT; BEGIN REPEAT GETNEXTCHAR UNTIL (CH = '''') OR ERROR OR EOF(INFILE); GETN 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y'EXTCHAR END; (* GETCHARLIT *) PROCEDURE GETPARENSCOMMENT; BEGIN (* GETPARENSCOMMENT *) GETNEXTCHAR; IF CH = '*' , 'Z': GETIDENTIFIER; 'a', 'b', 'c', 'd', 'e', 'f', RINTER, NEXTREF:6 ) UNTIL X = NIL; WRITEOLN; WRITEOLN END (*PRINTWORD*) ; PROCEDURE PRINTTABLE; VAR I,J,M: I THEN BEGIN GETNEXTCHAR; WHILE (CH <> ')') AND NOT(ERROR OR EOF(INFILE)) DO NDEX; BEGIN I := TOP; WHILE I <> P DO BEGIN (*FIND MINIMAL WORD*) M := I; J := T[I].FOL; BEGIN WHILE (CH <> '*') AND NOT(ERROR OR EOF(INFILE)) DO GETNEXTCHAR;  WHILE J <> P DO BEGIN IF T[J].KEY < T[M].KEY THEN M : GETNEXTCHAR END; GETNEXTCHAR END END; (* GETPARENSCOMMENT *) PROCEDURE GETSLASHCOMME= J; J := T[J].FOL END ; PRINTWORD(T[M]); IF M <> I THEN NT; BEGIN (* GETSLASHCOMMENT *) GETNEXTCHAR; IF CH = '*' THEN BEGIN GETNEXTCHAR;  BEGIN T[M].KEY := T[I].KEY; T[M].FIRST := T[I].FIRST; T[M].LAST := T[I] WHILE (CH <> '/') AND NOT(ERROR OR EOF(INFILE)) DO BEGIN .LAST END ; I := T[I].FOL END END (*PRINTTABLE*) ; PROCEDURE GETIDENTIFIER; VAR I: INTE WHILE (CH <> '*') AND NOT(ERROR OR EOF(INFILE)) DO GETNEXTCHAR; GETNEXGER; ID: ALFA; BEGIN (* GETIDENTIFIER *) I := 0; ID := ' '; REPEAT IF I < ALFALEN THETCHAR END; GETNEXTCHAR END END; (* GETSLASHCOMMENT *) PROCEDURE GETCURLYCOMMENT; BEGN BEGIN I := I+1; IF ('a' <= CH) AND (CH <= 'z') THEN IN (* GETCURLYCOMMENT *) GETNEXTCHAR; WHILE (CH <> '}') AND NOT(ERROR OR EOF(INFILE)) DO GETNEXTCHAR; GETNEXTC ID[I] := CHR( ORD(CH) - ORD('a') + ORD('A') ) ELSE ID[I] := CH END;HAR END; (* GETCURLYCOMMENT *) BEGIN (* CROSSREF *) INITIALIZE; OPENFILES; IF LISTING THEN PAGE;  GETNEXTCHAR UNTIL NOT(CH IN ALPHANUMERICS); IF NOKEY(ID) THEN SEARCH(ID)  NEWLINE; WHILE NOT(EOF(INFILE) OR EMPTYFILE OR ERROR) DO BEGIN IF CH IN (ALPHANUMERICS + SPECIALCHARS) END; (* GETIDENTIFIER *) PROCEDURE GETNUMBER; BEGIN REPEAT GETNEXTCHAR UNTIL NOT(CH IN NUMERICS); END; (* GE THEN CASE CH OF 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',;  XREF šWAS צ GENERATED AS ALISTING FILE BY THE  !U.C.S.D. PASCAL COMPILER? (Y/N)? YëצLISTING OF INPUT FILE (Y/N)?NÓZ   0 7á,^.t 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',BEGIN רx CASE רx CONST רx DIV רx DOWNTO רx 'v', 'w', 'x', 'y', 'z': GETIDENTIFIER; '#', '$', '%',  DO רx  ELSE רx  END רx  FOR רx  FUNCTION רx  '&', '_': GETIDENTIFIER; '0', '1', '2', '3', '4', '5', '6', '7',  IF רx IN רx MOD רx NIL רx NOT רx '8', '9': GETNUMBER; '''': GETCHARLIT; '(': GETPARENSCOMMEN OF רx OR רx PROCEDURE רx PROGRAM רx RECORD רxT; '/': GETSLASHCOMMENT; '{': GETCURLYCOMMENT END (* CASE *)  REPEAT רx SET רx THEN רx TO רx TYPE רxELSE GETNEXTCHAR END; (* WHILE *) PAGE; PRINTTABLE; WRITEOLN; WRITE( PRINTER, C1:6, ' IDE UNTIL רx VAR רx WHILE רx WITH רNTIFIERS' ); WRITELN( PRINTER, C2:6, ' OCCURRENCES' ); PAGE; CLOSE( INFILE ); CLOSE( PRINTER, LOCK ) END.  xp   INPUT FILE NAME - Pš C"ٓ4*** INPUT OPEN ERROR # ١צ XREF.LISTING< * **** TABLE FULLᩘNf     ڶ á á  O^> ب   á צ    á? h ˡaˡ5  ˡF   ɡ(azȄ aA  쥚 H d쥚  'éC  *á2)˩C *˩C  3" F*á2/˩C *˩C  3" F}˩C * &ƘƙBƙCƚoՂC 쥚p #{!#%'579;=?ACEG02468:<cegikmoqs C 9'ɡ.צ **** TOO MANY LINESC' á   uwy{}rtvx|   ڨ   x  x  šx O bڨ  IDENTIFIERS  OCCURRENCESCƘƙCv~~`52~,ȡ    ( > ب   z á< |T &C * &ƘƙBƙCƚoՂC 쥚') ' l p #{!#%'579;=?ACEG02468:<cegikmoqs 'Iނġuwy{}rtvx|   =  IF A LINE STARTS WITH &A '#' AND IS NOT A PRINTER CONTROL LINE THE PROGRAM &WILL PRINT IT DIRECTLY & &THE COMMANDS SO FAR: STRING ; 'INFILE, PRINTER : TEXT; 'LINENUM, PAGENUM, PAGEBOTTOM, PAGETOP, PAGESIZE, SPACING : INTEGER; & *#PG - SKIP TO THE TOP OF THE NEXT PAGE *#SK - SKIP NUM LINES *#PN - PRINT PAGE NUMBERS AT TOP OF PAGE *#NN -'TEST, PRTPGNUM : BOOLEAN; ' ' #PROCEDURE ATTOPPAGE; %VAR I : INTEGER; %BEGIN 'IF PRTPGNUM THEN WRITE(PRINTER,'':60,'PAG DON'T PRINT PAGE NUMBERS *#PT - PAGETOP - WHERE ON THE PAGE FOR FIRST LINE OF TEXT *#PB - PAGEBOTTOM - LAST E ',PAGENUM:5); 'FOR I := LINENUM TO PAGETOP-1 DO WRITELN(PRINTER); 'LINENUM := PAGETOP; %END; # # #PROCEDURE ENDPAGE; %VLINE ON PAGE FOR TEXT *#PS - TOTAL NUMBER OF LINES ON A PAGE *#SN - SET PAGE NUMBER TO *#LS - LAR I : INTEGER; %BEGIN 'FOR I := LINENUM TO PAGESIZE DO WRITELN(PRINTER); 'LINENUM := 1; 'PAGENUM := PAGENUM+1; %END; % %INE SPACING, 1=> SINGLE SPACING, 2=> DOUBLE SPACING F3=> TRIPLE SPACING ETC. * * *DEFAULTS , ,PAGESIZE = 66 ,PAGETOP = 6 #PROCEDURE LIST; %VAR I : INTEGER; %BEGIN 'IF LINENUM > PAGEBOTTOM THEN ENDPAGE; 'IF LINENUM < PAGETOP THEN ATTOPPAGE; ' ,PAGEBOTTON = 60 ,DON'T PRINT PAGE NUMBER ,LINE SPACING = 1 ,PAGE NUMBER STARTS AT 1 WRITELN(PRINTER,LINE); 'FOR I := 1 TO SPACING DO WRITELN(PRINTER); 'LINENUM := LINENUM +1+SPACING %END; % % #FUNCTION NUMB,ASSUMES PRINTER SITTING ON LINE 1 OF PAGE WHEN PROGRAM IS RUN , *COMMUNICATION WITH USER ,THE PROGRAM ASKS THE USER FOR THEER ( VAR STR : RSTRING ) : INTEGER; %VAR VALUE : INTEGER; %BEGIN 'VALUE := 0; 'STR := CONCAT(STR,' 0 '); 'WHILE STR[1] = '  FILES TO PRINT. ,THE PROMPT IS 'COM?'. THERE ARE TWO LEGAL THINGS ,TO ANSWER WITH. THE FIRST IS A COMPLETE FILE NAME, ,THE ' DO DELETE(STR,1,1); 'WHILE STR[1] IN [ '0','1','2','3','4','5','6','7','8','9'] DO )BEGIN +VALUE := VALUE*10 + ORD(STR[1])-OTHER IS A COMMAND STARTING WITH '#'. BEWARE! ,IF THE COMMAND STARTING WITH A '#' IS NOT A LEGAL ,COMMAND THE THE PROGRAM IT ORD('0'); +DELETE(STR,1,1) )END; % NUMBER := VALUE; %END; % % #PROCEDURE SKIPLINES; %VAR NUM : INTEGER; %BEGIN WILL BE PRINTED ON THE ,PRINTER. THIS WAS DONE SO THAT AT THE BEGINNING ,OF THE RUN THE USER CAN SPECIFY THE ACTUAL PAPER ,S'IF LINENUM < PAGETOP THEN ATTOPPAGE; 'DELETE(LINE,1,3); 'NUM := NUMBER(LINE); 'WHILE (LINENUM <= PAGEBOTTOM) AND (NUM > 0) IZE HE IS USING ( IF IT IS DIFFERENT FROM THE ,DEFAULT ) OR ANY OTHER THING THAT HE MIGHT WANT TO ,DO. THE COMMAND TO CHANGE DO )BEGIN +WRITELN(PRINTER); +LINENUM := LINENUM+1; +NUM := NUM-1 )END; %END; % % #PROCEDURE CONTROL; %VAR ITEM :RSTRI (*$D-,R-,I-*)   PROGRAM PRINT ;  "(* THIS PROGRAM IS A SIMPLE PRINTING PROGRAM THAT &PRINTS FILES ON THE PRINTER AND DTHE PAGE NUMBER WAS ,PUT IN SO THAT THE USER COULD PRINT MORE THAN ONE ,FILE IN A RUN AND HAVE BOTH SETS OF OUTPUT START ,AT OES SIMPLE &PRINTER CONTROL FOR THE USER. & &THE COMMANDS TO THE PROGRAM ARE ON SEPERATE LINES &AND MUST BEGIN WITH '#'. PAGE 1. , , * * * *) # #TYPE RSTRING = STRING[120]; # # #VAR LINE : R> ˡ#ám@ƁmdJPJTxצNG; %BEGIN 'ITEM := COPY(LINE,2,2); 'IF ITEM = 'PG' THEN ENDPAGE 'ELSE IF ITEM = 'SK' THEN SKIPLINES 'ELSE IF ITEM = 'PN' THEN PRTPGNUM := TRUE 'ELSE IF ITEM = 'NN' THEN PRTPGNUM := FALSE 'ELSE IF ITEM = 'PT' THEN -BEGIN /DELETE(LINE,1,3); /PAGET PRINT OP := NUMBER(LINE) -END 'ELSE IF ITEM = 'PB' THEN -BEGIN /DELETE(LINE,1,3); /PAGEBOTTOM := NUMBER(LINE); -END 'ELSE IF I TEM = 'PS' THEN -BEGIN /DELETE(LINE,1,3); /PAGESIZE := NUMBER(LINE) -END 'ELSE IF ITEM = 'SN' THEN -BEGIN /DELETE(LINE,1,3); /PAGENUM := NUMBER(LINE) -END 'ELSE IF ITEM = 'LS' THEN -BEGIN /DELETE(LINE,1,3); /SPACING := NUMBER(LINE) - 1 -END 'ELSE LIST; %END; % # # # #BEGIN %PAGENUM := 1; %LINENUM := 1; %PAGEBOTTOM := 60; %PAGETOP := 6; %PAGESIZE := 66;  @<@צPAGE @ ȡ @Rȡ @%PRTPGNUM := FALSE; %TEST := FALSE; %SPACING := 0; %REWRITE(PRINTER,'PRINTER:'); % %REPEAT 'WRITE(OUTPUT,'COM? '); 'READ  2šɡ@@ȡ @Rxצ 0 {xLN(INPUT,LINE); 'IF LINE[1] = '#' THEN CONTROL 'ELSE (IF LINE <> 'END.' THEN *BEGIN ,LINE := CONCAT(LINE,'.TEXT'); ,RESET( á 0):~ `ɡń@INFILE,LINE); ,IF IORESULT <> 0 THEN WRITELN(OUTPUT,'NO SUCH FILE',CHR(8)) ,ELSE .BEGIN 0WHILE NOT EOF(INFILE) DO 2BEGIN 4$ F>>xPGׯצSKPNׯצNNPTׯxצREADLN(INFILE,LINE); 4IF LENGTH(LINE) <> 0 THEN 6IF LINE[1] = '#' THEN CONTROL ELSE LIST 4ELSE LIST; 2END; 0CLOSE(INFILE); PB[PSׯ>צSN!LSׯ, END; ,TEST := FALSE *END )ELSE TEST := TRUE; $ UNTIL TEST;  ENDPAGE; #END.  @ƁlƁmƂՀ<B@צPRINTER:COM? x#áצEND.̂ƂxƂ.TEXT}Ƃxm"ˡ& NO SUCH FILE=m +mxm? 127; NUL = 0; ESC = 27; DLE = 16; DC2 = 18; CR = 13; LF = 10; BS = 8; &US = 31;   4] := OCTAL(1,7,7,7,5,6); H^.CODE[ 5] := OCTAL(1,1,3,7,1,0); "H^.CODE[ 6] := OCTAL(1,7,7,5,2,2); "H^.CODE[ 7] := OCTAL(1,4,2TYPE HANDLER = RECORD 1QBASE: INTEGER; (*ADDRESS OF QUEUE ARRAY*) 1QHEAD: INTEGER; (*BYTE INDEX-HANDLER INSERTS*,7,2,0); "H^.CODE[ 8] := OCTAL(0,0,0,2,0,0); "H^.CODE[ 9] := OCTAL(1,6,6,7,0,0); "H^.CODE[10] := OCTAL(1,7,7,7,4,2); ) 1QTAIL: INTEGER; (*BYTE INDEX-PROGRAM REMOVES*) 1QSIZE: INTEGER; (* # OF BYTES IN CIRC QUEUE*) 1CODE: ARRAY ["H^.CODE[11] := OCTAL(0,2,0,0,6,7); "H^.CODE[12] := OCTAL(1,7,7,7,4,4); "H^.CODE[13] := OCTAL(0,0,1,0,0,1); "H^.CODE[14] := 0..20] OF INTEGER /END; / %KWTRICK = ARRAY [0..7] OF INTEGER; QUEUE = PACKED ARRAY [0..QUEUESIZE] OF CHAR; % %DLOCTAL(0,0,5,0,0,0); "H^.CODE[15] := OCTAL(0,1,0,0,6,7); "H^.CODE[16] := OCTAL(1,7,7,7,3,0); "H^.CODE[17] := OCTAL(0,1,2,6,0,011 = RECORD .RCSR: INTEGER; .RBUF: INTEGER; .XCSR: INTEGER; .XBUF: INTEGER ,END; , , VAR Q : ^QUEUE; $H : ^HANDLER; $CDL, (*CONSOLE DL-11*) $HDL: ^ DL11; (*HOST DL-11*) $ALPHALOCK,DONEBIT,PARITYMASK: BOOLEAN; PAGEINX,CH,QSIZE,INTENABLE,TIMER: INTEGER; TRIX: RECORD CASE INTEGER OF ,0: (P: ^DL11); ,1: (M: ^INTEGER); ,2: (I: INTEGER) *END; $KW: ^KWTRICK; PAGE: PACKED ARRAY [0..1023] OF CHAR;  FUNCTION OCTAL(P1,P2,P3,P4,P5,P6: INTEGER): INTEGER;  BEGIN "IF P1 <> 0 THEN P1 := 16384+16384; (*32768*) "OCTAL := (((P2*8+P3)*8+P4)*8+P5)*8+P6+P1  END (*OCTAL*) ;  PROCEDURE INITIALIZE; VAR I: INTEGER; BEGIN  (*INITIALIZE MISC THINGS*) "ALPHALOCK := FALSE; QSIZE := QUEUESIZE; DONEBIT := ODD(OCTAL(0,0,0,2,0,0)); "PARITYMASK := ODD(OCTAL(0,0,0,1,7,7)); "INTENABLE := OCTAL(0,0,0,1,0,0); "NEW(H); "NEW(Q);  (*INITIALIZE RECEIVE HANDLER STUFF*) "H^.QBASE := ORD(Q); "H^.QHEAD := 0; "H^.QTAIL := 0; "H^.QSIZE := QSIZE; "H^.CODE[ 0] := OCTAL(0,1,0,0,(*$G+,R-,I-*) PROGRAM TERMINAL;   LABEL 1;  CONST QUEUESIZE = 24576; HALFDUPLEX = FALSE; CTRLD = 4; &RUBOUT = 4,6); "H^.CODE[ 1] := OCTAL(0,1,6,7,0,0); "H^.CODE[ 2] := OCTAL(1,7,7,7,6,4); "H^.CODE[ 3] := OCTAL(0,6,6,7,0,0); "H^.CODE[ @ "KW^[6] := OCTAL(0,0,0,0,0,6); "KW^[7] := 0; "TRIX.I := OCTAL(0,0,0,1,0,0); "TRIX.M^ := ORD(KW);  (*MAKE FLOPPY INTERRUPTABCHR(I-1); WRITECH(CHR(LF)) "END (*READS*) ; " PROCEDURE SENDFILE(BINARYMODE: BOOLEAN); " VAR I,LINECNT,REPTCNT: INTEGELE*) "TRIX.I := OCTAL(0,0,0,2,5,2); "TRIX.M^ := 0;  (*SET UP B6700 DL-11 STATUS*) "TRIX.I := OCTAL(1,7,7,5,2,0); "HDL := TRR; (ABORT: BOOLEAN; CH: CHAR; (BF: FILE; F: TEXT; $PROCEDURE WAITFOR(CH: INTEGER); $BEGIN &REPEAT (ABORT := ORD(ODD(CDLIX.P; "HDL^.RCSR := INTENABLE; "HDL^.XCSR := 0; "CDL^.XBUF := US; HDL^.XBUF := CR  END (*INITIALIZE*) ; PROCEDURE TERMINA^.RBUF) AND PARITYMASK) = ESC &UNTIL ABORT OR (ORD(ODD(HDL^.RBUF) AND PARITYMASK) = CH) $END (*WAITFOR*) ; $ TE;  VAR I: INTEGER; BEGIN  (*REPAIR TRAP VECTOR AND EXIT*) "TRIX.I := OCTAL(0,0,0,0,1,4); "I := TRIX.M^; "TRIX.I := OCTA PROCEDURE SEND(CH: CHAR); $BEGIN &REPEAT &UNTIL ORD(ODD(HDL^.XCSR) AND DONEBIT) <> 0; &HDL^.XBUF := ORD(CH) $END (*SENDL(0,0,0,1,0,0); "TRIX.M^ := I; TRIX.I := OCTAL(0,0,0,2,5,2); "TRIX.M^ := OCTAL(0,0,0,2,4,0); "CDL^.RCSR := INTENABLE; "EXI*) ; $ PROCEDURE SENDBINFILE; &CONST TIMEOUT = 20; VAR I,J: INTEGER; $ BUF: PACKED ARRAY [0..7,0..127] OF 0..1T(PROGRAM)  END (*TERMINATE*) ;  PROCEDURE FILEXFER;  VAR CH: CHAR; TITLE,S: STRING[50]; "PROCEDURE WRITECH(CH: CHAR); 5; BEGIN &WHILE (BLOCKREAD(BF,BUF,1) = 1) AND NOT ABORT DO (FOR I := 0 TO 7 DO *BEGIN ,FOR J := 0 TO 127 DO .BEGIN 0S"BEGIN $REPEAT $UNTIL ORD(ODD(CDL^.XCSR) AND DONEBIT) <> 0; $CDL^.XBUF := ORD(CH) "END (*WRITECH*) ; " "PROCEDURE WRITELN;END(CHR(BUF[I,J]+ORD('@'))); , TIMER := TIMEOUT; 0REPEAT TIMER := TIMER-1 0UNTIL TIMER = 0 .END; IF ORD(ODD(C); "H^.CODE[18] := OCTAL(0,0,0,0,0,6); (*SET UP TRAP VECTOR FOR B6700 RECEIVE*) "TRIX.I := OCTAL(0,0,0,1,2,0); "TRIX.M^ := OR "BEGIN $WRITECH(CHR(CR)); $WRITECH(CHR(LF)) "END (*WRITELN*) ; " "PROCEDURE WRITES(S: STRING); " VAR I: INTEGER; D(H)+8; "TRIX.I := OCTAL(0,0,0,1,2,2); "TRIX.M^ := OCTAL(0,0,0,2,0,0);  (*SET UP CONSOLE DL-11 STATUS*) "TRIX.I := OCTAL(1,7"BEGIN $FOR I := 1 TO LENGTH(S) DO &WRITECH(S[I]) "END (*WRITES*) ; " "PROCEDURE READCH(VAR CH: CHAR); "BEGIN $REPEAT $,7,5,6,0); CDL := TRIX.P; CDL^.RCSR := 0; "CDL^.XCSR := 0; (*MAKE BPT VECTOR POINT AT CLOCK HANDLER*) "TRIX.I := OCTAL(0,0UNTIL ORD(ODD(CDL^.RCSR) AND DONEBIT) <> 0; $CH := CHR(ORD(ODD(CDL^.RBUF) AND PARITYMASK)); " IF ALPHALOCK THEN &IF (CH >= ',0,1,0,0);  I := TRIX.M^; "TRIX.I := OCTAL(0,0,0,0,1,4); "TRIX.M^ := I; "TRIX.I := OCTAL(0,0,0,0,1,6); "TRIX.M^ := 0; (*Sa') AND (CH <= 'z') THEN (CH := CHR(ORD(CH)-ORD('a')+ORD('A')); WRITECH(CH) (*ALWAYS ECHO*) END (*READCH*) ; " "PROCEDUET UP NEW CLOCK HANDLER...PREVENTS REENTRY*) "NEW(KW); "KW^[0] := OCTAL(0,0,5,1,6,7); "KW^[1] := OCTAL(0,0,0,0,1,2); "KW^[2]RE READS(VAR S: STRING); $VAR I: INTEGER; CH: CHAR; "BEGIN $I := 1; $REPEAT &READCH(CH); &IF CH = CHR(BS) THEN (IF I > 1  := OCTAL(0,0,1,4,0,1); "KW^[3] := OCTAL(0,0,0,0,0,3); "KW^[4] := OCTAL(0,0,5,1,6,7); "KW^[5] := OCTAL(0,0,0,0,0,2); THEN I := I-1 (ELSE (*NOTHIN*) &ELSE (IF CH <> CHR(CR) THEN *BEGIN S[I] := CH; I := I+1 END $UNTIL CH = CHR(CR); $S[0] := A HEN *OPENOLD(BF,S) (ELSE *OPENOLD(F,S) $UNTIL (LENGTH(S) = 0) OR (IORESULT = 0); $IF LENGTH(S) > 0 THEN &BEGIN CR); &H^.QHEAD := 0; H^.QTAIL := 0; &FOR I := 1 TO LENGTH(S) DO (BEGIN *WHILE ORD(ODD(HDL^.XCSR) AND DONEBIT) = 0 DO; *HDL^(WRITES('Host output file? '); READS(TITLE); (IF LENGTH(TITLE) > 0 THEN *BEGIN LINECNT := 0; ABORT := FALSE; ,S := CONCAT('c.XBUF := ORD(S[I]) (END; REPEAT UNTIL ORD(ODD(HDL^.RBUF) AND PARITYMASK) = LF; HDL^.RCSR := INTENABLE; TIMER at > ',TITLE,' '); ,S[LENGTH(S)] := CHR(CR); ,FOR I := 1 TO LENGTH(S) DO SEND(S[I]); WAITFOR(LF); IF B:= TIMEOUT; &REPEAT (IF H^.QHEAD <> H^.QTAIL THEN *BEGIN ,TIMER := TIMEOUT; (*RESET TIMEOUT COUNTER*) ,CH := Q^[H^.QTAIL]INARYMODE THEN , SENDBINFILE ELSE .BEGIN 0READ(F,CH); REPTCNT := 1; 0WHILE NOT (ABORT OR EOF(F)) DO 2BEGIN 4I; ,H^.QTAIL := H^.QTAIL+1; ,IF H^.QTAIL = QSIZE THEN H^.QTAIL := 0; IF CH <> CHR(LF) THEN .BEGIN F EOLN(F) THEN 6BEGIN SEND(CHR(CR)); 8WAITFOR(LF); 8WRITECH('.'); 8LINECNT := LINECNT+1; 8IF LINECNT MOD 50 = 0 THEN WRITEL0PAGE[PAGEINX] := CH; 0PAGEINX := PAGEINX+1; 0IF CH = CHR(CR) THEN 2BEGIN 4WRITECH('.'); 4LINECNT := LINECNT+1; 4IF LINECN; 8TIMER := 200; (*50 MS*) 8REPEAT TIMER := TIMER-1 8UNTIL TIMER = 0; 8REPTCNT := 0 6END; 4IF CH = CHR(DLE) THEN 6BEGIN NT MOD 50 = 0 THEN WRITELN; 4IF PAGEINX > 920 THEN 6IF WRITEPAGE THEN TIMER := 0 2END .END *END; (IF ORD(ODD(CDL^.RBUF) ANREAD(F,CH); 8REPTCNT := ORD(CH)-32; 8CH := ' ' 6END; 4IF REPTCNT > 0 THEN SEND(CH); 4REPTCNT := REPTCNT-1; 4IF REPTCNT <= D PARITYMASK) = ESC THEN *TIMER := 0; (*ABORT XFER*) (TIMER := TIMER-1 &UNTIL TIMER <= 0; &WRITELN; HDL^.RCSR := 0; &0 THEN 6BEGIN READ(F,CH); REPTCNT := 1 END 3END; 0CLOSE(F) .END; ,IF ABORT THEN CH := CHR(NUL) ,ELSE CH := CHR(CTRLD); ,SIF (PAGEINX > 0) AND (TIMER = 0) THEN (BEGIN *IF PAGEINX > 2 THEN ,IF (PAGE[PAGEINX-2] = '%') AND , (PAGE[PAGEINX-1] = ' 'END(CH); ,WRITELN; WRITES('Transfer '); ,IF ABORT THEN WRITES('aborted') ,ELSE WRITES('complete'); ,WRITELN ) THEN 1PAGEINX := PAGEINX-2; *IF WRITEPAGE THEN TIMER := -1 $ END END (*GETFTP*) ; $ BEGIN (*GETFILE*) $WRITES('H& END END "END (*SENDFILE*) ; " PROCEDURE GETFILE; VAR LINECNT: INTEGER; F: FILE; " $FUNCTION WRITEPAGE: BOOost input file? '); READS(TITLE); $IF LENGTH(TITLE) > 0 THEN &BEGIN (REPEAT *WRITES('Pascal output file? '); READS(S); *IF DL^.RBUF) AND PARITYMASK) = ESC THEN .BEGIN ABORT := TRUE; I := 10 END; SEND(CHR(CR)); ,WAITFOR(LF); LLEAN; $BEGIN WRITEPAGE := FALSE; &FILLCHAR(PAGE[PAGEINX],1024-PAGEINX,0); &PAGEINX := 0; &IF BLOCKWRITE(F,PAGE,2) <> 2 THEN INECNT := LINECNT+1; ,WRITECH('.'); IF LINECNT MOD 50 = 0 THEN .WRITELN & END; CLOSE(BF) $END (*SENDBIN(BEGIN *WRITES('Disk output error'); *WRITELN; ( WRITEPAGE := TRUE END $END (*WRITEPAGE*) ; $ $PROCEDURE GETFTP;FILE*) ; $ BEGIN (*SENDFILE*) REPEAT &WRITES('Pascal input file? '); READS(S); &IF LENGTH(S) > 0 THEN (IF BINARYMODE T $ CONST TIMEOUT = 5000; VAR I: INTEGER; CH: CHAR; BEGIN S := CONCAT('cat ',TITLE,' '); &S[LENGTH(S)] := CHR(B LENGTH(S) > 0 THEN OPENNEW(F,S) (UNTIL (IORESULT = 0) OR (LENGTH(S) = 0); (IF LENGTH(S) > 0 THEN *BEGIN (*TRANSFER!*) ,PAGEI(CDL^.XCSR) AND DONEBIT) <> 0 THEN &BEGIN (CDL^.XBUF := ORD(Q^[H^.QTAIL]); (H^.QTAIL := H^.QTAIL+1; (IF H^.QTAIL = QSIZE THENX := 0; LINECNT := 0; ,IF WRITEPAGE THEN TIMER := -1 ,ELSE GETFTP; IF TIMER < 0 THEN .BEGIN N H^.QTAIL := 0 &END; GOTO 1  END. 0WRITES('Transfer aborted'); 0WRITELN; CLOSE(F,PURGE) .END ,ELSE .BEGIN WRITES(TITLE);  WRITES(' transferred'); 0WRITELN; CLOSE(F,LOCK) .END *END &END "END (*GETFILE*) ;   BEGIN (*FILEXFER*) WRITELN; REPEAT $HDL^.RCSR := 0; $WRITES('Filexfer: S(end), G(et), B(insend), P(ascal), H(ost)'); $READCH(CH);, & txx && T(PtW x WRITELN; IF (CH >= 'a') AND (CH <= 'z') THEN &CH := CHR(ORD(CH)-ORD('a')+ORD('A')); $CASE CH OF &'P': TERMINATE; &'G': GETFILE; &'B': SENDFILE(TRUE); 'S': SENDFILE(FALSE) $END "UNTIL CH = 'H'; "H^.QHEAD := 0; H^.QTAIL := 0; "HDL^.RCSR := INTENABLE; "CDL^.XBUF := US; "HDL^.XBUF := CR  END (*FILEXFER*) ;  PROCEDURE SENDBREAK;  BEGIN (*200 MS*) "TIMER := 800; "HDL^.XCSR := 1; "REPEAT TIMER := TIMER-1 "UNTIL TIMER = 0; "HDL^.XCSR := 0; "H^.QTAIL := H^.QHEAD  END (*SENDBREAK*) ;  BEGIN INITIALIZE;  1: "IF ORD(ODD(CDL^.RCSR) AND DONEBIT) <> 0 THEN $BEGIN &CH := ORD(ODD(CDL^.RBUF) AND PARITYMASK); &IF CH = ESC THEN (FILEXFER &ELSE (IF CH = DC2 THEN *ALPHALOCK := NOT ALPHALOCK (ELSE *BEGIN ,IF ALPHALOCK THEN .IF (CH >= ORD('a')) AND (CH <= ORD('z')) THEN 0CH := CH-ORD('a')+ORD('A'); ,IF HALFDUPLEX THEN CDL^.XBUF := CH; ,HDL^.XBUF := CH; ,IF CH = NUL THEN SENDBREAK *END $END; "IF H^.QTAIL <> H^.QHEAD THEN $IF ORD(ODDC OLEPART: REAL; DODECIMAL: BOOLEAN; FUNCTION NUMBER (FRACTION: BOOLEAN): REAL; (* Returns number as whole or fraction  IF NAMETABLE[INDEX].ISVAR THEN TOKENTYPE:=VARIDENV ELSE TOKENTYPE:=FUCIDENV ELSE TOKENTYPE:=UNRECIDV *) VAR SUM, COUNT: REAL; BEGIN COUNT := 1; SUM := 0; REPEAT IF SUM < 0.9E37 (*MAXREAL*) THEN BEGIN SUM END END (* OF GETID *); BEGIN (*SCANNER*) DONTEAT:=FALSE; IF CH IN ALPHA THEN GETID ELSE IF CH IN NUMERIC+['.'] T := 10*SUM + ORD(CH) - ORD('0'); COUNT := 10*COUNT END; GETCHAR UNTIL NOT (CH IN NUMERIC); IF FRACTION THEN NUHEN GETCONSTANT ELSE IF CH IN OPERATORS THEN CASE CH OF '+': TOKENTYPE:=PLUSV; '-': TOKENTYPE:=MINUSV; PROGRAM CALCULATOR;(* WRITTEN BY DALE ANDER JULY 8, 1977 *) (* CHANGED TO A CALCULATOR ON JULY 17, 1977 *) CONST IDLENGTH MBER := SUM / COUNT ELSE NUMBER := SUM END (*NUMBER*); BEGIN (*GETCONSTANT*) TOKENTYPE := CONSTV; IF CH <> '.' THEN B= 7; TABLESIZE = 35; (* INCREASE TABLESIZE FOR MORE MEMORY *) IDBLANKS = ' '; LASTX = 'LASTX '; EGIN WHOLEPART := NUMBER(FALSE); IF CH='.' THEN GETCHAR; DODECIMAL := (CH IN NUMERIC); END ELSE BEGI TYPE TOKENKINDS = (CONSTV, EOFV, FUCIDENV, LINEV, LPARENV, MINUSV, PLUSV, RPARENV, SLASHV, STARV, UNRECIN WHOLEPART := 0; GETCHAR; DODECIMAL := (CH IN NUMERIC); IF NOT DODECIMAL THEN TOKENTYPE := UNRECSYMV DV, UNRECSYMV, UPARROWV, VARIDENV, EQUALV, LASTXV); IDKIND = PACKED ARRAY[0..IDLENGTH] OF CHAR; V END; IF DODECIMAL THEN NUM := WHOLEPART + NUMBER(TRUE) ELSE NUM := WHOLEPART; DONTEAT:=CH<>' '; (* DONT EAT NEAR CH: CHAR; J, TOTALIDS, INDEX: INTEGER; OPERATORS, ALPHA, NUMERIC: SET OF CHAR; NUM, ANSWER: REAL; SOURCE: STRXT NONBLANK IF CH IS NONBLANK DA 7/11/77 *) END (* OF GETCONSTANT *); PROCEDURE GETID; VAR ID: IDKIND; I: INTEGER; FUNING; TOKENTYPE: TOKENKINDS; NAMETABLE: ARRAY[0..TABLESIZE] OF RECORD NAME: IDKIND; CASE ISVARCTION LOOKUP(IDTEXT: IDKIND):INTEGER; VAR I: INTEGER; BEGIN I:=TOTALIDS; NAMETABLE[0].NAME:=IDTEXT;(* NOTE DON'T C: BOOLEAN OF TRUE: (VALUE: REAL) END; TEMP: REAL; ITSOK, GAVEERR: BOOLEAN; PROCEDURE GETCHAR; BEGIN J:=J+1HANGE THIS AS THIS FACT IS USED INSIDE OF PRIMARY!!!!!!! *) WHILE NAMETABLE[I].NAME<>; (* J IS THE INDEX INTO THE SOURCE STRING *) IF J<=LENGTH(SOURCE) THEN CH:=SOURCE[J] IDTEXT DO I:=I-1; LOOKUP:=I END (* OF LOOKUP *); BEGIN (*GETID*) ID:=IDBLANKS; I:=0; REPEAT IF I<=IDLENGTH THE ELSE CH:='#'; (* EOF SOURCE CHAR *) IF (CH>='a') AND (CH<='z') THEN CH:=CHR(ORD(CH)-32) (*CHANGE TO UPPER CASE*) END (* ON ID[I]:=CH; I:=I+1; GETCHAR UNTIL NOT(CH IN ['A'..'Z','0'..'9']); DONTEAT:=CH<>' '; (* DONT GET NEXT NONBLANKF GETCHAR *); PROCEDURE SCANNER; VAR DONTEAT: BOOLEAN; PROCEDURE GETCONSTANT; (* Real number scanner RJH 9 July 77 *) VAR WH IF CH IS NONBLANK *) IF ID=LASTX THEN TOKENTYPE:=LASTXV ELSE BEGIN INDEX:=LOOKUP(ID); IF INDEX>0 THEN D ARENEXPRESSION(VAR ANS: REAL): BOOLEAN ; BEGIN PARENEXPRESSION := FALSE; IF TOKENTYPE=LPARENV THEN BEGIN SCANNER; := FALSE; IF GAVEERR THEN EVALU8 := FALSE END (* OF EVALU8 *); BEGIN (*PRIMARY*) PRIMARY:=FALSE; IF TOKENTYPE=CONSTV THEN IF EXPRESS(ANS) THEN IF TOKENTYPE=RPARENV THEN BEGIN SCANNER; PARENEXPRESSION := TRUE END  (*CONSTANT*) BEGIN ANS:=NUM; (*GLOBAL SET BY GETCONSTANT*) PRIMARY:=TRUE; SCANNER END ELSE ELSE IF TOKENTYPE<>EOFV THEN BEGIN GAVEERR:=TRUE; WRITE ('Right parenthesis mi IF TOKENTYPE IN [VARIDENV, UNRECIDV] THEN BEGIN SAVETOK:=TOKENTYPE; SAVEID:=NAMETABLE[0].NAME; (* THISssing') END END ELSE IF TOKENTYPE IN [UNRECIDV, UNRECSYMV] THEN BEGIN GAVEERR:=TRUE;  WAS PUT THERE BY LOOKUP IN GETID *) SAVEINDEX:=INDEX; (*GLOBAL SET IN GETID*) (*THIS MAY NOT BE NECESSARY*) SCA WRITE ('Illegal symbol') END ELSE IF TOKENTYPE<>EOFV THEN BEGIN GAVEERR:=TRUE; WRITNNER; IF TOKENTYPE=EQUALV THEN (* MEMORY ASSIGNMENT *) BEGIN SCANNER; IF EXPRESS(ANS) THEN E ('Left parenthesis missing') END END (* OF PARENEXPRESSION *); FUNCTION EVALU8 (VAR ANS: REAL): BOOLEAN; VAR ARG, TEM BEGIN IF SAVETOK=UNRECIDV THEN IF TOTALIDS+1<=TABLESIZE THEN BEGIN TOTALIDS:=TOTALIDS+1; SAVEI '*': TOKENTYPE:=STARV; '/': TOKENTYPE:=SLASHV; '\': TOKENTYPE:=LINEV; '^': TOKENTYPE:=UPARROWV; '(': TOKENTYPE:=LPP: REAL; I: INTEGER; BEGIN EVALU8 := TRUE; IF PARENEXPRESSION (ARG) THEN CASE FUCNUM OF 1: ANS:=SIN(ARG); ARENV; ')': TOKENTYPE:=RPARENV; '=': TOKENTYPE:=EQUALV; '#': BEGIN TOKENTYPE:=EOFV; DONTEAT:=TRUE END END  2: ANS:=COS(ARG); 3: IF COS(ARG)=0 THEN BEGIN WRITE('Undefined TAN'); GAVEERR:=TRUE END ELSE ANS:=SIN(ARG)/COS( ELSE TOKENTYPE := UNRECSYMV; IF NOT DONTEAT THEN REPEAT GETCHAR UNTIL CH<>' ' (* GETNONBLANK *) END (* OF SCANNER *); FUNCTARG); 4: IF ARG<=0 THEN BEGIN WRITE('Undefined LOG'); GAVEERR:=TRUE END ELSE ANS:=LOG(ARG); 5: IF ARG<=0 THEN BION EXPRESS(VAR ANS: REAL): BOOLEAN ; VAR OK, CHANGESIGN: BOOLEAN; RSLT1, RSLT2: REAL; SAVEOP: TOKENKIND; FUNCTION TERMEGIN WRITE('Undefined LN'); GAVEERR:=TRUE END ELSE ANS:=LN(ARG); 6: ANS:=ABS(ARG); 7: IF ARG<0 THEN BEGIN WRITE(VAR ANS: REAL): BOOLEAN ; VAR OK: BOOLEAN; SAVEOP: TOKENKIND; RSLT1, RSLT2: REAL; FUNCTION FACTOR(VAR ANS: REAL): BOOL('Undefined SQRT'); GAVEERR:=TRUE END ELSE ANS:=SQRT(ARG); 10: IF (ROUND(ARG)>33) OR (ROUND(ARG)<0) THEN EAN ; VAR OK: BOOLEAN; RSLT1, RSLT2: REAL; FUNCTION PRIMARY(VAR ANS: REAL): BOOLEAN ; (* REWRITTEN BY RJH 12 JULY 77 *) BEGIN WRITE('Cannot calculate factorial GTR 33'); GAVEERR:=TRUE END ELSE BEGIN TEMP:=1; (* REREWRITTEN BY D ANDER 7/14/77 *) VAR FUCNUM, SAVEINDEX: INTEGER; SAVEID: IDKIND; SAVETOK: TOKENKINDS; FUNCTION P FOR I:=2 TO ROUND(ARG) DO TEMP:=TEMP*I; ANS:=TEMP END END (* OF CASE *) ELSE EVALU8 E  GAVEERR:=TRUE END ELSE BEGIN PRIMARY:=TRUE; ANS:=NAMETABLE[PRESS*) OK:=TRUE; IF TOKENTYPE IN [PLUSV,MINUSV] THEN BEGIN CHANGESIGN:=(TOKENTYPE=MINUSV); SCANNER END SAVEINDEX].VALUE END END ELSE IF TOKENTYPE=FUCIDENV THEN (*FUNCTION*) BEGIN FUCNUM := INDEX; (*I ELSE CHANGESIGN := FALSE; IF TERM(RSLT1) THEN BEGIN IF CHANGESIGN THEN RSLT1:=-RSLT1; WHILE OK AND (TOKENTYPNDEX SET BY GETIDENT*) SCANNER; PRIMARY := EVALU8 (ANS) END ELSE IF TOKENTYPE=LASTXV THEN BEGIN SCE IN [PLUSV, MINUSV]) DO BEGIN SAVEOP:=TOKENTYPE; SCANNER; IF TERM(RSLT2) THEN ANNER; ANS:=ANSWER; PRIMARY:=TRUE END ELSE PRIMARY:=PARENEXPRESSION (ANS) END (* OF PRIMARY *); BEGIN (*FA CASE SAVEOP OF PLUSV: RSLT1:=RSLT1+RSLT2; MINUSV: RSLT1:=RSLT1-RSLT2 END ELSE OK:=FALSE CTOR*) OK:=TRUE; IF PRIMARY(RSLT1) THEN WHILE OK AND (TOKENTYPE=UPARROWV) DO BEGIN SCANNER; IF PRIMARY(RSLT2) TH END END ELSE OK:=FALSE; EXPRESS:=OK; IF OK THEN ANS:=RSLT1 END (* OF EXPRESS *); PROCEDURE INITABLES; BEGIN EN BEGIN IF RSLT1<=0 THEN BEGIN WRITE('Cannot calculate power'); OK:=FALSE; GAVEERR:=TRUE  ALPHA:=['A'..'Z']; NUMERIC:=['0'..'9']; OPERATORS:=['+','=','*','-','/','\','^','(',')','#']; WITH NAMETABLE[1] DO BEEND ELSE RSLT1:=EXP(RSLT2*LN(RSLT1)) END ELSE OK:=FALSE END ELSE OK:=FALSE; IF OK THEN ANS:=RSLT1GIN NAME:='SIN '; ISVAR:=FALSE END; WITH NAMETABLE[2] DO BEGIN NAME:='COS '; ISVAR:=FALSE END; WITH NAMETA; FACTOR:=OK END (* OF FACTOR *); BEGIN (*TERM*) OK:=TRUE; IF FACTOR(RSLT1) THEN BLE[3] DO BEGIN NAME:='TAN '; ISVAR:=FALSE END; WITH NAMETABLE[4] DO BEGIN NAME:='LOG '; ISVAR:=FALSE EN WHILE OK AND (TOKENTYPE IN [STARV, SLASHV, LINEV]) DO BEGIN SAVEOP:=TOKENTYPE; SCANNER; IF FACTOR(RSLT2) THED; WITH NAMETABLE[5] DO BEGIN NAME:='LN '; ISVAR:=FALSE END; WITH NAMETABLE[6] DO BEGIN NAME:='ABS '; NDEX:=TOTALIDS; WITH NAMETABLE[SAVEINDEX] DO BEGIN ISVAR:=TRUE; NAME:=SAVEID END END ELSN CASE SAVEOP OF STARV: RSLT1:=RSLT1*RSLT2; SLASHV: IF RSLT2=0 THEN BEGIN OK:=FALSE; GAVEERR := TRUE;E BEGIN WRITE('Table full. Assignment not done'); GAVEERR:=TRUE  WRITE('Division by zero') END ELSE RSLT1:=RSLT1/RSLT2; LINEV: IF ROUND(RSLT2)=0 THEN BEGIN  END; IF SAVEINDEX<>0 THEN BEGIN NAMETABLE[SAVEINDEX].VALUE:=ANS; PRIMARY:=TRUE END  OK:=FALSE; GAVEERR:=TRUE; WRITE('MOD by zero') END ELSE RSLT1:=ROUND(RSLT1) MOD ROUND(RSLT2) END  END END ELSE IF SAVETOK=UNRECIDV THEN BEGIN WRITE('Unrecognized ID'); (* OF CASE *) ELSE OK:=FALSE END ELSE OK:=FALSE; IF OK THEN ANS:=RSLT1; TERM:=OK END (* OF TERM *); BEGIN (*EXF E:='E '; ISVAR:=TRUE; VALUE:=2.718282 END; WITH NAMETABLE[9] DO ;ȡ ;훾#azȄ 0Ȫ} ꊃ0 ڡ BEGIN NAME:='PI '; ISVAR:=TRUE; VALUE:=3.141593 END; WITH NAMETABLE[10] DO BEGIN NAME:='FAC '; ISVAR:=FRfd.ˡ.áړ dڡ99 ˸ALSE END; TOTALIDS:=10 (* BUILD IN NUMBER OF FUNCTIONS AND VARIABLES *) END (* OF INITABLES *); BEGIN (*CALCULATOR*) ANSWEdڨe#e#   8 רȡ R:=0; INITABLES; REPEAT GAVEERR := FALSE; J := 0; WRITE('->'); READLN(SOURCE); IF LENGTH(SOURCE)=0 THEN LASTX d%še# dd dn @'EXIT(PROGRAM); REPEAT GETCHAR UNTIL CH<>' '; (*GETNONBLANK*) SCANNER; ITSOK := EXPRESS(TEMP) AND (TOKENTYPE=EOFV); 5dd ddd ddddd##^x )&AMLF "$&(*,.024I8:<>@B IF NOT ITSOK THEN BEGIN IF (TOKENTYPE=EOFV) AND NOT GAVEERR THEN WRITE ('Unexpected end of expression') ELSDFHJLNPRTVXZ\^`bdfhjlnprv dؓ ˡ  dáG;P;á ˡadÄddvdéc*Unexpected end of expression cIllegal Symbol : Try Again/צ a7a ɍ -   $ $H (* COUNTERS RESET, ETC. *) PROCEDURE COLLECT(FWA, LWAPLUS1 : LINEPOINTER); VAR P : LINEPOINTER; BEGIN (* COLLECT *)  X.TAIL := NEWLINE;  WHILE FWA <> LWAPLUS1 DO BEGIN P := FWA^.NEXTLINE; FWA^.NEXTLINE := FREELINES; FREELINES := FWA; FWA := P  X.ENDFILE := EOF(FILEX); END END; (* READLINE *) BEGIN (* MOVECURSOR *) IF X.CURSOR <> NIL THEN BEGIN  END END; (* COLLECT *) BEGIN (* MARK *) IF X.HEAD <> NIL THEN BEGIN COLLECT(X.HEAD, X.CURSOR); X.HE IF X.CURSOR = X.TAIL THEN READLINE; X.CURSOR := X.CURSOR^.NEXTLINE; IF X.CURSOR = NIL THEN ENDFILE := TRUE; AD := X.CURSOR; X.HEADLINENO := X.CURSORLINENO; IF X.CURSOR = NIL THEN BEGIN X.TAIL := NIL; X.TAILLINENO := X.CURSX.CURSORLINENO := X.CURSORLINENO + 1 END ELSE IF NOT X.ENDFILE THEN (* BEGINNING OF STREAM *) BEGIN READLIORLINENO END END END; (* MARK *) PROCEDURE MOVECURSOR(VAR X : STREAM; VAR FILEX : TEXT); (* FILEX IS THE INPUT NE; X.CURSOR := X.HEAD; X.CURSORLINENO := X.HEADLINENO END ELSE (* END OF STREAM *) ENDFILE := TRUE; END;ATCH = 6; MAXTRY = 150; (*<<<10/27/77 GLH. LIMIT ON SEARCH AHEAD FOR MATCH*) LINELENGTH = 90; TYPE LINEPOINTER = ^LINFILE ASSOCIATED WITH STREAM X. THE *) E; LINE = RECORD (*<<<10/26/77 GLH*) NEXTLINE : LINEPOINTER; IMAGE : STRING[LINELENGTH] END; STREAM = REC (* CURSOR FOR X IS MOVED FORWARD ONE LINE, READING FROM X *) (* IF NECESSARY, AND INCREMENTING THE LINE COUNT. ENDFILE *)ORD CURSOR, HEAD, TAIL : LINEPOINTER; CURSORLINENO, HEADLINENO, TAILLINENO : INTEGER; ENDFILE : BOOLEAN END; V (* IS SET IF EOF ENCOUNTERED ON EITHER STREAM. *) PROCEDURE READLINE; VAR I : INTEGER; CH : CHAR; NEWAR TITLEA, TITLEB : STRING; (*<<<10/27/77 GLH*) FILEA, FILEB : TEXT; A, B : STREAM; MATCH : BOOLEAN; ENDFILE : BOOLELINE : LINEPOINTER; C, C2 : 0..LINELENGTH; BEGIN (* READLINE *) IF NOT X.ENDFILE THEN BEGIN C := 0; AN; TEMPLINE : STRING[LINELENGTH]; (*<<<10/26/77 GLH*) FREELINES : LINEPOINTER; SAME : BOOLEAN; PROCEDURE COMPAR (*<<<10/26/77 GLH. CHANGED WAY CHARS GET INTO TEMPLINE*) READ(FILEX, TEMPLINE); NEWLINE := FREELINES; IF NEWLE; FUNCTION ENDSTREAM(VAR X : STREAM) : BOOLEAN; INE = NIL THEN NEW(NEWLINE) ELSE FREELINES := FREELINES^.NEXTLINE; NEWLINE^.IMAGE := TEMPLINE; (*<<<10/26/77 GLH*) BEGIN (* ENDSTREAM *) ENDSTREAM := (X.CURSOR = NIL) AND X.ENDFILE END; (* ENDSTREAM *) PROCEDURE MARK(VAR X : STREAM NEWLINE^.NEXTLINE := NIL; IF X.TAIL = NIL THEN BEGIN X.HEAD := NEWLINE; X.TAILLINENO := 1; X.HEADL); (* CAUSES BEGINNING OF STREAM TO BE POSITIONED BEFORE *) (* CURRENT STREAM CURSOR. BUFFERS GET RECLAIMED, LINE *) INENO := 1 END ELSE BEGIN X.TAIL^.NEXTLINE := NEWLINE; X.TAILLINENO := X.TAILLINENO + 1 END; I ENO := X.HEADLINENO; ENDFILE := ENDSTREAM(A) OR ENDSTREAM(B) END; (* BACKTRACK *) PROCEDURE COMPARELINES(VAR MATCH : BTEGER; BEGIN (* CHECKFULLMATCH *) SAVEXCUR := X.CURSOR; SAVEYCUR := Y.CURSOR; SAVEXLINE := X.CURSORLINENO; SAVEYOOLEAN); (* COMPARE THE CURRENT LINES OF STREAMS A AND B, RETURNING *) (* MATCH TO SIGNAL THEIR (NON-) EQUIVALENCE. EOF LINE := Y.CURSORLINENO; COMPARELINES(MATCH); ON BOTH STREAMS *) (* IS CONSIDERED A MATCH, BUT EOF ON ONLY ONE STREAM IS A MISMATCH *) BEGIN (* COMPARELINES *) IF (A N := MINLINESFORMATCH - 1; WHILE MATCH AND (N <> 0) DO BEGIN MOVECURSOR(X, FILEX); MOVECURSOR(Y, FILEY); .CURSOR = NIL) OR (B.CURSOR = NIL) THEN MATCH := ENDSTREAM(A) AND ENDSTREAM(B) ELSE MATCH := (A.CURSOR^.IMAGE = B.C COMPARELINES(MATCH); N := N - 1 END; X.CURSOR := SAVEXCUR; X.CURSORLINENO := SAVEXLINE; Y.CURSOR := SAVEYCURURSOR^.IMAGE) END; (* COMPARELINES *) PROCEDURE FINDMISMATCH; BEGIN (* FINDMISMATCH *) (* NOT ENDFILE AND MATCH *); Y.CURSORLINENO := SAVEYLINE; END; (* CHECKFULLMATCH *) BEGIN (* SEARCH *) MOVECURSOR(Y, FILEY); BACKTRACK(X, C REPEAT (* COMPARENEXTLINES *) MOVECURSOR(A, FILEA); MOVECURSOR(B,FILEB); MARK(A); MARK(B); COMPARELINES(MATCH) OUNT); CHECKFULLMATCH; COUNT := COUNT - 1; WHILE (COUNT <> 0) AND NOT MATCH DO BEGIN MOVECURSOR(X, FILEX);  UNTIL ENDFILE OR NOT MATCH; COUNT := COUNT - 1; CHECKFULLMATCH END END; (* SEARCH *) PROCEDURE PRINTMISMATCH; VAR EMPTYA, EMPTY END; (* FINDMISMATCH *) PROCEDURE FINDMATCH; VAR TRYCOUNT : INTEGER; PROCEDURE SEARCH(VAR X : STREAM; (* SB : BOOLEAN; PROCEDURE WRITETEXT(P, Q : LINEPOINTER); BEGIN (* WRITETEXT *) WRITELN; WHILE (P <> NIL) AND (P  (* MOVECURSOR *) PROCEDURE BACKTRACK(VAR X : STREAM; VAR XLINES : INTEGER); (* CAUSES THE CURRENT POSITION OF STREAM TREAM TO SEARCH *) VAR FILEX : TEXT; VAR Y : STREAM; (* STREAM TO LOOKAHEAD *)  THE NEW CURRENT *) (* THE LINE COUNTER IS RETURNED IN XLINES. IT IS THE NUMBER *) (* OF THE CURRENT LINE (BEFORE BACKTRA VAR FILEY : TEXT); (* LOOK AHEAD ONE LINE ON STREAM Y, AND SEARCH FOR THAT LINE *) (* BACKTRACKING ON STREAMCK) RELATIVE TO BEGINNING *)  X. *) VAR COUNT : INTEGER; (* NUMBER OF LINES BACKTRACKED ON X *) PROCEDURE CHECKFULLMATCH; (* FROM THE CURRENT POSITIONS IN X AND Y, WHICH MATCH, *) (* MAKE SURE THAT THE NEXT MINLINESFORMATCH-1 LINES ALSO *) (* MATCH, OR  (* OF STREAM. *) BEGIN (* BACKTRACK *) XLINES := X.CURSORLINENO + 1 - X.HEADLINENO; X.CURSOR := X.HEAD; X.CURSORLINELSE SET MATCH := FALSE. *) VAR N : INTEGER; SAVEXCUR, SAVEYCUR : LINEPOINTER; SAVEXLINE, SAVEYLINE : INJ  END; (* WRITETEXT *) PROCEDURE WRITELINENO(VAR X : STREAM); VAR F, L : INTEGER; BEGIN (* WRITELINENO *T := TRYCOUNT+1; END; IF NOT MATCH THEN BEGIN TRYCOUNT:=0; WHILE (NOT MATCH)) F := X.HEADLINENO; L := X.CURSORLINENO - 1; WRITE('LINE'); IF F = L THEN WRITE(' ', F) ELSE WRITE('S ', F AND (TRYCOUNT<=MAXTRY) DO BEGIN SEARCH(B, FILEB, A, FILEA); TRYCOUNT:=TRYCO, ' TO ', L); IF X.CURSOR = NIL THEN WRITE(' (BEFORE EOF)'); END; (* WRITELINENO *) PROCEDURE PRINTEXTRATEXT(VARUNT+1; END;  X : STREAM; XNAME : STRING; VAR Y : STREAM; YNAME : STRING); BEGIN (* PRINTEXTRATEXT *) W END; PRINTMISMATCH; IF (NOT MATCH) AND (TRYCOUNT>MAXTRY) THEN BEGIN MARK(A); MARK(B) END; RITE(' EXTRA TEXT ON ', XNAME, ', '); WRITELINENO(X); WRITELN; IF Y.HEAD = NIL THEN WRITELN(' BEFORE EOF ON ',  END; (* FINDMATCH *) BEGIN (* COMPARE *) ENDFILE := FALSE; MATCH := TRUE; (* I.E., BOI MATCHES BOI *) REPEAT IF YNAME) ELSE WRITELN(' BETWEEN LINES ', Y.HEADLINENO-1, ' AND ', Y.HEADLINENO, ' OF ', YNAME); WRITMATCH THEN FINDMISMATCH ELSE BEGIN SAME := FALSE; FINDMATCH END UNTIL ENDFILE AND MATCH; MARK(A); MARK(B); (* MARK END OF ETEXT(X.HEAD, X.CURSOR) END; (* PRINTEXTRATEXT *) BEGIN (* PRINTMISMATCH *) WRITELN(' ***************************FILES, THEREBY DISPOSING BUFFERS *) END; (* COMPARE *) PROCEDURE INITSTREAM(VAR X : STREAM; VAR FILEX : TEXT); BEGIN (* IN********'); EMPTYA := (A.HEAD = A.CURSOR); ITSTREAM *) X.CURSOR := NIL; X.HEAD := NIL; X.TAIL := NIL; X.CURSORLINENO := 0; X.HEADLINENO := 0; X.TAILLINENO := 0;  EMPTYB := (B.HEAD = B.CURSOR); IF EMPTYA OR EMPTYB THEN IF EMPTYA THEN PRINTEXTRATEXT(B, TITLEB, A, TITLEA) ELX.ENDFILE := EOF(FILEX); END; (* INITSTREAM *) BEGIN (* SRCCOM *) WRITELN('INPUT FILE NAME:'); READLN(TITLEA); OPENOLD(FILSE PRINTEXTRATEXT(A, TITLEA, B, TITLEB) ELSE BEGIN WRITELN(' MISMATCH:'); WRITELN; WRITE(' ', TITLEA, ', 'EA, TITLEA); WRITELN('SECOND INPUT FILE NAME:'); READLN(TITLEB); OPENOLD(FILEB, TITLEB); RESET(FILEA); RESET(FILEB); INITST); WRITELINENO(A); WRITELN(':'); WRITETEXT(A.HEAD, A.CURSOR); WRITE(' ', TITLEB, ', '); WRITELINENO(B); WRITELN(REAM(A, FILEA); INITSTREAM(B, FILEB); <> Q) DO BEGIN WRITE(' * '); WRITELN (P^.IMAGE); P := P^.NEXTLINE END; IF P = NIL THEN WRITELN(':'); WRITETEXT(B.HEAD, B.CURSOR) END END; (* PRINTMISMATCH *) BEGIN (* FINDMATCH *) TRYCOUNT := 0; ' *** EOF ***'); WRITELN  WHILE (NOT MATCH) AND (TRYCOUNT <= MAXTRY) DO BEGIN SEARCH(A, FILEA, B, FILEB); TRYCOUNK  FREELINES := NIL; WRITELN('Source Compare [', VERSION, ']' ); WRITELN; IF EOF(FILEA) THEN BEGIN WRITELN(TITLEA, ' IS EMPTY.'); IF EOF(FILEB) THEN WRITELN(TITLEB, ' IS EMPTY.') END ELSE IF EOF(FILEB) THEN WRITELN(TITLEB, ' IS EMPTY.') ELSE  BEGIN SAME := TRUE; COMPARE; IF SAME THEN WRITELN('No differences encountered.'); END END. (* SRCCOM *) L