[ COPYFILE200Il&MAKEZAP 200&$MENU 2009.G<#NWINDO 200gk{uSCOLOR 2009×MTPVERS 200 LBRZCOLOR 200&&Ƹ:O(INSTX 200LzhnINSTX2 DOC/+kPINSTX ZAP8 DINSTX COM{ {**********************************************************************} {* C O P Y F I L E . 2 0 0 *} {* *} {* Separate this file out into an Include COPYFILE.200 *} {**********************************************************************} {----------------------------------------------------------------------} { C o p y F i l e : Copy input file to output file } {----------------------------------------------------------------------} Procedure CopyFile(Input_File,Output_File :ParmString; var Return_Code :integer); Const RecordSize = 128 ; RecordNum = 200 ; Type HeapBuffer = array[1..RecordSize,1..RecordNum] of byte; Var FileIn,FileOut : File; HeapPtr : ^HeapBuffer; RecordCount :integer; Begin Assign(FileIn,Input_File); Assign(FileOut,Output_File); {$I-} Reset(FileIn); {$I+} Return_Code := IOresult; If (Return_Code = 0) then { If input File exists then } Begin { create the output file } Writeln(' Creating ',Output_File ); ReWrite(FileOut); New(HeapPtr); Repeat Blockread(FileIn,HeapPtr^,RecordNum,RecordCount); Blockwrite(FileOut,HeapPtr^,RecordCount); Until RecordCount = 0; Dispose(HeapPtr); End; Close(FileIn);Close(FileOut); End; { CopyFile } {......................................................................} {**********************************************************************} {* *} {* M A K E _ Z A P : A p p l y S p e c i f i e d Z a p *} {* *} {* S e p a r a t e O u t I n t o MakeZap.200 *} {**********************************************************************} {---- ---- ---- ---- ----- ---- ---- ---- ---- ----- ---- ---- ----- --} { F i n d _ Z a p : P o s i t i o n t o H e a d e r } {--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --} Procedure Find_Zap(Header :ParmString; Var Return_Code :integer); Var TempHdr : String[80]; TempString : String[80]; Begin { Find_Zap } Assign(Zap_File,Zap_Filename); { Find Correct Zap posn} {$I-}Reset(Zap_File);{$I+} Return_Code := IOresult; If (Return_Code <> 0) then Pause(Zap_Filename+' Error: '+Char(Return_Code)); TempHdr := Header+' '+Version_Key[Version].Name; {Concatenate Version } While (TempHdr[Length(TempHdr)] = ' ') {Name to search string} do {and deblank from end} TempHdr[0] := Pred(TempHdr[0]); {Show search string } {within delimiters } Write(' Searching for Header '); NormVideo; Writeln(Chr(16),TempHdr,Chr(17)); LowVideo; Return_Code := 1; x := wherex; y :=wherey; Repeat { Until Keyword header found } Readln(Zap_file,TempString); { Look For zap identifier } GotoXY(x,y); { Show the lines we're skipping.} Write(Chr(16),TempString,Chr(17)); If Tempstring[0] > TempHdr[0] then { Equilize string lengths for } Tempstring[0] := TempHdr[0] ; { Filestring = Keyword compare } Until (TempString = TempHdr) or (Eof(Zap_File)); If TempString = TempHdr then { Set a return code for either } begin { Success or Failure and give } Return_Code := 0; { human some mortal indication } Writeln;Writeln(' Positioned to Zap'); end else begin Writeln;Pause(' Zap not found'); Return_Code := 1; end End { Find_Zap }; {-------------------------------------------------------------------} { M a i n P r o c e d u r e } {--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---} { Open Zap file, Position to Header, read the data and apply the zap} { Data as follows: } { Character Header identifier } { $address length $hex $hex $hex $hex $hex . . . . . . . . . . . . } { : } { : } { $0 End of Zap for this identifier } {-------------------------------------------------------------------} Procedure Make_Zap (Zap_Index : Zaptypes; Var Return_Code :integer); Var Zap_Address, Zap_Length :integer ; Zap_Data :array[1..80] of byte; x,y :integer; Begin { Make_Zap } Find_Zap(Zap_Headers[Zap_Index], Return_Code); { Search for the Header} x:=WhereX; y:=WhereY; If ( Return_Code = 0 ) then { When we find the Zap Keyword in } Repeat { Until Address = 0 } { Ascii zap file, fetch the zap } Read(Zap_File,Zap_Address); { address and number of zap bytes } { Get Zap address } x:=x Mod 20 +1; GotoXY(x,y); { on the Line. } Write(' Working...'); { While making the zap, keep the } If Zap_Address <> 0 then { User content with a turtle title} Begin Read(Zap_File,Zap_Length); { Read Zap byte count } For I := 1 to Zap_Length Do { Read the Zap Data } Read(Zap_File, Zap_Data[I] ); Readln(Zap_File); { Skip any comments } Seek(ComOut_File,Zap_Address-$100); { Seek to Zap Address} For I := 1 to Zap_Length Do Write(ComOut_File,Zap_Data[I]); { Write the Zap Data } End { Zap_Address <> 0 } Until (Zap_Address = 0); Close(Zap_File); Writeln; End; { Make_Zap } {....................................................................} {**********************************************************************} {* M E N U . 2 0 0 Menu Management Routines *} {* *} {* Separate Out into File Menu.200 *} {**********************************************************************} {----------------------------------------------------------------------} { Max : Find Max of A or B } {----------------------------------------------------------------------} Function Max (A,B :integer ) :Integer ; Begin { Max }; If A > B then Max := A else Max := B End; { Max } {----------------------------------------------------------------------} { Min : Find Min of A or B } {----------------------------------------------------------------------} Function Min (A,B :integer ) :Integer ; Begin { Min }; If A < B then Min := A else Min := B End; { Min } {----------------------------------------------------------------------} { Keyin : Key input from keyboard } {----------------------------------------------------------------------} Function Keyin: Byte; { Single-Key Input Routine (MSDOS/PCDOS) } Const Esc = #27; { Esc key } Var Ch :char; Begin Read(Kbd,Ch); if (Ch = Esc) and keypressed then begin { If extended key type get } Read(kbd,Ch); { get next key in } end; Keyin := Ord(Ch) ; { Assign input to Output } End; {----------------------------------------------------------------------} { B e e p : S o u n d t h e H o r n } {----------------------------------------------------------------------} Procedure Beep(N :integer); {------------------------------------------} Begin { This routine sounds a tone of frequency } Sound(n); { N for approximately 100 ms } Delay(100); {------------------------------------------} Sound(n div 2); Delay(100); Nosound; End {Beep} ; {----------------------------------------------------------------------} { P a u s e : Write Message and wait for keyboard } {----------------------------------------------------------------------} Procedure Pause (Msg: ParmString); Var Ch :char; Begin Beep(600); Writeln(Msg); Writeln(' Press a Key...'); Ch := Char(Keyin); End; {----------------------------------------------------------------------} { M e n u : Generate Menu Display } {----------------------------------------------------------------------} Function Menu( Input_Items: integer; var Data): integer; Const {Max_Items must be specified maximum number items in menu array } Maxnumber= 40; { Max Menu size } Downlist = 80; { Down_arrow = Esc + 80 } Uplist = 72; { Up arrow = Esc + 72 } Select = 13; { Enter/Return key } Cancel = 27; { ESC key + nothing else } Last_Selected :integer = 1; { Remember the last selection} Type Listtype=Array[1..maxnumber] Of String[Max_String]; Var Item_List: Listtype absolute Data; Item, Xposn, Yposn,I : Integer; { Selection Position } Chval :byte; x,y :integer; Begin { Menu } ClrScr; Xposn := 4; Yposn := 1; For I := 1 to Input_Items do Begin GotoXY(Xposn,Yposn+I); writeln(Item_List[I]); end; writeln; GotoXY(Xposn,Yposn+I+2); { Display Instructions } writeln('Select Option with Arrow keys then press Enter'); GotoXY(Xposn,Yposn+I+4); writeln('- The Hunters Helper - INSTX 2.00'); Item := Last_Selected; { Position to Previous Selection} Yposn:= 1; { Pick menu } Repeat GotoXY(Xposn,Yposn+Item); { Position to current choice } Get_Abs_Attr(Attr); { Get Current Text Attributes } TextColor((Attr and $0F) or $08);{ Turn Bright Attr on } Textbackground(Black); write(Item_List[Item]); { Write Current Choice } { Get Keyboard and clear current pick } Chval := Keyin; If Chval <> Select Then { Set current line to normal attr} begin GotoXY(Xposn,Yposn+Item); TextColor(Attr and $0F); Textbackground(Attr Shr 4); write(Item_List[Item]); end; Case Chval of { Determine new Pick } Select : Begin { Set and remember this selection} Menu := Item; Last_Selected := Item; end; Cancel : Menu := 0; DownList: Item := Item Mod Input_Items +1 ; Uplist : Begin Item :=(Item-1) Mod Input_Items ; If (Item=0) then Item := Input_Items; end; end; Until (Chval = Select) Or (Chval = Cancel) End; {......................................................................} {**********************************************************************} {* N W I N D O . 2 0 0 : New Windos Procedures *} {* *} {* Separate this into File NWINDO.200 *} {**********************************************************************} { Kloned and Kludged by Lane.H.Ferris } { -- The Hunters Helper -- } { Original ideas by Michael A. Covington } { Requirements: IBM PC or close compatible. } {----------------------------------------------------------------------} Const MaxWin = 4; { maximum number of Windows open at once } InitDone :boolean = false ; { Initialization switch } On = True ; Off = False ; VideoEnable = $08; { Video Signal Enable Bit } Black :byte = 0; { Video Color Attributes } Blue :byte = 1; Green :byte = 2; Cyan :byte = 3; Red :byte = 4; Magenta:byte = 5; Yellow :byte = 6; White :byte = 7; Bright :byte = 8; Blink :byte = 16; BackGround : byte = 16 ; Type Imagetype = array [1..4000] of char; { Screen Image in the heap } WinDimtype = record x1,y1,x2,y2: integer end; Screens = record { Save Screen Information } Image: Imagetype; { Saved screen Image } Dim: WinDimtype; { Saved Window Dimensions } x,y: integer; { Saved cursor position } end; Var Win: { Global variable package } record Dim: WinDimtype; { Current Window Dimensions } Depth: integer; Stack: array[1..maxWin] of ^Screens; end; Crtmode :byte absolute $0040:$0049; Crtwidth :byte absolute $0040:$004A; Monobuffer :Imagetype absolute $B000:$0000; Colorbuffer :Imagetype absolute $B800:$0000; CrtAdapter :integer absolute $0040:$0063; { Current Display Adapter } VideoMode :byte absolute $0040:$0065; { Video Port Mode byte } Video_Buffer:integer; { Record the current Video} Attr :byte; Switch :boolean; Delta, Xtemp,Ytemp :integer; {------------------------------------------------------------------} { Get Absolute postion of Cursor into parameters x,y } {------------------------------------------------------------------} Procedure Get_Abs_Cursor (var x,y :integer); Var Active_Page : byte absolute $0040:$0062; { Current Video Page Index} Crt_Pages : array[0..7] of integer absolute $0040:$0050 ; Begin X := Crt_Pages[active_page]; { Get Cursor Position } Y := Hi(X)+1; { Y get Row } X := Lo(X)+1; { X gets Col position } End; {----------------------------------------------------------------------} { G e t _ A b s _ A t t r : Get current Text Attributes } {----------------------------------------------------------------------} Procedure Get_Abs_Attr(Var Byteval:byte);{ Get current text attribute } Begin { keeping the textcolor. Not the } Get_Abs_Cursor(x,y) ; { compiler colors. } Byteval := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; End; { Get_Abs_Attr } {----------------------------------------------------------------------} { L o w V i d e o : Set Low intensity on Screen } {----------------------------------------------------------------------} Procedure LowVideo; { Change to Low Video intensity } Var Byteval :byte; Begin { keeping the textcolor. Not the } Get_Abs_Cursor(x,y) ; { compiler colors. } Byteval := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; TextColor(Byteval And $07); { Take Low nibble 0..15 } End; { Low Video } {----------------------------------------------------------------------} { N o r m V i d e o : Set Low intensity on Screen } {----------------------------------------------------------------------} Procedure NormVideo; { Change to Low Video intensity } Var Byteval :byte; Begin { keeping the textcolor. Not the } Get_Abs_Cursor(x,y) ; { compiler colors. } Byteval := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; TextColor((Byteval and $0F) Or Bright); { Take Low nibble 0..15 } End; { Low Video } {----------------------------------------------------------------------} { R e v e r s e V i d e o : Set Low intensity on Screen } {----------------------------------------------------------------------} Procedure ReverseVideo; { Change to Low Video intensity } Var Byteval :byte; Begin { keeping the textcolor. Not the } Get_Abs_Cursor(x,y) ; { compiler colors. } Byteval := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; { Take high nibble 0..15 } TextColor((Byteval div 16) or (Byteval and $08)); TextBackground(Byteval mod 16); { Take low nibble } End; { Low Video } {------------------------------------------------------------------} { Turn the Video On/Off to avoid Read/Write snow } {------------------------------------------------------------------} Procedure Video (Switch:boolean); Begin If (Switch = Off) then Port[CrtAdapter+4] := (VideoMode - VideoEnable) else Port[CrtAdapter+4] := (VideoMode or VideoEnable); End; {----------------------------------------------------------------------} { B l i n k : Turn the Video Blink Attribute On or Off } {----------------------------------------------------------------------} Procedure BlinkChar(OnOff :boolean); { Blink at cursor On|Off } Var Byteval :byte; Begin { keeping the textcolor. Not the} Get_Abs_Cursor(x,y) ; { compiler colors. } Byteval := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; If (OnOff) then Byteval := Byteval Or $80 { Turn Blink On } else Byteval := Byteval And $7F; { Turn blink Off } Mem[Video_Buffer:((x-1+(y-1)*80)*2)+1] := Byteval; End; {Procedure Blink } {------------------------------------------------------------------} { InitWin Saves the Current (whole) Screen } {------------------------------------------------------------------} Procedure InitWin; { Records Initial Window Dimensions } Begin If CrtMode = 7 then Video_Buffer := $B000 {Set Ptr to Monobuffer } else Video_Buffer := $B800; { or Color Buffer } with Win.Dim do begin x1:=1; y1:=1; x2:=crtwidth; y2:=25 end; Win.Depth:=0; InitDone := True ; { Show initialization Done } end; {------------------------------------------------------------------} { BoxWin Draws a Box around the current Window } {------------------------------------------------------------------} procedure BoxWin(x1,y1,x2,y2:integer; Attr:byte); { Draws a box, fills it with blanks, and makes it the current } { Window. Dimensions given are for the box; actual Window is } { one unit smaller in each direction. } { This routine can be used separately from the rest of the } { removable Window package. } var x,y : integer; begin Window(1,1,80,25); TextColor((Attr Mod 16) or Bright) ; TextBackground(Attr Div 16); { Top } gotoxy(x1,y1); { Windo Origin } Write( chr(213) ); { Top Left Corner } For x:=x1+1 to x2-1 do { Top Bar } Write( chr(205)); Write( chr(184) ); { Top Right Corner { Sides } for y:=y1+1 to y2-1 do begin gotoxy(x1,y); { Left Side Bar } write( chr(179) ); gotoxy(X2,y) ; { Right Side Bar } write( chr(179) ); end; { Bottom } gotoxy(x1,y2); { Bottom Left Corner } write( chr(212) ); for x:=x1+1 to x2-1 do { Bottom Bar } write( chr(205) ); write( chr(190) ); { Bottom Right Corner } { Make it the current Window } Window(x1+1,y1+1,x2-1,y2-1); gotoxy(1,1) ; TextColor( Attr mod 16); { Take Low nibble 0..15 } TextBackground ( Attr Div 16); { Take High nibble 0..9 } ClrScr; end; {------------------------------------------------------------------} { MkWin Make a Window } {------------------------------------------------------------------} procedure MkWin(x1,y1,x2,y2 :integer; attr :byte); { Create a removable Window } begin If (InitDone = false) then { Initialize if not done yet } InitWin; with Win do Depth:=Depth+1; { Increment Stack pointer } if Win.Depth>maxWin then begin writeln(^G,' Windows nested too deep '); halt end; {-------------------------------------} { Save contents of screen } {-------------------------------------} Video(Off) ; { Turn off Video to avoid Snow } With Win do Begin New(Stack[Depth]); { Allocate Current Screen to Heap } If CrtMode = 7 then Stack[Depth]^.Image := monobuffer { set pointer to it } else Stack[Depth]^.Image := colorbuffer ; End ; Video(On) ; { Turn the Video back on } With Win do Begin { Save Screen Dimentions } Stack[Depth]^.Dim := Dim; Stack[Win.Depth]^.x := wherex; { Save Cursor Position } Stack[Win.Depth]^.y := wherey; End ; { Validate the Window Placement} If (X2 > 80) then { If off right of screen } begin Delta := X2 - 80; { Overflow off right margin } X1 := X1 - Delta; { Move Left window edge } X2 := X2 - Delta; { Move Right edge on 80 } end; If (Y2 > 24) then { If off bottom screen } begin Delta := Y2 - 24; { Overflow off right margin } Y1 := Y1 - Delta ; { Move Top edge up } Y2 := Y2 - Delta ; { Move Bottom 24 } end; If (X1 < 1) then X1 := 1; { Validate left side of window } If (Y1 < 1) then Y1 := 1; BoxWin(x1,y1,x2,y2,Attr); { Create the New window } Win.Dim.x1 := x1+1; Win.Dim.y1 := y1+1; { Allow for margins } Win.Dim.x2 := x2-1; Win.Dim.y2 := y2-1; end; {------------------------------------------------------------------} { Remove Window } {------------------------------------------------------------------} { Remove the most recently created removable Window } { Restore screen contents, Window Dimensions, and } { position of cursor. } Procedure RmWin; Var Tempbyte : byte; Begin Video(Off); With Win do Begin { Restore next Screen } If crtmode = 7 then monobuffer := Stack[Depth]^.Image else colorbuffer := Stack[Depth]^.Image; Dispose(Stack[Depth]); { Remove Screen from Heap } Video(On); With Win do { Re-instate the Sub-Window } Begin { Position the old cursor } Dim := Stack[Depth]^.Dim; Window(Dim.x1,Dim.y1,Dim.x2,Dim.y2); gotoxy(Stack[Depth]^.x,Stack[Depth]^.y); end; Get_Abs_Cursor(x,y) ; { New Cursor Position } Tempbyte := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ]; TextColor( Tempbyte And $0F ); { Take Low nibble 0..15} TextBackground ( Tempbyte Div 16); { Take High nibble 0..9 } Depth := Depth - 1 end ; end; {......................................................................} {**********************************************************************} {* S C O L O R . I N C : Select Color from palette *} {* *} {* Separate this file into SCOLOR.200 *} {**********************************************************************} {----------------------------------------------------------------------} { S e l e c t _ C o l o r : Ask for Color and Return Attribute } {----------------------------------------------------------------------} { Ask user to choose a color foreground and background and return the } { attribute. } { Input: Attribute at which to position the first Cursor } { Output: Atribute selection by the user or Zero } {**********************************************************************} Procedure Select_Color(Var Attr: byte) ; Const Arr_Up = 72 ; Arr_Dn = 80 ; Arr_Right = 77 ; Arr_Left = 75 ; Return = 13 ; Esc = 27 ; Var Fieldwidth, ColorMatrixX,ColorMatrixY, Foreground :integer; ch :char; Old_Attr, Old_Text, Old_background, Chval :byte; {----------------------------------------------------------------------} { B l i n k the Cursor Position On/Off } {----------------------------------------------------------------------} Procedure Blink_Off; { Turn off blinking } Var x,y :integer; Begin x := WhereX; y := WhereY; { Save old cursor position } For I := x to x+FieldWidth-1 do Begin GotoXY(I,y);BlinkChar(Off); end; GotoXY(x,y); { Restore old cursor position } End; Procedure Blink_On; { Turn off blinking } Var x,y :integer; Begin x := WhereX; y := WhereY; { Save old cursor position } For I := x to x+FieldWidth-1 do Begin GotoXY(I,y);BlinkChar(On); end; GotoXY(x,y); { Restore old cursor position } End; {----------------------------------------------------------------------} { Move_Right_Left_Up_Dn : Cursor Move Routines } {----------------------------------------------------------------------} Procedure Move_Right; { Move Cursor right one position} Begin { Restore unblinking attributes } Blink_Off; { to old cursor postion } ColorMatrixX :=(ColorMatrixX + FieldWidth); If ColorMatrixX > 16*Fieldwidth then ColorMatrixX := Fieldwidth; GotoXY(ColorMatrixX,ColorMatrixY); { Move to new cursor postion and} Blink_On; { set blinking attribute } End; {Move_Right} Procedure Move_Left; { Move Cursor Left one position } Begin { Restore unblinking attributes } Blink_Off; { to old cursor postion } ColorMatrixX := ColorMatrixX - FieldWidth; If (ColorMatrixX < FieldWidth) then ColorMatrixX := FieldWidth*16; GotoXY(ColorMatrixX,ColorMatrixY); { Move to new cursor postion and} Blink_On; { set blinking attribute } End; {Move_Left} Procedure Move_Up; { Move up one Row } Begin { Restore unblinking attributes } Blink_Off; { to old cursor postion } ColorMatrixY := ColorMatrixY - 1; If ColorMatrixY < 4 then ColorMatrixY := 4+7; GotoXY(ColorMatrixX,ColorMatrixY); { Move to new cursor postion and} Blink_On; { set blinking attribute } end; {Move_Up} Procedure Move_Down; { Move Down one Row } Begin { Restore unblinking attributes } Blink_Off; { to old cursor postion } ColorMatrixY := ColorMatrixY + 1; If ColorMatrixY > 4+7 then colorMatrixY := 4; GotoXY(ColorMatrixX,ColorMatrixY); { Move to new cursor postion and} Blink_On; { set blinking attribute } end; {Move_Down} Procedure Selected; { Pass back selected attribute } Begin Blink_Off; { Turn off any linking } Get_Abs_Cursor(x,y); Attr := { Get old Cursor attributes } Mem[ Video_Buffer:((x-1 + (y-1) * 80 ) * 2)+1 ] ; End; {Procedure Selected } {-----------------------------------------------------------------------} { M a i n P r o c e d u r e : Select Color and Return Attribute } {-----------------------------------------------------------------------} Begin {Select_Color} Old_Attr := Attr; { Save old Attributes } Old_Text := Attr and $0F; Old_background := Attr shr 4; Get_Abs_Cursor(x,y); { Find Cursor and make } MkWin(4,y,74,y+16,White); { a window/Set Color } Fieldwidth := 4; { Colors Display Width } TextColor(Old_Text); clrscr; GotoXY(14,1); write('* * * Move Cursor to Select Colors * * *'); GotoXY(14,2); write('Enter '); TextColor(Old_Text+Blink);Write('[Return]'); TextColor(Old_Text);Write(' to select -- '); TextColor(Old_Text+Blink); Write('[Esc]'); TextColor(Old_Text); Writeln(' to Ignore'); ColorMatrixX := WhereX; ColorMatrixY := WhereY; For Background:=0 to 7 do { Background Color attributes } Begin for Foreground:=0 to 15 do { Foreground Color attributes } begin { Display the Color matrix } gotoxy(Fieldwidth*(Foreground+1),Background+4); { display posn } textcolor(Foreground); textbackground(Background); write(Foreground:Fieldwidth-1); end; { Forground} Writeln; end; { Background } { Put Cursor at Old Attriute } ColorMatrixX := Fieldwidth * (Old_Text)+Fieldwidth; ColorMatrixY := 4 + (Old_background); GotoXY(ColorMatrixX,ColorMatrixY); { Position the Cursor } Chval := 0; Repeat {until Chval=Return|Esc key} { Get an attribute selection } Chval := Keyin; { Wait for user key } Case Chval of Arr_Right : Move_Right; Arr_Left : Move_Left; Arr_Up : Move_Up; Arr_Dn : Move_Down; Return : Selected; Esc : else Beep(600); end; {case Chval} Until (Chval=Return) or (Chval=Esc); RmWin; { Remove the Color Window } end; {Select_Color} {.......................................................................} {*********************************************************************} {* T P V E R S . 2 0 0 *} {* *} {* O p e n C o m p i l e r : and get Version *} {* *} {* Separate This file into TPVERS.200 *} {*********************************************************************} Procedure Open_Compiler; Var TempStr :string[8]; {Tempory Trash String } Begin TempStr := 'VERSIONS'; { Find 'Versions in Zap file } Version := 0; { No version found yet } Version_Key[Version].Name := '';{ No Version as of yet} Find_Zap(TempStr,Return_code); { Set up the Version Key array} If (Return_Code = 0) then { When "VERSION" found in zap } Begin { Find Version} { file, read Compiler Version } I:=0; { Jmp Address and Keyname until } { Verify Address = zero } repeat {until Versify = 0} I := I +1; Read(Zap_File, Version_Key[i].Verify); If Version_Key[i].Verify <> 0 then Begin Readln(Zap_File, Version_Key[i].UniqueWord, Version_Key[i].Name); end; until (Version_Key[i].Verify=0); Actual_Versions := I -1; { Set Number of Version Found } For I := 1 to Actual_Versions do { Remove Blanks from Version } While (Pos(' ',Version_Key[i].Name) <> 0) Do Delete(Version_key[i].Name, Pos(' ',Version_Key[i].Name),1); Return_Code := 1; { Set Error Return code } Assign(ComOUT_File,ComOut_Filename); {$I-} Reset(ComOUT_File); { Open the copied .COM file } {$I+} Return_Code := IOresult; If ( Return_Code <> 0 ) then Pause('Please Specify .COM files first'); If ( Return_Code = 0) then Begin Return_Code := 1; For I := 1 to Actual_Versions do Begin { Seek to Verify Word } Seek(ComOut_File,Version_Key[i].Verify-$100); Read(ComOut_File,B,A); { Read the Jump Address } ComStartAddr := B + A shl 8 ; If (ComStartAddr = Version_Key[I].UniqueWord) then Begin Version := I; Return_Code := 0; end; end; If (Return_code <> 0) then Begin Beep(600); Pause(' '+ComOut_Filename+' is not a TURBO Compiler'); Return_Code := 1; end; End; { Return_Code = 0 } End; {Find Version} Close(Zap_File); End; {Open_Compiler} {......................................................................} {**********************************************************************} {* Z a p C o l o r s : Modify Compiler Menu/Edit Colors *} {* *} {* Separate this file into ZCOLOR.200 *} {**********************************************************************} Procedure Zap_Colors; { Reverse Compiler Intensity } Var Zap_Address :integer; Chval, Char_Hi,Char_Lo,Char_Marked,Char_Err :byte; {------------------------------------------------------------------------} { Find_Colors : Find old colors and postion to Output File } {------------------------------------------------------------------------} Procedure Find_Colors; Begin Zap_type := Zap_Edit_Colors; { Find original Colors positn} Find_Zap(Zap_Headers[zap_type],Return_Code); If ( Return_Code = 0 ) then { Get Zap address } Begin {Find Zap} { for reference only } Read(Zap_File,Zap_Address); Seek(ComOut_File,Zap_Address-$100); { Seek to Zap Address } { Current Attributes } Read(ComOut_File,Char_Hi,Char_Lo,Char_Marked,Char_Err); Repeat {unitl Chval = 13} { Get Hilite Colors } Textcolor(Char_Hi and $0F);TextBackground(Char_Hi shr 4); ClrScr;Writeln(' Enter Editor Hilite Attributes:'); Select_color(Char_Hi); { Get New Colors } Textcolor(Char_Hi and $0F);TextBackground(Char_Hi shr 4); ClrScr;Writeln(' Return if acceptable or hit any key...'); Chval := Keyin; Until (Chval = 13); Repeat {unitl Chval = 13} { Get Normal color attrib} Textcolor(Char_Lo and $0F);TextBackground(Char_Lo shr 4); ClrScr;Writeln(' Enter Editor Normal Text Attributes:'); Select_color(Char_Lo); { Get New Colors } Textcolor(Char_Lo and $0F);TextBackground(Char_Lo shr 4); ClrScr;Writeln(' Return if acceptable or hit any key...'); Chval := Keyin; Until (Chval = 13); Repeat {unitl Chval = 13} { Get Error Attributes } Textcolor(Char_Marked and $0F);TextBackground(Char_Marked shr 4); ClrScr;Writeln(' Enter Editor Marked Text Attributes:'); Select_color(Char_Marked); { Get New Colors } Textcolor(Char_Marked and $0F);TextBackground(Char_Marked shr 4); ClrScr;Writeln(' Return if acceptable or hit any key...'); Chval := Keyin; Until (Chval = 13); Repeat {unitl Chval = 13} { Get Error Attributes } Textcolor(Char_Err and $0F);TextBackground(Char_Err shr 4); ClrScr;Writeln(' Enter Error Message Text Attributes:'); Select_color(Char_Err); { Get New Colors } Textcolor(Char_Err and $0F);TextBackground(Char_Err shr 4); ClrScr;Writeln(' Return if acceptable or hit any key...'); Chval := Keyin; Until (Chval = 13); Seek(ComOut_File,Zap_Address-$100); { Seek to Zap Address } Return_Code := IOresult; { Write New Attributes } Write(ComOut_File,Char_Hi,Char_Lo,Char_Marked,Char_Err); End; {Find_Zap Return_Code = 0} End;{Procedure Find_Colors} {-----------------------------------------------------------------------} { M A I N Z a p _ C o l o r s P r o c e d u r e } {-----------------------------------------------------------------------} Begin { Procedure Zap_Colors} Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(x,y,x+48,y+7,White); { Make an input window } Textcolor(Bright+Blue); TextBackground(Black); Clrscr; Open_Compiler; { Open Compiler/Get Version } If (Return_Code = 0) then Find_Colors; If (Return_Code <> 0) then Begin { Write Error msg and pause } Pause(' Error Processing Edit Color Zap '); end; If (Return_Code = 0) then Begin Pause(' Compiler Color Zaps Completed '); end; Close(Zap_File); Close(ComOut_File); RmWin; End; { Procedure Zap_Colors } {......................................................................} {$R+} {$V-} Program Instx; { CIS Version 2.00 } {----------------------------------------------------------------------} { Install the Turbo User Options } {----------------------------------------------------------------------} { Purpose: Install Patches/Zaps to Load Modules } { (specifically the Turbo compiler) } { } { Methods: Zaps are identified within a file by the concatenation of } { a set of keywords consisting of: } { } { "TITLE VERSION" } { } { where "TITLE" is choosen by the user and "VERSION" } { is a string derived from the first instruction in } { the binary file to receive the zap. The default Zap file } { is INSTX.ZAP which may be overridden by Menu item 1 } { } { Input: A zap text (patch) file consisting of Version identifiers,} { Zap title + Version, zap offset, zap length, zap bytes, } { followed by a zero. } { } { A source copy of the binary file to receive the zap. } { This file will be copied; not modified. } { } { Output: A copy of the source input file modified by the specified } { zap(s). } { } {----------------------------------------------------------------------} { } {----------------------------------------------------------------------} { Install the PcDos Turbo eXecute Command } {----------------------------------------------------------------------} Type Option_Choices = (None, Zap_Data, Com_Names, Edit_Intensity, Edit_Colors, X_command, User_Zap, Exit_Pgm); ZapTypes = (No_Zap,Zap_Edit_Intensity, { Zaps in Data File} Zap_Edit_Colors, Zap_X_Command, User_Zap_type); ParmString = String[255] ; { Dummy definition for parms } Const Max_Versions = 8 ; { Number of Turbo Versions } Actual_Versions :integer = Max_Versions;{ Versions acutally found} Max_string = 60; { Max Menu Title length } Max_Items = 7; { Maximum menu items below } { Menu items } Menu_Items: array[1..Max_Items] of string[Max_String] = (' Specify Input Zap Data File ', ' Specify Input/Output .COM File Names ', ' Reverse Edit Intensity Attributes ', ' Specify Edit Screen Colors ', ' Install the eXecute Command ', ' User Specified Zap ', ' Exit this program ' ); Zap_Headers: array[Zap_Edit_Intensity..User_Zap_Type] { Define Zap } of string[10] = { Headers } ('INTENSITY', 'COLORS', 'XCOMMAND', 'USER'); ComIN_Filename : string[64] = 'TURBO.COM'; { Input command file } ComOUT_Filename : string[64] = 'TURBX.COM'; { Output command file} Zap_Filename : string[64] = 'INSTX.ZAP'; { Default input data } Ok :boolean = false; { Boolean trash collector } Var Zap_File :text; { Zap input data file } ComIN_File : File of Byte; { Input Command File } ComOUT_File : File of Byte; { Output Command File } ComStartAddr:integer; { Compiler Code start addr } Option :integer; Choice :Option_Choices; { Set of User choices } i,j, x,y :integer; Return_Code :integer; A,B :byte; Zap_Type : Zaptypes; { Parameter Strings passed to } Version_Key :array[0..Max_Versions] of record { Version 0 is no version } Verify : integer; { Unique Versify address } UniqueWord : integer; { contents at versify addr } Name : string[8]; { 'PC300B','PC301A' etc. } end; Version : integer; { Set to current Version index } {$I Nwindo.200} { Window Procedures } {$I Menu.200} { Menu Display Function } {$I CopyFile.200} { Duplicate a File } {$I MakeZap.200} { Make Zaps to Output File } {$I TPVers.200} { Open and find Compiler Version } {$I Scolor.200} { Select Compiler Color Option } {$I Zcolor.200} { Zaps Colors into Compiler } {-----------------------------------------------------------------------} { G e t U s e r F i l e n a m e } {-----------------------------------------------------------------------} Procedure Get_User_Filename (Var FileName :ParmString; var Return_Code :integer); Var TempString : string[64] ; TempFile : File ; Begin Readln(TempString); { user want new zap file } If (TempString = '') then TempString := FileName; { Assign Default } For I := 1 to length(TempString) do TempString[I] := UpCase(TempString[I]); Assign(TempFile,TempString); { filename if Cr } {$I-} Reset(TempFile); {I+} Return_Code := IOresult ; Close(Tempfile); { Close file for now..used later} FileName := TempString; { Assign the final File name } End; { Get_User_Filename } {----------------------------------------------------------------------} { G e t Z a p I n p u t D a t a F i l e } {----------------------------------------------------------------------} Procedure Get_Zapdata_file ; { Open user Specified Zap data } Begin Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(x,y+1,x+40,y+6,Green); { Make an input window } Textcolor(Green);TextBackground(Black);GotoXy(1,1); Repeat Write(' Patch (Zap) Data File '); NormVideo; Writeln(chr(16),' ',Zap_Filename,' ',chr(17)); LowVideo; Writeln(' Enter New File or to Accept '); Get_User_Filename(Zap_Filename,Return_Code); If (Return_Code <> 0 ) then Writeln(' ', Zap_Filename, ' not found'); Until (Return_Code = 0 ); RmWin; { Remove the Window } End; { Get_Zapdata_file } {----------------------------------------------------------------------} { C o m _ N a m e s : G e t .C o m F i l e N a m e s } {----------------------------------------------------------------------} Procedure Get_Com_Names ; { Open user Specified Command Files } Begin Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(x,y+1,x+48,y+8,Blue); { Make an input window } Textcolor(Yellow); TextBackground(Blue); Clrscr; Repeat { until ComIN_filename <> ComOUT_Filename } Repeat { Get Input .COM File } Write(' Default '); NormVideo; Write('Input'); LowVideo; Write(' .COM File '); { Ask user for input } NormVideo; { or take the default } Writeln(chr(16),' ',ComIN_Filename,' ',chr(17)); LowVideo; Writeln(' Enter New File or to Accept '); Get_User_Filename(ComIN_Filename,Return_Code); If (Return_Code <> 0) then Writeln(' ', ComIN_Filename, ' not found'); Until (Return_Code = 0 ); Write(' Default '); { Get OUTput filename } NormVideo; Write('Output'); LowVideo; Write(' .COM File '); { Ask user for input } NormVideo; { or take the default } Writeln(chr(16),' ',ComOUT_Filename,' ',chr(17)); LowVideo; Writeln(' Enter New File or to Accept '); Get_User_Filename(ComOUT_Filename,Return_Code); If (ComIN_Filename = ComOUT_Filename) then Begin NormVideo; Writeln('Specify Separate Files for Input/Output Please'); LowVideo; End; Until (ComIN_Filename <> ComOUT_Filename); { Copy Compiler to Work File } CopyFile(ComIN_Filename,ComOUT_Filename,Return_Code); RmWin; { Remove the Window } End; { Get_Com_Names } {----------------------------------------------------------------------} { Z a p I n t e n s i t y : Transpose Compiler Edit Intensity } {----------------------------------------------------------------------} Procedure Zap_Intensity; { Reverse Compiler Intensity } Begin Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(x,y+1,x+48,y+8,White); { Make an input window } Textcolor(Green); TextBackground(Black); Clrscr; Open_Compiler; { Open Compiler/Get Version } If (Return_Code = 0) then Begin Zap_Type := Zap_Edit_Intensity; { Pass parm to cause } Make_Zap(Zap_Type,Return_Code); { Compiler Intensity zaps } If (Return_Code <> 0) then Begin { Write Error msg and pause } Pause(' Error Processing Intensity Zap '); end; If (Return_Code = 0) then Begin Pause(' Compiler Intensity Zaps Completed '); end; end; Close(Zap_file);Close(ComOut_File); RmWin; End; { Zap_Intensity } {----------------------------------------------------------------------} { Z a p X c m d : Install the PCDos eXecute Command } {----------------------------------------------------------------------} Procedure Zap_Xcmd; { Install the PCDos Turbo eXecute command } Begin Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(4,y+1,76,y+9,Magenta); { Make an input window } Textcolor(White); TextBackground(Red); Clrscr; Open_Compiler; { Open Compiler/Get Version } If (Return_Code = 0) then Begin Zap_Type := Zap_X_Command; { Pass parm to cause } Make_Zap(Zap_Type,Return_Code); { Compiler eXecute zaps } If (Return_Code <> 0) then Begin { Write Error msg and pause } Pause(' Error Processing eXecute Zap '); end; If (Return_Code = 0) then Begin Pause(' Compiler eXecute Zap Completed '); end; end; Close(Zap_file);Close(ComOut_File); RmWin; End; { Zap_Intensity } {----------------------------------------------------------------------} { U s e r Z a p : Execute a user specified zap from file } {----------------------------------------------------------------------} Procedure User_Specified_Zap; { Install a User Specified zap } Var { whose key we will obtain from} TempStr :string[80]; { the console, then match up } Procedure Exit_Out; { Provide Cleanup and Exit Rtn } Begin Close(Zap_file);Close(ComOut_File); RmWin; End; Begin { with a Zap title in the file } Get_Abs_Cursor(x,y); { Get current cursor position } MkWin(4,y+1,76,y+9,Cyan+Bright); { Make an input window } Textcolor(White); TextBackground(Blue); Clrscr; Open_Compiler; { Open Compiler/Get Version } If (Return_Code = 0) then Begin Zap_Type := User_Zap_Type; { Index is User Zap type } Writeln(' Enter the search Keyword for this ZAP:'); Readln(TempStr); { Ask user for the zap Key } If (Ord(TempStr[0]) < 1) or (TempStr[1] <= ' ') then Begin Exit_Out; Exit; End; Zap_Headers[User_Zap_Type] := TempStr; Make_Zap(Zap_Type,Return_Code); { Find and Make the Zap } If (Return_Code <> 0) then Begin { Write Error msg and pause } Pause(' Error Processing User Zap '); end; If (Return_Code = 0) then Begin Pause(' User Specified Zap Completed '); end; end; Exit_Out; End; { User_Specified_Zap } {----------------------------------------------------------------------} { S a y B y e B y e : Terminate Program } {----------------------------------------------------------------------} Procedure Say_ByeBye; Begin Writeln (' Bye Bye'); End ; {----------------------------------------------------------------------} { M a i n P r o c e d u r e } {----------------------------------------------------------------------} Begin {Main} {----------------------------------------------------------------------} { S h o w M e n u O p t i o n s } {----------------------------------------------------------------------} MkWin(1,1,Max_String,Max_Items+8,Yellow); { Make an Options Window } Repeat {until Choice = Exit_Pgm} Textcolor(Bright+Cyan); TextBackground(Green); Option := Menu(Max_Items,Menu_Items); { Fetch User Choice } Choice := Option_Choices(Option); { Translate to Case } Case Choice of { Execute Sub-Menu Options } Zap_data : Get_Zapdata_file; Com_names : Get_Com_names; Edit_Intensity : Zap_Intensity; Edit_Colors : Zap_Colors; X_command : Zap_Xcmd; User_Zap : User_Specified_Zap; None,Exit_Pgm : Say_ByeBye else Begin Beep(600); Clrscr; Pause ('...Undefined program funtion.'); end; end; { Case Choice } Until (Choice = Exit_Pgm) or (Choice = None); RmWin; (**) End. { Main } {......................................................................} {**********************************************************************} {* I N S T X . D O C *} {* *} {* Separate this file out into INSTX.DOC *} {**********************************************************************} These file are demarked into Text,Main,and Include files. A line of {*********} marks the file header and .... A line of {.........} marks the file trailer. The header indicates the filename used in the {$I ...} statement. {----------------------------------------------------------------------} { A r c h i v e F o r m a t s } {----------------------------------------------------------------------} If you found this file in ".ARC" format ...... It was necessary to Archive the files to avoid excessive download time. Separate the file with "ARC X INSTX2". Run Turbo with a main file of INSTX.200. The input Turbo Compiler 3.00B or 3.01A must reside within the current path. Patches will be made to a copy; not the "real thing". {----------------------------------------------------------------------} { L i b r a r i e d / S q u e e z e d } {----------------------------------------------------------------------} The Borland Sysops do not make allowances for [read reject] ARChive'd format. Therefore this file is LBR'd, then Squeezed to avoid excessive cost of uploading/downloading. It will require Xmodem in any case. I apologize for the inconvenience to the user and hope Borland's decision is more reasonable than arbitrary. {----------------------------------------------------------------------} { I n s t a l l e X e c u t e C o m m a n d } {----------------------------------------------------------------------} This program provides modifications to the Borland Turbo Pascal compiler Versions 3.00B and 3.01A. Menu selections are - 1) Specify Input Zap Data File This entry allows you to specify your own input zap file or accept the default "INSTX.ZAP" provided. 2) Specify Input/Output .COM File Names This entry allows you to override the default Input/Output files used as source and target of the zaps or accept the defaults of "TURBO.COM" and "TURBX.COM" as the input and output file respecively. The input file will be copied to the output file. The output file name must specify a file other than the input file. 3) Reverse Edit Intensity Attributes This zap will reverse the intensity attributes of the Turbo editor Menus and editor text screen. This zap will not affect the intensity attributes of programs produced by Turbo. 4) Specify Edit Screen colors This zap allows PC Color Graphics Adapter (CGA) users to choose full screen color attributes for Hilite, Normal, Marked, and Error text for the Editor menus and screen. This does not affect color/attributes of programs produced by the compiler. 5) Install the eXecute Command This zap will install a DOS shell (EXEC process) so you may exit to DOS while preserving the TURBO environment. You must enter the DOS EXIT command to return to TURBO. Note that this process requires a minimum of 128K for the TURBO compiler. The eXecute command will obtain a second copy of COMMAND.COM from the path specifed by the Comspec= environment parameter. (Thanks to John Falconer's UseEnv function). Thus, you must have Command.Com available via that path. Errors are returned as "EXEC Error #" where # = 2: Command.Com not found on specified (Comspec) path 3: Path not found - incorrect Comspec path assignment 4: Too many open files - cant get a handle from DOS 5: Access denied - hidden Command.Com ??? Say What !!??? 6: Invalid Handle 7: Memory control blocks destroyed-memory allocation err 8: Insufficient memory to run secondary shell 9: invalid Memory block address - clobbered memory : 15: Invalid drive specified for further information on unlikely errors see DOS Technical Reference Manual (Murphy's Error Return Table 5-15). 6) User specified Zaps This menu will ask you for a Keyword, search the Zap file for a matching Keyword+Version and apply the zap. Look at the INSTX.ZAP file for user zaps that apply to your particular version of TURBO. You will find such zaps by TURBO gurus as Bela Lubkin N.Arley Dealey et al. whose ideas gave rise to this program. The "maximum" zap sets the default mAximum memory that a compiled program uses to 64K rather than All memory. the "msgyes" zap causes the compiler to answer its own "Include error messages (Y/N)?" Yes, while the "msgno" does the opposite. Regards - The Hunters Helper - Lane Ferris 4268 26th St. San Francisco 94131 CompuServe [70357,2716] {......................................................................} {**********************************************************************} {* I N S T X . Z A P *} {* Separate this file out into INSTX.ZAP *} {**********************************************************************} VERSIONS $0101 $2BB3 PC300B PC-DOS Turbo Pascal Version 3.00B $0101 $2C79 PC301A PC-DOS Turbo Pascal Version 3.01A 0 INTENSITY PC301A TP301A Menu/Edit Intensity Reversal $3F9F 3 $E8 $15 $00 Call 3FB7 Menu Intensity Reversal $3FA4 3 $E8 $20 $00 Call 3FC7 $3FC3 3 $E9 $CB $C2 Jmp 0291 Edit Intensity Reversal $3FD3 3 $E9 $C4 $C2 Jmp 029A 0 COLORS PC301A Fake Color Zap for Positioning $177 4 $0E $07 $07 $4F HiLite Normal Marked Error attributes 0 maximum PC301A Set mAximum Compiler Free to 64K $2E3A 2 $00 $10 0 msgyes PC301A Set Compiler Error Message Load to yes $2F5E 4 $0C $FF $EB $1E 0 msgno PC301A Set Compiler Error Message Load to no $2F5E 4 $24 $00 $EB $1E 0 XCOMMAND PC301A Compiler 301A Execute Command $2DB1 2 $10 $A3 New Turbo Module Length $3012 2 $FC $6B Call to Initialize $3099 8 $65 $D8 $65 $63 $75 $74 $65 $20 eXecute $9C10 16 $E9 $EA $02 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C20 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C30 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C40 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C50 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C60 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C70 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C80 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C90 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CA0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CB0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CC0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CD0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CE0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CF0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9D00 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9D10 16 $58 $0E $50 $1E $E8 $00 $00 $5B $81 $EB $07 $01 $B1 $04 $D3 $EB $9D20 16 $8C $C8 $03 $C3 $8E $D8 $E8 $45 $00 $8C $0E $FD $05 $B8 $23 $01 $9D30 16 $1E $50 $CB $E8 $49 $00 $8C $16 $F9 $05 $89 $26 $FB $05 $33 $C9 $9D40 16 $2B $CC $B8 $D4 $05 $2B $C1 $0E $17 $8B $E0 $E8 $B7 $00 $E8 $62 $9D50 16 $00 $E8 $FC $00 $0B $C0 $74 $03 $E8 $89 $00 $E8 $93 $00 $E8 $35 $9D60 16 $00 $8E $16 $F9 $05 $8B $26 $FB $05 $E8 $AF $00 $1F $CB $1E $1E $9D70 16 $07 $0E $1F $33 $F6 $8B $FE $B9 $00 $01 $FC $F3 $A4 $1F $C3 $33 $9D80 16 $C9 $2B $CC $0E $07 $8B $F4 $03 $F1 $BF $D4 $05 $1E $16 $1F $4E $9D90 16 $4F $FD $F3 $A4 $1F $C3 $33 $C9 $2B $0E $FB $05 $0E $07 $BE $D4 $9DA0 16 $05 $8B $3E $FB $05 $03 $F9 $06 $8E $06 $F9 $05 $4F $4E $FD $F3 $9DB0 16 $A4 $07 $C3 $BA $05 $06 $E8 $1E $00 $A1 $FD $05 $48 $8E $C0 $26 $9DC0 16 $A1 $03 $00 $A3 $FF $05 $B1 $06 $D3 $E8 $BB $47 $06 $E8 $07 $01 $9DD0 16 $BA $39 $06 $E8 $01 $00 $C3 $52 $BA $68 $06 $E8 $01 $00 $5A $B4 $9DE0 16 $09 $CD $21 $C3 $BB $34 $06 $E8 $ED $00 $BA $24 $06 $E8 $E7 $FF $9DF0 16 $C3 $A1 $FD $05 $06 $8E $C0 $8B $1E $FF $05 $B4 $4A $CD $21 $07 $9E00 16 $72 $02 $33 $C0 $C3 $1E $1E $07 $33 $C0 $8E $D8 $BE $88 $00 $BF $9E10 16 $01 $06 $B9 $02 $00 $FC $A5 $E2 $FC $1F $C3 $33 $C0 $8E $C0 $BF $9E20 16 $88 $00 $BE $01 $06 $B9 $02 $00 $FC $A5 $E2 $FC $C3 $A1 $FD $05 $9E30 16 $48 $8E $C0 $26 $03 $06 $03 $00 $40 $8E $C0 $26 $A1 $03 $00 $B1 $9E40 16 $06 $D3 $E8 $BB $61 $06 $E8 $8E $00 $BA $51 $06 $E8 $90 $FF $C3 $9E50 16 $55 $8B $EC $1E $06 $FC $BB $FA $06 $B1 $04 $D3 $EB $8C $C9 $03 $9E60 16 $D9 $81 $C3 $00 $10 $43 $A1 $FD $05 $06 $2B $D8 $8E $C0 $B4 $4A $9E70 16 $CD $21 $07 $73 $03 $EB $5C $90 $E8 $B2 $FF $2E $89 $26 $F6 $06 $9E80 16 $2E $8C $16 $F8 $06 $C7 $06 $7E $06 $00 $00 $B8 $00 $37 $CD $21 $9E90 16 $88 $16 $8D $06 $8D $16 $8C $06 $89 $16 $80 $06 $8C $1E $82 $06 $9EA0 16 $B8 $00 $00 $50 $B8 $B5 $06 $1E $50 $B8 $9C $06 $1E $50 $8B $EC $9EB0 16 $E8 $1B $01 $BA $9D $06 $8C $C8 $8E $D8 $8E $C0 $BB $7E $06 $B4 $9EC0 16 $4B $B0 $00 $CD $21 $72 $02 $33 $C0 $2E $8E $16 $F8 $06 $2E $8B $9ED0 16 $26 $F6 $06 $07 $1F $5D $C3 $1E $0E $1F $52 $56 $B9 $04 $00 $C6 $9EE0 16 $07 $20 $43 $E2 $FA $BE $0A $00 $2B $D2 $F7 $F6 $83 $C2 $30 $4B $9EF0 16 $88 $17 $41 $0B $C0 $75 $F1 $8B $C1 $5E $5A $1F $C3 $E8 $01 $02 $9F00 16 $8B $EC $E8 $00 $00 $58 $2D $08 $00 $2D $ED $02 $B1 $04 $D3 $E8 $9F10 16 $8C $C9 $03 $C1 $8E $D8 $8C $0E $FD $05 $B8 $10 $03 $1E $50 $CB $9F20 16 $F6 $06 $6B $06 $01 $75 $03 $E8 $2C $00 $E8 $10 $00 $E8 $E6 $01 $9F30 16 $2E $FF $36 $FD $05 $2E $FF $36 $2B $03 $CB $00 $00 $8E $06 $FD $9F40 16 $05 $8B $1E $7C $06 $8B $5F $06 $26 $8A $1F $B1 $04 $D2 $EB $32 $9F50 16 $FF $B4 $0B $CD $10 $C3 $80 $0E $6B $06 $01 $8E $06 $FD $05 $8B $9F60 16 $46 $12 $8B $D8 $83 $EB $02 $26 $8B $07 $05 $ED $02 $26 $89 $07 $9F70 16 $8B $46 $12 $C7 $06 $7C $06 $6C $06 $3B $06 $6C $06 $74 $06 $C7 $9F80 16 $06 $7C $06 $74 $06 $8B $1E $7C $06 $8B $47 $02 $A3 $2B $03 $8B $9F90 16 $5F $04 $8E $06 $FD $05 $26 $8B $37 $B9 $21 $00 $BF $D4 $05 $1E $9FA0 16 $07 $1E $8E $1E $FD $05 $F3 $A4 $1F $8B $1E $7C $06 $8B $5F $04 $9FB0 16 $8B $0E $FD $05 $8E $C1 $8C $D8 $2B $C1 $B9 $04 $00 $D3 $E0 $50 $9FC0 16 $05 $D4 $05 $26 $89 $07 $58 $05 $00 $01 $A3 $F6 $05 $C3 $55 $1E $9FD0 16 $06 $83 $EC $04 $8B $EC $2B $C0 $C4 $5E $10 $26 $8A $07 $3C $00 $9FE0 16 $77 $03 $E9 $07 $01 $89 $46 $00 $03 $D8 $43 $26 $C6 $07 $3D $8C $9FF0 16 $CA $8E $C2 $26 $8B $1E $2C $00 $83 $FB $00 $75 $0D $8B $DA $4B $A000 16 $8E $C3 $26 $03 $1E $03 $00 $83 $C3 $02 $8B $D3 $4A $8E $C2 $26 $A010 16 $8B $0E $03 $00 $D1 $E1 $D1 $E1 $D1 $E1 $D1 $E1 $89 $4E $02 $8E $A020 16 $C3 $2B $FF $8B $DF $8B $D1 $3B $7E $02 $73 $40 $B0 $3D $E8 $C8 $A030 16 $00 $75 $39 $8B $DF $8B $D1 $4F $8B $4E $00 $C5 $76 $10 $41 $03 $A040 16 $F1 $FD $F3 $A6 $75 $E1 $83 $7E $14 $00 $75 $29 $8B $FB $8B $CA $A050 16 $B0 $00 $FC $F2 $AE $2B $D1 $8B $CA $49 $8C $C0 $8E $D8 $8B $F3 $A060 16 $C4 $7E $0C $26 $88 $0D $47 $F3 $A4 $EB $77 $90 $83 $7E $14 $00 $A070 16 $75 $2C $EB $78 $90 $03 $56 $00 $47 $8B $DF $B0 $00 $E8 $79 $00 $A080 16 $26 $3A $05 $75 $09 $8B $FB $26 $C6 $05 $00 $EB $11 $90 $8B $F7 $A090 16 $8B $4E $02 $2B $CF $8C $C0 $8E $D8 $8B $FB $FC $F3 $A4 $2B $FF $A0A0 16 $8B $4E $02 $B8 $00 $00 $26 $3B $05 $74 $06 $47 $E2 $F8 $EB $3C $A0B0 16 $90 $47 $8B $5E $02 $2B $DF $2B $5E $00 $7E $30 $83 $EB $02 $7E $A0C0 16 $2B $C5 $76 $0C $8A $0C $80 $F9 $00 $74 $17 $8B $4E $00 $41 $C5 $A0D0 16 $76 $10 $46 $FC $F3 $A4 $C5 $76 $0C $8A $0C $46 $F3 $A4 $B8 $00 $A0E0 16 $00 $AB $83 $C4 $04 $B0 $01 $22 $C0 $EB $08 $90 $83 $C4 $04 $B0 $A0F0 16 $01 $32 $C0 $07 $1F $5D $C2 $0A $00 $8B $FB $8B $CA $FC $F2 $AE $A100 16 $C3 $55 $8B $EC $87 $46 $00 $87 $46 $02 $53 $51 $52 $56 $57 $1E $A110 16 $06 $50 $8B $6E $02 $C3 $5D $07 $1F $5F $5E $5A $59 $5B $58 $55 $A120 16 $8B $EC $87 $6E $02 $C2 $02 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A130 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A140 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A150 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A160 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A170 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A180 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A190 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1A0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1B0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1C0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1D0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1E0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1F0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A200 16 $00 $00 $00 $00 $00 $58 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A210 16 $00 $00 $00 $00 $00 $45 $6E $74 $65 $72 $20 $5B $45 $58 $49 $54 $A220 16 $5D $20 $74 $6F $20 $43 $6F $6E $74 $69 $6E $75 $65 $20 $54 $55 $A230 16 $52 $42 $4F $24 $45 $78 $65 $63 $20 $45 $72 $72 $6F $72 $20 $43 $A240 16 $6F $64 $65 $20 $30 $30 $30 $30 $24 $54 $75 $72 $62 $6F $20 $52 $A250 16 $65 $67 $69 $6F $6E $3A $20 $30 $30 $30 $30 $20 $4B $20 $2D $20 $A260 16 $24 $65 $58 $65 $63 $75 $74 $65 $20 $52 $65 $67 $69 $6F $6E $3A $A270 16 $20 $30 $30 $30 $30 $20 $4B $24 $0D $0A $24 $00 $31 $2F $C3 $3E $A280 16 $F0 $2E $78 $01 $14 $30 $8B $3F $B6 $2F $78 $01 $4C $01 $00 $00 $A290 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $0F $2F $43 $20 $A2A0 16 $43 $4F $4D $4D $41 $4E $44 $2E $43 $4F $4D $0D $00 $00 $00 $00 $A2B0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2C0 16 $00 $00 $00 $00 $00 $07 $43 $4F $4D $53 $50 $45 $43 $3D $06 $50 $A2D0 16 $52 $4F $4D $50 $54 $3D $1E $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2E0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2F0 16 $00 $00 $00 $00 $00 $07 $00 $EF $06 $00 $00 $C7 $06 $C7 $06 $54 $A300 10 $55 $52 $42 $4F $0D $0A $00 $00 $00 $00 0 INTENSITY PC300B TP300B Menu/Edit Intensity Reversal $3EFB 3 $E9 $76 $C3 Jmp 0274 Edit Intensity Reversal $3F0B 3 $E9 $6F $C3 Jmp 027D $3ED7 3 $E8 $15 $00 Call 3EEF Reverse Menu Intensity $3EDC 3 $E8 $20 $00 Call 3EFF 0 COLORS PC300B Fake Color Zap for Positioning $177 4 $0E $07 $07 $4F HiLite Normal Marked Error attributes 0 XCOMMAND PC300B Compiler 300B Execute Command $2CEB 2 $10 $A3 New Turbo Module Length $2F2F 2 $DF $6C Call to Initialize $2FD3 8 $65 $D8 $65 $63 $75 $74 $65 $20 eXecute $9C10 16 $E9 $EA $02 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C20 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C30 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C40 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C50 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C60 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C70 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C80 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9C90 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CA0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CB0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CC0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CD0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CE0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9CF0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9D00 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $9D10 16 $58 $0E $50 $1E $E8 $00 $00 $5B $81 $EB $07 $01 $B1 $04 $D3 $EB $9D20 16 $8C $C8 $03 $C3 $8E $D8 $E8 $45 $00 $8C $0E $FD $05 $B8 $23 $01 $9D30 16 $1E $50 $CB $E8 $49 $00 $8C $16 $F9 $05 $89 $26 $FB $05 $33 $C9 $9D40 16 $2B $CC $B8 $D4 $05 $2B $C1 $0E $17 $8B $E0 $E8 $B7 $00 $E8 $62 $9D50 16 $00 $E8 $FC $00 $0B $C0 $74 $03 $E8 $89 $00 $E8 $93 $00 $E8 $35 $9D60 16 $00 $8E $16 $F9 $05 $8B $26 $FB $05 $E8 $AF $00 $1F $CB $1E $1E $9D70 16 $07 $0E $1F $33 $F6 $8B $FE $B9 $00 $01 $FC $F3 $A4 $1F $C3 $33 $9D80 16 $C9 $2B $CC $0E $07 $8B $F4 $03 $F1 $BF $D4 $05 $1E $16 $1F $4E $9D90 16 $4F $FD $F3 $A4 $1F $C3 $33 $C9 $2B $0E $FB $05 $0E $07 $BE $D4 $9DA0 16 $05 $8B $3E $FB $05 $03 $F9 $06 $8E $06 $F9 $05 $4F $4E $FD $F3 $9DB0 16 $A4 $07 $C3 $BA $05 $06 $E8 $1E $00 $A1 $FD $05 $48 $8E $C0 $26 $9DC0 16 $A1 $03 $00 $A3 $FF $05 $B1 $06 $D3 $E8 $BB $47 $06 $E8 $07 $01 $9DD0 16 $BA $39 $06 $E8 $01 $00 $C3 $52 $BA $68 $06 $E8 $01 $00 $5A $B4 $9DE0 16 $09 $CD $21 $C3 $BB $34 $06 $E8 $ED $00 $BA $24 $06 $E8 $E7 $FF $9DF0 16 $C3 $A1 $FD $05 $06 $8E $C0 $8B $1E $FF $05 $B4 $4A $CD $21 $07 $9E00 16 $72 $02 $33 $C0 $C3 $1E $1E $07 $33 $C0 $8E $D8 $BE $88 $00 $BF $9E10 16 $01 $06 $B9 $02 $00 $FC $A5 $E2 $FC $1F $C3 $33 $C0 $8E $C0 $BF $9E20 16 $88 $00 $BE $01 $06 $B9 $02 $00 $FC $A5 $E2 $FC $C3 $A1 $FD $05 $9E30 16 $48 $8E $C0 $26 $03 $06 $03 $00 $40 $8E $C0 $26 $A1 $03 $00 $B1 $9E40 16 $06 $D3 $E8 $BB $61 $06 $E8 $8E $00 $BA $51 $06 $E8 $90 $FF $C3 $9E50 16 $55 $8B $EC $1E $06 $FC $BB $FA $06 $B1 $04 $D3 $EB $8C $C9 $03 $9E60 16 $D9 $81 $C3 $00 $10 $43 $A1 $FD $05 $06 $2B $D8 $8E $C0 $B4 $4A $9E70 16 $CD $21 $07 $73 $03 $EB $5C $90 $E8 $B2 $FF $2E $89 $26 $F6 $06 $9E80 16 $2E $8C $16 $F8 $06 $C7 $06 $7E $06 $00 $00 $B8 $00 $37 $CD $21 $9E90 16 $88 $16 $8D $06 $8D $16 $8C $06 $89 $16 $80 $06 $8C $1E $82 $06 $9EA0 16 $B8 $00 $00 $50 $B8 $B5 $06 $1E $50 $B8 $9C $06 $1E $50 $8B $EC $9EB0 16 $E8 $1B $01 $BA $9D $06 $8C $C8 $8E $D8 $8E $C0 $BB $7E $06 $B4 $9EC0 16 $4B $B0 $00 $CD $21 $72 $02 $33 $C0 $2E $8E $16 $F8 $06 $2E $8B $9ED0 16 $26 $F6 $06 $07 $1F $5D $C3 $1E $0E $1F $52 $56 $B9 $04 $00 $C6 $9EE0 16 $07 $20 $43 $E2 $FA $BE $0A $00 $2B $D2 $F7 $F6 $83 $C2 $30 $4B $9EF0 16 $88 $17 $41 $0B $C0 $75 $F1 $8B $C1 $5E $5A $1F $C3 $E8 $01 $02 $9F00 16 $8B $EC $E8 $00 $00 $58 $2D $08 $00 $2D $ED $02 $B1 $04 $D3 $E8 $9F10 16 $8C $C9 $03 $C1 $8E $D8 $8C $0E $FD $05 $B8 $10 $03 $1E $50 $CB $9F20 16 $F6 $06 $6B $06 $01 $75 $03 $E8 $2C $00 $E8 $10 $00 $E8 $E6 $01 $9F30 16 $2E $FF $36 $FD $05 $2E $FF $36 $2B $03 $CB $00 $00 $8E $06 $FD $9F40 16 $05 $8B $1E $7C $06 $8B $5F $06 $26 $8A $1F $B1 $04 $D2 $EB $32 $9F50 16 $FF $B4 $0B $CD $10 $C3 $80 $0E $6B $06 $01 $8E $06 $FD $05 $8B $9F60 16 $46 $12 $8B $D8 $83 $EB $02 $26 $8B $07 $05 $ED $02 $26 $89 $07 $9F70 16 $8B $46 $12 $C7 $06 $7C $06 $6C $06 $3B $06 $6C $06 $74 $06 $C7 $9F80 16 $06 $7C $06 $74 $06 $8B $1E $7C $06 $8B $47 $02 $A3 $2B $03 $8B $9F90 16 $5F $04 $8E $06 $FD $05 $26 $8B $37 $B9 $21 $00 $BF $D4 $05 $1E $9FA0 16 $07 $1E $8E $1E $FD $05 $F3 $A4 $1F $8B $1E $7C $06 $8B $5F $04 $9FB0 16 $8B $0E $FD $05 $8E $C1 $8C $D8 $2B $C1 $B9 $04 $00 $D3 $E0 $50 $9FC0 16 $05 $D4 $05 $26 $89 $07 $58 $05 $00 $01 $A3 $F6 $05 $C3 $55 $1E $9FD0 16 $06 $83 $EC $04 $8B $EC $2B $C0 $C4 $5E $10 $26 $8A $07 $3C $00 $9FE0 16 $77 $03 $E9 $07 $01 $89 $46 $00 $03 $D8 $43 $26 $C6 $07 $3D $8C $9FF0 16 $CA $8E $C2 $26 $8B $1E $2C $00 $83 $FB $00 $75 $0D $8B $DA $4B $A000 16 $8E $C3 $26 $03 $1E $03 $00 $83 $C3 $02 $8B $D3 $4A $8E $C2 $26 $A010 16 $8B $0E $03 $00 $D1 $E1 $D1 $E1 $D1 $E1 $D1 $E1 $89 $4E $02 $8E $A020 16 $C3 $2B $FF $8B $DF $8B $D1 $3B $7E $02 $73 $40 $B0 $3D $E8 $C8 $A030 16 $00 $75 $39 $8B $DF $8B $D1 $4F $8B $4E $00 $C5 $76 $10 $41 $03 $A040 16 $F1 $FD $F3 $A6 $75 $E1 $83 $7E $14 $00 $75 $29 $8B $FB $8B $CA $A050 16 $B0 $00 $FC $F2 $AE $2B $D1 $8B $CA $49 $8C $C0 $8E $D8 $8B $F3 $A060 16 $C4 $7E $0C $26 $88 $0D $47 $F3 $A4 $EB $77 $90 $83 $7E $14 $00 $A070 16 $75 $2C $EB $78 $90 $03 $56 $00 $47 $8B $DF $B0 $00 $E8 $79 $00 $A080 16 $26 $3A $05 $75 $09 $8B $FB $26 $C6 $05 $00 $EB $11 $90 $8B $F7 $A090 16 $8B $4E $02 $2B $CF $8C $C0 $8E $D8 $8B $FB $FC $F3 $A4 $2B $FF $A0A0 16 $8B $4E $02 $B8 $00 $00 $26 $3B $05 $74 $06 $47 $E2 $F8 $EB $3C $A0B0 16 $90 $47 $8B $5E $02 $2B $DF $2B $5E $00 $7E $30 $83 $EB $02 $7E $A0C0 16 $2B $C5 $76 $0C $8A $0C $80 $F9 $00 $74 $17 $8B $4E $00 $41 $C5 $A0D0 16 $76 $10 $46 $FC $F3 $A4 $C5 $76 $0C $8A $0C $46 $F3 $A4 $B8 $00 $A0E0 16 $00 $AB $83 $C4 $04 $B0 $01 $22 $C0 $EB $08 $90 $83 $C4 $04 $B0 $A0F0 16 $01 $32 $C0 $07 $1F $5D $C2 $0A $00 $8B $FB $8B $CA $FC $F2 $AE $A100 16 $C3 $55 $8B $EC $87 $46 $00 $87 $46 $02 $53 $51 $52 $56 $57 $1E $A110 16 $06 $50 $8B $6E $02 $C3 $5D $07 $1F $5F $5E $5A $59 $5B $58 $55 $A120 16 $8B $EC $87 $6E $02 $C2 $02 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A130 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A140 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A150 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A160 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A170 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A180 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A190 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1A0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1B0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1C0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1D0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1E0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A1F0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A200 16 $00 $00 $00 $00 $00 $58 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A210 16 $00 $00 $00 $00 $00 $45 $6E $74 $65 $72 $20 $5B $45 $58 $49 $54 $A220 16 $5D $20 $74 $6F $20 $43 $6F $6E $74 $69 $6E $75 $65 $20 $54 $55 $A230 16 $52 $42 $4F $24 $45 $78 $65 $63 $20 $45 $72 $72 $6F $72 $20 $43 $A240 16 $6F $64 $65 $20 $30 $30 $30 $30 $24 $54 $75 $72 $62 $6F $20 $52 $A250 16 $65 $67 $69 $6F $6E $3A $20 $30 $30 $30 $30 $20 $4B $20 $2D $20 $A260 16 $24 $65 $58 $65 $63 $75 $74 $65 $20 $52 $65 $67 $69 $6F $6E $3A $A270 16 $20 $30 $30 $30 $30 $20 $4B $24 $0D $0A $24 $00 $31 $2F $C3 $3E $A280 16 $F0 $2E $78 $01 $14 $30 $8B $3F $B6 $2F $78 $01 $4C $01 $00 $00 $A290 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $0F $2F $43 $20 $A2A0 16 $43 $4F $4D $4D $41 $4E $44 $2E $43 $4F $4D $0D $00 $00 $00 $00 $A2B0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2C0 16 $00 $00 $00 $00 $00 $07 $43 $4F $4D $53 $50 $45 $43 $3D $06 $50 $A2D0 16 $52 $4F $4D $50 $54 $3D $1E $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2E0 16 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $00 $A2F0 16 $00 $00 $00 $00 $00 $07 $00 $EF $06 $00 $00 $C7 $06 $C7 $06 $54 $A300 10 $55 $52 $42 $4F $0D $0A $00 $00 $00 $00 0 {......................................................................} y,ͫCopyright (C) 1985 BORLAND IncW<3Default display modePpp.' tC.PXuy,n. &.&D.&&L"P3 .X.....4..>u.&D.&.ËËQYU]:tU>.j2]SQRUA>.j:u2]ZY[SQRUPXPXô2SQRU>.j]ZY[.mj..DU:t2]XPSQRVWU.:6ks .:js2]_^ZY[X//*2!*2[<w.kX t:r*Ā ش ]Uش ][> t?=wX;w X;sX; s [ZYS x ; w x;wU]ô _XZ[ [W ;~;+ãAs ~++ã£Ë+£A8 ~++£ã3+txAIQRZYËظ4;sau aCBBa$aÑ[_)PQYX%;u;&E&]P X[S>&(r3$ȋ."0>"t%s >.0&=st +%6&=T`njQRȋӋČӃ_3hZYwo 33SP&u&5njT&&E&E&E6.&<&D6&&<&DÑ[_[S& &Ur3$*,>"njsW&&]s6,6*&&\&D&D& &U&E&]<t&=&E&]& &U&"$&&]ȋӡ*,&E&]24nj4KVuQJt1&&\&L&T&&]24)&E&]3É>W3_3333>"t&=ČӃ3+r;sȋ[&&U[&=>>"$3>">u t% u"2 u & u>u<u|2XZPRURX< uh< u .:6kr[?<u :tOK<u2ER 2Z.:jr'.:6krR>.jZ2]>uL&t L9<uL1XXZPXZP 2=tt2tGU!]VQ6z|<t FFY^Yr^QV6z|9uFF^Y빋6z| t >FF3r@>z|3&b && 63~6 Sl= E M lCSQRWV2P:^_ZY[SQRWVL8U^.C t^] "_.u Ȏ+شJ.Dv.Dx..LQVX^Y@>^.D` t Z\>j.Dl t fhV3&&&2&rt & &rt~3`Zlfô0+ tú_ M  u  Not enough memory$Incorrect DOS version$ Program aborted $PZf3&&XruL6v=Px[. t53ҋ tSB[;t +NOJu^.;uPRV2 tGW t:t \t\GFF.FG u=_^Zr).B2Ί2Yr?Tr>늲V[RS L6[YSЊ t[+L3ҿ. 2G3.< t< uGI.< t< tGI+tCJuғÈ>[YXSQ#>[ZXEESPY>W2-+v G& :t󑻶CG&:t_&52>[GS38t08ur!>&r>38t->&ù@X62;vBF,>[ڋ_[ڋ+[Y_㑌[_^;sNO[XUPWSPحȭЭPP^XÜWU~ ë«XƫXثXX[];sòv;|;òh+r=r;ròI[XSLVtLi&<tÏ#3À>uÊ [XSRZ- u RR6~Zs^C User Break0w  I/O Run-time error , PC= Program aborted  yP[ËSQNJ݊2XXظbȸ6؉ y-C2'd 2+sut0C3?$ uCP0X0r% ru rsRZr2s tÊ-uCQYr -u=u-u[& 2A+^. 2A+Z62C6?:v6Ag[2+L6 G[262+ t'y6 A6 AGEtH 9uH -sH !vH wH rH Ë6 2G62Fڊ;v t u:ZYQ62F6 r&62+AV^NOAG&XrH62+v;v3҇6&[62D62G6 2F3+r@ tBQWV^_Yt@GJu3&[&  S>WPHB> >6%W[S>WPH u>lP[Xu6\26@6@[6:t22AG u tòp[Z Q t2uY **t2u[ 36Ñ[XS*r2A6sCËFF6| 6D"22$[22 ;tNOG3t5 @3}Hu u3 @_  Q# A# 6G" t3 6"t@ "2܊ȀË$;øu;u@ ;øu;uH    t3>  uދ:vއ׈$*Ȁ(r$߉> &!>"06#΀r 3Ҁr ߊ2 t u$#us^uTÆއ*s6!Ҁ u׊2,ruƀuu333À26! to tq233ҿG- u ߊ2s &Nuu͑ƀu tɑ26! u333 t*;u ;u:&r *&Nu -tOs*&r;u ;u:&ƀu uYr r[333s[É3Հ倈.!΀6>WVQY^_WVQY^_WVQY^_WVQY^_R3ZyRZƀtt:u t ;u;u: u33Ê yڸ u xy x3_Yڹ33 Sr!yEt*s2< r ЊRZ uy& < r [&ŀt-j t yYKy t.It@ux, uðE++ yٰ-/ s:  tF0CË]U u&00FF2uÊPR,MZXuQvYhìx-Sx9?+{Η@ uÀ΀QRSPYYYYs uÀ^_ZY[WVǀuπ*r< s t33øËڋ tǀuXSQR8[_S;ufv5W} _s&>8t &EEL&E&E"286&E$t&e&M>u>urtD&€t&E>8s&E&]&]&] tYB&33&Mr+s33QʋиB&Z&u&<tFBu B&`&E@&E&E&E&E Ï6&}u&U&+U t B&$@&3븏6&}@u!Ï6&E$u&&E&vt&>sù $QS.:t [YFCYY<:u.._CONTRMKBDLSTCAUXUSRINPOUTERR&=u-=8t<3ɲRU CZr&È<uÏ2Z4&>24&Eu&2f4&>24&E@u&22Z4&\WPX t_&2.~r~~62<t9<t5<tC<t+<t'<t5<tC< tE< r:tъ'C s'Cxi Ku묊< r&Cu t uR CCÊ&PX&>2>uu&E uh$u&]&;] r_&]&C&]?W<u;r C<uL8<uL@LD_&E&M &Eðô?&&M&U\s3&] u&@&]&] WSD[<t"&e< vC5tS)[< v&e?_r?tW&e_[&[St$r s&&Ý[S}tW:(_r[S32WSQY[< t<t&e_C&_&[S2WQzY< t<t &e__ [<t&e< t< uG< u&e>2>u?&Mu&]&C&]&;] t%PtttB:<>&M&+Mt@&&U&Ur;t t%<v I QxY[XSo[XSQWX+v S QPY[˻SQ@Y[CÒ[Y:EESQA[YS) u ) TRUEFALSECC6*v2S QY[62C t 6SQY[CZ[.2C .SQY[C  6&Et RZ:t<t< w t &e3@32286Q8Y>uQ Y>u&MÏ6@&3L6&EL>24&}u&8?8@[^S>uA>2&8&&Mr!;t#>8?u t&M+3à93ҏ_6&MʋиB&QRY[r;u;t[SD&{ u@ [SB&33`&MO[S[SB&33@PRB&331Y[PRӸB&"ZX&MI[Sht3۹!sË؋Ñ[_SM[_SJ8?8@Z^_P>Y>u ;t9&8?8@[XZ^_SQ _&&&}tO&}tR&eZ&8&Zs93&Mt3 t>8?u P+ʎ3X@Ï6AU  sÏ_6VU W_r־} ÏZ6 t(:u,Ar<s܀>t ;r÷9:6X6 uo@:\GXs3ۊ t FC&u&û|,3ۏ6ruBS=U Zr0ظB3 r$?|->ۋ&t~"!W,6H4a.-, Specify Input Zap Data File & Specify Input/Output .COM File Names # Reverse Edit Intensity Attributes  Specify Edit Screen Colors  Install the eXecute Command  User Specified Zap  Exit this program INTENSITYCOLORSXCOMMANDUSER TURBO.COM TURBX.COM INSTX.ZAPI@J@c@e@UUb@P@~W.>k0W.>g0&2_,&_&~W~&2_&~W~&2_&]UU޿WWx~WgP-P-PY&2_&]UUL޿WWgP-P-PY&2KވFF2%5]UUL6޿WWgP-P-PY&2݈FF2%P.E02Y ]UULݿWWMgP-P-PY&2݈FF2PF2%Y ZъF2_]UUF2=t.>X0&P.>\0&2-Z.>X0&P.>\0&2 Z]UULܿWWxgP-P-PY&2܈FF2 uF2 ܈FF2%s܈FgP-P-PYWF2_;&]UU.>H0&2=t ggMO.>L0&2QSU.<0]UUPPPPyϊF2P.E02Y ϊF2ϋF PF ePKۋF PF-Y+}AFQP YItFPۋF PF-Y+}CAFQF PFPSۋFPF|P9YItFF PFXPۋF PF-Y+}AFQ-PhYItFPNڋF PF PF-PF-θP0؊F22ΊF28] UU.<02=t UUU=5Px Windows nested too deep s3ֹٸPWUHW.>H0&2=t$UHcĽWW.>P0!UH?ĽWW.>T0ع:ٸ PUHĽWǠWMXءUHĽWW_&UHĽWW~_&F=PF-PkF +kF F+kFF=F-kF +kF F+kFF =|F F =|F Q؋F PF PFPFPF2%PVF MF OF-QF-S] UUL׸P.>H0&2=t$.>P0WUHĽW!.>T0WUHĽW֡UHkWhιm׸SPMWUH6ĽWǠ֡MPOPQPSʡUHĽW&PUHĽW&ԹֿWWpgP-P-PY&2ֈFF2%ʊF2ʡU-U]UUF;F FFFFF]UUF;F| FFFFF]UULJ~b֊F2=tHPY# uJX~x5֊F2ՈFF2]UUF˸dNjFq˸d]UULոXP~p׸ Press a Key...չGL,ՈF]UU tǸFFPFY+}CAFQFPFF~FH(Թ=aָ%qYItFD^ՋFPFF+-.Select Option with Arrow keys then press EnterԋFPFF5,- The Hunters Helper - INSTX 2.00t.:FFFPFFѹ ԿiWi2% .=02~FH(ӹ=TոԹLӈFF2= uIFPFFiѠi2%oǠi2v~FH(Sӹ=XոӊF2= tFF F.:Q=t F @=PtF~F'=HtF-~FF=tFFF2= tHPF2=tHY uF ]UU~W썾fW~{~W!~W_&~&=t Creating ~EԸҍfWҍbdJȍ~WľbWP`[ҍfWľbW`Eҋ`=tbdȍ~$ҍf]UU`W/ѿ`~W_&~&=u2wѿ/k Error: ~&PԱ~W~:Ӹ PdԡK ѹ ᗁJԱPCӍ~ ԹQЗC2= tF2HЈFjl Searching for Header ѹyAP|~ҸPe:й~&ģ&ģ`卾\PFСP-P鍾\:ҸP}Њ\2PF2Y;F2ψ\\э~P`Y ul\э~xu4~&E_ <> Positioned to Zap@24Ϲ Zap not found~&]UUXKϊF2H'Ϲ ᗁL/,ѱ~We‰F‰F~&=t`m~JϋFFFPFce Working...ϋF=u`"~VθPFY+},AQ`HPpΗ{"YIt`οxWF-θPFY+},AQxHPΗ{tYItF=t`TK]UU ~WVERSIONSϸKK ͹ ᗁWϹ͍~ϱпW=t` Q͹ ᗁ͡ 7͹ ᗋ=u=` ͹ ᗁ ̹ ᗁ9Q͡ ̹ ᗋ=tc-.-P.-Y+}sAQ P ̹ ᗁa=u= ~̹ ᗁW P e̹ ᗁj&PYItxW/@5x0̣=u1!2Please Specify .COM files firsteb=tP.-Y+}AQxW ˹ ᗋ-w˿x ˠ2P2YP [˹ X;t KYIt|=uQ;˸XPo.˸ P/I. is not a TURBO Compiler*αeb`k7]UUUvUfFnFFPF^6G-Y+}0AQPFmȹ ʸtPzYItFPFB]UvUFFFPF^6G-Y+}0AQPFǹ ʸPYItFPF]UvU ^6G^6G^6G^6GP^6oY;^6G^6G^6GP^6G`ǹ ]UvU e^6G^6+G^6G^6G^6;G|^6G^6G^6GP^6Gƹ ]UvU ^6G-^6G^6G=| ^6G^6GP^6Gƹ F]UvU ^6G^6G^6GPY; ^6G^6GP^6G!ƹ B]UvU &KȿWW^6WgP-P-PY&2_&]à ~&2LjF~&2%LjF~&2xLjF}ǿWWjǸPPJPP.D02:PFF2 船P,* * * Move Cursor to Select Colors * * *DǸPmoEnter *NJF2P.F02Y豺KM[Return]NJF2藺13 to select -- ƊF2P.F02Ym [Esc]ƊF2V to IgnoreFFPY+}vA.G0QPY+}KAFQFPFYP.G02ËF.G02yۋFPF-3YItF\v YIt.G0FPF2YFFPF2YFFPFqø~ňFLUhňFF2=Mt `qh=Kt LT=Ht 80@=Pt $,= t =t ĸXP-F2= tHPF2=tHY uB]UUUvUĢĠ2HmĹ ᗁL/rƱƿW=tP`ً^6ĿxW^6G-Ŀx}ދ^6ދ^6ދ^6yދ^6nPċ^6G2%ڷ^6G2ݷ1`b Enter Editor Hilite Attributes:VĹË^6W^6G2%x^6G2{ϵ' Return if acceptable or hit any key...ù@L%Ë^6G^6G2= t^6G2%^6G2M|~% Enter Editor Normal Text Attributes:mù‹^6W^6G2%菶^6G2蒶' Return if acceptable or hit any key...¹WL)<‹^6G^6G2= t^6G2% ^6G2d% Enter Editor Marked Text Attributes:.¹^6W^6G2%覵^6G2詵,.' Return if acceptable or hit any key...nL@S^6G^6G2= t^6G2%$^6G2'{% Enter Error Message Text Attributes:E^6W^6G2%轴^6G2CE' Return if acceptable or hit any key...2LWj^6G^6G2= txW^6G-xڋ^6ڋ^6ڋ^6ڋ^6`]ÃWW쿡PP0PP.D02蹿P.E02P.>02Y蚳.=02襳螿=t 芿=u3v! Error Processing Edit Color Zap =t18I Compiler Color Zaps Completed |y`Tx9J]UUԍ~@ ~ju~W~@P~JY+}:AQAnWAcC2_ZCYItqW~H=؍qW~W耾_&qf~W~B]UUWW޹。PP(PP.?02蹽P.?02褱.=02诱P耻+- Patch (Zap) Data File 肽;ӸP>ָ P4ֿ/\ָ PָPֹ>& Enter New File or to Accept ֹ/WW=u(qs /׾+_ not foundi֡=t贼]UU蝼WWݹ芼PP0PP.>02TP0.C02?.>02J螮 Default 3Inputv .COM File ѸPԸ PԿx/ݽ1ո PԸPiչ迻@B& Enter New File or to Accept 0չ膻x/WW=u( x/X not foundԡ=t Default %Outputg .COM File uиPӸ Pӿ/μ"Ը PӸPZԹ谺13& Enter New File or to Accept !Թw/WWx/^/WuJN.Specify Separate Files for Input/Output Pleaseӹ eۿx//讼ux/⻱N/ֻBWȹ]UU豹WW3ڹ螹PP0PP.D02hPD.?02S.=02^貫Wc=t/d42PW=u2  Error Processing Intensity Zap OL=t5ϸ# Compiler Intensity Zaps Completed  `Ϳxҹ茸]UUuWWعbPPLP P.B02/P .D02.A02%y*=td2߷PW=u0ӷ Error Processing eXecute Zap =t2蘷詹 Compiler eXecute Zap Completed ۹`˿xѹXS]UU*UvU`˿xjѹ'"]ÃQWW׹PPLP P.@02P.E02YĶP.D02诪.>02躪賶=t 苶' Enter the search Keyword for this ZAP: ̍~P;ΊF2=|HPF2= ~HY u ,m/W~ ?d2PW=u- Error Processing User Zap /,=t0诵 User Specified Zap Completed ߹5]UU Bye Bye]ùMPP<PP.C02P.E02P.@02Y.?02 LLP-Wߣڴ2=t Ҵ=t 辴=t 誴=t 薴=t 肴l=t WnX=t=t U?IXP}蔦9J...Undefined program funtion.|ޠ2=tHP2=tHY u3萰