TDWŌ„1*€DOC  ‚&(köASMB_P2C__ź2ß‚'H€CX0T______ź>ķ‚'Q€CXT_______ź>ż‚'T€CX2T______ź>‚'W€CX2C______ź2 ‚(€MODULE_3C_ź2‚(€MODULE_2C_ź2-‚(€DBG.PROGC_ź2=‚(€&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻ -*’’{꒜і’’{ę’żHś’żE*’’|’ü¹Č0€’’’šę’’’żGŖ’’}f’üĄ@’’}f_’÷’ś‡Ģ’żņ’’}F’żś’’‡²’’’‡²’’|`’ś‡Ģ’żDB’’}l’żCä_BASEI–’’}6 STRDELETEE’’ż#L’żü’ż’ż’ż’ż’ż ’ż’ż^’ż ’ż’ż’ż"’ż(’ż’üÜ ’’ˆ’’Žŗ’ż’’’’’żś€ęķ_‚(€’’  !FOR loop:=1 TO top DO alpha[loop]:=CHR(loop+64); !WRITELN('Type uppercase character for a key'); !READ(key); WRITELN; !WHILE NOT done DO !BEGIN ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2 gMODULE SIMPLE; export type rec = record i1: integer; i2: integer; end; const zero = rec [i1:0,i2:0]; var lastresult: rec; procedure initialize; procedure add (a,b: rec; var out: rec); END; ˆ\ˆˆ&ˆvˆˆˆ,ˆ0ˆNˆ$ˆˆ4ˆ6ˆ†ˆhˆˆˆˆ@‰€ˆ0ˆTˆˆdˆ ˆØˆˆˆˆ‚ˆ-ASMB_M1C__ź2‚' €ASMB_M1T__ź>‚'!€ASMB_M2T__ź>‚'#€MODULE_3T_ź>3‚'%€MODULE_2T_ź>;‚'&€PROGRAM_1Tź>C‚'(€CXMODULET_ź>K ‚')€CXC_______ź2W‚'1€# {This is the actual binery search} !mid:= ROUND((top + btm)/2); #IF key = alpha[mid] THEN done:= TRUE #ELSE IF key < alpha[mid] THEN top:=mid #ELSE btm:=mid; #IF top=btm THEN BEGIN 5done:=TRUE; mid:= -1; 3END; !END; !IF mid > 0 THEN "WRITELN ¼ŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvˆČ& Č2 SMłˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй CXMODULEC_ź2g‚'2€DBG.PROGT_ź>{‚'4€CX0C______ź2ƒ ‚'6€PROGRAM_1Cź2£‚'8€ASMB_P1C__ź2±‚'9€ASMB_M2C__ź2æ‚'A€ASMB_P1T__ź>Ļ‚'B€ASMB_P2T__ź>ׂ'E€OPROGRAM¤ŠŻŠSIMPLEŠiŠq¤ŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ ¤Š„IPzč’’{&’ų€h’ų€h’ųWĘ’’{’ų†’ų€h’ų€h’’€–’’{>’ųp’ż2J¬ ’žrĄSIMPLE®ž*R2J’’€–’’€–’ż’’{¬’śĮö’’ż2J’’€–’’{¼’śČĪ’’{Ņ’śĶt’śĶtšżöNALŗ’īH­’šN^NuNA’ü . Š®Nv-@’üJ®’ül ;|d’žNJ-n’üN^ _PONŠNA’š n-X’š-P’ō n -X’ų-P’ü/-’ö/HzZ+O’öY/.’š/.’ųNŗ’˜+_’ųY/.’ō/.’üNŗ’†+_’ü -’ųŃ­’šNv -’üŃ­’ōNv nL­’ųH+o’öŽü Nś$,_+_’öpd°m’žfLŗ’H­’ų`NJN^ _Žü NŠNuˆ ē ‡[=’]€ $ec);   implement "var $sum: rec;  "procedure initialize; " begin sum := zero end; " "function partadd (x,y: integer): integer; "var temp: integer; "begin " temp := x+y; $if temp < 0 then escape(100); $partadd := temp; "end; (*partad: SIMPLE__BASER SIMPLE_ZERORSIMPLE_INITIALIZER SIMPLE_ADDŻRR SIMPLE_SIMPLERüSIMPLE ’ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ•ˆČ& Č2 SYSGLOBALSˆˆˆˆ Č Č Č ˆNv-@’üJ®’ül ;|d’žNJ-n’üN^ _PONŠNA’š n-X’š-P’ō n -X’ų-P’ü/-’ö/HzZ+O’öY/.’š/.’ųNŗ’˜+_’ųY/.’ō/.’üNŗ’†+_’ü -’ųŃ­’šNv -’üŃ­’ōNv nL­’ųH+o’öŽü Nś$,_+_’öpd°m’žfLŗ’H­’ų`NJN^ _Žü NŠNuˆ7 ē[= € d*) " "procedure add (a,b: rec; var out: rec); "begin " try $ lastresult.i1 := partadd(a.i1,b.i1); $ lastresult.i2 := partadd(a.i2,b.i2); &sum.i1 := sum.i1+lastresult.i1; &sum.i2 := sum.i2+lastresult.i2; &out := lastresult; $recover " ifjˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPPMłˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй €²ka escapecode = 100 (then lastresult := zero (else escape(escapecode); "end; (*add*) "  end. O"ˆČ& Č2 Č ˆˆˆˆˆˆˆ Č Č Č ˆNv-@’üJ®’ül ;|d’žNJ-n’üN^ _PONŠNA’š n-X’š-P’ō n -X’ų-P’ü/-’ö/HzZ+O’öY/.’š/.’ųNŗ’˜+_’ųY/.’ō/.’üNŗ’†+_’ü -’ųŃ­’šNv -’üŃ­’ōNv nL­’ųH+o’öŽü Nś$,_+_’öpd°m’žfLŗ’H­’ų`NJN^ _Žü NŠNuˆø%80^¢k¢«= 1 $sysprog$ (*to enable try-recover*)   module simple;  export "type $rec = record -i1: integer; -i2: integer; *end; "const $zero = rec [i1:0,i2:0]; "var $lastresult: rec; " "procedure initialize; "procedure add (a,b: rec; var out: r’%80^¢;¢;=Młˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉйMłˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉйĘWż(mname simple2   L src module simple2; (src export (src type (src rec = record (src  i1 : integer; (src t i2 : integer; (src end; (src const (src zero = rec[i1:0,i2:0]; (src var (src lastresult : å(dc.w -4 0  result equ 16  x equ 12  y & equ 8 (relative to a6)  ret_addr equ 4  dyn_link equ 0  temp Qequ -4  (move.l x(a6),d0 (temp:=x+y) (add.l y(a6),d0 (trapv (overflow ¤(movea.l b_addr(a6),a0 (move.l (a0)+,b_i1_copy(a6) (move.l (a0),b_i2_copy(a6) ( (move.l recover_rec(a5),-(sp) (TRY) (move.l a6,-(sp) (pea recover_addr (move.l sp,recover_rec(a5) ( (subq.l #4,sp (calling partadd) (move.l a_i1_copy(a6),-(spķ!(movem.l simple2_zero,a0-a1  * Ć(then lastresult:=0) (movem.l a0-a1,lastresult(a5) (bra past_recover  sys_error trap #10 (else escape)   past_recover unlk a6 (movea.l (sp)+,a0 (adda.l #12,sp (jmp (a0€‚żIrec; (src procedure initialize; (src procedure add(a,b : rec; (src « var out : rec); (src end; ( (com simple2,-16 ( (def simple2_add (def simple2_initialize (def simple2_zero,simple2_simple2 ( (refa sysglobals 0  lastresult KķĆ check) (move.l d0,temp(a6) ( (tst.l temp(a6) (if temp<0) (bge past_escape (move #100,escapecode(a5) (trap #10 (then escape 100) (  past_escape move.l temp(a6),result(a6)  * ! (partadd:=temp) ( (movea.l ret Æ) (move.l b_i1_copy(a6),-(sp) (jsr simple2_partadd (move.l (sp)+,lastresult_i1(a5) ( (subq.l #4,sp (calling partadd) (move.l a_i2_copy(a6),-(sp) (move.l b_i2_copy(a6),-(sp) (jsr simple2_partadd (move.l (sp)+,lastresult_i2(a5) ( (move.l lastr€ąõT equ simple2-8  lastresult_i1 equ simple2-8  lastresult_i2 equ simple2-4  sum + equ simple2-16 (relative to a5)  sum_i1 equ simple2-16  sum_i2 Jequ simple2-12  escapecode equ sysglobals-2  recover_rec equ sy ĀłŽ_addr(a6),a0 (unlk a6 (adda.l #12,sp (jmp (a0)   simple2_add trap #1 (stack check) (dc.w -16 (for param copies) /  a_addr equ 16  b_addr equ 12  out_addr 6equ 8  ret_addr2 equ 4  dyn_link2 equ 0  ƒesult_i1(a5),d0 (sum:= (add.l d0,sum_i1(a5) sum+lastresult) (trapv (move.l lastresult_i2(a5),d0 (add.l d0,sum_i2(a5) (trapv ( (movea.l out_addr(a6),a0 (movem.l lastresult(a5),a1-a2 (movem.l a1-a2,(a0) (out:=lastresult) ) (move€Śsglobals-10 0 (rorg 0   simple2_zero dc.l 0,0   simple2_initialize trap #1 (stack check)  dc.w 0 (no local space) 0 (movem.l simple2_zero,a0-a1 (movem.l a0-a1,sum(a5) ( (unlk a6 (rts 0  simple2_partadd trap #1  ū~ (relative to a6)  b_i2_copy equ -4  b_i1_copy equ -8  a_i2_copy equ -12  a_i1_copy equ -16 ! t (movea.l a_addr(a6),a0 (making local (move.l (a0)+,a_i1_copy(a6) copies) (move.l (a0),a_i2_copy(a6) a.l 8(sp),recover_rec(a5) (adda.l #12,sp (end of TRY) (jmp past_recover (  recover_addr movea.l (sp)+,a6 (RECOVER) (move.l (sp)+,recover_rec(a5) (moveq #100,d0 (if escapecode=100) (cmp.w escapecode(a5),d0 (bne sys_error 7 ē[=O€€ € €€€ €€ %80^£ £ =Éæ    MODULE FIRSTLINE;   EXPORT PROCEDURE ONELINE;   IMPLEMENT   PROCEDURE ONELINE;   Begin  "Write('This line came from Module_3'); "Writeln; "  End; "  End.      %80^£ £ =Ŗ   $SEARCH 'MODULE_3'$   MODULE TWOLINES;   IMPORT FIRSTLINE;   EXPORT PROCEDURE BOTHLINES;   IMPLEMENT   PROCEDURE BOTHLINES;   Begin   Writeln('I came form Module_2 and brought'); "ONELINE; "  End; "  End.   [I?) 0  simple2_simple2 rts (initialization body)  (end `€7 ē[=€ €š€€Ō!');   End.     s €€€ € €7 ē[=€€ €€ %80^£ £ =™µŒ   $SEARCH 'MODULE_2','MODULE_3'$   PROGRAM PROGRAM_1(OUTPUT);   IMPORT TWOLINES;   Begin  !Writeln; !Writeln; !Writeln('**'); !Bothlines; !Writeln('** B%80^£:£J=ķ module complexmath;  export "type $complex = record 1re: real; 1im: real; .end; "const $zero = complex [re:0.0,im:0.0]; " "function equal (a,b: complex): boolean; "function add (a,b: complex): complex; "function mul (a,b: complex): compley t¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ’’{r’ų†’ų€h’ų€h’’€–’’{¢’ųp’ż2J® ’’čXÄ&CXĘRčŠR’’€–’’€–’ż’’|’śĮö’’ż2J’’€–’’| ’śČĪ’’|6’śĶt’śĶtÜŠüžČHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/Q -ž¼ €m €oNGé€NvAķŠüžĄHpN¹+_ž“+_žøHmž“?<’’?<’’N¹J­’źgNCN¹J­’źgNC ­ž¼mžŹN^Nu REAL IMAGINARY MAGNITUDE @ !ūTREP@@Bˆ ˆ\ˆ0‰ˆ6ˆˆ@ˆ~ˆ8ˆ$¹x; "function dvd (a,b: complex): complex; "function conj (a: complex): complex; "function mag (a: complex): real; "function scmul (scale:real; a:complex): complex; "  implement  "function equal (a,b: complex): boolean; $begin equal :=UNl.re := scale*a.re; &scmul.im := scale*a.im $end; $  end. (*complexmath*) Y&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻ  Š ’’|J’śŃ–’’|J’żL–’żD“’’}j’üĒŌ’÷y~’÷y~’’|z’’‡²’ y~Ŗ’’|’’’|š’÷y\©’’|‘’’‡²’’’’‡²’ ‡²’’‡²’’’’|ø’öDt©’’ˆH’’‡²’’‡²’’}R’śD°’śD°’’’żśA$search '#3:CXMODULE'$ $ ö†ö’ö#3:CXMODULE.CODEüź1’ö‡>’’}0’ö’śI–’śI–’żCžCXSTINGDę’ųV®’ųdnŠ (a.re=b.re) and (a.im=b.im) end; " "function add (a,b: complex): complex; $begin add.re := a.re+b.re; add.im := a.im+b.im end; " "function mul (a,b: complex): complex; $begin $ mul.re := (a.re*b.re-a.im*b.im); &mul.im := (a.re*b.im+a.im*b.re);€ ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2 NVN¹LŗĄH­žĄ/:Ź/:Ā/:ŗ/:²N¹LŸH­žČL¹H­’ąL¹H­’šB­ž¼R­ž¼/-žÄ/-žĄN¹LŸH­’ą/-žÄ/-žĄN¹LŸH­’ų -ž¼ €m €oNGé€NvHmž¬Hm’ąHm’š+@žØN¹ -žØAķŠüžĄL­ž¬H°/-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z1 $end; " "function dvd (a,b: complex): complex; "var denom: real; "begin " denom := sqr(b.re)+sqr(b.im); $if denom = 0.0 then halt(-5); (*divide by zero*) $dvd.re := (b.re*a.re + b.re*a.re) / denom; $dvd.im := (b.re*a.im - b.im*a.re) / denom; € PŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvŠ ˆŠCƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ¹"end; " "function conj (a: complex): complex; $begin conj.re := a.re; conj.im := -a.im end;  "function mag (a:complex): real; $begin mag := sqrt(sqr(a.re)+sqr(a.im)) end;  "function scmul (scale:real; a:complex): complex; " begin &scmuÓCXPP¤ŠŻŠCXPŠiŠqĤŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ7 ē[=ā”CX__BASEDRCX_CXRCX8’ˆˆxˆˆ ˆˆˆ ˆxˆRˆˆFÉĪŻČ ŻČœŻČŻČ݈@ˆČ ŻČ݈&Čš݈ČŻČ ݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆłŠ ˆŠCOMPLEXMATH_COMPLEXMATHASM_RDIVCOMPLEXMATH_ZEROASM_SINASM_COSCOMPLEXMATH_ADDASM_RADD SYSGLOBALS FS_FWRITEPAOC FS_FWRITELN FS_FWRITECHARMFS_FWRITEREALCOMPLEXMATH_MAGmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2 +MODULE COMPLEXMATH; export type complex = record re: real; im: real; end; const zero = complex [re:0.0,im:0.0]; function equal (a,b: complex): boolean; function add (a,b: complex): complex; function mul (a,b: complex): complex; function dvd (a,b: cojˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPPƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ tŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvŠD Š AēłĀmplex): complex; function conj (a: complex): complex; function mag (a: complex): real; function scmul (scale:real; a:complex): complex; END; ˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй“Š ˆŠ!ˆ Š-ˆŠ-ˆˆˆˆˆŠAˆ ˆˆŠIˆ ˆˆˆˆˆŠQˆˆˆ ˆ ˆˆˆŠaˆ ˆČmŠyČmŠyČmŠyČmЉČmˆˆČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ µˆˆˆŠ „ČmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’ZPROGRAM¤ŠŻŠ  COMPLEXMATHŠqX¤ŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ ł;¤Š„IPzč’’{&’ų€h’ų€h’ųWĘ’’{’ų†’ų€h’ų€h’’€–#’’{>’ųp’ż2J°’"ŒX– COMPLEXMATH"tR’’€–’’€–’ż’’{¬’śĮö’ ’ż2J’’€– ’’{¼’śČĪ’’{Ņ’śĶt’śĶt³õ īNA’ą n LŠHī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹ĄrC¼AN^ _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠķˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆLƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻ ht"’’{꒜і’’{ę’żL’’żE*’’|’ü¹Č0€ ģ’’’żJ~’’}f’üĄ@’’}fGō’ś‡Ģ’żņ’’}F’żś}N’öLŠ’’|N’ųdn’ś‡Ģ’żDB’’}l’żCä_BASEI–’’}6 STRDELETEE’’ż#L’żü’ż’ż’ż’ż’ż ’ż’ż^’ż ’ż’ż’ż"’ż(’ż’üÜ ’’ˆ’’Žŗ’ż’’’’’żś7 ē[=k‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹¢ż|ˆ Čj݈&ˆ0ˆ&ˆ0ˆ\ˆ.ˆ,ˆˆˆˆˆˆˆˆˆˆˆˆ(ˆˆ ˆˆČ݈ˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆxˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆ‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹ €±N¹LŸH®’Ų/:ź/:ā/.’Ü/.’ŲN¹Jg ;|’ū’žNJ/.’Ü/.’Ų/.’ä/.’ą/.’ō/.’šN¹/.’ä/.’ą/.’ō/.’šN¹N¹N¹ nLŸH n/.’Ü/.’Ų/.’ä/.’ą/.’ü/.’ų-H’ŌN¹ n’Ō/.’ģ/.’č/.’ō/.’š-H’ŠN¹ n’Š-H’ĢN¹ n’Ģ-H’ČN¹ n’ČLŸHØN^ _Žü NŠCCOMPLEXMATH__BASERCOMPLEXMATH_ZEROxRCOMPLEXMATH_EQUALRCOMPLEXMATH_ADDR|COMPLEXMATH_MULRöCOMPLEXMATH_DVDRøCOMPLEXMATH_CONJRCOMPLEXMATH_MAGRNCOMPLEXMATH_SCMULRŖCOMPLEXMATH_COMPLEXMATHR COMPLEXMATH’ AŠD Š ASM_EQASM_RADDASM_RMULASM_RSUB SYSGLOBALSASM_RDIVASM_SQRTŠAŠ’ŠŠŠMŠFŠ* _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠ €½NA’š nLŠHī’š n L®’šH n /.’ü/.’ųJWgWLŸHØN^ _PONŠNA’š nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹N¹N¹LŸH® N^.ŸNuNA’ä n -X’č-P’ģ nLŠHī’š/.’ō/.’š/.’ģ/.’čN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-Hjˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPP7 ē[= ‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹€Š’äN¹ n’äLŸHØN^ _Žü NŠNuˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆˆˆÉRŻČŻČŻČ݈ ˆ(Č݈ ˆ Č8Ż/ŠD Š ŠTŠ*ŠPŠŠ)Š*ŠŠŠPŠŠŠ Č5ŠŠŠŠAŠ2ŠŠ)ŠAŠ’ŠŠŠMŠFŠ* _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠ €!:0^¢j£ŗ=} $DEBUG ON$ $sysprog$   Program XYZ (Output); # #var x : integer; 'y : integer; 'z : integer; 'ch1 : char; 'ch2 : char;  #Procedure Main;  #var # &x : integer; &y : integer; &z : integer; " &Procedure Proc_B; & )begin ,writeœwln ('Proc_B',' x= ',x:1, 5' y= ',y:1,' z= ',z:1) )end; " &Procedure Proc_A; & )var ) ,x : integer; ,y : integer; ,z : integer; ) ,procedure Proc_A1; , /begin 2If x < 8 then 3begin 4writeln ('Proc_A',' x= ',x:1, :' y= ',y:1,' z= ',z:1); 4&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻt"’’z¾’śŃ–’’z¾’żL–’żE.’’zę’ü¹Č0€ ģ’’’żJ‚’’|>’üĄ@’’|>’’’ę’’{’ųÄ’’ųV®’’‡²’’|H’÷u“’’ˆHR’CX__BASEH’ö†ö’’’’‡²’’{f’÷y~’÷y~%~’’’’‡²’ y~ƒ’’{Ŗ’’{„’öGōy’’{ ’’‡²’’‡²’’| ’öLŠ ’’{ ’’‡²  ‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹&x:= x + 1; 4Proc_A1; 3end; 2If ch1='a' then 3begin 4writeln ('Proc_A',' x= ',x:1, :' y= ',y:1,' z= ',z:1); / ch1:= 'x'; 3end; /end; / )begin ,x:= 1; y:= 2; z:= 3; ,Proc_A1; ,x:= 4; y:= 5; z:= 6; ,Proc_B; )end; ( #begin &x:= 0; y:= 0;ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2 +MODULE COMPLEXMATH; export type complex = record re: real; im: real; end; const zero = complex [re:0.0,im:0.0]; function equal (a,b: complex): boolean; function add (a,b: complex): complex; function mul (a,b: complex): complex; function dvd (a,b: co ±N¹LŸH®’Ų/:ź/:ā/.’Ü/.’ŲN¹Jg ;|’ū’žNJ/.’Ü/.’Ų/.’ä/.’ą/.’ō/.’šN¹/.’ä/.’ą/.’ō/.’šN¹N¹N¹ nLŸH n/.’Ü/.’Ų/.’ä/.’ą/.’ü/.’ų-H’ŌN¹ n’Ō/.’ģ/.’č/.’ō/.’š-H’ŠN¹ n’Š-H’ĢN¹ n’Ģ-H’ČN¹ n’ČLŸHØN^ _Žü NŠxyo z:= 0; &Proc_B; &Proc_A; #end;   begin #x:= 10; y:= 20; z:= 30; #ch1:= 'a'; ch2:= 'b'; #Main;  end. HPŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvŠ ˆŠC ēłĀmplex): complex; function conj (a: complex): complex; function mag (a: complex): real; function scmul (scale:real; a:complex): complex; END; ˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй½NA’š nLŠHī’š n L®’šH n /.’ü/.’ųJWgWLŸHØN^ _PONŠNA’š nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹N¹N¹LŸH® N^.ŸNuNA’ä n -X’č-P’ģ nLŠHī’š/.’ō/.’š/.’ģ/.’čN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-HčCXPP¤ŠŻŠ  COMPLEXMATHŠqX¤Š CXŠ ŠŠÉĤŠŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ£ł;¤Š„IPyĄ’’yž’ų€h’ų€h’ųWĘ’’yę’ų†’ų€h’ų€h’’€–#’’z’ųp’ż2J°’"ŒX– COMPLEXMATH"tR’’€–’’€–’ż’’z„’śĮö’ ’ż2J’’€– ’’z”’śČĪ’’zŖ’śĶt’śĶt ³õ īNA’ą n LŠHī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹ĄrC¼AN^ _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠŠ’äN¹ n’äLŸHØN^ _Žü NŠNuˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆˆˆÉRŻČŻČŻČ݈ ˆ(Č݈ ˆ Č8Ż7 ē[=  NVN¹LŗĄH­žĄ/:Ź/:Ā/:ŗ/:²N¹LŸH­žČL¹H­’ąL¹H­’šB­ž¼R­ž¼/-žÄ/-žĄN¹LŸH­’ą/-žÄ/-žĄN¹LŸH­’ų -ž¼ €m €oNGé€NvHmž¬Hm’ąHm’š+@žØN¹ -žØAķŠüžĄL­ž¬H°/-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z  CX__BASEARCX_CXRCXX’EROxRCOMPLEXMATH_EQUALRCOMPLEXMATH_ADDR|COMPLEXMATH_MULRöCOMPLEXMATH_DVDRøCOMPLEXMATH_CONJRCOMPLEXMATH_MAGRNCOMPLEXMATH_SCMULRŖCOMPLEXMATH_COMPLEXMATHR COMPLEXMATH’ jˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPP ‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹ ƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ jˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPP /ŠD Š ŠTŠ*ŠPŠŠ)Š*ŠŠŠPŠŠŠ Č5ŠŠŠŠAŠ2ŠŠ)ŠAŠ’ŠŠŠMŠFŠ* _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠ 1¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ’’{r’ų†’ų€h’ų€h’’€–’’{¢’ųp’ż2J® ’’čXÄ&CXĘRčŠR’’€–’’€–’ż’’|’śĮö’’ż2J’’€–’’| ’śČĪ’’|6’śĶt’śĶt ”ŠüžČHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/Q -ž¼ €m €oNGé€NvAķŠüžĄHpN¹+_ž“+_žøHmž“?<’’?<’’N¹J­’źgNCN¹J­’źgNC ­ž¼mžŹN^Nu REAL IMAGINARY MAGNITUDE @ !ūTREP@@LŸHØN^ _Žü NŠ “Š ˆŠ!ˆ Š-ˆŠ-ˆˆˆˆˆŠAˆ ˆˆŠIˆ ˆˆˆˆˆŠQˆˆˆ ˆ ˆˆˆŠaˆ ˆČmŠyČmŠyČmŠyČmЉČmˆˆČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ µˆˆˆŠ „ČmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z ¢ż|ˆ Čj݈&ˆ0ˆ&ˆ0ˆ\ˆ.ˆ,ˆˆˆˆˆˆˆˆˆˆˆˆ(ˆˆ ˆˆČ݈ˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆxˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆ ‹Hī’ą nLŠHī’š/.’ü/.’ų/.’ģ/.’čN¹/.’ō/.’š/.’ä/.’ąN¹N¹ nLŸH n/.’ō/.’š/.’ģ/.’č-H’ÜN¹ n’Ü/.’ü/.’ų/.’ä/.’ą-H’ŲN¹ n’Ų-H’ŌN¹ n’ŌLŸHØN^ _Žü NŠNA’Č n LŠHī’ą nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹ Š ’’|J’śŃ–’’|J’żLŒ’żD“’’}j’üĒŌ’÷y~’÷y~’’|z’’‡²’ y~„’’|’’’|š’÷y\ƒ’’|‘’’‡²’’’’‡²’ ‡²’’‡²’’’’|ø’öDtƒ’’ˆH’’‡²’’‡²’’}R’śD°’śD°’’’żśA gram cx (listing); |ī’ö†ö’ö†ö6ē’’}’öŽ Q-Ģ’üź1’ö‡>’’}0’ö’śI–’śI–’żCžCXSTINGDę’ųV®’ųdn ½NA’š nLŠHī’š n L®’šH n /.’ü/.’ųJWgWLŸHØN^ _PONŠNA’š nLŠHī’š/.’ü/.’ų////N¹/.’ō/.’š////N¹N¹N¹LŸH® N^.ŸNuNA’ä n -X’č-P’ģ nLŠHī’š/.’ō/.’š/.’ģ/.’čN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H CCOMPLEXMATH__BASERCOMPLEXMATH_ZEROxRCOMPLEXMATH_EQUALRCOMPLEXMATH_ADDR|COMPLEXMATH_MULRöCOMPLEXMATH_DVDRøCOMPLEXMATH_CONJRCOMPLEXMATH_MAGRNCOMPLEXMATH_SCMULRŖCOMPLEXMATH_COMPLEXMATHR COMPLEXMATH’ AŠD Š ASM_EQASM_RADDASM_RMULASM_RSUB SYSGLOBALSASM_RDIVASM_SQRTŠAŠ’ŠŠŠMŠFŠ* _PONŠNA’Ü n LŠHī’ą nLŠHī’š/.’ō/.’š/.’ä/.’ąN¹ nLŸH n/.’ü/.’ų/.’ģ/.’č-H’ÜN¹ n’ÜLŸHØN^ _Žü NŠNA’Ō n LŠ 7 ē[= Ž dłĢPROGRAM¤Šˆ ˆ PROGRAM_1ˆDˆTˆPl¤ŠˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP$Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠ ł;¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ ’’{r’ų†’ų€h’ų€h’’€– #’’{¢’ųp’ż’6 “ ’’ČŒl@ PROGRAM_1RČLR’’€–’ż’’|’ū‰ö’’ż’6’’€–’’| ’ūĪ’’|6’ū•t’ū•t šPROGRAM_1__BASERPROGRAM_1_PROGRAM_1R PROGRAM_1’ö…öö}öyöuöqömöiöeöaö]öYöUöQöMöIöEöAö=ö9ö5ö1ö-ö)ö%ö!ööööö ö ööõżõłõõõńõķõéõåõįõŻõŁõÕõŃõĶ ]ŻœŠ ŠTWOLINES_TWOLINESFIRSTLINE_FIRSTLINE SYSGLOBALS FS_FWRITELN FS_FWRITEPAOCTWOLINES_BOTHLINES’¦/Hz*?<,?<’’N¹J­’źgNCN¹J­’źgNCN^Nu**8ˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆ ƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ iŠÉйPˆ0ˆXˆ ˆ>ˆˆˆ ˆ ˆ.ˆˆˆrˆ„ˆˆ6ˆˆˆ ˆVˆˆˆ"ˆHˆ$ˆ ˆTˆfˆˆhˆTˆ ˆLˆ ˆģˆ"ˆ"ˆˆšˆ&ˆˆˆˆˆˆˆˆ€ˆˆ6ˆˆˆˆˆˆˆˆˆˆ^ˆ"ˆdˆHˆ4ˆˆˆ6ˆˆˆ.ˆ ˆ<ˆ<ˆPˆŠˆęˆ,ˆÉŠŻČ ŻČDŻČŻČŻČŗŻČ ŻČ ŻČŻČ݈žˆ<ˆfˆˆ ˆTˆˆˆčˆÖˆˆ˜ˆ$ˆˆˆ‰Bˆ ˆ\ˆ0‰ˆ6 L&’’|J’ū™–’’|J’ž’ž Ü’’}j’żŌ Ę’’’’AM_1.TEXT–’’}6 STRDELETEE’’żš8’żēč’żč’żēģ’żēš’żēō’żēų’żēž’żéJ’żčų’żé’żč’żč’żč’ż’ż¤ ’’ˆ’’Žŗ’ż’’’’’żåęALBERTZ’öˆų’ö‰(>’’’’|ī’ö†ö’ö†ö6—’’}’öŽ Q-,’ż²1’ö‡>’’}0’ö’ū–’ū–’ž Ę PROGRAM_1’ųV®’ųdn īõÉõÅõĮõ½õ¹õµõ±õ­õ©õ„õ”õõ™õ•õ‘õõ‰õ…õõ}õyõuõqõmõiõeõaõ]õYõUõQõMõIõEõAõ=õ9õ5õ1õ-õ)õ%õ!õõõõõ õ õõōżōłōõōńōķōéōåōįōŻōŁōÕōŃōĶ łŠ ˆŠCOMPLEXMATH_COMPLEXMATHASM_RDIVCOMPLEXMATH_ZEROASM_SINASM_COSCOMPLEXMATH_ADDASM_RADD SYSGLOBALS FS_FWRITEPAOC FS_FWRITELN FS_FWRITECHARMFS_FWRITEREALCOMPLEXMATH_MAGmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z {ˆˆ@ˆ~ˆ8ˆ$ˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆČ݈,ˆ ˆ†ˆ(ˆˆˆ" œŻœNVN¹N¹/-’¦N¹J­’źgNC/-’¦N¹J­’źgNC/-’¦/Hz^?<,?<’’N¹J­’źgNCN¹J­’źgNCN¹/-’¦/Hz*?<,?<’’N¹J­’źgNCN¹J­’źgNCN^Nu**8ˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆ ¦ŻœŠ ŠČ1Š=Č1Č1Š=Č1Č1ŠIČ1Š=Č1ŠYČ1ŠIČ1Š=Č1J­’źgNCN¹J­’źgNCN¹/-’¦/Hz*?<,?<’’N¹J­’źgNCN¹J­’źgNCN^Nu**8ˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆ ƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ īˆˆ ˆ ˆˆLˆ ˆXˆ2ˆ"ˆ"ˆ ˆ ˆ ˆˆ&ˆ(ˆ ˆˆˆ8ˆ2ˆ2ˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆˆˆÉRŻČŻČŻŠ ŠT įˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆˆ ˆˆˆ&ˆˆˆˆˆ įˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆˆ ˆˆˆ&ˆˆˆˆˆ 7 ē[=  ¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ ¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ æłŽTESTˆd¤Šˆˆ‚TESTˆˆ ˆˆˆ`¤ŠˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃPŠ™ŠķPŠ‘Š! š¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ ’’{r’ų†’ų€h’ų€h’’€– ’’{¢’ųp’ż7$ ° ’’Š`.TESTųRŠ:R’’€–’’€–’ż’’|’śĮö’’ż7$’’€–’’| ’śČĪ ’’|6’śĶt’śĶt  TEST__BASESR TEST_TESTRTEST’¾­¾©¾„¾”¾¾™¾•¾‘¾¾‰¾…¾¾}¾y¾u¾q¾m¾i¾e¾a¾]¾Y¾U¾Q¾M¾I¾E¾A¾=¾9¾5¾1¾-¾)¾%¾!¾¾¾¾¾ ¾ ¾¾½ż½ł½õ½ń½ķ½é½å½į §ż¢Š Š SIMPLE_SIMPLESIMPLE_INITIALIZE SIMPLE_ADD SYSGLOBALS FS_FWRITEINT FS_FWRITELN//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn PŠ=Š Š”ŠõŠiŠÉйPˆ0ˆXˆ ˆ>ˆˆˆ ˆ ˆ.ˆˆˆrˆ„ˆˆ6ˆˆˆ ˆVˆˆˆ"ˆHˆ$ˆ ˆTˆfˆˆhˆTˆ ˆLˆ ˆģˆ"ˆ"ˆˆšˆ&ˆˆˆˆˆˆˆˆ€ˆˆ6ˆˆˆˆˆˆˆˆˆˆ^ˆ"ˆdˆHˆ4ˆˆˆ6ˆˆˆ.ˆ ˆ<ˆ<ˆPˆŠˆęˆ,ˆÉŠŻČ ŻČDŻČŻČŻČŗŻČ ŻČ ŻČŻČ݈žˆ<ˆfˆˆ ˆTˆˆˆčˆÖˆˆ˜ˆ$ˆˆ :"’’|J’śŃ–’’|J’żHV’żDŹ’’}j’üĒŌC“P1.TEXTśI–’’}6 STRDELETEE’’ż(&’żÖ’żņ’żŚ’żŽ’żā’żę’żģ’ż!8’ż ę’ż ī’żö’żü’ż ’ż’üÜ ’’ˆ’’Žŗ’ż’’’’’żŌALBERTZ’öˆų’ö‰(>’’’’|ī’ö†ö’ö†ö6—’’}’öŽ Q-,’üź1’ö‡>’’}0’ö’śI–’śI–’żC“TESTINGDę’ųV®’ųdn D½Ż½Ł½Õ½Ń½Ķ½É½Å½Į½½½¹½µ½±½­½©½„½”½½™½•½‘½½‰½…½½}½y½u½q½m½i½e½a½]½Y½U½Q½M½I½E½A½=½9½5½1½-½)½%½!½½½½½ ½ ½½¼ż¼ł¼õ¼ń¼ķ¼é¼å¼į ¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ 7ˆ‰Bˆ ˆ\ˆ0‰ˆ6ˆˆ@ˆ~ˆ8ˆ$ˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆ śż¢NVN¹N¹+|’č+|’ģ+|’š+|’ōHm’čHm’šHm’ųN¹/-’¦//-’ų?<’’N¹J­’źgNC//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn ż¢Š Šˆ ˆˆˆˆˆˆŠ-Č9ˆŠEČ9ˆ ŠEČ9ŠUČ9Hm’ųN¹/-’¦//-’ų?<’’N¹J­’źgNC//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn „9(LIB¤ŠSIMPLE2¤Šf įˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆˆ ˆˆˆ&ˆˆˆˆˆ SČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆLˆ ˆXˆ2ˆ"ˆ"ˆ ˆ ˆ ˆˆ&ˆ(ˆ ˆˆˆ8ˆ2ˆ2ˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆŠ Š S 7 ē[= ø €  Nu  Nu € ¢a¤Š„IA*N¬dSIMPLE2ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆśż¢NVN¹N¹+|’č+|’ģ+|’š+|’ōHm’čHm’šHm’ųN¹/-’¦//-’ų?<’’N¹J­’źgNC//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn ż¢Š Šˆ ˆˆˆˆˆˆŠ-Č9ˆŠEČ9ˆ ŠEČ9ŠUČ9Hm’ųN¹/-’¦//-’ų?<’’N¹J­’źgNC//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn X%80^£:¤Š=AČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆLˆ ˆXˆ2ˆ"ˆ"ˆ ˆ ˆ ˆˆ&ˆ(ˆ ˆˆˆ8ˆ2ˆ2ˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆŠ ŠS¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ ¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ€š¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ ’’{r’ų†’ų€h’ų€h’’€– ’’{¢’ųp’ż7$ ° ’’Š`.TESTųRŠ:R’’€–’’€–’ż’’|’śĮö’’ż7$’’€–’’| ’śČĪ ’’|6’śĶt’śĶt TEST__BASESR TEST_TESTRTEST’¾­¾©¾„¾”¾¾™¾•¾‘¾¾‰¾…¾¾}¾y¾u¾q¾m¾i¾e¾a¾]¾Y¾U¾Q¾M¾I¾E¾A¾=¾9¾5¾1¾-¾)¾%¾!¾¾¾¾¾ ¾ ¾¾½ż½ł½õ½ń½ķ½é½å½į üż¢Š ŠSIMPLE2_SIMPLE2SIMPLE2_INITIALIZE SIMPLE2_ADD SYSGLOBALS FS_FWRITEINT FS_FWRITELN//-’ü?<’’N¹J­’źgNCN¹J­’źgNCN^Nuˆˆˆˆ*ˆˆˆˆˆˆˆˆˆRˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆn€PŠ=Š Š”ŠõŠiŠÉйPˆ0ˆXˆ ˆ>ˆˆˆ ˆ ˆ.ˆˆˆrˆ„ˆˆ6ˆˆˆ ˆVˆˆˆ"ˆHˆ$ˆ ˆTˆfˆˆhˆTˆ ˆLˆ ˆģˆ"ˆ"ˆˆšˆ&ˆˆˆˆˆˆˆˆ€ˆˆ6ˆˆˆˆˆˆˆˆˆˆ^ˆ"ˆdˆHˆ4ˆˆˆ6ˆˆˆ.ˆ ˆ<ˆ<ˆPˆŠˆęˆ,ˆÉŠŻČ ŻČDŻČŻČŻČŗŻČ ŻČ ŻČŻČ݈žˆ<ˆfˆˆ ˆTˆˆˆčˆÖˆˆ˜ˆ$ˆˆt:"’’|J’śŃ–’’|J’żHX’żDŹ’’}j’üĒŌC“P2.TEXTśI–’’}6 STRDELETEE’’ż(&’żÖ’żņ’żŚ’żŽ’żā’żę’żģ’ż!8’ż ę’ż ī’żö’żü’ż ’ż’üÜ ’’ˆ’’Žŗ’ż’’’’’żŌALBERTZ’öˆų’ö‰(>’’’’|ī’ö†ö’ö†ö6G’’}’öŽ Q,Œ’üź1’ö‡>’’}0’ö’śI–’śI–’żC“TESTINGDę’ųV®’ųdnD½Ż½Ł½Õ½Ń½Ķ½É½Å½Į½½½¹½µ½±½­½©½„½”½½™½•½‘½½‰½…½½}½y½u½q½m½i½e½a½]½Y½U½Q½M½I½E½A½=½9½5½1½-½)½%½!½½½½½ ½ ½½¼ż¼ł¼õ¼ń¼ķ¼é¼å¼į ¢ˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ˆ7 ē[=#€±ńź:= (a.re*b.im+a.im*b.re); $end; " "function dvd (a,b: complex): complex; "var denom: real; "begin " denom := sqr(b.re)+sqr(b.im); $if denom = 0.0 then halt(-5); (*divide by zero*) $dvd.re := (b.re*a.re + b.re*a.re) / denom;  ¶żö(*leave re part zero*) &table[i] := add(a,b); &theta := theta + thetastep; $end;  writeln(listing,' REAL ', 2' IMAGINARY ', 2' MAGNITUDE '); "for i := 1 to nsteps+1 do $writeln(listing,' ', ,table[i].re,' ',table[i].im,' ',  €program cx (listing);   module complexmath;  export "type $complex = record 1re: real; 1im: real; .end; "const $zero = complex [re:0.0,im:0.0]; " "function equal (a,b: complex): boolean; "function add (a,b: complex): complex; "function mul($dvd.im := (b.re*a.im - b.im*a.re) / denom; "end; " "function conj (a: complex): complex; $begin conj.re := a.re; conj.im := -a.im end;  "function mag (a:complex): real; $begin mag := sqrt(sqr(a.re)+sqr(a.im)) end;  "function scmul (scale: !,mag(table[i]) );  end. s 8A1 2 !5 0^£:¤Š=– (a,b: complex): complex; "function dvd (a,b: complex): complex; "function conj (a: complex): complex; "function mag (a: complex): real; "function scmul (scale:real; a:complex): complex; "  implement  "function equal (a,b: complex): breal; a:complex): complex; " begin &scmul.re := scale*a.re; &scmul.im := scale*a.im $end; $  end; (*complexmath*)     import complexmath;   const "pi = 3.141592654; "nsteps = 16;  var "a,b: complex; "table: array [1..nsteps+1] of c7 ē[= €€`oolean; $begin equal := (a.re=b.re) and (a.im=b.im) end; " "function add (a,b: complex): complex; $begin add.re := a.re+b.re; add.im := a.im+b.im end; " "function mul (a,b: complex): complex; $begin $ mul.re := (a.re*b.re-a.im*b.im); &mul.im †omplex; "theta,thetastep: real; "i: integer; "listing : text;   begin  theta := 0.0; "thetastep := pi/(2*nsteps); "a := zero; b := zero; "for i := 1 to nsteps+1 do $begin $ a.re := sin(theta); (*leave im part zero*) &b.im := cos(theta);  €€Ó€€€ €żprogram cx (listing);   $search '#3:CXMODULE'$  import complexmath;   const "pi = 3.141592654; "nsteps = 16;  var "a,b: complex; "table: array [1..nsteps+1] of complex; "theta,thetastep: real; "i: integer; "listing : text;   begin  theX%80^£:¤Š= "program cx (listing);   import complexmath; (* from LIBRARY *)   const "pi = 3.141592654; "nsteps = 16;  var "a,b: complex; "table: array [1..nsteps+1] of complex; "theta,thetastep: real; "i: integer; "listing: text;   begin  theta := ÓCXPP¤ŠŻŠCXPŠiŠqĤŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆĒta := 0.0; "thetastep := pi/(2*nsteps); "a := zero; b := zero; "for i := 1 to nsteps+1 do $begin $ a.re := sin(theta); (*leave im part zero*) &b.im := cos(theta); (*leave re part zero*) &table[i] := add(a,b); &theta := theta + thetastep; $end;€ < 0.0; "thetastep := pi/(2*nsteps); "a := zero; b := zero; "for i := 1 to nsteps+1 do $begin $ a.re := sin(theta); (*leave im part zero*) &b.im := cos(theta); (*leave re part zero*) &table[i] := add(a,b); &theta := theta + thetastep; $end;  &ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻßǽ  writeln(listing,' REAL ', 2' IMAGINARY ', 2' MAGNITUDE '); "for i := 1 to nsteps+1 do $writeln(listing,' ', ,table[i].re,' ',table[i].im,' ', ,mag(table[i]) );  end. !€ īæøwriteln(listing,' REAL ', 2' IMAGINARY ', 2' MAGNITUDE '); "for i := 1 to nsteps+1 do $writeln(listing,' ', ,table[i].re,' ',table[i].im,' ', ,mag(table[i]) );  end. $ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ27 ē[=Z “Š ˆŠ!ˆ Š-ˆŠ-ˆˆˆˆˆŠAˆ ˆˆŠIˆ ˆˆˆˆˆŠQˆˆˆ ˆ ˆˆˆŠaˆ ˆČmŠyČmŠyČmŠyČmЉČmˆˆČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ„ČmŠ•Čmˆ ˆŠ µˆˆˆŠ „ČmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z āPROGRAM¤ŠŻŠ FIRSTLINEiŠq0¤ŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ;Š ’’|J’ū™–’’|J’ž~’ž “’’}j’żŌ’÷y~’÷y~’’|z’’‡²’ y~„’’|’’’|š’÷y\ƒ’’|‘’’‡²’’’’‡²’ ‡²’’‡²’’’’|ø’öDtƒ’’ˆH’’‡²’’‡²’’}R’ū °’ū °’’’żąśA gram cx (listing); |ī’ö†ö’ö†ö6ē’’}’öŽ Q-Ģ’ż²1’ö‡>’’}0’ö’ū–’ū–’ž žCXSTINGDę’ųV®’ųdnķˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆL ƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķ&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻNVN¹LŗĄH­žĄ/:Ź/:Ā/:ŗ/:²N¹LŸH­žČL¹H­’ąL¹H­’šB­ž¼R­ž¼/-žÄ/-žĄN¹LŸH­’ą/-žÄ/-žĄN¹LŸH­’ų -ž¼ €m €oNGé€NvHmž¬Hm’ąHm’š+@žØN¹ -žØAķŠüžĄL­ž¬H°/-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’Z”CX__BASEDRCX_CXRCX8’ˆˆxˆˆ ˆˆˆ ˆxˆRˆˆFÉĪŻČ ŻČœŻČŻČ݈@ˆČ ŻČ݈&Čš݈ČŻČ ݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ łŠ ˆŠCOMPLEXMATH_COMPLEXMATHASM_RDIVCOMPLEXMATH_ZEROASM_SINASM_COSCOMPLEXMATH_ADDASM_RADD SYSGLOBALS FS_FWRITEPAOC FS_FWRITELN FS_FWRITECHARMFS_FWRITEREALCOMPLEXMATH_MAGmЉČmˆ /-žĢ/-žČ/-žÄ/-žĄN¹LŸH­žĄ ­ž¼m’ZŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2PŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvŠ ˆŠCƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķjˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPP ƒ/-’²/Hzž?< ?<’’N¹J­’źgNC/Hz?< ?<’’N¹J­’źgNC/Hz‚?< ?<’’N¹J­’źgNCN¹J­’źgNCB­ž¼R­ž¼/-’²/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķŠüžĄHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/ -ž¼ €m €oNGé€NvAķW¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ’’{r’ų†’ų€h’ų€h’’€–’’{¢’ųp’żśJ® ’’čXÄ&CXĘRčŠR’’€–’’€–’ż’’|’ū‰ö’’żśJ’’€–’’| ’ūĪ’’|6’ū•t’ū•tÜŠüžČHp?<’’?<’’N¹J­’źgNC/<’ ?<’’N¹J­’źgNC/Q -ž¼ €m €oNGé€NvAķŠüžĄHpN¹+_ž“+_žøHmž“?<’’?<’’N¹J­’źgNCN¹J­’źgNC ­ž¼mžŹN^Nu REAL IMAGINARY MAGNITUDE @ !ūTREP@@Bˆ ˆ\ˆ0‰ˆ6ˆˆ@ˆ~ˆ8ˆ$7 ē[=ĮMODULE FIRSTLINE; EXPORT PROCEDURE ONELINE; END; ˆ.ˆ ˆˆ”ˆ ˆBˆ ˆBˆ^ˆ ˆˆ ˆˆˆˆDˆBˆˆˆˆ€ˆ ˆtˆˆ$ˆxˆˆˆJˆˆFˆ ˆRˆ^ˆˆ ˆ:ˆˆˆŒˆ ˆ ˆ ˆ ˆDˆdˆˆˆˆˆˆ&ˆŠˆˆ:ˆ8ˆ*ˆĢˆ,ˆ ˆ8ˆˆ8ˆ ˆ0ˆ0ˆˆ8ˆ’‰؈\ˆˆ&ˆvˆˆˆ,ˆ0ˆNˆ$ˆˆ4ˆ6ˆ†ˆhˆˆˆˆ@‰€ˆ0ˆTˆˆdˆ ˆØˆˆˆˆ‚ˆĖFIRSTLINE__BASERFIRSTLINE_ONELINERFIRSTLINE_FIRSTLINERV FIRSTLINE’ŻČ݈&Čš݈ČŻČ ݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ^Č Š SYSGLOBALS FS_FWRITEPAOC FS_FWRITELN’źgNCN^NuThis line came from Module_3Nuˆˆˆ€ˆ ˆtˆˆ$ˆxˆˆˆJˆˆFˆ ˆRˆ^ˆˆ ˆ:ˆˆˆŒˆ ˆ ˆ ˆ ˆDˆdˆˆˆˆˆˆ&ˆŠˆˆ:ˆ8ˆ*ˆĢˆ,ˆ ˆ8ˆˆ8ˆ ˆ0ˆ0ˆˆ8ˆ’‰؈\ˆˆ&ˆvˆˆˆ,ˆ0ˆNˆ$ˆˆ4ˆ6ˆ†ˆhˆˆˆˆ@‰€ˆ0ˆTˆˆdˆ ˆØˆˆˆˆ‚ˆÄˆˆ‰Bˆ ˆ\ˆ0‰ˆ6ˆˆ@ˆ~ˆ8ˆ$ˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆØŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvČ Š SMłˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉйjˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPP Młˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй‹ł;¤Š„IPzč’’{&’ų€h’ų€h’ųWĘ’’{’ų†’ų€h’ų€h’’€–#’’{>’ųp’żśJ® ’XŒ0X3 FIRSTLINEXR’’€–’’€–’ż’’{¬’ū‰ö’’żśJ’’€–’’{¼’ūĪ ’’{Ņ’ū•t’ū•tnNA/-’¦Hz.?<?<’’N¹J­’źgNC/-’¦N¹J­’źgNCN^NuThis line came from Module_3Nuˆˆˆ€ˆ ˆtˆˆ$ˆxˆˆˆJˆˆFˆ ˆRˆ^ˆˆ ˆ:ˆˆˆŒˆ ˆ ˆ ˆ ˆDˆdˆˆˆˆˆˆ&ˆŠˆˆ:ˆ8ˆ*ˆĢˆ,ˆ ˆ8ˆˆ8ˆ ˆ0ˆ0ˆˆ8ˆ’‰؈\ˆˆ&ˆvˆˆˆ,ˆ0ˆNˆ$ˆˆ4ˆ6ˆ†ˆhˆˆˆˆ@‰€ˆ0ˆTˆˆdˆ ˆØˆˆˆˆ‚ˆ "Č ŠČ Č Š%Č J­’źgNC/-’¦N¹J­’źgNCN^NuThis line came from Module_3Nuˆˆˆ€ˆ ˆtˆˆ$ˆxˆˆˆJˆˆFˆ ˆRˆ^ˆˆ ˆ:ˆˆˆŒˆ ˆ ˆ ˆ ˆDˆdˆˆˆˆˆˆ&ˆŠˆˆ:ˆ8ˆ*ˆĢˆ,ˆ ˆ8ˆˆ8ˆ ˆ0ˆ0ˆˆ8ˆ’‰؈\ˆˆ&ˆvˆˆˆ,ˆ0ˆNˆ$ˆˆ4ˆ6ˆ†ˆhˆˆˆˆ@‰€ˆ0ˆTˆˆdˆ ˆØˆˆˆˆ‚ˆ ōłąPROGRAM¤ŠˆˆTWOLINESˆ ˆˆD¤ŠˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃPŠ™ŠķPŠ‘ŠĀ ’’{ę’ū™–’’{ę’ž ø’ž *’’|’żČ0€× ’’’ž ø’’}f’żˆ@’’}f_’÷’ūOĢ’żāņ’’}F’żąś’’‡²’’’‡²’’|`’ūOĢ’ž B’’}l’ž ä_BASE–’’}6 STRDELETEE’’żėL’żāü’żć’żć’żć’żć’żć ’żć’żä^’żä ’żä’żć’żć"’żć(’ż’ż¤ ’’ˆ’’Žŗ’ż’’’’’żąśMłˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉй Młˆˆˆ.ˆ¢ˆˆˆ ˆˆˆˆvˆˆˆˆbˆxˆDˆTˆPˆ@ˆDˆRˆhˆˆXˆ.ˆˆˆˆ,ˆˆBˆ0ˆbˆ\ˆ ˆˆˆ,ˆ$ˆ*ˆ8ˆˆ8ˆ ˆ ˆˆąˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆˆ ˆČØŻČŻČŻČj݈ˆˆˆˆHˆˆˆDˆˆˆČ݈ˆˆŠ …PPPŠaŠŠŃP.Š™ŠķPŠ‘Š!Š=Š Š”ŠõŠiŠÉйl!Š=Š Š”ŠõŠiŠÉйPˆ0ˆXˆ ˆ>ˆˆˆ ˆ ˆ.ˆˆˆrˆ„ˆˆ6ˆˆˆ ˆVˆˆˆ"ˆHˆ$ˆ ˆTˆfˆˆhˆTˆ ˆLˆ ˆģˆ"ˆ"ˆˆšˆ&ˆˆˆˆˆˆˆˆ€ˆˆ6ˆˆˆˆˆˆˆˆˆˆ^ˆ"ˆdˆHˆ4ˆˆˆ6ˆˆˆ.ˆ ˆ<ˆ<ˆPˆŠˆęˆ,ˆÉŠŻČ ŻČDŻČŻČŻČŗŻČ ŻČ ŻČŻČ݈žˆ<ˆfˆˆ ˆTˆˆˆčˆÖˆˆ˜ˆ$ˆ7 ē[=HõŻõŁõÕõŃõĶõÉõÅõĮõ½õ¹õµõ±õ­õ©õ„õ”õõ™õ•õ‘õõ‰õ…õõ}õyõuõqõmõiõeõaõ]õYõUõQõMõIõEõAõ=õ9õ5õ1õ-õ)õ%õ!õõõõõ õ õõōżōłōõōńōķōéōåōį Tˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$Čł;¤Š„IPzč’’{&’ų€h’ų€h’ųWĘ’’{’ų†’ų€h’ų€h’’€–#’’{>’ųp’ż’"® ’`ŒDXGTWOLINES’`R’’€–’’€–’ż’’{¬’ū‰ö’’ż’"’’€–’’{¼’ūĪ’’{Ņ’ū•t’ū•t)ż¤NA/-’¦/Hz0?< ?<’’N¹J­’źgNCN¹J­’źgNCN¹N^NuI came form Module_2 and broughtNuˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆPˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆ Rż¤Č ŠČ Š%Č Š1N¹J­’źgNCN¹J­’źgNCN¹N^NuI came form Module_2 and broughtNuˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆPˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆ |XYZPP¤ŠŻŠ XYZPŠiŠq@¤ŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆ¹ ’’{ę’ū™–’’{ę’žę’ž >’’|’żČ0€× ’’’žę’’}f’żˆ@’’}fGō’ūOĢ’żēŹ’’}F’żåŅ}N’öLŠ’’|N’ųdn’ūOĢ’ž V’’}l’ž ų_BASE–’’}6 STRDELETEE’’żš$’żēŌ’żēš’żēŲ’żēÜ’żēą’żēä’żēź’żé6’żčä’żčģ’żēō’żēś’żč’ż’ż¤ ’’ˆ’’Žŗ’ż’’’’’żåŅTˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$ Tˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻōż¤MODULE TWOLINES; IMPORT FIRSTLINE; EXPORT PROCEDURE BOTHLINES; END; ˆˆˆˆˆˆ(ˆˆ ˆˆČ݈ˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆPˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆTWOLINES__BASEŃRTWOLINES_BOTHLINESRTWOLINES_TWOLINESR^TWOLINES’ö…öö}öyöuöqömöiöeöaö]öYöUöQöMöIöEöAö=ö9ö5ö1ö-ö)ö%ö!ööööö ö ööõżõłõõõńõķõéõåõį iż¤Č Š SYSGLOBALS FS_FWRITEPAOC FS_FWRITELNFIRSTLINE_ONELINE form Module_2 and broughtNuˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆPˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2ˆČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆLˆ ˆXˆ2ˆ"ˆ"ˆ ˆ ˆ ˆˆ&ˆ(ˆ ˆˆˆ8ˆ2ˆ2ˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ:ˆ8ˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆČ Š STˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆˆˆˆ"ˆˆÖˆˆˆ(ˆˆ*ˆˆ4ˆˆ`ˆˆ:ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆ0ˆ ˆ8ˆˆˆˆČX݈ˆHˆˆˆ$ˆˆˆ ˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆJˆ&ˆˆˆˆˆvˆZˆ:ˆ.ˆˆˆˆˆˆˆ ˆˆ0ˆˆ$ˆˆ"ˆˆˆˆˆˆˆˆˆVˆBˆˆˆˆ ˆˆˆˆˆRˆˆˆˆˆˆˆˆ$7 ē[=÷ĒŚ ’’|J’ū›N’’|J’žž’žl’’}j’ż‘Œ’÷y~’÷y~’’|z’’‡²’ y~Į’’|’’’|š’÷y\Ą’’|‘’’‡²’’’’‡²’ ‡²’’‡²’’’’|ø’öDtĄ’’ˆH’’‡²’’‡²’’}R’ūh’ūh’’’żā²A # gram XYZ (Output); ; ’ö†ö’ö†ö6ē’’}’öŽ Q-Ģ’ż³é’ö‡>’’}0’ö’ūN’ūN’ž VXYZTINGDę’ųV®’ųdnLNCN@0|’x’óN@2N^.ŸNu x= y= z= Proc_A5PROC_A NA’ōN@5-|’üN@5-|’ųN@5-|’ōN@6/Nŗż®N@7-|’üN@7-|’ųN@7-|’ōN@8/.NŗüxN@9N^.ŸNu<MAIN NA’ōN@N@>/Nŗ’\N@?N^NuBXYZNVN@B+| ’üN@B+| jˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPPProc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgÜPROC_B NAN@/-’¦/Hzä?<?<’’N¹J­’źgNC/Hz¼?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hzˆ?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/HzT?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgNCN@N^.ŸNu x= y= z=  ’ųN@B+|’ōN@C|a’óN@C|b’ņN@DNŗ’~N@EN^Nuˆˆ"ˆBˆˆ ˆ&ˆBˆˆˆ&ˆLˆ ˆˆˆ(ˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆdˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0ŻČZ݈ˆˆˆˆˆˆÉRŻČŻČŻČ݈ ˆ(Č݈ ˆ Č8Ż 0Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ČJ ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆ&Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆˆīˆ ˆ ˆ ˆ NCN¹J­’źgNCN@N^.ŸNu x= y= z= 7BINERY_¤ŠŻŠ BINERY_SEARCHq„¤ŠŠ=PPPŠ ŠŠÉŠ½ŠPŠ!Š]ŠIˆvˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆfˆPˆpˆ ˆˆ<ˆ ˆ ˆˆģˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆĄŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvČ Š SProc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg¢ż|ˆ Čj݈&ˆ0ˆ&ˆ0ˆ\ˆ.ˆ,ˆˆˆˆˆˆˆˆˆˆˆˆ(ˆˆ ˆˆČ݈ˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆxˆˆˆˆˆnˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆˆˆˆ:ˆDˆˆ`ˆāˆˆˆˆˆˆ&ˆˆ‰ˆˆ&ˆˆnˆ>ˆ*ˆŠˆˆČ݈ˆˆˆ®ˆˆ2ˆˆ*ˆˆ(ˆˆ Proc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgC¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ’’{r’ų†’ų€h’ų€h’’€–’’{¢’ųp’żü®’’6@(XYZRź6ŚR’’€–’’€–’ż’’|’ū‹®’’żü’’€–’’| ’ū’† ’’|6’ū—,’ū—,ĢNCN@) nRØ’üNvN@*/NŗžśN@,pa°-’ófęN@./-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg ē XYZ__BASERXYZ_XYZRźXYZ’ˆxˆˆ ˆˆˆ ˆxˆRˆˆFÉĪŻČ ŻČœŻČŻČ݈@ˆČ ŻČ݈&Čš݈ČŻČ ݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ IČ Š SYSGLOBALS FS_FWRITEPAOC FS_FWRITEINT FS_FWRITELNČ ČJ ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆ&Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆˆīˆ ˆ ˆ ˆ NCN¹J­’źgNCN@N^.ŸNu x= y= z= 7 ē[=~ Pˆˆˆˆˆˆˆˆˆˆˆ Č ŠČ Š%Č Č ˆŠ1Č Č Š%Č ˆˆˆŠAŠMŠYˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆ ˆˆČ ŠČ ˆ ŠeČ ŠČ ˆ ŠuČ Š%Č Č ŠČ ˆ ŠeČ ŠČ Š%Č -’ŲŠ­’ąNv/N¹N¹N¹+_’Ü -’Ü €m €#80.¢É¤=&ˆ(ˆ ˆjˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆRˆˆžˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ČŻČ ݈ ČŻČŻČ݈ˆˆ.ˆBČ ŻČ ݈Č<ŻČŻČ݈&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜŻHĪ*’’|J’ū™–’’|J’žX’ž “’’}j’żŌ žC.TEXT’ū–’’}6 STRDELETEE’’żėL’żāü’żć’żć’żć’żć’żć ’żć’żä^’żä ’żä’żć’żć"’żć(’ż’ż¤ ’’ˆ’’Žŗ’ż’’’’’żąśALBERTZ’öˆų’ö‰(>’’’’|ī’ö†ö’ö†ö77’’}’öŽ Q.l’ż²1’ö‡>’’}0’ö’ū–’ū–’ž ž BINERY_SEARCH’ųdnķˆœˆ ˆ<ˆœˆ"ˆˆ Č ŻČ ŻČŻČŻČ݈DˆĄˆ,ˆ$ˆ‰jˆˆˆˆˆˆˆˆ"ˆˆˆˆˆˆˆ ˆˆˆˆˆ‚ˆ ˆ6ˆˆ&ˆˆPˆŌˆVˆnˆNˆˆˆ$ˆJˆˆˆˆ(ˆˆŠˆˆˆ&ˆˆˆˆ ˆ@ˆ ˆˆˆˆˆ ˆˆˆ ˆˆˆˆ ˆˆˆˆˆ>ˆˆˆ:ˆ@ˆˆˆˆHˆ$ˆ>ˆ(ˆ"ˆ ˆˆˆˆDˆ ˆˆ6ˆ<ˆ0ˆˆČ݈,ˆ ˆ†ˆ(ˆˆˆ"ˆˆ ˆ ˆˆL oNGAķŠü’ć-’ž²0f |’’`< -’Ü €m €oNGAķŠü’ć-’ž²0d +m’Ü’Ų`+m’Ü’ą -’Ų°­’ąf|’’+|’’’’’Ü`’DJ­’Üo€/-’¦/HzÜ?<?<’’N¹J­’źgNC/-’ž?<’’N¹J­’źgNC/HzÄ?<?<’’N¹J­’źgNC//-’Ü?<N¹J­’źgNCN¹J­’źgNC`ŃČ ŻČ:ŻČŻČ݈ˆˆˆFˆ~ȄŻČ ŻČfŻČ݈ˆ(ˆlˆ ˆ:ˆˆBˆˆ”ˆˆ:ˆ0ˆ&ˆˆ ˆ:ˆÄˆNˆ ˆˆDˆ ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ*ˆˆ<ˆ2ˆPˆ ˆ"ˆ‰0ˆˆ.ˆˆˆTˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŗˆbˆ ˆˆZČ2"NVB-’’B­’ą+|’Ųp+m’ؒа­’ŠnD+@’Ō -’Ō €m €oNGr@Ņ­’ŌNvm ’oNGAķŠü’だ-’ŌR€h¶/-’¦/Hz&?<"?<’’N¹J­’źgNCN¹J­’źgNC/-’¢Hm’žN¹J­’źgNC/-’¦N¹J­’źgNCJ-’’fø/:ō/:ģ -’ŲŠ­’ąNv/N¹N¹N¹+_’Ü -’Ü €m € WBINERY_SEARCH__BASERBINERY_SEARCH_BINERY_SEARCHR BINERY_SEARCH’݈@ˆČ ŻČ݈&Čš݈ČŻČ ݈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆ SYSGLOBALS FS_FWRITEPAOC FS_FWRITELN FS_FREADCHAR ASM_FLOATASM_RDIV ASM_ROUND FS_FWRITECHAR FS_FWRITEINTˆ ŠeČ ŠČ ˆ ŠuČ Š%Č Č ŠČ ˆ ŠeČ ŠČ Š%Č -’ŲŠ­’ąNv/N¹N¹N¹+_’Ü -’Ü €m €=ŻČ ŻČ‚ŻČŻČ݈vˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆ@ˆj‰Ԉ,ˆFˆ ˆˆ^Č2ŻČ ŻČ4ŻČŻČ݈bˆˆˆˆˆˆˆ2ˆBˆFˆJˆˆˆˆ ˆˆˆˆ<ˆˆ(ˆˆ(‰T‰Žˆˆˆ ˆ‚ˆˆˆÉ>ŻČ ݈Č ŻČ݈$ˆ ˆ ˆ ˆ ˆˆˆlˆˆˆ‰Vˆˆˆ(ˆ†ˆˆˆ(ˆ6ˆ(ˆzˆ\ˆ€ˆDˆ6ˆ@ˆ>ˆˆHˆˆJˆzˆˆPˆˆJˆNˆvˆˆˆˆ SoNGAķŠü’ć-’ž²0f |’’`< -’Ü €m €oNGAķŠü’ć-’ž²0d +m’Ü’Ų`+m’Ü’ą -’Ų°­’ąf|’’+|’’’’’Ü`’DJ­’Üo€/-’¦/HzÜ?<?<’’N¹J­’źgNC/-’ž?<’’N¹J­’źgNC/HzÄ?<?<’’N¹J­’źgNC//-’Ü?<N¹J­’źgNCN¹J­’źgNC` jˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆČŻČ ݈ ČŻČ݈ˆˆ Č ŻČŻČ݈Č݈ˆČ݈ˆˆˆČ݈ČŻQRPPPP PP PPPP PP PPPPPP PPPPPoNGAķŠü’ć-’ž²0f |’’`< -’Ü €m €oNGAķŠü’ć-’ž²0d +m’Ü’Ų`+m’Ü’ą -’Ų°­’ąf|’’+|’’’’’Ü`’DJ­’Üo€/-’¦/HzÜ?<?<’’N¹J­’źgNC/-’ž?<’’N¹J­’źgNC/HzÄ?<?<’’N¹J­’źgNC//-’Ü?<N¹J­’źgNCN¹J­’źgNC`¤Š„IP{L’’{Š’ų€h’ų€h’ųWĘ’’{r’ų†’ų€h’ų€h’’€–’’{¢’ųp’żśJø ’’Ą0„P BINERY_SEARCHRĄĪR’ż’’|’ū‰ö’’żśJ’’€–’’| ’ūĪ’’|6’ū•t’ū•tōd/-’¦/Hzd?<?<’’N¹J­’źgNC/-’ž?<’’N¹J­’źgNC/Hz6?<?<’’N¹J­’źgNCN¹J­’źgNCN^NuKey -key - - was not found- is in position Type uppercase character for a key@ŻČ݈žˆ<ˆfˆˆ ˆTˆˆˆčˆÖˆˆ˜ˆ$ˆˆˆ‰Bˆ ˆ\ˆ0‰ˆ6ˆˆ@ˆ~ˆ8ˆ$7 ē[=倆mid, btm : INTEGER; !  BEGIN {Binery_search} !done:=FALSE; btm:=0; top:=26; {initialize} !FOR loop:=1 TO top DO alpha[loop]:=CHR(loop+64); !WRITELN('Type uppercase character for a key'); !READ(key); WRITELN; !WHILE NOT done DO !BEGIN ŸĆ¹ ^^c3  |KCONTINUE|A %Causes program exection to resume with step modes canceled.  ^^c3  |KD|A %From the Main Command Level, the |KD|A key will call the %DEBUGGER.   # B%command have been violated.  ^4  OVERFLOW %A number entered or the result of an arithmetic operation %can not be represented in 32 bits.  ^4  BUSERROR %An address has been accessed which does not exist in the %machines configuration. 7 ē[=€# {This is the actual binery search} !mid:= ROUND((top + btm)/2); #IF key = alpha[mid] THEN done:= TRUE #ELSE IF key < alpha[mid] THEN top:=mid #ELSE btm:=mid; #IF top=btm THEN BEGIN 5done:=TRUE; mid:= -1; 3END; !END; !IF mid > 0 THEN "WRITELN € ¦  ^4  INPUT OVERFLOW %An internal input stack has overflowed.  ^4  ADDRESS ERROR %An odd address has been referenced when an even address is %required.  ^4  TOO MANY CODES %To many escape codes in the ET or ETN list. (  ^4  SI€äg`('Key -',key,'- is in position ',mid:2) !ELSE WRITELN('key - ',key,' - was not found');  END. P € ZE ERROR %An entered value does not fit in the required space e.g. %registers.  ^4  TYPE ERROR %The parameter entered for a command is not the correct %type. e.g an alpha value when an line number or address is %required.  ^^C3  ^4  Eūż§!  PROGRAM Binery_search (INPUT,OUTPUT); ({This program does a binery search (on an array of characters to find a )"key" character input by the user.} )  VAR M done : BOOLEAN; 1key : CHAR; /alpha : ARRAY [1..26] of CHAR; !loop, top,  ^^c4  |KPAUSE|A %Program execution is suspended (NOTE: type-ahead is still %active and immediate execution keys still function e.g. %DUMP ALPHA).  ^^c2  |KCTRL|A-|KPAUSE|A %Will cause immediate entry into Debugger command mode.  €ųXPRESSION TO COMPLEX %The expression requires too much stack space to execute. %e.g. more than three levels of parenthesis.  ^^C2  ^4  DIVIDE BY ZERO %The value to the right of the / symbol is zero.  ^^C3  ^4  UNDEFINED SYMBOL l ¹mmand fills the CRT, a "MORE" prompt %will be issued. A reply of |KENTER|A or |KEXECUTE|A will %continue the display. |KSHIFT|A-|KEXECUTE|A will cancel %the display and the rest of the command string. All other %responces will be ignored. % !  ’preted as another %command.   ^^C 8  ^3  QE %"QE" ends the recording of information in the Queue  ^^S 6 %  ^^C 8  ^3  QS %"QS" starts the recording of information in the Queue  ^^S 6 %   ^^C 17  ^3  Go Commands %  ^3  G %The "…~ ^^C3  ^4  DUPLICATE BREAK %GT or TT has specified a location which already has a break %point defined % % % AOæ symbol, not - "symbol the actual key) ' "address  an integer numeric expression & 32-bit 2followed by a "^" ' "count  integer constant 32-bit "  éß^^c14  ^3  TD %The TD command displays the command string which is defined %by the softkey, "K4".  ^^S 6 %At power up "K4" is defined to display the PC, the %instruction at (PC), the status register, the SP, and all ‡Į~G" command causes execution to resume. If a count %option is used, that number of statements are executed.  ^^S 10 "count  integer constant 32-bit 2 2  ^^C15  ^3  GF Æ%An expression contains a reference to a symbol which the %DEBUGGER does not recognize.  ^^C6  ^4  SIZE FIELD TOO BIG %In a format, the size field is too large for the object %being dumped or the format spec being used. e.g. the size %field f2%or a "D" for a deactivated breakpoint. If no location is %specified the table displays all breakpoints. % %  ^^c21  ^3  B %The "B" command causes the breakpoint table to be %displayed.^^S 10 "line number an integer numeric expression ©Ż"type I = Integer (size = 1..4) € - 2U = Unsigned integer 2H = Hex digit 2A = Alpha character 2B = Binary 2S = String type (size is declared size) " "size integer constant 32-bit Z(except wh '%the A and D registers. This display may be altered by %changing the definition of K4. (  ^^C 13  ^3  Queue Commands   ^3  Q %The "Q" command displays the addresses or line numbers and %addresses of the most recent statements executed since a Żor I and U is 1..4. The default size for string data %is the length of the string D 'abcdefg':I will result in %the above message  ^^C3  ^4  FORMAT REQUIRES MORE DATA %An attempt has been made to display more bytes than the %object contains. f÷) 16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression … 32-bit 2followed by a "^". "  ^^C 60  ^3  Display Commands   ^3  D  %The D command is like a print statement where the  Äere Znoted above) " % %Objects can be immediate, direct, or indirect. Formats %describe the internal representation of the data. %Non-consecutive data can be displayed using the format %options of the address display. % %If the output of a D co Ę%"QS" command.  ^^S 6 ( %"MORE" is given as a prompt when part of the QUEUE has been %displayed and there is more to come, a reply of |KENTER|A or %|KEXECUTE|A will cause the next 1..21 queue entries to be %displayed. Any other reply will be interX  ^^C3  ^4  ADDRESS FORMAT NOT ALLOWED %The * < > and ^ format codes are only allowed if the object %is type address.  ^^C3  ^4  PC/SP HAS ODD ADDRESS %An attempt to return to the user code has been made under %the above conditions. ( ™ķ]%parameters are objects and formats.  ^^S 24 % "expression integer numeric expression 32-bit ' "string any character delimited with - "constant $single or double quotes ' "softkey  "K0"..."K4" (the7 ē[=›§ķ¤%The "GF" command is the same as the "G" command except %execution is slowed and line numbers are flashed in the %lower right corner of the CRT.  ^^S 10 "count  integer constant )32-bit    ^^C30  ^3  GT %The "GT"—÷—%execution is slowed and line numbers are flashed in the %lower right corner of the CRT.  ^^S 12  "line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address  an integer nume7óS%instruction is executed.  ^^S 12 "line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression , 32-bit 2followed by a "^" ' "count  ×ļr%codes are specified, then processing stops for all escape %codes.  ^^S 12 % "escape code signed integer t16-bit 2negative for system escapes 2positive for user escapes % %  ^^C24  ^3  ETN %This command specifies t•÷ƒ command causes execution to continue until the %location is reached.  ^^S 12 % "line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address $ an integer numeric expression Xåric expression & 32-bit 2followed by a "^" ' "count  integer constant 32-bit " "Debugger 3Any legal commands delimited with - "command 8 single or double quotes "    ^3  Trace Commands ķ integer constant 32-bit " "Debugger 3Any legal commands delimited with - "command | single or double quotes " %   ^^C18  ^3  TQ %Causes execution of machine instructions until the %specified addre Åhat processing should stop for all %excape codes except the ones listed. If none are listed, %then processing won't stop for any escape codes. % %If the program was started with the D command, then ETN %-20 and 0 is in effect.  ^^S 12 ( "escapeé* 32-bit 2followed by a "^" ' "count  integer constant 32-bit " "Debugger 3Any legal commands delimited with - "command L single or double quotes " %If a count option is used, execution continue§   For use with Assembly language debugging. These commands ignore  address breakpoints.   ^3  T %The "T" command with count specification causes that number %of machine instructions to be executed. A "TD" command is %executed after each mac Rķ„ss is reached. Then a "TD" is executed. %This command also records the Program Counter values in the %Queue.  ^^S 10  "count  integer constant I32-bit    ^^C 15  ^3  Escape Code Trapping   ^3  ET %This co–ļ code signed integer Ī16-bit 2negative for system escapes 2positive for user escapes % %  ^^C 15  ^3  Walk the Procedure Links %  ^3  WD %Walk the Dynamic link. This command causes execution of an %"SF" command andŲłņs until the %location is reached that number of times. If the command %string option is used, the command is executed when the %location is reached.  "   ^^C27  ^3  GTF %The "GTF" command is the same as the "GT" command except ė'hine instruction.  ^^S 10 % "count  integer constant 32-bit " '  ^^C16  ^3  TT %Same as the "GT" command except that PC values are recorded %in the Queue and a "TD" is executed after the last machine  É÷ķmmand specifies all the escape codes that the user %wants normal processing to stop for. In other words, if an %escape code that is in the list is encountered, execution %stops and control is given to the Debugger. If no escape  Ąńē then the Debugger symbol, "SF", takes the %value of the dynamic link from the current Stack Frame. %Another "SF" command is then executed.  ^^S 6   ^^C12  ^3  WS %Walk the Static link. This command is the same as the  7 ē[= 'or the "OL" command % %When the Open memory commands are used with value options, %the value is assigned to the location.  '  ^^F  ^2  The Sample Program  ^^F  ^2  ERROR MESSAGES / CONDITIONS   ^4  WHAT? %The first characters of a comman ²E ERROR %The parameter entered for a command is not the correct %type. e.g an alpha value when an line number or address is %required.  ^^C3  ^4  EXPRESSION TO COMPLEX %The expression requires too much stack space to execute. %e.g. more than ćS 6 %  ^^C 30  ^3  K Commands   ^3  K %Softkeys can be used as typing aids. Values or command %strings can be assigned to the softkeys "K0"..."K4" by %typing the key symbol (not the actual key) and then the %characters to be assigned to the÷"string any character delimited with - "constant ²single or double quotes % %When no value is specified after the location, the location %and the contents of the location are displayed and followed %by a special prompt. T d are not recgnized.  ^4  SYNTAX ERROR %Somewhere in the current command, the syntax rules for the %command have been violated.  ^4  OVERFLOW %A number entered or the result of an arithmetic operation %can not be represented in 32 bits.…three levels of parenthesis.  ^^C2  ^4  DIVIDE BY ZERO %The value to the right of the / symbol is zero.  ^^C3  ^4  UNDEFINED SYMBOL %An expression contains a reference to a symbol which the %DEBUGGER does not recognize.  ^^C6  ÅķÜ key. After a value has %been assigned to the softkey, it can be displayed by %pressing the key. After it is displayed, pressing |KENTER|A %causes the line to be interpreted.  ^^S 20 "softkey symbol "K0"..."K4"  - " Æhe prompt is for an up-arrow key, a %down-arrow key, or the |KENTER|A key. The up-arrow key causes %the next higher location and value to be displayed and the %special "Open" prompt. % %The down-arrow key is the same except the next lower  ×Ķ  ^4  BUSERROR %An address has been accessed which does not exist in the %machines configuration.  ^4  INPUT OVERFLOW %An internal input stack has overflowed.  ^4  ADDRESS ERROR EÓĢ^4  SIZE FIELD TOO BIG %In a format, the size field is too large for the object %being dumped or the format spec being used. e.g. the size %field for I and U is 1..4. The default size for string data Ń%"WD" command except that the Debugger symbol, "SF" takes %the value of the static link. This brings you to the %Stack Frame of the nesting procedure as opposed to the %calling procedure. Level 1 procedures have no static link.  ^S 6  %  ^^C15  ˜ó "Debugger 3Any legal commands delimited with - "command # single or double quotes " "value  integer numeric expression ]32-bit  "  ^3  Open Memory or I/O Registers !  ^3  OL, OW, OB %These commands are us÷%address is displayed. % %The |KENTER|A key causes termination of the "Open" prompt and a %return to the standard Debugger prompt.  %The amount of the increment/decrement is: (1 byte for the "OB" command (2 bytes for the "OW" command (4 bytes f '%An odd address has been referenced when an even address is %required.  ^4  TOO MANY CODES %To many escape codes in the ET or ETN list. (  ^4  SIZE ERROR %An entered value does not fit in the required space e.g. %registers.  ^4  TYPĮ^3  WR %Walk Reset. Reassign A6 to "SF".  ^^S 6    ^^C 14  ^3  Procedure Exit Command !  ^3  P %Execute statements until the current procedure has exited. %This will only work if the calling procedure was compiled %with $DEBUG ON$.  ^^…õmed to examine consecutive memory %locations and to assign values to memory locations.  ^^S 12 % "address  an integer numeric expression K 32-bit 2followed by a "^" " "expression integer numeric expression 32-bit ' 7 ē[=‰€Pk has overflowed.  ^4  ADDRESS ERROR %An odd address has been referenced when an even address is %required.  ^4  TOO MANY CODES %To many escape codes in the ET or ETN list. (  ^4  SIZE ERROR %An entered value does not fit in the requ «he length of the string D 'abcdefg':I will result in %the above message  ^^C3  ^4  FORMAT REQUIRES MORE DATA %An attempt has been made to display more bytes than the %object contains.  ^^C3  ^4  ADDRESS FORMAT NOT ALLOWED %The * < > aŌPPPŠĶŠ½ŠŻPPŠ)ŠõPŠPŠAŠéŠłŠ±ˆrˆˆˆ,ˆ ˆ ˆdˆ ˆˆ.ˆ\ˆ ˆ ˆ ˆpˆˆ¶ˆĢˆvˆöˆˆ ˆbˆPˆˆˆP‰(ˆRˆ€ˆāˆˆ6ˆZˆPˆpˆ ˆˆ<ˆ ˆ ˆˆźˆˆ2ˆˆZˆˆ$ˆ<ˆ&ˆˆˆˆˆÄˆĪˆˆˆˆˆ@ˆ ˆˆ&ˆÖˆRˆ’ˆ\ˆˆ ˆBˆˆˆVˆˆ4ˆFˆˆ$ˆfˆ$ˆˆˆ ˆ&ˆˆˆˆˆ ˆˆ&ˆˆˆˆˆ ˆˆ%is the length of the string D 'abcdefg':I will result in %the above message  ^^C3  ^4  FORMAT REQUIRES MORE DATA %An attempt has been made to display more bytes than the %object contains.  ^^C3  ^4  ADDRESS FORMAT NOT ALLOWED %The *Źement is: (1 byte for the "OB" command (2 bytes for the "OW" command (4 bytes for the "OL" command % %When the Open memory commands are used with value options, %the value is assigned to the location.  '  ^^F  ^2  The Sample Program  ^^F  ^lired space e.g. %registers.  ^4  TYPE ERROR %The parameter entered for a command is not the correct %type. e.g an alpha value when an line number or address is %required.  ^^C3  ^4  EXPRESSION TO COMPLEX %The expression requires too m Śnd ^ format codes are only allowed if the object %is type address.  ^^C3  ^4  PC/SP HAS ODD ADDRESS %An attempt to return to the user code has been made under %the above conditions. (  ^^C3  ^4  DUPLICATE BREAK %GT or TT has specified a loó < > and ^ format codes are only allowed if the object %is type address.  ^^C3  ^4  PC/SP HAS ODD ADDRESS %An attempt to return to the user code has been made under %the above conditions. (  ^^C3  ^4  DUPLICATE BREAK %GT or TT has specifieLłņ2  ERROR MESSAGES / CONDITIONS   ^4  WHAT? %The first characters of a command are not recgnized.  ^4  SYNTAX ERROR %Somewhere in the current command, the syntax rules for the %command have been violated.  ^4  OVERFLOW  |uch stack space to execute. %e.g. more than three levels of parenthesis.  ^^C2  ^4  DIVIDE BY ZERO %The value to the right of the / symbol is zero.  ^^C3  ^4  UNDEFINED SYMBOL %An expression contains a reference to a symbol which the  IBcation which already has a break %point defined % % % _MOHd a location which already has a break %point defined % % % \t%A number entered or the result of an arithmetic operation %can not be represented in 32 bits.  ^4  BUSERROR %An address has been accessed which does not exist in the %machines configuration.  ^4  INPUT OVERFLOW %An internal input stac Ł%DEBUGGER does not recognize.  ^^C6  ^4  SIZE FIELD TOO BIG %In a format, the size field is too large for the object %being dumped or the format spec being used. e.g. the size %field for I and U is 1..4. The default size for string data %is tžXYZˆˆ¢ˆˆ XYZˆˆ ˆ4ˆˆˆ@¢Čuˆ4Č uˆ ˆ ˆˆČuˆˆˆ ˆˆˆˆ ˆ6ČBuČ.uˆˆˆ ˆˆˆˆ ˆ6ČBuČ.uˆˆˆČuˆČ4uČuˆ ˆ ˆpˆˆČuČuˆˆˆČuČuˆˆˆČuČuP!P7 ē[=ę’ųN@B+|’ōN@C|a’óN@C|b’ņN@DNŗ’~N@EN^NuˆČuˆ,ˆ ˆˆˆ(ˆˆˆ"ˆˆ ˆ ˆˆLˆ ˆXˆ2ˆ"ˆ"ˆ ˆ ˆ ˆˆ&ˆ ˆ(ˆˆˆ8ˆ2ˆ2ˆ ˆ0ˆ¬ˆ$ˆ ˆ6ˆˆ$ˆ6ˆ8ˆ ˆ"ˆˆˆ ˆ&ˆˆˆˆ ˆVˆˆˆˆˆˆˆ ˆRˆˆˆ@ˆˆˆˆ‰²ˆ"ˆhˆ6ˆˆˆˆˆ|ˆˆˆ~ˆˆ`ˆˆ ˆ"ˆzˆˆ“ˆˆˆˆˆˆˆˆˆ ˆˆˆ 0Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ČJ ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆ&Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆˆīˆ ˆ ˆ ˆ NCN¹J­’źgNCN@N^.ŸNu x= y= z= ˆ€ˆ*ˆ"ˆ$ˆ$ˆ.ˆ ˆØˆˆ$ˆ¼ˆ6ˆ2ˆPˆ&ˆ‰0ˆˆ.ˆˆˆ"ˆˆbˆ$ˆbˆ˜ˆ>ˆˆBˆFˆˆˆˆˆˆZˆ8ˆˆZˆˆŗˆˆˆ ˆ,ˆˆ(ˆˆˆˆˆˆˆˆˆˆˆˆZˆˆ ˆˆˆˆ2ˆˆˆˆˆ&ˆPˆ:‰Pˆ ˆ ˆ ˆˆŖˆbˆ ˆˆZČ2uȌuČuČuˆvˆ ˆˆˆˆ ˆLˆˆ(ˆˆ<ˆj‰Ԉ,ˆFˆ ˆˆ^Č2uČ>uČuČuˆbˆˆˆČ Š SProc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg M’ˆˆ2ˆˆˆˆ ˆˆ*ˆˆ ˆBˆˆ ˆ^ˆČ0uČZuˆˆˆˆˆˆˆÉRuČuČuČuˆ ˆ0Čuˆ ˆ(Č4uˆ(Čfuˆ.ˆ,ˆ&ˆDˆ\ˆ*ˆ,ˆˆˆˆˆˆˆˆ ˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆ*ˆˆˆˆˆˆˆˆˆ4ˆˆˆˆˆZˆ(ˆˆˆˆ ˆˆ ˆXˆ@ˆˆˆˆˆˆ$ˆ2ˆDˆˆ`ˆāˆ Proc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgŸ¢¢P Ģ^–’÷č’’‚’’iJ’ż¤äæ’’ią’’‚’’¼’ż¤$’’œ’’jž’’œĄ®æ(6@XYZRź6ŚR£ä’’  ’’ z’’’ūL\ą’ż£ä’’ z’’(’ūR“ ’’B’ūWN’ūWN$ zĢNCN@) nRØ’üNvN@*/NŗžśN@,pa°-’ófęN@./-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg PXYZ_XYZRźXYZ’uȦuČuČuČ@uˆˆ ČBuˆČuˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆ ˆˆˆˆ ˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆIČ Š SYSGLOBALS FS_FWRITEPAOC FS_FWRITEINT FS_FWRITELNČ ČJ ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆ&Č ŠČ ŠČ Š%Č ŠČ Š%Č ŠČ Š%Č Š5Č ˆˆīˆ ˆ ˆ ˆ NCN¹J­’źgNCN@N^.ŸNu x= y= z= /ż0Ś ’’R’ū[b’’R’ż°ö’’ r’żE’’’’’mb’’‘(’÷ ]’÷L’’mp’’’’’ „’÷L’÷€mp’’Č’’·Ø–’÷ \æŚ’÷ ’śŚŌ’÷ ’’Ō’’ŗ’’ŗ’’ b’śŲÄ’śŲÄ`’’š’’ # gram XYZ (Output); ; ’’_Ź%W’’ ’’døQ*¬>’ś’śŻŖ’żÆäXYZTINGDże?’÷¢’’mp’’LNCN@0|’x’óN@2N^.ŸNu x= y= z= Proc_A5PROC_A NA’ōN@5-|’üN@5-|’ųN@5-|’ōN@6/Nŗż®N@7-|’üN@7-|’ųN@7-|’ōN@8/.NŗüxN@9N^.ŸNu<MAIN NA’ōN@N@>/Nŗ’\N@?N^NuBXYZNVN@B+| ’üN@B+| Dˆˆˆˆˆ ˆˆˆˆˆ&ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆČuˆˆ ČuČuČ uČuˆČuČuČuČuQ`PPPP PP PPPP PP PPPPPP PPPPPPPP PP PPPPPP PPPPPPPPPP PPPPPP PPPP PPPPPPPPPPProc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgˆ ˆ ˆ ˆ$ˆ‰&ˆˆ:ˆˆ$ˆˆ6ˆ ˆˆ ˆˆpˆzˆPˆZˆ,ˆLˆ:ˆNˆ.ˆ8ˆ†ˆ6‰ˆ0ˆˆ4ˆˆˆˆ.ˆBČ uˆČ<uČuČuˆ&ˆ,ˆˆ ˆ0ˆˆˆˆTˆˆˆ ˆ&ˆˆ&ˆ*ˆ ˆ>ˆˆˆˆˆ ˆˆˆˆˆˆ@ˆ*ˆˆˆˆˆˆˆ$ˆ^ˆ.ˆˆDˆˆ ȜuČDuČuČuˆˆˆˆFˆ~ȄuČpuČuˆˆ(ˆnˆ"ˆˆBˆˆ”ˆˆ.ˆˆ ˆ:ˆˆˆNˆ ˆˆDˆ ÜPROC_B NAN@/-’¦/Hzä?<?<’’N¹J­’źgNC/Hz¼?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hzˆ?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/HzT?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgNCN@N^.ŸNu x= y= z= 7 ē[=æ€L the  machine is turned on. You can use the Debugger at any time for  quick calculations or number base conversions, then return to  whatever you were doing. The major value of the Debugger,  however, is in program debugging.   With the Debugger,  §an trace program bugs to their origin. Pascal programs  must include the Compiler directive "$DEBUG ON$" if you want to  have the ability to halt the program at particular line numbers.   ^^c5  The following section describes in detail the capabilit ˜ The program is given in source code  and object code form. $ $o DOC:DBG.PROG.TEXT - the source file $ $o DOC:DBG.PROG.CODE - the object file *  A listing of the program is included at the end of this chapter  for reference.  If you plan to7 ē[=€ļyou can: & #o Step through programs statement by statement and examine %various registers and memory locations at each step.  #o Trace the flow of your program from procedure to procedure %and check the values of particular variables local to each  mies and  methods of the Debugger as they apply to Pascal programming.  The method of debugging an assembly language program is more  direct. That information is easily obtainable from the  Reference Section.   The Debugger is an intrinsically dange® participate with this sample session, put the  'DOC:' disc in the disc drive. Execute the code file one time  before attempting the sample session to see the output that is  generated by the program.    ^3  Getting Started with the Debugger   €šõė%one. % #o Have the Debugger gain control and display helpful %information at an error or exception to normal processing.  #o Alter the values of registers and memory locations. % #o Do calculations and conversions.  ^^c7   —ßŲrous subsystem because it  can at any time access everything in the computer. For this  reason, you may wish to remove the Debugger from the system  altogether. This is done by using the Librarian to remove the ćŁTo Debug a program, press the |KD|A key while at the Main Command  Level. This gives control to the Debugger.   ^3  Code File Specification   The first thing the Debugger does when looking for a codefile is ÷E1 2 DJP1  }-}-}- A^£Ł£ = ^1  CHAPTER 8   ^1  The Debugger  $ ^2  Introduction   The Pascal System features a programming aid called the  Debugger. The Debugger is a system program that is always  present in memory. It is loaded with the Pascal system when The Debugger controls the execution of a program. It also  enables you to examine and change memory and register values  while controlling execution. By controlling execution,  examining and changing registers and variables at various times,  you c 2 module REALDEBUGGER from the file SYSTEM.INITLIB on the BOOT  disc.  ^^F  ^2  Sample Session  In this section, methods for debugging Pascal programs will be  described with the aid of the sample program, DBPROG, on the  documentation disc, DOC:.6 čåŽ the Debugger to halt the  program immediately before the third execution of line 39.  Press |KCONTINUE|A and the program executes until line 39 is  reached the third time. This breakpoint is then removed. %  ^^c15 wThe BD command deactivates breakpoints. If a line number is  included, the breakpoint is disabled for that line number,  otherwise, all breakpoints are disabled.  For example: %|CBD 41|A %  disables the breakpoint at line 41. % ^^c31  ^3 V check for a workfile. If there is a workfile, it is loaded into  RAM. If you plan to debug, edit, and recompile a program  several times in a session, specifying the program as the  workfile may be the best alternative because the workfile is the  a˜ give commands to the Debugger before execution. The message:  &|C'NOW AT START'|A   indicates that the Debugger is ready for instructions.   ^^c4  The Debugger prompt is the right pointing arrow to the left of  the cursor. Commands are typed P "BS", separated by a space. If this is all there is to the  command, the program will halt before executing the statement  and prompt you for another Debugger command. For example, set a  permanent breakpoint at line 54. Type:  %|CBS 54|A   ^^ J Another form of the BS command is the "BS" and the location  number followed by a Debugger command string enclosed in  quotes. The command string is one or more legal Debugger  commands (separated by semi-colons). These commands are  immediately ex¬utomatic object of those subsystems. If there is no workfile,  the second check made is for the last file compiled since  power-up. This file would then be loaded. If neither such file  exists, you are prompted for a filename.  %|CDebug what file?ķin on the line with the prompt.  Complete each command by pressing the |KENTER|A key or the  |KEXECUTE|A key.   ^^c7 ^3  Controlling Execution with Breakpoints  Breakpoint commands cause the program to stop and perform  operations at the locati Sc5  Press |KENTER|A. This sets the breakpoint. Press |KCONTINUE|A  and the program begins executing again. It stops at line 54 and  displays the message:  $|CNOW AT LINE 54|A   ^^c12  A count specification may be made by typing an integer numb 0ecuted when the location is encountered. The  program continues after the command string has been executed.  Stopping the program is accomplished by making the last command  in the string a "?". This tells the Debugger to stop and wait  for input from8|A   Use the Filer's WHAT command to see if there is a workfile.  If there is one, use the NEW command to clear it. Then QUIT  the Filer.   ^^c8  Press the D key to call the Debugger. When you are prompted for  a file, type in:  %|CDOC:DBGyons specified. Up to four breakpoints  may be set at one time. Most breakpoints remain in effect until  cleared or disabled. The exception to this is the BS with the  count option.   ^^c10  The BS command sets a breakpoint at a specified locatio 0er  after the location specification. This instructs the Debugger  to stop after it reaches the location the indicated number of  times. This type of breakpoint is temporary. For example,  type: %|CBS 39 3|A  and press |KENTER|A. This instructsŅ the keyboard. For example, type: %|CBS 41 "D PC; ?"|A %  and press |KENTER|A. The Debugger stops at line 41, displays the  Program Counter, and waits for input. The D command is  explained later.  ^^c10 ^3  Deactivating Breakpoints %  ¢żö.PROG|A   The '.CODE' suffix will be appended to the filename  automatically if your specification does not have the  terminating period.  ^^c8 ^3  The Debugger Prompt   After the code file has been loaded, you have the opportunity to ÆÕĖn. In a  Pascal program, breakpoints are set at locations that correspond  to the line numbers on the compiler listing. The location  specification is entered as an integer number which follows the 7 ē[=­>ne of the table is either "A" for  active, or "D" for deactivated. Then the line number of the  breakpoint is displayed. If the third entry in the table is a  "0", it means that the breakpoint is permanent. If it is a  positive number, it means that”e, they  are just deactivated. Use the BA command to reactivate some or  all breakpoints. %  ^^c9  ^3  Clearing Breakpoints $  The BC command clears and removes breakpoints. If a line number  is included, the breakpoint is cleared for that line,  ”GF command is the same as the G command except execution  is slowed and line numbers are flashed in the lower right corner  of the CRT. %  ^^c7  The GT command is the same as the G command except a location is  specified rather than a count. For exa »d is the same as "GT" except execution is slowed  and line numbers are flashed in the lower right corner of the  CRT. %  ^^c5  ^3  Execution Control Keys   ^^c2  |KCONTINUE|A %This command causes the program to resume execution.   ^^c2  |KSTŠ it will stop after it reaches the  line that number of times. If the third entry is a command  string, it means that it is a permanent breakpoint and that  command is executed each time the line is encountered.  ^^c11  ^3  Reactivating Breakpoints;otherwise,  all breakpoints are affected. Type:  %|CBC 41|A   to remove the breakpoint. %  ^^c5 ^3  Executing a Specified Number of Statements  Go commands set a fifth temporary breakpoint. They are one-time,  commands to restart executi Gmple, type: % |CGT 39|A  and that's just what happens; The Debugger lets the program Go  Til line 39 is reached.   ^^c7  Another form of this command tells the Debugger to Go Til the  location is reached a given number of times. For ex“EP|A %Causes one Pascal statement to be executed.   ^^c3  |KCTRL|A-|KSTEP|A %Causes the program to resume execution slowly with line %numbers flashed in the lower right corner.  ^^c7  ^3  A Note Concerning Assembly Language Programs  All theēą   The BA command reactivates disabled breakpoints. If the line  number is included, the breakpoint is reactivated for that line  number, otherwise, all breakpoints are affected. For example,  type: % %|CBA 41|A gÉĀon and go until a specified program  instruction is reached.   ^^c8  The G command tells the Debugger to Go. If a number is  entered after the "G", that number of statements is executed,  „׊ample, type: % %|CGT 41 3|A %  This tells the Debugger to stop before line 41 is executed the  third time.  ^^c6  The GT statement also allows the command string option.  %|CGT 42 "D PC; ?"|A % śõėse statements apply when debugging an assembly language  program as well. The difference is that the location  specification is given as an address and not a line number. An  address is specified with a "^" following the location    The Breakpoint Table %  The B command displays the breakpoint table or the one at the  specified line number. Type:  %|CB|A   and you'll see the following display:  ^^s 5 6 ^^s5  ^^c8  The first character on each liż This reactivates the breakpoint that was deactivated in the  example above. Try the B command to see the table again.  ^^c4  When a program runs to completion and is then restarted (by  pressing the |KD|A key), the breakpoints are still ther5 then the Debugger stops and waits for another instruction. For  example: % %|CG 8|A %  tells the Debugger to Go 8 statements. %  ^^c2  If no number is given, the remaining instructions are executed  (same as |KCONTINUE|A).  ^^c3  The  ż will cause the Debugger to execute the program until line 42 is  reached, display the Program Counter, then await instructions.  Notice that the two statements in the command string are  separated with a semicolon (;).  ^^c3  The GTF comman7 ē[=$ æ pointer  (SF). Subtract 4 from the stack frame pointer, and use "^" after  the expression to indicate a memory location. Type: %|CD (SF-4)^|A  To see the value of y, type:  %|CD (SF-8)^|A ^^c8  And to see the value of z, type: %|CD (SF-12)^|Ģds to get to the stack  frames of the outer level procedures (See "Static and Dynamic  Links").  The global variables in the main program or globals declared in  modules are located at offsets from their specific global area.  The respective areas éßŲnd Debugger  symbols. You can also have expressions evaluated and the  results displayed. String literals can be displayed with the  values.   ^^c6  First, let's look at the D command. The D command is the Séāe so that an offset will  be printed on the listing for each variable. Alternatively, you  can use the $Tables$ Compiler directive to get a printout which  gives useful information for each data type and variable. This  õÓÉA   You may also specify that all three integer variables be  displayed at the same time by typing: %|CD (SF-12)^:3|A   ^^c4  The display will show the three integer variables separated with Ōńēhave a symbol associated with each one.  The symbol has a value which is equal to the offset or distance  from (A5). So when you reference these variables, add the  program or module name to A5 and then subtract the offset for  Ė specification. For example:  %|CGT 1423^|A   says to Go To the address 1432.   ^^c3  The Debugger knows about symbols which have been DEFed. The  entry points into assembly modules, programs, and procedures  should have been DEFed. You ca most powerful display command. You can display data values,  processor register values, values of Debugger symbols, and any  other symbol that is in the system symbol table at reference  time. The D command can be used to evaluate integer  expressiń directive is explained further under "Structured Variable  Formats".   ^^c11  Let's go back to the example to illustrate the Display command.  Let the sample program finish by clearing the breakpoints using  "BC" and then press |KCONTINUE|A.  “ spaces. The variable with the offset of -12 will be the first  one displayed, the one with the offset of -8 second, then the  third one.   When looking for local variable values, be sure that you have  stopped the program in the procedure that debn specify an address in an  assembly routine by specifying it as an offset from the  routine's entry point. The offset in the routine can be found  on the Assembler output. For example:  %|CGT (routine+16)^|A   or:  %|CGT (routine+$10)^|A  öons and do number base conversions.   ^^c7  To have data values displayed, it is necessary to look at the  Compiler listing. Each variable has a negative integer printed  next to it on the listing. This negative value is the offset in  bytes from  Restart the program and then  use the GT command to go to line #54.   To see the value of the local variable, x, that is declared in  Proc_A, look at the compiler listing to see that it has an  offset of -4. This is an offset from the stack frame Ėfines the variables.  Each procedure that is called has a stack frame created for it  even if there are no local variables. If you have stopped the  program in a procedure which is contained inside of another  procedure, you can use the walk comman( says to go the the address that is 16 decimal (10 hex) memory  locations past the entry point into "routine". %  ^^c7 ^3  Display Commands   With the Debugger, you can display the values of memory  locations, processor registers, system symbols a/the base address where the variables are located.  The base address for a procedure's local variables is the  current stack frame pointer (SF).  ^^c3  That's why it's helpful if, when writing the program, you  declare each variable on a separate lin7 ē[= M ½ the particular variable. For example, if you wanted to see the  value of the variable, x, in the main program, type:  %|CD (A5+XYZ-4)^|A   To see the value of Y, type:  %|CD (A5+XYZ-8)^|A    ^^c9  Processor registers and special Debugge Ł to display the value at the location whose address is stored in  the Program Counter.   ^^c8  The Debugger symbols are: % %LN - Line Number. %EC - Escape Code. %IO - I/O result code. %GB - the Global variable Base. %RB - the code Relocation Ba ŗ to get hex values (See the Default Formats section for more  details). Then:  %|COW PC^|A   ^^c4  The little arrow to the right of the display prompts for an  up-arrow or down-arrow. To see the next machine code word,  press the up-arrow. Co Ų You can also ask for several values to be displayed. This  number is typed ahead of the format code. For example:  $|C:3H2|A   asks for 3 two-byte hex values to be displayed.   ^^c6  Back to the example. To see the value of the two charac ¼r symbols can also have  their values displayed. The processor registers that can have  their values displayed are: % %A0...A7 - the Address registers. %AA - all Address registers. %D0...D7 - the Data registers. %DD - all Data registers. %PC - t ¾se. %SF - the current Stack Frame pointer. !  ^^c20  ^3  Examine Consecutive Memory   The Open command is like the Display command except the  address is displayed with the value and you are prompted to  press either the up-arrow key or the down Mntinue until you have seen enough.  ^^c9  ^3  Display Formats   Format specifications can be appended to the location  specifications separated be a colon (:) if the default format of  1 four-byte integer is not what you'd like. Formats tell the Žter  variables in DOC:DBG.PROG, it is necessary to specify a format  because the default format is integer. To see the variables  ch1 and ch2, type: %|CD (A5+XYZ-14)^:2A1|A   ^^c2  The format specifies 2 Alpha characters, 1 byte each. They are  he Program Counter. %SP - the Stack Pointer. %US - the User Stack Pointer. %SR - the Status Register.   ^^c11  Type:  %|CD A0 PC|A   to have the values of register A0 and the Program Counter  displayed.   ^3  Indirection   The carot ( •-arrow key. This  causes the address value to increment or decrement depending on  the key choice. The adjustment is 1 byte with the OB command, 2  bytes with the OW command and 4 bytes with the OL command. When  you have seen enough, press |KENTER|A č  Debugger how to Display the values it finds at the memory  locations. You can ask for Alpha (A), Binary (B), Integer (I),  or Hex (H). Your integer values can be signed (I) or Unsigned  (U). More than one value can be displayed at one time.   ^  located at an offset of -14 from "XYZ", relative to A5.   ^^c6  ^3  Formats for Structured Variables   There is a mechanism for displaying non sequential values also.  It is necessary to specify one memory location to set the memory  pointer. !ŪŃ^) is used to specify indirection. In the case of an  address location, use two carots for indirection. Two indicate  indirection from a processor register, use just one carot. Type:  %|CD PC^|A   “ÓĢ or |KEXECUTE|A to  terminate Open prompting and return to the standard Debugger  prompt. For example, to see the hex values which are the  machine codes for the current program, type: % %|CFH|A   =į×^c10  The number of bytes in which your value is stored may also be  specified. For example:  $|C:H2 |A   asks for a two-byte hex value.  $|C:B1|A   This asks for a one-byte Binary value.    ^^c6  XThen by using special symbols, you can alter the value  in the memory pointer. You can also display the value of the  memory pointer. All these symbols are part of the format and  are typed following the location specification and a colon (:).  7 ē[=!Ä! Kdisplays are made. In other words, after the display of (x), it  is only necessary to move 4 bytes rather than 8, to position the  display pointer to the character variables.   ^^c5  It is possible to format literal strings into the display.  Eithe! Õ-byte hex value.   ^^c4 %|CFU|A   changes the default format to 1U4 which means 1 four-byte  Unsigned integer.   ^^c3 %|CFI|A   sets the default format back to 1I4.   ^^c10  ^3  Change Memory  The ability to change the values in mem!ŗes. When space is  allocated for a structured variable, the number of bytes needed  is determined and given to the variable. The individual  elements of the structure are then assigned space at ascending  locations. For example, if you had the follo!»s the map of the structure.  ^^C 10  ^^S 10   Rather than displaying the values of the record individually,  you can use the following Debugger command: % %|CD (SF-14)^:I4,4>,2A1,^,4>,I4,*|A +  This command tells the Debugger to go to the memor! Tr single or double quotes can be used to delimit the  string. For example:  &|CD A2:'A2= ',H4|A   ^^c5  This gives a more descriptive display. Literal displays are  especially useful when breakpoints are set with command strings.  Each time t!ory is, among other  things, the ability to get a program back on the right track.  In one Debugger session, you can detect several problems with  a program without having to stop, edit and recompile the program  for each one. Simply change the val!ć£.wing Pascal record:  *|Cpascrec = record % x : integer; % y : integer; % ch1,ch2 : char; % #pointer : ^pascrec; 6end;|A $  !åŻÓy location 14  bytes below the Stack Frame pointer (the bottom of the record),  display the four-byte integer (x), go up 4 bytes and display the  2 Alpha characters, assume the value that is stored after the ! Ŗūōhe breakpoint is encountered, the command string is  executed. When this happens, the string helps you to know which  breakpoint was reached and what the display means.   ^^c3  One final format command is the slash (/). When a "/" is !’õues of the variables that  are causing the problem. To change the values of variables in  a Pascal program, use the Open commands. Variables are  referenced the same way they are with the Display command.  ^c7  The Open commands are: !¤ ^^c10 " |C*|A - is the value of the memory pointer.  " |C<|A - preceded by a number, decrements the value of the memory &pointer by the number.  " |C>|A - preceded by a number, increments the value of the memory &pointer by the number.  ! 14 bytes are needed for the whole record. If this was the first  variable for a procedure, then the record would occupy the first  14 bytes below the stack frame pointer (SF-14)^. The elements  in the record would be at positive offsets from this lo!G characters (the pointer field), then go up 4 bytes in the new  record and display the four-byte integer (y), and then display  the current location. Notice that the Debugger display pointer  is left at the subsequent locations after the particular  ! Ģ encountered in a display command, the rest of the display is on  the next line.  ^^c8  ^3  Default Formats   The default format can be changed by giving an "F" command.  For example:  %|CFH|A   changes the default to 1H4 which means 1 four! " |C^|A - causes the memory pointer to take the value at the &location of the current pointer.   ^^c 2  These mechanisms make it possible to examine select, different  types within structured variables.   First, a note about structured variabl!Wcation.  "X" would have an offset of 0 (SF-14)^, "Y" an offset of 4  (SF-14+4)^, "CH1" an offset of 8 (SF-14+8)^, etc. This  information is easily obtainable when the $Tables$ Compiler  directive is used:  ^^C 10  ^^S 10  The following illustrate!7 ē[="_"4ćÜBecause the I/O is memory mapped, values can be moved to I/O  registers and CRT memory. For example, to move a "!" to the  CRT screen image, type:  %|COB $512561^ "!"|A   ^^c7  ^3  Static and Dynamic Links  "łļted.   ^^c4  The dynamic link is a pointer to the stack frame of the  procedure that called the current procedure. These links are  followed as each procedure terminates and control is returned to  the calling procedure.   ^^c8 " ŻÓedure Proc_A # %Procedure Proc_A1 # %Procedure Proc_A1 # %Procedure Proc_A1  ^^c10  Give six successive WD (Walk Dynamic) commands and you'll get  the above information presented in reverse order. The "]ables whose scope includes the current procedure.  Type: %|CWS|A  ^^c2  This command brings us to the Stack Frame for Proc_A which  contains the variable x.   ^^c5  Use the Display command to examine the value of x. Type: %|CD (SF-4)^|A "1%|COB|A - for byte values. # %|COW|A - for word values. # %|COL|A - for long word (four byte) values.    ^^c5  Using the example, change the value of the local variable, x, in  Proc_A to 8. The program should be stopped somewhere in Proc_A "Ä Each time a procedure is called in a Pascal program, a new  stack frame is created. This stack frame contains all the  local variables in the procedure as well as the procedure's  static and dynamic links.   ^^c9  The static link is a pointer t"ƒ The Debugger contains a mechanism for following these links. It  is the Walk command. The Walk command takes three forms: %|CWS|A - follows the static link back one step. # %|CWD|A - follows the dynamic link back one step. # %|CWR|A - resets to " • information displayed for each WD command is the stack frame  information for the current procedure and then the same for the  calling procedure. The stack frame pointer is updated to point  to the calling procedure's stack frame. You can look at th"? (We were at line 54). Since integers are 4 bytes, it is  necessary to use the OL form of the Open command. Type:  %|COL (SF-4)^ 8|A  ^^c5  Change the value of the global character variable, ch1, to  "x". Because characters only use 1 byte of st"śo the stack frame of the procedure  or main program which declares or contains the current  procedure. The static links define the structure of the whole  program and the scope of the variables. If a procedure  specifies the variable, x, a check is m" /the current stack frame. #  There are no options or parameters. These commands in no way  affect influence program execution.   ^^c5  Restart the Debugger by pressing the STOP key and the D key.  Set a breakpoint on line 37 for the third executi" æose  variables and the links stored in that stack frame. Consecutive  WD commands walk us back through the entire calling sequence. We  can stop anywhere along this path and examine the variables in  a procedure's stack frame.   ^^c6  To return to "orage, use the OB  form of the command. %|COB (A5+XYZ-13)^ "x"|A  Press |KENTER|A then press |KCONTINUE|A to restart execution.   ^^c2  By changing the values of those variables, the sequence of  execution is drastically altered.   ^^c5  "Hade first in the current  stack frame for x. If it is not found, the static link is  followed to see if x resides in the stack frame of the procedure  which is up one level in the program's structure. The static  link chain is followed until x is loca" Fon of the  procedure Proc_A1. %|CBS 37 3|A  ^^c2  Press |KENTER|A, then press CONTINUE. The program will stop the  third time line 37 is reached.   The sequence of calls goes:  %Program XYZ # %Procedure Main # %Procedure Proc_B # %Proc"÷the stack frame for Proc_A1 where you stopped the  program, type:  %|CWR|A   and press |KENTER|A. This resets the Debugger stack frame  pointer variable.   ^^c5  You can also walk the static link. This gives you the ability to  examine vari"7 ē[=#Ö# key. The Debugger will trap all escape codes except those.   ^3  The Debugger as a Calculator   The Debugger can be used at any time for quick calculations and  conversions. To get into the Debugger without leaving the  subsystem you are in, # }%Inserts one (1) blank character at the cursor position. It %is NOT a mode switch.   |KDEL CHR|A %Deletes the character at the cursor position.  |KCLR->END|A %Deletes all charactes to the right of the cursor.  |KALPHA|A %Turns on #¬ the variable x exists in the one stack frame for procedure  Proc_A. The value of x is as it was when we stopped program  execution during the third invokation of Proc_A1. That is: 3.   ^^c13  ^3  Exception Trapping   It is possible to stop ex#ktion.  %|CET 100|A   would stop only at escape code 100.   ^^c6  We can stop at all but selected escape codes with the Escape  Trap Not instruction.  %|CETN 100|A   would stop at every escape code except 100.   ^^c10  Not specifying an# ÷type |KCTRL|A-|KPAUSE|A. Try typing:  %|CD 3+4|A   or:  %|CD $CF24:B|A   To get out of the Debugger, type |KCONTINUE|A.   ^^F  ^2  Debugger Keyboard  ^^s2  ^3  Keyboard While in the Debugger Command Mode   |Bknob|A %Same as left/ri# the alpha CRT and turns off the graphics CRT.  |KCTRL|A-|KALPHA|A %Alternates between the Debugger and System CRT screen %images.  |KGRAPHICS|A %Turns on the graphics CRT and turns off the alpha CRT.  ^^c2  |KSTEP |A %Causes the #\ecution of a program at an exception  to normal processing. Normally, an escape is made by the  system and successive recovery mechanisms allow termination of  the program. At the time of termination, the system displays  the escape code and the line# escape code causes the command to work for  every escape code.  %|CET|A   stops at all escape codes.  %|CETN|A   doesn't stop at any exceptions.   ^^c3  When the exception occurs, execution stops and control is  transferred to the Debugg# Ģght arrow keys.  |KSHIFT|A-|Bknob|A %Is up/down arrow keys.  |Kk0|A .. |Kk4|A %Are typing aids (explained under K commands).  |Kk5|A .. |Kk9|A  Undefined.  |K |A and |K |A %Operate to move the cursor.  |K |#ńprogram to continue executing until the next %line number.  ^^c3  |KCTRL|A-|KSTEP|A %Causes the program to continue executing with a slow down %during line number display.  ^^c2  |KCLR LN|A %Clears the input line.   ^^c2  CLR SCR #²ßŲ number in the outer level  recovery. The escape code is valid information, but the line  number may not be the location of the error. By re-executing  the program with a trap set for the exception, we can stop #łņer. At that point, you can examine  the state of the program.  ^^c4  When the Debugger is initiated, the default escape trapping  command is:  %|CETN 0 -20|A   ^^c2  These are the escape codes for normal termination and the STOP # ¢ÓÉA and |K |A %Have meaning only with OL OW OB commands.  |KDEL LN|A %Clears the input line.  |KRECALL|A %Clears the input line and recalls the last completed line.   |KINS CHR|A # ūō (|KSHIFT|A-|KCLR LN|A) %Clears the alpha crt.  ^^c2  STOP (|KSHIFT|A-|KCLR I/O|A) %Stops program execution. 0  ^^c2  |KCAPS LOCK|A %Undefined  ^^c2  |KSHIFT|A-NUMERIC PAD %Produces special characters.  ^^c2 #ń and press |KENTER|A. The value of x is displayed.   ^^c6  The value of x is only affected by successive executions of  Proc_A1. If Proc_A1 had local variables, they would display  different values in each stack frame. However, only one copy of #2 execution at the point of the error, have the actual line number  of the error displayed, and examine variables for the problem.   ^^c6  There are two commands for exception trapping. We can trap  selected escape codes with the Escape Trap instruc#7 ē[=$i$²ly upper case - SHIFT produces lower case.    ^^c5  ^3  Keyboard Outside the Debugger Command Mode   |KSTEP|A %Causes the program to halt on the next line number or, if %already halted, continue execution to the next line number.  ^^c3 $€$ … seen enough.  ^^c9  ^3  Display Formats   Format specifications can be appended to the location  specifications separated be a colon (:) if the default format of  1 four-byte integer is not what you'd like. Formats tell the  Debugger how to Di$°y a format  because the default format is integer. To see the variables  ch1 and ch2, type: %D (A5+XYZ-14)^:2A1   ^^c2  The format specifies 2 Alpha characters, 1 byte each. They are  located at an offset of -14 from "XYZ", relative to A5.  $ļ |KCTRL|A-|KSTEP|A %Causes program execution to be slowed while line numbers %are displayed. 0  ^^c4  |KPAUSE|A %Program execution is suspended (NOTE: type-ahead is still %active and immediate execution keys still function e.g. %DUMP ALPHA). $€$ A÷šsplay the values it finds at the memory  locations. You can ask for Alpha (A), Binary (B), Integer (I),  or Hex (H). Your integer values can be signed (I) or Unsigned  (U). More than one value can be displayed at one time.   ^^c10 $ ^^c6  ^3  Formats for Structured Variables   There is a mechanism for displaying non sequential values also.  It is necessary to specify one memory location to set the memory  pointer. Then by using special symbols, you can alter the value $Ī |KCTRL|A-alpha numeric and numeric pad keys %Causes entry of ASCII control characters. -  ^^c3  |KBACK SPACE|A %Back space the cursor and blanks one character (If the %cursor is in the extreme left, this key is a no-op).  ^^c2  |KENTER|A $I  ^^c2  |KCTRL|A-|KPAUSE|A %Will cause immediate entry into Debugger command mode.  ^^c3  |KCONTINUE|A %Causes program exection to resume with step modes canceled.  ^^c3  |KD|A %From the Main Command Level, the |KD|A key will$Ē you have seen enough, press |KENTER|A or |KEXECUTE|A to  terminate Open prompting and return to the standard Debugger  prompt. For example, to see the hex values which are the  machine codes for the current program, type: % %FH   to get hex valu$ ! The number of bytes in which your value is stored may also be  specified. For example:  $:H2   asks for a two-byte hex value.  $:B1   This asks for a one-byte Binary value.    ^^c6  You can also ask for several values to be displayed.$ß %Terminates input and causes execution of the command.   ^^c2  |KEXECUTE|A %Terminates input and causes execution of the command. 0  ^^c2  |KCONTINUE|A %Continues normal execution of the current program.   ^^c2  ALPHA NUMERIC KEYS %Norma$# call the %DEBUGGER.   r$ 2es (See the Default Formats section for more  details). Then:  %OW PC^   ^^c4  The little arrow to the right of the display prompts for an  up-arrow or down-arrow. To see the next machine code word,  press the up-arrow. Continue until you have$ ˆ This  number is typed ahead of the format code. For example:  $:3H2   asks for 3 two-byte hex values to be displayed.   ^^c6  Back to the example. To see the value of the two character  variables in DOC:DBG.PROG, it is necessary to specif$7 ē[=%ą% Ve descriptive display. Literal displays are  especially useful when breakpoints are set with command strings.  Each time the breakpoint is encountered, the command string is  executed. When this happens, the string helps you to know which %UŃŹwith  a program without having to stop, edit and recompile the program  for each one. Simply change the values of the variables that  are causing the problem. To change the values of variables in %> in the memory pointer. You can also display the value of the  memory pointer. All these symbols are part of the format and  are typed following the location specification and a colon (:).   ^^c10 ""*" is the value of the memory pointer  ""<" p%³Ł% y : integer; % ch1,ch2 : char; % ”pointer : ^pascrec; 6end;|A $   14 bytes are needed for the whole record. If this was the first  variable for a procedure, then the record would occupy th%# display the four-byte integer (x), go up 4 bytes and display the  2 Alpha characters, assume the value that is stored after the  characters (the pointer field), then go up 4 bytes in the new  record and display the four-byte integer (y), and then disp% ‹ breakpoint was reached and what the display means.   ^^c3  One final format command is the slash (/). When a "/" is  encountered in a display command, the rest of the display is on  the next line.  ^^c8  ^3  Default Formats   The default fo%Įreceded by a number, decrements the value of the memory &pointer by the number  "">" preceded by a number, increments the value of the memory &pointer by the number  ""^" causes the memory pointer to take the value at the &location of the current %2e first  14 bytes below the stack frame pointer (SF-14)^. The elements  in the record would be at positive offsets from this location.  "X" would have an offset of 0 (SF-14)^, "Y" an offset of 4  (SF-14+4)^, "CH1" an offset of 8 (SF-14+8)^, etc. This% 7lay  the current location. Notice that the Debugger display pointer  is left at the subsequent locations after the particular  displays are made. In other words, after the display of (x), it  is only necessary to move 4 bytes rather than 8, to positi% ”rmat can be changed by giving an "F" command.  For example:  %FH   changes the default to 1H4 which means 1 four-byte hex value.   ^^c4 %FU   changes the default format to 1U4 which means 1 four-byte  Unsigned integer.   ^^c3 %FI   %łpointer   ^^c 2  These mechanisms make it possible to examine select, different  types within structured variables.   First, a note about structured variables. When space is  allocated for a structured variable, the number of bytes needed  is d%x  information is easily obtainable when the $Tables$ Compiler  directive is used:  ^^C 10  ^^S 10  The following illustrates the map of the structure.  ^^C 10  ^^S 10   Rather than displaying the values of the record individually,  you can u% ”on the  display pointer to the character variables.   ^^c5  It is possible to format literal strings into the display.  Either single or double quotes can be used to delimit the  string. For example:  &D A2:'A2= ',H4   ^^c5  This gives a mor%åsets the default format back to 1I4.   ^^c10  ^3  Change Memory  The ability to change the values in memory is, among other  things, the ability to get a program back on the right track.  In one Debugger session, you can detect several problems %āķÓetermined and given to the variable. The individual  elements of the structure are then assigned space at ascending  locations. For example, if you had the following Pascal record:  *|Cpascrec = record % x : integer; %}ÕĪse the following Debugger command: % %D (SF-14)^:I4,4>,2A1,^,4>,I4,* +  This command tells the Debugger to go to the memory location 14  bytes below the Stack Frame pointer (the bottom of the record), %7 ē[=&{&ł ^^c5  Using the example, change the value of the local variable, x, in  Proc_A to 8. The program should be stopped somewhere in Proc_A  (We were at line 54). Since integers are 4 bytes, it is  necessary to use the OL form of the Open command. Typ&| as the procedure's  static and dynamic links.   ^^c9  The static link is a pointer to the stack frame of the procedure  or main program which declares or contains the current  procedure. The static links define the structure of the whole  progr& klink back one step. # %WD - follows the dynamic link back one step. # %WR - resets to the current stack frame. #  There are no options or parameters. These commands in no way  affect influence program execution.   ^^c5  Restart the Debugger by& Qthe calling procedure's stack frame. You can look at those  variables and the links stored in that stack frame. Consecutive  WD commands walk us back through the entire calling sequence. We  can stop anywhere along this path and examine the variables i&e:  %OL (SF-4)^ 8  ^^c5  Change the value of the global character variable, ch1, to  "x". Because characters only use 1 byte of storage, use the OB  form of the command. %OB (GB-13)^ "x"  Press |KENTER|A then press |KCONTINUE|A to restart ex&tam and the scope of the variables. If a procedure  specifies the variable, x, a check is made first in the current  stack frame for x. If it is not found, the static link is  followed to see if x resides in the stack frame of the procedure  which is &  pressing the STOP key and the D key.  Set a breakpoint on line 37 for the third execution of the  procedure Proc_A1. %BS 37 3  ^^c2  Press |KENTER|A, then press CONTINUE. The program will stop the  third time line 37 is reached.   The sequen&Wn  a procedure's stack frame.   ^^c6  To return to the stack frame for Proc_A1 where you stopped the  program, type:  %WR   and press |KENTER|A. This resets the Debugger stack frame  pointer variable.   ^^c5  You can also walk the stati&^ecution.   ^^c2  By changing the values of those variables, the sequence of  execution is drastically altered.   ^^c5  Because the I/O is memory mapped, values can be moved to I/O  registers and CRT memory. For example, to move a "!" to the &šļåup one level in the program's structure. The static  link chain is followed until x is located.   ^^c4  The dynamic link is a pointer to the stack frame of the  procedure that called the current procedure. These links are  &  ūńce of calls goes:  %Program XYZ # %Procedure Main # %Procedure Proc_B # %Procedure Proc_A # %Procedure Proc_A1 # %Procedure Proc_A1 # %Procedure Proc_A1  ^^c10  Give six successive WD (Walk Dynamic) commands and you'll get &Žéßc link. This gives you the ability to  examine variables whose scope includes the current procedure.  Type: %WS  ^^c2  This command brings us to the Stack Frame for Proc_A which  contains the variable x.   ^^c5 &ć a Pascal program, use the Open commands. Variables are  referenced the same way they are with the Display command.  ^c7  The Open commands are: %OB - for byte values. # %OW - for word values. # %OL - for long word (four byte) values.   &~ CRT screen image, type:   OB $512561^ "!"   ^^c7  ^3  Static and Dynamic Links   Each time a procedure is called in a Pascal program, a new  stack frame is created. This stack frame contains all the  local variables in the procedure as well&e followed as each procedure terminates and control is returned to  the calling procedure.   ^^c8  The Debugger contains a mechanism for following these links. It  is the Walk command. The Walk command takes three forms: %WS - follows the static & Ļ the above information presented in reverse order. The  information displayed for each WD command is the stack frame  information for the current procedure and then the same for the  calling procedure. The stack frame pointer is updated to point  to &7 ē[='ņ' row|A and |Kdown arrow|A %Have meaning only with OL OW OB commands  |KDEL LN|A %Clears the input line  |KRECALL|A %Clears the input line and recalls the last completed line   |KINS CHR|A %Inserts one (1) blank character at the curso'ó  ^^c2  STOP (|KSHIFT|A-|KCLR I/O|A) %Stops program execution 0  ^^c2  |KCAPS LOCK|A %Undefined  ^^c2  |KSHIFT|A-NUMERIC PAD %Produces special characters  ^^c2  |KCTRL|A-alpha numeric and numeric pad keys %Causes entry of A'_ļåhe time of termination, the system displays  the escape code and the line number in the outer level  recovery. The escape code is valid information, but the line  number may not be the location of the error. By re-executing  '‚įŚps and control is  transferred to the Debugger. At that point, you can examine  the state of the program.  ^^c4  When the Debugger is initiated, the default escape trapping  command is:  "ETN 0 -20   ^^c2 ' >r position. It %is NOT a mode switch.   |KDEL CHR|A %Deletes the character at the cursor position.  |KCLR->END|A %Deletes all charactes to the right of the cursor  |KALPHA|A %Turns on the alpha CRT and turns off the graphics CRT '6SCII control characters. -  ^^c3  |KBACK SPACE|A %Back space the cursor and blanks one character (If the %cursor is in the extreme left, this key is a no-op)  ^^c2  |KENTER|A %Terminates input and causes execution of the command   ^^c2 'ø Use the Display command to examine the value of x. Type: %D (SF-4)^  and press |KENTER|A. The value of x is displayed.   ^^c6  The value of x is only affected by successive executions of  Proc_A1. If Proc_A1 had local variables, they would d'l the program with a trap set for the exception, we can stop  execution at the point of the error, have the actual line number  of the error displayed, and examine variables for the problem.   ^^c6  There are two commands for exception trapping. We '] These are the escape codes for normal termination and the STOP  key. The Debugger will trap all escape codes except those.  ^^F  ^2  Debugger Keyboard  ^^s2  ^3  Keyboard While in the Debugger Command Mode   KNOB %Same as left/right arrow ke' M  |KCTRL|A-|KALPHA|A %Alternates between the Debugger and System CRT screen %images  |KGRAPHICS|A %Turns on the graphics CRT and turns off the alpha CRT  ^^c2  |KSTEP |A %Causes the program to continue executing until the next %l'~isplay  different values in each stack frame. However, only one copy of  the variable x exists in the one stack frame for procedure  Proc_A. The value of x is as it was when we stopped program  execution during the third invokation of Proc_A1. That '`can trap  selected escape codes with the Escape Trap instruction.  %ET 100   would stop only at escape code 100.   ^^c6  We can stop at all but selected escape codes with the Escape  Trap Not instruction.  %ETN 100   would stop at every e' ys  |KSHIFT|A-KNOB Is up/down arrow keys  |KK0|A .. |KK4|A %Are typing aids (explained under K commands)  |KK5|A .. |KK9|A  Undefined  |Kleft arrow|A and |Kright arrow|A %Operate to move the cursor  |Kup ar' ‡ine number  ^^c3  |KCTRL|A-|KSTEP|A %Causes the program to continue executing with a slow down %during line number display  ^^c2  |KCLR LN|A %Clears the input line   ^^c2  CLR SCR (|KSHIFT|A-|KCLR LN|A) %Clears the alpha crt ' is: 3.   ^^c13  ^3  Exception Trapping   It is possible to stop execution of a program at an exception  to normal processing. Normally, an escape is made by the  system and successive recovery mechanisms allow termination of  the program. At t'¼scape code except 100.   ^^c10  Not specifying an escape code causes the command to work for  every escape code.  %ET   stops at all escape codes.  %ETN   doesn't stop at any exceptions.   ^^c3  When the exception occurs, execution sto'7 ē[=(( |KEXECUTE|A %Terminates input and causes execution of the command 0  ^^c2  |KCONTINUE|A %Continues normal execution of the current program   ^^c2  ALPHA NUMERIC KEYS %Normaly upper case - SHIFT produces lower case    ^^c5  ^3  Keyboa(’3 1 $–A^£ £ =($Ż…^^f  ^2  The Debugger Language Reference   ^3  Expressions   Expressions are integer numeric expressions.   ^^S 24  item description  range   binary an operator on two operands  +,-,( Š ^3 Multiple Commands on a Line  Several commands may be entered on the same line. These  commands are separated by a semicolon (;).    ^^c30  ^3  Register Operations   Registers can have their contents displayed or altered. If a  val(ąrd Outside the Debugger Command Mode   |KSTEP|A %Causes the program to halt on the next line number or, if %already halted, continue execution to the next line number  ^^c3  |KCTRL|A-|KSTEP|A %Causes program execution to be slowed while lin(€( „Ļ#/,*  operator   register 9a symbol representing a processor A0...A7,  symbol register (D0...D7, XSP, US, SR, PC   Debugger LN (Line Number) -  symbol ( ’÷Żue follows the register symbol, that value is assigned to the  register. Otherwise, the current value of the symbol is  displayed. Without the assignment, the command is the same as  the D command. "  ^^S 10  item description (Ńe numbers %are displayed 0  ^^c4  |KPAUSE|A %Program execution is suspended (NOTE: type-ahead is still %active and immediate execution keys still function e.g. %DUMP ALPHA)  ^^c2  |KCTRL|A-|KPAUSE|A %Will cause immediate entry into Debugg(€( Tżœ EC (Escape Code) 0IO (I/O result code) 0GB (the Global variable Base) 0RB (the code Relocation Base) 0SF (the current Stack Frame pointer)   system ?any symbol in the system symbol table -  symbol   address  an integer numeric(„å  range   register A0...A7, D0...D7, SP, US, SR, PC -  symbol dAA = All Address registers 0DD = All Data registers   expression integer numeric expression 2 -1 Xthru 2   string  (ĒŁĻer command mode  ^^c3  |KCONTINUE|A %Causes program exection to resume with step modes canceled  ^^c3  |KD|A %From the Main Command Level, the |KD|A key will call the %DEBUGGER.   (€( ›™ expression 2 -1 0followed by a "^". thru 2   count  integer numeric expression 2 -1   thru 2  ^C 6 (hÅ any character delimited with -  constant ‰single or double quotes    "AA" and "DD" cannot be used to assign values.    ^^f  ^3  Breakpoints   ^3  BS  (7 ē[=)Œ) ŻDion  is specified, all breakpoints are affected.   ^^S 10  item description 9 range   line number an integer numeric expression $ 2 -1 0identifying a program line.  thru -2 %  address) Ė×Gment where the parameters are  objects and formats.  ^^S 24 %  item description 6 range   expression integer numeric expression 2 -1 %  string any character delimited with  )`’$ 2 -1 Xthru -2   Debugger 3Any legal commands delimited with -  command ™ single or double quotes  %  If only a location is specified, the breakpoint is set and is  permanent. The program will halt at that point. Specify)ććnteger numeric expression $ 2 -1 0identifying a program line.  thru -2 %  address  an integer numeric expression  2 -1 0followed by a "^". 6thru -2  " "   ^3  BA  The "BA" command rea) øė  an integer numeric expression  2 -1 0followed by a "^". Ÿthru -2 % %  The first column contains an "A" for an active breakpoint or a  "D" for a deactivated breakpoint. If no location is specified  the table dis)Pß -  constant $single or double quotes %  softkey  "K0"..."K4" (the symbol, not -  symbol the actual key) %  address  an integer numeric expression  2 -1 0followed by a "^"  thru )ž’õing a  count sets a temporary breakpoint that will halt the program  after the count has been decremented to 0. The count is  decremented each time the location is reached.   Adding a command string to the breakpoint causes the command to )«Óoctivates disabled breakpoints. If no  location is specified, all breakpoints are affected.   ^^S 10  item description 9 range   line number an integer numeric expression  2 -1  ) ƒŁuplays all breakpoints. % %  ^3  B  The "B" command causes the breakpoint table to be displayed.  ^^S 10  item description 9 range   line number an integer numeric expression  2 -1 )ēß -2 %  count  integer constant 2 -1   type I = Integer (size = 1..4) ~ - 0U = Unsigned integer 0H = Hex digit 0A = Alpha character 0B = Binary 0S = String type (size is declared size)  )ņē¤ Setting breakpoints with the "BS" command causes the program to  stop or perform some operation at a given line number or  instruction address.  ^^S 10  item description ) range   line number an integer nu)Ś be executed each time the point is reached. A "?" in the  command string causes the Debugger to wait for input from the  keyboard. Otherwise, the command is executed and execution  resumes. This breakpoint is permanent.      ^^f  ^3  B):ē0identifying a program line.  thru -2 %  address  an integer numeric expression  2 -1 0followed by a "^". `thru -2    ^^f  ^3  BC  The "BC" command clears and removes breakpoints. If no locat) æē0identifying a program line.  thru -2 %  address  an integer numeric expression  2 -1 0followed by a "^". `thru -2 "  ^^f  ^3  Display Commands   ^3  D   The D command is like a print state)Ńßmeric expression % 0 thru 0identifying a program line.  2 -1 %  address  an integer numeric expression  2 -1 0followed by a "^". thru -2   count " integer numeric expression )°ē­D %  The "BD" command disables breakpoints. If a location is  specified, that breakpoint is deactivated. Otherwise all  breakpoints are affected.   ^^S 12   item description range   line number an i)7 ē[=**1ction  at (PC), the status register, the SP, and all the A and D  registers. This display may be altered by changing the  definition of K4. (  ^^C 13  ^3  Queue Commands   ^3  Q  The "Q" command displays the addresses or line numbers and *vē integer constant Ć2 -1 Zthru -2 2 2  ^^C15  ^3  GF The "GF" command is the same as the "G" command except  execution is slowed and line numbers are flashed in the lower  right corner of the CRT.  ^^S 10 * ŗ×Ķed, execution continues until the  location is reached that number of times. If the command string  option is used, the command is executed when the location is  reached.     ^^C27  ^3  GTF *tĶĆ.   ^3  T  The "T" command with count specification causes that number of  machine instructions to be executed. A "TD" command is  executed after each machine instruction.  ^^S 10 % *Õė size integer constant Ę2 -1 Xthru -2 X(except where Xnoted above) " %  Objects can be immediate, direct, or indirect. Formats describe  the internal representation of the data. Non-consecutive data  can be displ*Ś addresses of the most recent statements executed since a "QS"  command.  ^^S 6 (  "MORE" is given as a prompt when part of the QUEUE has been  displayed and there is more to come, a reply of |KENTER|A or  |KEXECUTE|A will cause the next 1..21 queue*FŃ item description  range   count  integer constant ƒ2 -1 Xthru -2    ^^C30  ^3  GT  The "GT" command causes execution to continue until the  location is reached.  ^^S 12 * ēØ The "GTF" command is the same as the "GT" command except  execution is slowed and line numbers are flashed in the lower  right corner of the CRT.  ^^S 12   item description % range   line number an intege* ayed using the format options of the address  display. %  If the output of a D command fills the CRT, a "MORE" prompt will  be issued. A reply of |KENTER|A or |KEXECUTE|A will continue  the display. |KSHIFT|A-|KEXECUTE|A will cancel the display an*ō entries to be  displayed. Any other reply will be interpreted as another  command.   ^^C 8  ^3  QE  "QE" ends the recording of information in the Queue  ^^S 6 %  ^^C 8  ^3  QS  "QS" starts the recording of information in the Queue * °× %  item description 9 range   line number an integer numeric expression $ 2 -1 0identifying a program line.  thru -2 %  address  an integer numeric expression 2 -1 0fo* ÖÕr numeric expression $ 2 -1 0identifying a program line.  thru -2 %  address  an integer numeric expression  2 -1 0followed by a "^"  thru -2 %  count  integer constant *ņd  the rest of the command string. All other responces will be  ignored. % !  ^^c14  ^3  TD  The TD command displays the command string which is defined by  the softkey, "K4".  ^^S 6  At power up "K4" is defined to display the PC, the instru*Nē¹ ^^S 6 %   ^^C 17  ^3  Go Commands %  ^3  G  The "G" command causes execution to resume. If a count option  is used, that number of statements are executed.  ^^S 10 "item description  range " "count * “Łllowed by a "^"  thru -2 %  count  integer constant 2 -1 Xthru -2   Debugger 3Any legal commands delimited with -  command 5 single or double quotes   If a count option is us*łł 2 -1 Xthru -2   Debugger 3Any legal commands delimited with -  command – single or double quotes      ^3  Trace Commands   For use with Assembly language debugging. These commands ignore  address breakpoints*7 ē[=+ž+Ķ$ 0 is in effect.  ^^S 12 (  item description * range   escape code signed integer #2 -1 0negative for system escapes 6 thru -2 0positive for user escapes % %  ^^C 15  + Ä Execute statements until the current procedure has exited.  This will only work if the calling procedure was compiled with  $DEBUG ON$.  ^^S 6 %  ^^C 30  ^3  K Commands   ^3  K %  Softkeys can be used as typing aids. Values or command str+kŻMis executed after the last machine  instruction is executed.  ^^S 12  item description 9 range   line number an integer numeric expression $ 2 -1 0identifying a program line. thru -2 % +Śes that the user wants  normal processing to stop for. In other words, if an escape  code that is in the list is encountered, execution stops and  control is given to the Debugger. If no escape codes are  specified, then processing stops for all esca+ &^3  Walk the Procedure Links %  ^3  WD %  Walk the Dynamic link. This command causes execution of an  "SF" command and then the Debugger symbol, "SF", takes the  value of the dynamic link from the current Stack Frame.  Another "SF" command is th+ šings  can be assigned to the softkeys "K0"..."K4" by typing the key  symbol (not the actual key) and then the characters to be  assigned to the key. After a value has been assigned to the  softkey, it can be displayed by pressing the key. After it is+šÕ  address  an integer numeric expression  2 -1 0followed by a "^"  thru -2 %  count  integer constant 2 -1 Xthru -2   Debugger ,Any legal commands delimited with -  +äĶpe codes.  ^^S 12 %  item description * range   escape code signed integer #2 -1 0negative for system escapes > thru -2 0positive for user escapes # #  ^^C24  ^3  ETN + ½en executed.  ^^S 6   ^^C12  ^3  WS  Walk the Static link. This command is the same as the "WD"  command except that the Debugger symbol, "SF" takes the value of  the static link. This brings you to the Stack Frame of the  nesting procedure as +ĻT  displayed, pressing |KENTER|A causes the line to be interpreted.  ^^S 20  item description ' range   softkey symbol "K0"..."K4"  -   Debugger Any legal commands delimited w+­command single or double quotes " %   ^^C18  ^3  TQ  Causes execution of machine instructions until the specified  address is reached. Then a "TD" is executed. This command also  records the Program Counter values in the Queue. +Jūō%  This command specifies that processing should stop for all  excape codes except the ones listed. If none are listed, then  processing won't stop for any escape codes. %  If the program was started with the D command, then ETN -20 and + ƒį×opposed to the calling procedure. Level 1  procedures have no static link.  ^S 6  %  ^^C15  ^3  WR %  Walk Reset. Reassign A6 to "SF".  ^^S 6    ^^C 14  ^3  Procedure Exit Command !  ^3  P % +Ēith -  command # single or double quotes   value  integer numeric expression X2 -1 Xthru -2  "  ^3  Open Memory or I/O Registers !  ^^F  ^3  OL, OW, OB % +¬Ń item description  range   count  integer constant ƒ2 -1 Xthru -2 " '  ^^C16  ^3  TT  Same as the "GT" command except that PC values are recorded in  the Queue and a "TD" +xŃ ^^S 10   item description  range   count  integer constant w2 -1 Xthru -2    ^^C 15  ^3  Escape Code Trapping   ^3  ET %  This command specifies all the escape cod+7 ē[=,!,Ńfied after the location, the location and  the contents of the location are displayed and followed by a  special prompt. The prompt is for an up-arrow key, a  down-arrow key, or the |KENTER|A key. The up-arrow key causes  the next higher location and,‹  ^4  OVERFLOW %A number entered or the result of an arithmetic operation %can not be represented in 32 bits.  ^4  BUSERROR %An address has been accessed which does not exist in the %machines configuration.  ^4  INPUT OVERFLOW %An, Kontains a reference to a symbol which the %DEBUGGER does not recognize.  ^^C6  ^4  SIZE FIELD TOO BIG %In a format, the size field is too large for the object %being dumped or the format spec being used. e.g. the size %field for I and U is 1..,€,½ value to be displayed and the  special "Open" prompt. %  The down-arrow key is the same except the next lower address is  displayed. %  The |KENTER|A key causes termination of the "Open" prompt and a  return to the standard Debugger prompt.  ,^óé internal input stack has overflowed.  ^4  ADDRESS ERROR %An odd address has been referenced when an even address is %required.  ^4  TOO MANY CODES %To many escape codes in the ET or ETN list. (  ^4  SIZE ERROR  , &4. The default size for string data %is the length of the string D 'abcdefg':I will result in %the above message  ^^C3  ^4  FORMAT REQUIRES MORE DATA %An attempt has been made to display more bytes than the %object contains.  ^^C3 ,€,ဠThese commands are used to examine consecutive memory locations  and to assign values to memory locations.  ^^S 12 %  item description  range   address  an integer numeric expression 2 -1 0f,ń The amount of the increment/decrement is: $1 byte for the "OB" command $2 bytes for the "OW" command $4 bytes for the "OL" command   When the Open memory commands are used with value options, the  value is assigned to the location.  '  ^^F  ^,”%An entered value does not fit in the required space e.g. %registers.  ^4  TYPE ERROR %The parameter entered for a command is not the correct %type. e.g an alpha value when an line number or address is %required.  ^^C3  ^4  EXPRESSION, Š ^4  ADDRESS FORMAT NOT ALLOWED %The * < > and ^ format codes are only allowed if the object %is type address.  ^^C3  ^4  PC/SP HAS ODD ADDRESS %An attempt to return to the user code has been made under %the above conditions. (  ^^C3  ^4 ,ńßollowed by a "^" 8 thru -2   expression integer numeric expression 2 -1 Xthru -2 %  string any character delimited with -  constant 3single or double quotes %  When no value is speci,£2  The Sample Program  ^^F  ^2  ERROR MESSAGES / CONDITIONS   ^4  WHAT? %The first characters of a command are not recognized.  ^4  SYNTAX ERROR %Somewhere in the current command, the syntax rules for the %command have been violated. , » TO COMPLEX %The expression requires too much stack space to execute. %e.g. more than three levels of parenthesis.  ^^C2  ^4  DIVIDE BY ZERO %The value to the right of the / symbol is zero.  ^^C3  ^4  UNDEFINED SYMBOL %An expression c, ²yr DUPLICATE BREAK %GT or TT has specified a location which already has a break %point defined % % % G,7 ē[=-Ø- „in memory. It is loaded with the Pascal system when the  machine is turned on. You can use the Debugger at any time for  quick calculations or number base conversions, then return to  whatever you were doing. The major value of the Debugger,  howeve-Ć and variables at various times,  you can trace program bugs to their origin. Pascal programs must  include the Compiler directive "$DEBUG ON$" if you want to have  the ability to halt the program at particular line numbers.   The following section-zXYZ_XYZRźXYZ’ˆˆ ˆˆˆˆ ˆˆˆˆˆˆˆ ˆ$ˆˆˆˆˆ ˆˆ ˆˆˆˆˆˆˆ ˆˆˆˆˆ6ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆˆˆˆˆˆˆ ˆ ˆˆˆČuˆˆ ČuČuČ uČuˆČuČuČuČuQ`PPPP PP PPPP PP PPPPPP PPPPPPPP PP P-EČ Š SYSGLOBALS FS_FWRITEPAOC FS_FWRITEINT FS_FWRITELNŠ%Š5ˆ,Č ŠŠŠ%ŠŠ%ŠŠ%Š5ˆˆīˆ ˆ ˆ ˆ N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/HzT?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgNCN@N^.ŸNu x= y= z= -€- |r, is in program debugging.   With the Debugger, you can: & #o Step through programs statement by statement and examine %various registers and memory locations at each step.  #o Trace the flow of your program from procedure to procedure %and chec-ėõ’PPPPP PPPPPPPPPP PPPPPP PPPP PPPPPPPPPPPPPPPPPP PP PPPP PP PPPP PP ŠIŠAŠ9ŠéŠĶŠ½ŠłŠŻPŠŠõPŠMPŠÕPPPŠĶP2¹ ¹ ¹¹øżøłøõøńøķøéøåøįøŻ-Proc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg- €- fłņk the values of particular variables local to each %one. % #o Have the Debugger gain control and display helpful %information at an error or exception to normal processing.  #o Alter the values of registers and memory locations. % -­Č ŠŠŠ%ŠŠ%ŠŠ%Š5ČP ŠŠŠ%ŠŠ%ŠŠ%Š5ˆ,Č ŠŠŠ%ŠŠ%ŠŠ%Š5ˆˆīˆ ˆ ˆ ˆ N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/HzT?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źgNCN@N^.ŸNu x= y= z= -eA1 2  sš A^£Ł£Ź=- yé    ×   ^1  CHAPTER 8   ^1  The Debugger       ^2  Introduction    The Pascal System features a programming aid called the  Debugger. The Debugger is a system program that is always  present -D#o Do calculations and conversions.  The Debugger controls the execution of a program. It also  enables you to examine and change memory and register values  while controlling execution. By controlling execution,  examining and changing registers-Proc_B%PROC_A1NAN@% np°Ø’üoōN@'/-’¦/Hzī?<?<’’N¹J­’źgNC/HzĘ?<?<’’N¹J­’źgNC/ n/(’ü?<N¹J­’źgNC/Hz’?<?<’’N¹J­’źgNC/ n/(’ų?<N¹J­’źgNC/Hz^?<?<’’N¹J­’źgNC/ n/(’ō?<N¹J­’źgNCN¹J­’źg-€-7 ē[=.3.€.€. G  CLR->END % %Deletes all charactes to the right of the cursor 0  ALPHA % %Turns on the alpha CRT and turns off the graphics CRT %  CTRL/ALPHA % %Alternates between the Debugger and System CRT screen %images  . >ńź%Terminates input and causes execution of command   EXECUTE % %Terminates input (Causes execution of the command) 0  CONTINUE % %Continues normal execution of the current program 0   Alpha numeric keys %  .?;1 2   I ā A^£ŗ£Ź=.ć ^^F      ^2  Debugger Keyboard       ^3  Keyboard While in the Debugger Command Mode    KNOB  %Same as left/right arrow keys %  SHIFT/KNOB % %Is up/down arrow keys (  K0 .. K4 % %Are typing aids (explai.   GRAPHICS % %Turns on the graphics CRT and turns off the alpha CRT   STEP % %Causes the program to continue executing until the next %line number 0  CTRL/STEP % %Causes the program to continue executing with a slow down %during.}%Normaly upper case - SHIFT produces lower case %      ^3  Keyboard Outside the Debugger Command Mode    STEP % %Causes the program to halt on the next line number or, if %already halted, continue execution to the next line numb.€.āned under K commands)   K5 .. K9 % %Are undefined   Left/right arrow keys % %Operate to move the cursor %  Up/down arrow keys % %Have meaning only with OL OW OB commands 0  DEL LN % %Clears the input line  . ¤ line number display 0  CLR LN % %Clears the input line   CLR SCR % %Clears the alpha crt   STOP % %Stops program execution 0 0  CAPS LOCK % %Undefined 0  SHIFT numeric pad % %Produces special characters .xer 0  CTRL/STEP % %Causes program execution to be slowed while line numbers %are displayed 0  PAUSE % %Program execution is suspended (NOTE: type-ahead is still %active and immediate execution keys still function e.g. %DUMP ALPHA) .o describes in detail the capabilities and  methods of the Debugger as they apply to Pascal programming.  The method of debugging an assembly language program is more  direct. That information is easily obtainable from the  Reference Section.   .€.%  RECALL % %Clears the input line and recalls the last completed line   INS CHR % %Inserts one (1) blank character at the cursor position. It %is NOT a mode switch.   DEL CHR % %Deletes the character at the cursor position. . D0  CTRL/alpha numeric and numeric pad keys % %Causes entry of ASCII control characters. -  BACK SPACE % %Back space the cursor and blanks one character (If the %cursor is in the extreme left, this key is a no-op) 0  ENTER % .7 ē[=/ŗ/ !ó/"line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression P 32-bit 2followed by a "^". " " "  ^3  BA  %The "BA" command reactivate/£%displayed. The first column contains an "A" for an active %breakpoint or a "D" for a deactivated breakpoint. If no %location is specified the table displays all breakpoints. %  ^^C 12  ^^S 12  "line number an integer numeric expression /¼ó2 the "D" command.   ^^C 12  ^^S 12 "register A0...A7, D0...D7, SP, US, SR, PC - "symbol dAA = All Address registers 2DD = All Data registers " "expression integer numeric expression 32-bit ' "string /2’Öbugger to wait for %input from the keyboard. Otherwise, the command is %executed and execution resumes. This breakpoint is %permanent.   ^^C 12  ^^S 12   "line number an integer numeric expression 16-bit 2identifying a program / Ń÷s disabled breakpoints. If no %location is specified, all breakpoints are affected.   ^^C 12  ^^S 12  "line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address an intege/žó $16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression ‚ 32-bit 2followed by a "^". " " "  ^3  Display Commands   ^3  D  %The "D" command is like a print statement whe/m0  CTRL/PAUSE % %Will cause immediate entry into Debugger command mode   CONTINUE % %Causes program exection to resume with STEP and CTRL/STEP %modes canceled %  D % %From the Main Command Level, the D key will call the/uū any character delimited with - "constant Ąsingle or double quotes    ^3  Breakpoints   ^3  BS  %Setting breakpoints with the "BS" command causes the %program to stop or perform some operation at a given line %num/£éline.  unsigned ' "address  an integer numeric expression ' 32-bit 2followed by a "^". " "count  integer numeric expression 32-bit " "Debugger 3Any legal commands delimited with - "command/ ų’r numeric expression ā 32-bit 2followed by a "^".    ^3  BC  %The "BC" command clears and removes breakpoints. If no %location is specified, all breakpoints are affected.   ^^C 12  ^^S 12  "line number an integer numeric expr/z %DEBUGGER.   ^^F  ^2  The Debugger Language Reference     ^3  Multiple Commands on a Line %Several commands may be entered on the same line. These %commands are separated by a semicolon (;).   ^3  Register Operations  /õńēber or instruction address. If only a location is %specified, the breakpoint is set and is permanent. The %program will halt at that point. Specifying a count stes a %temporary breakpoint that will halt the program after the  / _å Ś single or double quotes     ^3  BD  %The "BD" command disables breakpoints. If a location is %specified, that breakpoint is deactivated. Otherwise all %breakpoints are affected.   ^^C 12  ^^S 12  / Såession % 16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression d 32-bit 2followed by a "^". ' %  ^3  B % %The "B" command causes the breakpoint table to be  / %Registers can have their contents displayed or altered. If %a value follows the register symbol, that value is %assigned to the register. Otherwise, the current value of %the symbol is displayed. Without the assignment, the %command is the same as/ń%count has been decremented to 1. The count is decremented %each time the location is reached.  %Adding a command string to the breakpoint causes the %command to be executed each time the point is reached. A %"?" in the command string causes the De/7 ē[=0J0re the %parameters are objects and formats. Objects can be %immediate, direct, or indirect. Formats describe the %internal representation of the data. Non-consecutive data %can be displayed using the format options of the address %display. % 0ō Znoted above) " % %  ^3  TD ! %The TD command displays the command string which is defined %by the softkey, "K4". At power up "K4" is defined to %display the PC, the instruction at (PC), the status %register, the SP, and all the A and D regis01ķÉ  ^^C 8  ^^S 8   ^3  Go Commands %  ^3  G % %The "G" command causes execution to resume. If a count %option is used, that number of statements are executed. %  ^^C 10  ^^S 10 "count  integer constant 32-b0 :ć"address  an integer numeric expression & 32-bit 2followed by a "^" ' "count  integer constant 32-bit " "Debugger 3Any legal commands delimited with - "command  single or double quotes0š¹E ^^C 25  ^^S 25 ! % "expression integer numeric expression 32-bit ' "string any character delimited with - "constant single or double quotes ' 0ĶĘters. This %display may be altered by changing the definition of K4. (  ^^C 8  ^^S 8     ^3  Queue Commands   ^3  Q % %The "Q" command displays the addresses or line numbers and 0 ˆĶĆit " 2  ^3  GF " %The "GF" command is the same as the "G" command except %execution is slowed and line numbers are flashed in the %lower right corner of the CRT. %  ^^C 8  ^^S 8 0 ŚĶĘ "   ^3  GTF % %The "GTF" command is the same as the "GT" command except %execution is slowed and line numbers are flashed in the %lower right corner of the CRT.   ^^C 12  ^^S 12  0lŪ "softkey  "K0"..."K4" (the symbol, not - "symbol the actual key) ' "address  an integer numeric expression & 32-bit 2followed by a "^" ' "count  integer constant 32-bit " "t0f%addresses of the most recent statements executed since a %"QS" command. ( %"MORE" is given as a prompt when part of the QUEUE has been %displayed and there is more to come, a reply of ENTER or %EXECUTE will cause the next 1..21 queue entries to be 0 Ńķ"count  integer constant Ę32-bit    ^3  GT % %The "GT" command causes execution to continue until the %location is reached. If a count option is used, execution %continues until the location is reached that numb00ē/"line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' "address  an integer numeric expression & 32-bit 2followed by a "^" ' "count  integer constant  0ZŻype I = Integer (size = 1..4) € - 2U = Unsigned integer 2H = Hex digit 2A = Alpha character 2B = Binary 2S = String type (size is declared size) " "size integer constant 32-bit Z(except where0Ę%displayed. Any other reply will be interpreted as another %command.   ^^C 8  ^^S 8  ^3  QE % %"QE" ends the recording of information in the Queue %  ^^C 8  ^^S 8   ^3  QS % %"QS" starts the recording of information in the Queue %0 īł·er of %times. If the command string option is used, the command %is executed when the location is reached.   ^^C 12  ^^S 12  "line number an integer numeric expression % 16-bit 2identifying a program line.  unsigned ' 0ū  32-bit " "Debugger 3Any legal commands delimited with - "command   single or double quotes "    ^3  Trace Commands   For use with Assembly language debugging.   ^3  T % %The "T" command with count specificatio07 ē[=1Ć1 \׊mand is the same as the "WD" %command except that the Debugger symbol, "SF" takes the %value of the static link. This brings you to the Stack %Frame of the nesting procedure as opposed to the calling 1 ßŪ5 Any legal commands delimited with - "command # single or double quotes " "value  integer numeric expression O32-bit # "    ^3  Open Memory or I/O Registers !  ^3  OL, OW, OB % 1ėõ×%Causes execution of machine instructions until the %specified address is reached. Then a "TD" is executed. %This command also records the Program Counter values in the %Queue.   ^^C 10  ^^S 10 % "count  integer constant 1‰% %This command specifies that processing should stop for all %excape codes except the ones listed. If none are listed, %then processing won't stop for any escape codes. % %If the program was started with the "D" command, then ETN %-20 and 0 is 1 6%procedure. Level 1 procedures have no static link.   ^^C 6  ^^S 6 % %  ^3  WR % %Walk Reset. Reassign A6 to "SF".   ^^C 6  ^^S 6 %    ^3  K Commands   ^3  K % %Softkeys can be used as typing aids. Values or command %strin1ī%These commands are used to examine consecutive memory %locations and to assign values to memory locations. %When no value is specified after the location, the location %and the contents of the location are displayed and followed %by a special prom1īż ö32-bit      ^3  Procedure Exit Command !  ^3  P % %Execute statements until the current procedure has exited. %This will only work if the calling procedure was compiled %with $DEBUG ON$. %  ^^C 6  ^^S 6 %  ^3  Escape C17ļCin effect. (  ^^C 10  ^^S 10  "escape code signed integer £16-bit 2negative for system escapes 2positive for user escapes % %   ^3  Walk the Procedure Links %  ^3  WD % %Walk the Dynamic link. This command ca1 Rgs can be assigned to the softkeys "K0"..."K4" by %typing the key symbol (not the actual key) and then the %characters to be assigned to the key. After a value has %been assigned to the softkey, it can be displayed by %pressing the key. After it is 1„pt. The prompt is for an up-arrow key, a %down-arrow key, or the ENTER key. The up-arrow key causes %the next higher location and value to be displayed and the %special "Open" prompt. % %The down-arrow key is the same except the next lower %add1ļķ n causes that number %of machine instructions to be executed. A "TD" command is %executed after each machine instruction. %  ^^C 10  ^^S 10 % "count  integer constant -32-bit " " '  ^3  TT ! %Same as the 1ode Trapping   ^3  ET % %This command specifies all the escape codes that the user %wants normal processing to stop for. In other words, if an %escape code that is in the list is encountered, execution %stops and control is given to the Debugg1Øuses execution of an %"SF" command and then the Debugger symbol, "SF", takes the %value of the dynamic link from the current Stack Frame. %Another "SF" command is then executed.   ^^C 6  ^^S 6 % %  ^3  WS % %Walk the Static link. This com1 ^ßSdisplayed, pressing ENTER %causes the line to be interpreted.   ^^C 12  ^^S 12 )  ^^C 6  ^^S 6 8  "softkey symbol "K0"..."K4"  - " "Debugger 1¬½|"T" command except a "TD" is only executed %after the last machine instruction is executed. %  ^^C 10  ^^S 10 % "count  integer constant 32-bit     ^3  TT % 1mļ‘er. If no escape %codes are specified, then processing stops for all escape %codes. %  ^^C 10  ^^S 10  "escape code signed integer U16-bit 2negative for system escapes 2positive for user escapes % %  ^3  ETN 17 ē[=2X2ˆ %The first characters of a command are not recgnized. (  ^4  SYNTAX ERROR ( %Somewhere in the current command, the syntax rules for the %command have been violated. (  ^4  OVERFLOW  %A number entered or the result of an arithme2ON TO COMPLEX  %The expression requires too much stack space to execute. %e.g. more than three levels of parenthesis. (  ^4  DIVIDE BY ZERO  %The value to the right of the / symbol is zero. (  ^4  UNDEFINED SYMBOL  %An expressio2 ZyoPLICATE BREAK  %GT or TT has specified a location which already has a break %point defined % % % H2łanisms allow termination of  the program. At the time of termination, the system displays  the escape code and the line number in the outer level  recovery. The escape code is valid information, but the line  number is not the location of the error. 2ress is displayed. % %The ENTER key causes termination of the "Open" prompt and a %return to the standard Debugger prompt.  %The amount of the increment/decrement is: (1 byte for the "OB" command (2 bytes for the "OW" command (4 bytes for the "OL2ļtic operation %can not be represented in 32 bits. (  ^4  BUSERROR ( %An address has been accessed which does not exist in the %machines configuration. (  ^4  INPUT OVERFLOW  %An internal input stack has overflowed. (this should nev2#n contains a reference to a symbol which the %DEBUGGER does not recognize. (  ^4  SIZE FIELD TOO BIG  %In a format, the size field is too large for the object %being dumped or the format spec being used. e.g. the size %field for I and U is 12 €2"ė›" command % %When the Open memory commands are used with value options, %the value is assigned to the location.   ^^C 12  ^^S 12 % "address  an integer numeric expression  32-bit 2followed by a "^" "  2;éāer %happen) (  ^4  ADDRESS ERROR ( %An odd address has been referenced when an even address is %required. (  ^4  TOO MANY CODES  %To many escape codes in the ET or ETN list. ( (  ^4  SIZE ERROR  2 2..4. The default size for string data %is the length of the string D 'abcdefg':I will result in %the above message (  ^4  FORMAT REQUIRES MORE DATA  %An attempt has been made to display more bytes than the %object contains. (  ^4 2 €2¼ļ,"expression integer numeric expression 32-bit ' "string any character delimited with - "constant nsingle or double quotes ' " %  ^^F  ^2  ERROR MESSAGES / CONDITIONS  %   ^4  WHAT? 2%An entered value does not fit in the required space e.g. %registers. (  ^4  TYPE ERROR  %The parameter entered for a command is not the correct %type. e.g an alpha value when an line number or address is %required. (  ^4  EXPRESSI2 “ ADDRESS FORMAT NOT ALLOWED  %The * < > and ^ format codes are only allowed if the object %is type address.   ^4  PC/SP HAS ODD ADDRESS  %An attempt to return to the user code has been made under %the above conditions. (  ^4  DU2ž execution during the third invokation of Proc_A1. That is: 3.    Exception Trapping   It is possible to stop execution of a program at an exception  to normal processing. Normally, an escape is made by the  system and successive recovery mech27 ē[=3Ń3€3 €3 kłļe at the Main Command  Level. This gives control to the Debugger.   ^3  Code File Specification   The first thing the Debugger does when looking for a codefile is  check for a workfile. If there is a workfile, it is loaded into 3 would stop at every escape code except 100.   Not specifying an escape code causes the command to work for  every escape code.  %ET   stops at all escape codes.  %ETN   doesn't stop at any exceptions.   When the exception occurs, execu3vI1 2 3  ü"*Dj A^¢j£Ź=3 :  ^^F     ^2  Sample Session    In this section, methods for debugging Pascal programs will be  described with the aid of the sample program, DBPROG, on the  demo disc, DOC:. The program is given in source code and object  code form. 3¤ RAM. If you plan to debug, edit, and recompile a program  several times in a session, specifying the program as the  workfile may be the best alternative because the workfile is the  automatic object of those subsystems. If there is no workfile,  t3ätion stops and control is  transferred to the Debugger. At that point, you can examine  the state of the program.  When the Debugger is initiated, the default escape trapping  command is:  "ETN 0 -20   These are the escape codes for normal term3€3 p $ $o DOC:DBG.PROG.TEXT - the source file $ $o DOC:DBG.PROG.CODE - the object file *  A copy of the compiler listing of the program is included at the  end of this chapter for reference.  If you plan to participate with this sample session, put3ihe second check made is for the last file compiled since  power-up. This file would then be loaded. If neither such file  exists, you are prompted for a filename.  %|CDebug what file?|A   Use the Filer's "What" command to see if there is a workfi3£ By re-executing the  program with a trap set for the exception, we can stop  execution at the point of the error, have the actual line  number of the error displayed, and examine variables for the  problem.   There are two commands for exception t35g`ination and the STOP  key. The Debugger will trap all escape codes except those.     P37 ē[=3€3 m the  'DOC:' disc in the disc drive. Execute the code file one time  before attempting the sample session to see the output that is  generated by the program.    ^3  Getting Started with the Debugger   To Debug a program, press the 'D' key whil34õīrapping. We can trap  selected escape codes with the Escape Trap instruction.  %ET 100   would stop only at escape code 100.   We can stop at all but selected escape codes with the Escape  Trap Not instruction.  %ETN 100   4n4]&|C'NOW AT START'|A   indicates that the Debugger is ready for instructions.   The Debugger prompt is the right pointing arrow to the left of  the cursor. Commands are typed in on the line with the  prompt. Complete each command by pressing the 4ė and prompt you for another Debugger command. For example, set a  permanent breakpoint at line 54. Type:  %BS 54   Press ENTER. This sets the breakpoint. Press CONTINUE and the  program begins executing again. It stops at line 54 and  display4 ē commands (separated by semi-colons). These commands are  immediately executed when the location is encountered. The  program continues after the command string has been executed.  Stopping the program is accomplished by making the last command  in t4Ü ^^S 12 The first character on each line of the table is either "A" for  active, or "D" for deactivated. Then the line number of the  breakpoint is displayed. If the third entry in the table is a  "0", it means that t4TENTER key or the  EXECUTE key.    ^3  Controlling Execution with Breakpoints  Breakpoint commands cause the program to stop and perform  operations at the locations specified. Up to four breakpoints  may be set at one time. Most breakpoints 4gs the message:  $|CNOW AT LINE 54|A   A count specification may be made by typing an integer number  after the location specification. This instructs the Debugger  to stop after it reaches the location the indicated number of  times. For example,4 Khe string a "?". This tells the Debugger to stop and wait  for input from the keyboard. For example, type: %BS 41 "D PC; ?" %  and press ENTER. The Debugger stops at line 41, displays the  Program Counter, and waits for input. The "D" command is 4Ćhe breakpoint is permanent. If it is a  positive number, it means that it will stop after it reaches the  line that number of times. If the third entry is a command  string, it means that it is a permanent breakpoint and that  command is executed4nle.  If there is one, use the "New" command to clear it. Then "Quit"  the Filer.   Press the D key to call the Debugger. When you are prompted  for a file, type in:  %DOC:DBG.PROG   The '.CODE' suffix will be appended to the filename  autom4fremain in effect until  cleared or disabled. The exception to this is the BS with the  count option.   The BS command sets a breakpoint at a specified location. In a  Pascal program, breakpoints are set at locations that correspond  to the line n4Ÿ type: %BS 39 3  and press ENTER. This instructs the Debugger to halt the  program immediately before the third execution of line 39. This  breakpoint is then removed. It is strictly a temporary  breakpoint. Press CONTINUE and the program execute4 i explained later. %  ^3  Deactivating Breakpoints %  The BD command deactivates breakpoints. If a line number is  included, the breakpoint is disabled for that line number,  otherwise, all breakpoints are disabled.  For example: %BD 41 4eóģatically if your specification does not have the  terminating period.  ^3  The Debugger Prompt   After the code file has been loaded, you have the opportunity to  give commands to the Debugger before execution. The message:   4Fõīumbers on the compiler listing. The location  specification is entered as an integer number which follows the  "BS", separated by a space. If this is all there is to the  command, the program will halt before executing the statement  4 ,ńēs until line  39 is reached the third time.. %  Another form of the BS command is the "BS" and the location  number followed by a Debugger command string enclosed in  quotes. The command string is one or more legal Debugger  4 Móé%  disables the breakpoint at line 41. %  ^3  The Breakpoint Table %  The B command displays the breakpoint table or the one at the  specified line number. Type:  %B   and you'll see the following display:   ^^C 12  47 ē[=5ē5 < An  address in Assembly language can be specified as an offset from  the value of a symbol.   The offset for an location in the routine can be found on the  Assembler output. % %  ^3  Special Fuction Keys   CONTINUE % %This command cau5÷e  time. The "D" command can be used to evaluate integer  expressions and do number base conversions.   To have data values displayed, it is necessary to look at the  compiler listing. Each variable has a negative integer printed  next to it on 59 each time the line is encountered.   ^3  Reactivating Breakpoints   The BA command reactivates disabled breakpoints. If the line  number is included, the breakpoint is reactivated for that line  number, otherwise, all breakpoints are affected. 52-time,  commands to stop execution before a specified program  instruction.   The "G" command tells the Debugger to Go. If a number is  entered after the "G", that number of statements is executed,  then the Debugger stops and waits for another ins5Śthe  third time.  The "GT" statement also allows the command string option.  %GT 42 "D PC; ?" %  will cause the Debugger to execute the program until line 42 is  reached, display the Program Counter, then await instructions.  The "GTF" co5 9ses the program to resume execution.   STEP % %Causes one instruction to be executed.   CTRL/STEP % %Causes the program to resume execution slowly with line %numbers flashed in the lower right corner.    ^3  Display Commands   With th5įļå For example,  type: % %BA 41  This reactivates the breakpoint that was deactivated in the  example above. Try the "B" command to see the table again.  When a program runs to completion and is then restarted (by  5{żótruction. For  example: % %G 8 %  tells the Debugger to Go 8 statements. %  If no number is given, the remaining instructions are executed  (same as CONTINUE).  The "GF" command is the same as the "G" command except execution 5 wżömmand is the same as "GT" except execution is slowed  and line numbers are flashed in the lower right corner of the  CRT. %  ^3  A Note Concerning Assembly Language Programs  All these statements apply when debugging an assembly language 5 ¼e Debugger, you can display the values of memory  locations, processor registers, system symbols and Debugger  symbols. You can also have expressions evaluated and the  results displayed. String literals can be displayed with the  values.  5Ä pressing the D key), the breakpoints are still there, they are  just deactivated. Use the BA command to reactivate some or all  breakpoints. %  ^3  Clearing Breakpoints $  The BC command clears and removes breakpoints. If a line number  is5W is slowed and line numbers are flashed in the lower right corner  of the CRT. %  The "GT" command is the same as "G" except a location is  specified rather than a count. For example, type: % GT 39  and that's just what happens; The Debug5 Y program as well. The difference is that the location  specification is given as an address and not a line number. An  address is specified with a "^" following the location  specification.   The Debugger knows about symbols which have been DEFed.5 First, let's look at the "D" command. The "D" command is the  most powerful display command. You can display data values,  processor register values, values of Debugger symbols, and any  other symbol that is in the system symbol table at referenc5O included, the breakpoint is cleared for that line, otherwise,  all breakpoints are affected. Type:  %BC 41   to remove the breakpoint. %   ^3  Executing a Number of Statements  Go commands set a fifth temporary breakpoint. They are one5ger lets the program Go  Til line 39 is reached.   Another form of this command tells the Debugger to Go Til the  location is reached a number of times. For example, type: % %GT 41 3 %  This tells the Debugger to stop before line 41 is executed 57 ē[=6|6”ķćre located at offsets from the global base (GB).  That's why it's helpful if, when writing the program, you  declare each variable on a separate line so that an offset will  be printed on the listing for each variable.  6Ūļå the global variables, use the same  command. Substitute GB for SF in the commands above.   The processor registers that can have their values displayed  are: %A0...A7 (the Address registers) %AA (All Address registers)  6 rÕĖb. This  causes the address value to increment or decrement depending on  the key choice. The adjustment is 1 byte with the OB command,  2 bytes with the OW command and 4 bytes with the OL command. 6 \õī to Display the values it finds at the memory  locations. You can ask for Alpha (A), Binary (B), Integer (I),  or Hex (H). Your integer values can be signed (I) or Unsigned  (U). More than one value can be displayed at one time.   6J To see the value of the variable, x, that is declared in  Proc_A, look at the compiler listing to see that it has an  offset of -4. This is an offset from the stack frame pointer  (SF). Subtract 4 from the stack frame pointer, and use "^" after  the6¶%D0...D7 (the Data registers) %DD (all Data registers) %PC (the Program Counter) %SP (the Stack Pointer) %SR (the Status Register)   Type:  %D A0 PC   to have the values of register A0 and the Program Counter  displayed. Type:  %D PC^ 6 ÷ When you have seen enough, press ENTER or EXECUTE to terminate  Open prompting and return to the standard Debugger prompt. For  example, to see the Hex values which are the machine codes for  the current program, type: % %FH   to get Hex values 6l The number of bytes in which your value is stored may also be  specified. For example:  $:H2   asks for a two-byte Hex value.  $:B1   This asks for a one-byte Binary value.    You can also ask for several values to be displayed. This 6[ expression to indicate a memory location. Type: %D (SF-4)^  To see the value of y, type:  %D (SF-8)^  And to see the value of z, type: %D (SF-12)^   You may also specify that all three integer variables be  displayed at the same time by typ63  to display the value at the location whose address is stored in  the Program Counter.   The Debugger symbols are: %LN (Line Number) %EC (Escape Code) %IO (I/O result code) %GB (the Global variable Base) %RB (the code Relocation Base) %SF (the6 $(See the Default Formats section for more  details). Then:  %OW PC^   The little arrow to the right of the display prompts for an  up-arrow or down-arrow. To see the next machine code word,  press the up-arrow (or try the knob). Continue until 6µ  number is typed ahead of the format code. For example:  $:3H2   asks for 3 two-byte Hex values to be displayed.   Back to the example. To see the value of the two character  variables in DOC:DBG.PROG, it is necessary to specify a format  b6¼the listing. This negative value is the offset in  bytes from the base address where the variables are located.  The base address for a procedure's local variables is the  current stack frame pointer (SF). The global variables in the  main program a66ing: %D (SF-12)^:3   The display will show the three integer variables separated with  spaces. The variable with the offset of -12 will be the first  one displayed, the one with the offset of -8 second, then the  third one.  To see the values of67 current Stack Frame pointer) !   ^3  Examine Consecutive Memory   The Open command is like the Display command except the  address is displayed with the value and you are prompted to  press either the up-arrow key, the down-arrow key or the kno6 ¤you have  seen enough.   ^3  Display Formats   Format specifications can be appended to the location  specifications separated be a colon (:) if the default format of  1 four-byte integer is not what you'd like. Formats tell the  Debugger how67 ē[=7õ7 f The default format can be changed by giving an "F" command.  For example:  %FH   changes the default to 1H4 which means 1 four-byte Hex value.  %FU   changes the default format to 1U4 which means 1 four-byte  Unsigned integer.  %FI  7Ÿ Then execute a 'GT 54'.   Change the value of the local variable, x, to 8. Since  integers are 4 bytes, it is necessary to use the OL form of the  Open command. Type:  %OL (SF-4)^ 8  Change the value of the global character variable, ch1, to 7ī number  "">" preceded by a number, increments the value of the memory &pointer by the number  ""^" causes the memory pointer to take the value at the &location of the current pointeri   These mechanisms make it possible to examine select, diffe7„ew record and display the four-byte integer (y), and then  display the address.   It is possible to format literal strings into the display.  Either single or double quotes can be used to delimit the  string. For example:  &D A2:'A2= ',H4   Th7  sets the default format back to 1I4.    ^3  Change Memory  The ability to change the values in memory is, among other  things, the ability to get a program back on the right track.  In one Debugger session, you can detect several problems wit7 "x". Because characters only use 1 byte of storage, use the OB  form of the command. %OB (GB-13)^ "x"  Now press CONTINUE to restart execution from line 54.   By changing the values of those variables, the sequence of  execution is drastical7|ecause the default format is integer. To see the variables  ch1 and ch2, type: #D (GB-14)^:2A1   The format specifies 2 Alpha characters, 1 byte each. They are  located at an offset of -14 from "GB".   There is a mechanism for displaying non s7Łrent  types within structured variables. For example, if you had the  following Pascal record:  *|Cpascrec : record %-2 smallint : 0..40000; %-6 x : integer; %-10  y : integer; %-12  7is gives a more descriptive display. Literal displays are  especially useful when breakpoints are set with command strings.  Each time the breakpoint is encountered, the command string is  executed. When this happens, the string helps you to know w7 īh  a program without having to stop, edit and recompile the program  for each one. Simply change the values of the variables that  are causing the problem. To change the values of variables in  a Pascal program, use the Open commands. Variables are7$ēŻequential values also.  It is necessary to specify one memory location to set the memory  pointer. Then by using special symbols, you can alter the value  in the memory pointer. You can also display the value of the 7Š× ch1,ch2 : char; %-16 ³ pointer : ^pascrec; 6end;|A $  Then the following Debugger command: % %D (SF-2)^:I2,10>,2A1,4>,^,10>,I4,* +  tells the Debugger to go to the memory location 2 bytes below 7 .õėhich  breakpoint was reached and what the display means.   One final format command is the slash (/). When a "/" is  encountered in a display command, the rest of the display is on  the next line.   ^3  Default Formats   7 £  referenced the same way they are with the Display command.  The Open commands are: %OB - for byte values. # %OW - for word values. # %OL - for long word (four byte) values.   Restart the program by pressing the STOP key and the D key. 7÷ memory pointer. All these symbols are part of the format and  are typed following the location specification and a colon (:).  ""*" is the value of the memory pointer  ""<" preceded by a number, decrements the value of the memory &pointer by the7S the Stack Frame (the first field of the record), display the  two-byte integer, go 10 bytes down and display the 2 Alpha  characters, go 4 more bytes down and assume the value that is  stored there (the pointer field), then go 10 bytes down in the  n77 ē[=88źly altered.   Because the I/O is memory mapped, values can be moved to I/O  registers and CRT memory. For example, to move a "!" to the  CRT screen image, type:   OB $512561^ "!"    ^3  Static and Dynamic Links   Each time a procedure is 8Æhain is followed until x is located.   The dynamic link is a pointer to the stack frame of the  procedure that called the current procedure. These links are  followed as each procedure terminates and control is returned to  the calling procedure.  8re Proc_A1  Give six successive WD (Walk Dynamic) commands and you'll get  the above information presented in reverse order. The  information displayed for each WD command is the stack frame  information for the current procedure and then the same for8 ©which  contains the variable x.   Use the Display command to examine the value of x. Type: %D (SF-4)^  and press ENTER. The value of x is displayed.   The value of x is only affected by successive executions of  Proc_A1. If Proc_A1 had local8-ńēcalled in a Pascal program, a new  stack frame is created. This stack frame contains all the  local variables in the procedure as well as the procedure's  static and dynamic links. The code resides in the program's  heap.   8ėä  The Debugger contains a mechanism for following these links. It  is the Walk command. The Walk command takes three forms: %WS - follows the static link back one step. # %WD - follows the dynamic link back one step. # 8 ŃŹ the  calling procedure. The stack frame pointer is updated to point  to the calling procedure's stack frame. You can look at those  variables and the links stored in that stack frame. Consecutive 8 ĢåŽ variables, they would display  different values in each stack frame. However, only one copy of  the variable x exists in the one stack frame for procedure  Proc_A. The value of x is as it was when we stopped program 81 The static link is a pointer to the stack frame of the procedure  or main program which declares or contains the current  procedure. The static links define the structure of the whole  program and the scope of the variables. If a procedure  specifi8U%WR - resets to the current stack frame. #  There are no options or parameters.   Restart the Debugger by pressing the STOP key and the D key.  Set a breakpoint on line 37 for the third execution of the  procedure Proc_A1. %BS 37 3  Press ENTE8 # WD commands walk us back through the entire calling sequence. We  can stop anywhere along this path and examine the variables in  a procedure's stack frame.   To return to the stack frame for Proc_A1 where you stopped the  program, type:  %WR  8Q execution during the third invokation of Proc_A1. That is: 3.    ^3  Exception Trapping   It is possible to stop execution of a program at an exception  to normal processing. Normally, an escape is made by the  system and successive recovery8Ņes the variable, x, a check is made first in the current  stack frame for x. If it is not found, the static link is  followed to see if x resides in the stack frame of the procedure  which is up one level in the program's structure. The static  link c8VR, then press CONTINUE. The program will stop the  third time line 37 is reached.   The sequence of calls goes:  %Program XYZ # %Procedure Main # %Procedure Proc_B # %Procedure Proc_A # %Procedure Proc_A1 # %Procedure Proc_A1 # %Procedu8 W  and press ENTER. This resets the stack frame.   You can also walk the static link. This gives you the ability to  examine variables whose scope includes the current procedure.  Type: %WS  This command brings us to the Stack Frame for Proc_A 8É mechanisms allow termination of  the program. At the time of termination, the system displays  the escape code and the line number in the outer level  recovery. The escape code is valid information, but the line  number is not the location of the er87 ē[=9‹9 ‡ÕĪ for the  calling procedure. The stack frame pointer is updated to point  to the calling procedure's stack frame. You can look at those  variables and the links stored in that stack frame. Consecutive 9 æóé1 had local variables, they would display  different values in each stack frame. However, only one copy of  the variable x exists in the one stack frame for procedure  Proc_A. The value of x is as it was when we stopped program  9 would stop at every escape code except 100.   Not specifying an escape code causes the command to work for  every escape code.  %ET   stops at all escape codes.  %ETN   doesn't stop at any exceptions.   When the exception occurs, execu9ģ"WR - resets to the current stack frame.  There are no options or parameters.   Restart the Debugger by pressing the STOP key and the D key.  Set a breakpoint on line 37 for the third execution of the  procedure Proc_A1.  "BS 37 3   Press 9 ķ WD commands walk us back through the entire calling sequence. We  can stop anywhere along this path and examine the variables in  a procedure's stack frame.   To return to the stack frame for Proc_A1 where you stopped the  program, type:  "WR  9z execution during the third invokation of Proc_A1. That is: 3.       Exception Trapping   It is possible to stop execution of a program at an exception  to normal processing. Normally, an escape is made by the  system and successive rec9ätion stops and control is  transferred to the Debugger. At that point, you can examine  the state of the program.  When the Debugger is initiated, the default escape trapping  command is:  "ETN 0 -20   These are the escape codes for normal term9=ENTER, then press CONTINUE. The program will stop the  third time line 37 is reached.   The sequence of calls goes:  "Program XYZ  "Procedure Main  "Procedure Proc_B  "Procedure Proc_A  "Procedure Proc_A1  "Procedure Proc_A1  "Pro9 U  and press ENTER. This resets the stack frame.   You can also walk the static link. This gives you the ability to  examine variables whose scope includes the current procedure.   Type: "WS   This command brings us to the stack frame for Pr9“overy mechanisms allow termination of  the program. At the time of termination, the system displays  the escape code and the line number in the outer level  recovery. The escape code is valid information, but the line  number is not the location of t9ror. By re-executing the  program with a trap set for the exception, we can stop  execution at the point of the error, have the actual line  number of the error displayed, and examine variables for the  problem.   There are two commands for except95g`ination and the STOP  key. The Debugger will trap all escape codes except those.     P9Īcedure Proc_A1  Give six successive WD (Walk Dynamic) commands and you'll get  the above information presented in reverse order. The  information displayed for each WD command is the stack frame  information for the current procedure and then the same9 Qoc_A which  contains the variable x.   Use the Display command to examine the value of x. Type:  "D (SF-4)^   and press ENTER. The value of x is displayed.   The value of x is only affected by successive executions of  Proc_A1. If Proc_A92żóion trapping. We can trap  selected escape codes with the Escape Trap instruction.  %ET 100   would stop only at escape code 100.   We can stop at all but selected escape codes with the Escape  Trap Not instruction.  %ETN 100  9€97 ē[=::ätion stops and control is  transferred to the Debugger. At that point, you can examine  the state of the program.  When the Debugger is initiated, the default escape trapping  command is:  "ETN 0 -20   These are the escape codes for normal term:€: €:€:=he error. By re-executing the  program with a trap set for the exception, we can stop  execution at the point of the error, have the actual line  number of the error displayed, and examine variables for the  problem.   There are two commands for e:5g`ination and the STOP  key. The Debugger will trap all escape codes except those.     P:zW£ ¢yA+ “€ $#4:WHITERR(: h9"|S2ĮSBgNś’öNu"€ #4:WHITER3:źxception trapping. We can trap  selected escape codes with the Escape Trap instruction.  "ET 100   would stop only at escape code 100.   We can stop at all but selected escape codes with the Escape  Trap Not instruction.  "ETN 100  :€: €: €:Ł would stop at every escape code except 100.   Not specifying an escape code causes the command to work for  every escape code.  "ET   stops at all escape codes.  "ETN   doesn't stop at any exceptions.   When the exception occurs, execu:ļ9)LIB£ #4:WHITE£ f: Į=2<’’4<:˜"|S2ĮSBgNś’öNu"€ #4:WHITER3:h9"|S2ĮSBgNś’öNu"€ #4:WHITER3:7 ē[=;™;ü causes the address value to increment or decrement (depending on  the key choice). The adjustment is 1 byte with the OB command,  2 bytes with the OW command and 4 bytes with the OL command.  When you have seen enough, press ENTER or EXECUTE to termi; p locations. You can ask for Alpha (A), Binary (B), Integer (I),  or Hex (H). Your integer values can be signed (I) or Unsigned  (U). More than one value can be displayed at one time.   The number of bytes in which your value is stored may also be ;#value of the variable, "x", that is declared in  Proc_A, look at the compiler listing to see that it has an  offset of -4. This is an offset from the stack frame pointer  (SF). Subtract 4 from the stack frame pointer, and use "^" after  the expression;č..D7 (the Data registers) %DD (all Dem Data registers) %PC (the Program Counter) %SP (the Stack Pointer) %SR (the Status Register)   Type:  %D A0 PC   to have the values of register A0 and the Program Counter  displayed. Type:  %D PC^  ; anate  Open prompting and return to the standard Debugger prompt. For  example, to see the Hex values which are the machine codes for  the current program, type: % %FH   to get Hex values (See the Default Formats section for more  details). Then:; ŗ specified. For example:  $:H2   asks for a two-byte Hex value.  $:B1   This asks for a one-byte Binary value.    You can also ask for several values to be displayed. This  number is typed ahead of the format code. For example:  $;t to indicate a memory location. Type: %D (SF-4)^  To see the value of y, type:  %D (SF-8)^  And to see the value of z, type: %D (SF-12)^   You may also specify that all three integer variables be  displayed at the same time by typing: %D (;6  to display the value at the location whose address is stored in  the Program Counter.   The Debugger symbols are: LN (line number) $EC (escape code) $IO (I/O result code) $GB (the global variable base) $RB (the code base) $SF (the current s; ÷  %OW PC^   The little arrow to the right of the display prompts for an  up-arrow or down-arrow. To see the next machine code word,  press the up-arrow. Continue until you have seen enough.   Display Formats   Format specifications can be ;:3H2   asks for 3 two-byte Hex values to be displayed. And # %:I4,H4,B4   instructs the Debugger to display the same value as a four-byte  signed Integer, a four-byte Hex value, and as a four-byte Binary  value.   To see the value of the two ;'éßSF-12)^:3   The display will show the three integer variables separated with  spaces. The variable with the offset of -12 will be the first  one displayed, the one with the offset of -8 second, then the  third one. ;Š÷štack frame pointer)    Examine Consecutive Memory   The Open command is like the Display command except the  address is displayed with the value and you are prompted to  press either the up-arrow key or the down-arrow key. This ; ućŁappended to the location  specifications separated be a colon (:) if the default format of  1 four-byte integer is not what you'd like. Formats tell the  Debugger how to Display the values it finds at the memory ;ŻÖcharacter variables in our example  it is necessary to specify a format because the default format  is not satisfactory for alpha characters. To see the variables  "ch1" and "ch2", type: #D (GB-14)^:2A1  ; main program are located at offsets from the global base (GB).  That's why it's helpful if, when writing the program, you  declare each variable on a separate line so that an offset will  be printed on the listing for each variable.   To see the ; To see the values of the global variables, use the same  command. Substitute GB for SF in the commands above.   The processor registers that can have their values displayed  are: %A0...A7 (the Address registers) %AA (All Address registers) %D0.;7 ē[=<&<aer, decrements the value of the memory "pointer by the number   > preceded by a number, increments the value of the memory "pointer by the number   ^ causes the memory pointer to take the value at the "location of the current pointeri   These<Ädown in the  new record and display the four-byte integer (y), and then  display the address.   It is possible to format literal strings printed in the display.  Either single or double quotes can be used to delimit the  string. For example:  %< Zte  Unsigned integer.  %FI   sets the default format back to 1I4.      Change Memory  The ability to change the values in memory is, among other  things, the ability to get a program back on the right track.  In one Debugger sessio<{nge the value of the global character variable, ch1, to  "x". Because characters only use 1 byte of storage, use the OB  form of the command.  "OB (GB-13)^ "x"  Now press CONTINUE to restart execution from line 54.   By changing the values<Xė² mechanisms make it possible to examine select, different  types within structured variables. For example, if you had the  following Pascal record:  -pascrec : record %-2 smallint : 0..40000; %-6 x : integer; <‰ßÕD 'A2= ',A2   This gives a more descriptive display. Literal displays are  especially useful when breakpoints are set with command strings.  Each time the breakpoint is encountered, the command string is < «÷ķn, you can detect several problems with  a program without having to stop, edit and recompile the program  for each one. Simply change the values of the variables that  are causing the problem. To change the values of variables in  <*ļč of those variables, the sequence of  execution is drastically altered. We caused both conditions in   Because the I/O is memory mapped, values can be moved to I/O  registers and CRT memory. For example, to move a "!" to the  <; The format specifies 2 Alpha characters, 1 byte each.   There is a mechanism for displaying non sequential values also.  It is necessary to specify one memory location to set the memory  pointer. Then by using special symbols, you can alter the val<Så%-10  y : integer; %-12  ch1,ch2 : char; %-16 ¢ pointer : ^pascrec; 7end; $  Then the following Debugger command: % %D (SF-2)^:I2,10>,2A1,4>,^,10>,I4,* +  tells the Debugger to go to the memory location<Š executed. When this happens, the string helps you to know which  breakpoint was reached and what the display means.   One final format command is the slash (/). When a "/" is  encountered in a display command, the rest of the display is on  the <  a Pascal program, use the Open commands. Variables are  referenced the same way they are with the Display command.  The Open commands are: "OB - for byte values.  "OW - for word values.  "OL - for long word (four byte) values.   Restart <„ue  in the memory pointer. You can also display the value of the  memory pointer. All these symbols are part of the format and  are typed following the location spec and a colon (:).   * is the value of the memory pointer   < preceded by a numb<ń 2 bytes below  the Stack Frame (the first field of the record), display the  two-byte integer, go 10 bytes down and display the 2 Alpha  characters, go 4 more bytes down and assume the value that is  stored there (the pointer field), then go 10 bytes < ßnext line.   Default Formats   The default format can be changed by giving an "F" command.  For example:  %FH   changes the default to 1H4 which means 1 four-byte Hex value.  %FU   changes the default format to 1U4 which means 1 four-by< ņthe program by pressing the STOP key and the D key.  Then execute a 'GT 54'.   Change the value of the local variable, x, to 8. Since integers  are 4 bytes, it is necessary to use the OL form of the Open  command. Type:  "OL (SF-4)^ 8   Cha<7 ē[==Æ= ÷ variables whose scope includes the current procedure.   Type: "WS   This command brings us to the stack frame for Proc_A which  contains the variable x.   Use the Display command to examine the value of x. Type:  "D (SF-4)^  =ĻČhe outer level  recovery. The escape code is valid information, but the line  number is not the location of the error. By re-executing the  program with a trap set for the exception, we can stop =³ CRT screen image, type:  %OB $512561^ 33            Static and Dynamic Links   Each time a procedure is called in a Pascal program, a new  stack frame is created. This stack frame contains all the  local variables in the pr=Č procedure that called the current procedure. These links are  followed as each procedure terminates and control is returned to  the calling procedure.   The Debugger contains a mechanism for following these links. It  is the Walk command. The Wa=Ļ the above information presented in reverse order. The  information displayed for each WD command is the stack frame  information for the current procedure and then the same for the  calling procedure. The stack frame pointer is updated to point  to = Ē and press ENTER. The value of x is displayed.   The value of x is only affected by successive executions of  Proc_A1. If Proc_A1 had local variables, they would display  different values in each stack frame. However, only one copy of  the variab=+ocedure as well as the procedure's  static and dynamic links. The code resides in the program's  heap.   The static link is a pointer to the stack frame of the  procedure or main program which declares or contains the current  procedure. The stati==lk command takes three forms: "WS - follows the static link back one step.  "WD - follows the dynamic link back one step.  "WR - resets to the current stack frame.  There are no options or parameters.   Restart the Debugger by pressing the STO= Qthe calling procedure's stack frame. You can look at those  variables and the links stored in that stack frame. Consecutive  WD commands walk us back through the entire calling sequence. We  can stop anywhere along this path and examine the variables i= Ōle x exists in the one stack frame for procedure  Proc_A. The value of x is as it was when we stopped program  execution during the third invokation of Proc_A1. That is: 3.       Exception Trapping   It is possible to stop execution of a=jc links define the structure of the whole  program and the scope of the variables. If a procedure  specifies the variable, x, a check is made first in the current  stack frame for x. If it is not found, the static link is  followed to see if x reside=P key and the D key.  Set a breakpoint on line 37 for the third execution of the  procedure Proc_A1.  "BS 37 3   Press ENTER, then press CONTINUE. The program will stop the  third time line 37 is reached.   The sequence of calls goes:  "= Jn  a procedure's stack frame.   To return to the stack frame for Proc_A1 where you stopped the  program, type:  "WR   and press ENTER. This resets the stack frame.   You can also walk the static link. This gives you the ability to  examine=) program at an exception  to normal processing. Normally, an escape is made by the  system and successive recovery mechanisms allow termination of  the program. At the time of termination, the system displays  the escape code and the line number in t=ė׊s in the stack frame of the  procedure which is up one level in the program's structure.  The static link chain is followed until x is located.   The dynamic link is a pointer to the stack frame of the =tŁŅProgram XYZ  "Procedure Main  "Procedure Proc_B  "Procedure Proc_A  "Procedure Proc_A1  "Procedure Proc_A1  "Procedure Proc_A1  Give six successive WD (Walk Dynamic) commands and you'll get =7 ē[=>4>h  "ET 100   would stop only at escape code 100.   We can stop at all but selected escape codes with the Escape  Trap Not instruction.  "ETN 100   would stop at every escape code except 100.   Not specifying an escape code causes the comm>€> ×’ļurrent (procedure stack frame. ((as modified by the W commands) ( #1. #2. PROC ADDRESS #3. STATIC LINK #4. CALLED FROM #5. LINE > ŗŁgss is at (SF-4)^ and (the debugger will not be able to (find the current procedure entry point. (  --i-  Q Display the addresses of the most (recent instructions and or line (numbers and addresses o>=and to work for  every escape code.  "ET   stops at all escape codes.  "ETN   doesn't stop at any exceptions.   When the exception occurs, execution stops and control is  transferred to the Debugger. At that point, you can examine  the s>€> ’ ( (line 1. is displayed if DEBUG ON is 0in effect for the procedure. 0 (line 3. is displayed if the procedure 0has a static link. 0 (line 4. will read CALLED FROM SYSTEM ( if the current procedure is 0in fact the main progr>(f the statements ( (The display will have the most recent (location at the top of the crt. ( (In response to the promt MORE (type the ENTER or EXECUTE key (to display the next set of locations ( (or type a command. ( (The contents of the QUEUE a>atate of the program.  When the Debugger is initiated, the default escape trapping  command is:  "ETN 0 -20   These are the escape codes for normal termination and the STOP  key. The Debugger will trap all escape codes except those.     >€> īõīam. 0In this case, line 5. will not 0be displayed. 0 (line 5. is displayed if DEBUG ON is 0in effect for the calling 0procedure. 0 (If the message NON STANDARD CALL (appears in the display then (The DEBUGGER is unable to locate  >/óMre erased (when a program starts. (are still (available after it ends) (  – MORE is given as a prompt when (part of the QUEUE has been displayed (and there is more to come, a reply of (ENTER or EXECUTE will cause the next  >U execution at the point of the error, have the actual line  number of the error displayed, and examine variables for the  problem.   There are two commands for exception trapping. We can trap  selected escape codes with the Escape Trap instruction.>z  >źŁ”(additional information is printed for (BUS ERROR (escape code -12) and (ADDRESS ERROR (escape code -11) ( (INFO=$xxxx ADDRESS=
INSTR=  --/-  SF (Display the information in the c> Ö(the current procedure entry point. ( (NOTES: ( If the code is assembler generated (then the stack frame and code may (not match the form generated by the (compiler. ( If the procedure was called (via a procedure variable then the (return addre>7 ē[=?½? 4  (ESCAPE TRAP NOT ( (Stop all codes Not in the list (If no list is given then do not (stop on any codes. ( (The list may contain 1, 2, 3 or 4 (numbers separated by blanks. ((expressions evaluated to 16 bits) ( (The debugger normaly ha?ÉĶ --æ  !K [] ! ! n is 0, 1, 2, 3, or 4 ( (If is omitted, (display the current contents of Kn (otherwise assign it to K. ( (see D command for (  ===?Ēéā return to DEBUGGER command mode 0 !GF [] ! (same as G except the program will run (as if CTRL STEP had been pressed and (when is exhausted return to (DEBUGGER command mode. ( !GT ! ?‘ then stop. (Execute TD only after the last (instruction. ( !TT ! (Execute instructions until (is reached, then execute TD command. (Record PC in Queue during execution. ( (NOTE: The actual parameters are same ? oŁĪs ETN ((i.e. do not trap escape codes) ( (If the D command was used to (start the program then ET 0 -20 (is in effect. ((i.e. stop on codes execpt ( 0 (normal operation) )and -20 (stop key)) ' !== ?9Ł2======  CHANGE/EXAMINE MEMORY or I/O REGISTERS  --ž- !  OL
[] ( (
points to a 32 bit (Long) (value (if is present, assign it (to memory (otherwise prompting for ?ĆŁl(1..21 queue entries to be displayed, (Any other reply will cause execution (of the entred command. (  --d- !TD This command displays (by default) (The PC instruction at PC the (status register the ?Ō(program will execute as if CONTINUE ( (had been pressed, then stop if (and when the specified location is (reached. ( (NOTE: the actual parameters for (GT are the same as for BS except (that the default count is 1 instead (of zero. ( !GTF ! (same as GT except that flash mode ((CTRL STEP) is turned on. ( !GFT Same as GTF !  --e- !Trace (SINGLE STEP MACHINE INSTRUCTIONS) ! !T [] (default count is 1 ((0 is the s?  ­==  ESCAPE CODE TRAPPING  --†-  (  ET []  (Stop only on the given codes. (If no list is given then stop (on all codes. ( (  ETN []? šÅ¤ link (execute SF (then follow back one stack frame (using the static link ((if it exists) (and execute SF again ( !WR Walk Reset (assign A6 to SF (  === !K commands   ---?ąŁ.break points) !See also KEYBOARD functions  --¢- !GO command ! !G [] ! (if count is omitted; same function (as CONTINUE key ( ( causes the next ( statements to execute (then?,ame as 1) ( (Execute instructions then stop. (Execute a TD command after every (instruction. In this mode of execution (, BREAKPOINTS SET ON ADDRESSES WILL BE (IGNORED. (  Trace Quiet ( !TQ [] ! (Execute instructions?7 ē[=@q@°(values in consecutive memory locations (will begin. (e.g. address^ current value -> ( (if only the ENTER or EXECUTE key is (pressed, prompting will terminate ( (the up/down arrow keys (or the SHIFT KNOB will cause the (address to inrecment/decri@’(The first characters of a command (are not recgnized. (  SYNTAX ERROR ( (Somewhere in the current command, the (syntax rules for the command have been (violated. (  OVERFLOW  (A number entered or the result of an (arithmetic operation can no@t(The parameter entered for a command (is not the correct type. e.g an (alpha value when an line number or (address is required. (  EXPRESSION TO COMPLEX  (The expression requires too much stack (space to execute. e.g. more than three (levels of @ ((bytes than the object contains. (  ADDRESS FORMAT NOT ALLOWED  (The * < > and ^ format codes are only (allowed if the object is type address.   PC/SP HAS ODD ADDRESS  (An attempt to return to the user code (has been made under the above cond@¹ment (and the prompt to be repeated. ( (The current memory will not be (altered or accessed. ( (NOTE: if the assignment is made with (the command OL a MOVE.L instruction (is used to make the assignment (for OW and OB, MOVE.W and MOVE.B (instructi@mt be (represented in 32 bits. (  BUSERROR ( (An address has been accessed which does (not exist in the machines configuration. (  INPUT OVERFLOW  (An internal input stack has overflowed. ((this should never happen) (  ADDRESS ERROR ( (An od@ dparenthesis. (  DIVIDE BY ZERO  (The value to the right of the / symbol (is zero. (  UNDEFINED SYMBOL  (An expression contains a reference to (a symbol which the DEBUGGER does not (recognize. (  BAD DIGIT  (A number contains a digit not i@ ?yoitions. (  DUPLICATE BREAK  (GT or TT has specified a location (which already has a break point defined H@Xons are used (for prompting, the appropriate MOVE (instructions are used to read the (location. This is important for (referencing I/O device registers.   OW
[] (same as OL except words (16 bits) (are referenced. (  OB @d address has been referenced when (an even address is required. (  TOO MANY CODES  (To many escape codes in the ET or ETN (list. (  MORE (During Q command operation part of the (Q has been displayed and there is more (to come, a reply of ENTER@ ‘n the (appropriate number base. ((THIS MESSAGE WILL ONLY APPEAR IF (THE DEBUGER IS MODIFIED TO INPUT (NUMBER BASES OTHER THAN 10 AND 16) (  SIZE FIELD TOO BIG  (In a format, the size field is too large (for the object being dumped or the format @€@Ē—O
[] (same as OL except bytes (8 bits) (are referenced. (  =="=  ERROR MESSAGES / CONDITIONS  ===    WHAT? @& or EXECUTE (will cause the next 1..21 queue entries (to be displayed. Anyother reply will (cause execution of the entred command. ( (  SIZE ERROR  (An entered value does not fit in the (required space e.g. registers. (  TYPE ERROR  @ (spec being used. e.g. the size field for (I and U is 1..4. The default size for (string data is the length of the string ( D 'abcdefg':I (will result in the above message (  FORMAT REQUIRES MORE DATA  (An attempt has been made to display more @€@7 ē[=AųA€ A€ A€ A € A€ A€ A7 ē[=A € A € A€ A€ A € A€ A€ A€ A € A€ BcB€B€B€B €B€B€B €B €B€B€B €B€B7 ē[=B€B€B €B€CźC€C€C7 ē[=C€C €C€C€C €C €C€C€C €C€C€C€C €C€DUD€D€D€D €D€D€D €D €D7 ē[=D€D€D €D€D€D€D €D€EÜE€E€E€E €E€E€E €E €E€E€E €E€E€E€E7 ē[=E €E€F“’F“