IMD 1.17: 25/12/2010 8:47:56 special test programs edfile.com vde-2ce.com l111.com edifle.doc vde-2c.com memtst.com edfile.not vde-2c.doc memtst.doc findbad.com EDFILE COMW EDFILE DOC EDFILE DOC EDFILE NOT!L111 COMx"#$%&'()*+,-./0VDE-2C COM-123456VDE-2C DOCm789:;<=>?@ABCDFINDBAD COM"EFGHIMEMTST COMJKMEMTST DOCLVDE-2C LBRjuvwxyz{|}~VDE-2CE COM/1 Vers: 01-10-84; by: J.C.Kaltwasser & M.J.Mosko, K3RL $= Q`` #    *+͛+}2 (D+* (&I+! (;(}2(*(&!B*/!+!*ͻ*! (!))*"'*'!i!{(!i!!/*!\Q+!B*ʇ!i+!+!*ͻ*!\+!\!!"'*')*"'*'!B*ʶ!"'!(*')*!ͱ(!x͠+*'!}2("'2'7*"'ͼ !\"(*(! )!CB**(! )!OB*ͽ)*(! )!MB*ͽ)=!"'!! ʹ!\+|ʅ! **!+!*V! **!"'Ý*'&*ʖiÝ!}2'*!?**'&|*(&!^*!}2'*(&!̀)!͑)!}2'*'&*'& ***͎(}2'!! *'&!EB**'&!B*): !}2'*'&!QB**'&!B*)c*'&!HB*u*'&!MB*ʇ*'&!BB*ʜ!"'*'&!ZB*ʸ*'!S*"'*'&!-B**'!.)*'!S*"'*'!S*"'*'&!RB* !+"'*'&!AB*c!+"(*'*(S*!^**'.)"'|c!*'S**(!^*"'*'&!OB*!+"'*'&!SB**'&!CB*)ʡb*'&! B**'&!+B*)*'&!=B*)!'(*'o)!"'*'*'7*=͕ !\Y+ͻ*!+͕ ͕ !+͕ !+!ͤ !3+!ͤ !J+͕ !^+!ͤ !u+!ͤ !+͕ !+!ͤ !+!ͤ !+͕ !+!ͤ !+!ͤ ! +͕ !/ +͕ ͕ !F +͕ ![ +!ͤ !s +!ͤ ! +͕ ! +!ͤ ! +!ͤ ! +͕ ! +͕ ! +͕ ͕ ! !+͕ !ͤ !-!+͕ !ͤ !P!+͕ !ͤ !!+͕ !ͤ !!+͕ !ͤ !!+͕ !ͤ !"+͕ !ͤ !-"+͕ !ͤ !n"+͕ !ͤ !"+͕ !ͤ !"+͕ ! ͤ !"+͕ ! ͤ !#+͕ ! ͤ !D#+͕ !ͤ !`#+͕ !ͤ !#+͕ !ͤ !#+͕ !ͤ !#+͕ !ͤ !#+͕ !ͤ !$+͕ ͕ !W$+!(!!/*!()+!ͤ !o$+͕ !ͤ !$+͕ !ͤ !$+͕ !%+͕ !ͤ !<%+͕ !ͤ !%+͕ !ͤ !%+͕ !ͤ !%+͕ ͕ !ͤ !%+͕ !ͤ !%&+͕ !W&+͕ !&+!(!!/*!()+!}2(*(&!)ʉ ͕ !(])n !! ! *! *!9)ʸ ! *ä ͠*!}2(*(&!Y!)K) !Y*(&)*!(]) !&+! }2'*'&|: *'&}2'*'&}2'!>*(&!̀)}2'O !}2'!}2'!>}2'3"'!}2'!}2'*'&*'& **ʁ u *}2(ʹ*(&! )*(&*ͽ)ʭ *(&"(!*(B* !! !&+!\+| ! *!&+!*V! ! í !*(B*R !! !&+!\+|C ! *!&+!*V! ! í *X&*(B*ʁ !'E)!.)x !}2'3"'í *W&*(B*ʭ !')!)ʧ !}2'3"'*'&|5 *(&! )*(&*ͽ)ʱ *(&"!(*U&*!(B*i *'&|Y *'&!.)( *'&!S*}2'!')!')!}2'V *'!.)V !6}2'!M}2'!')!')!}2'f !')!}2'î *V&*!(B*~ î !*!(B*ʮ !}2'*'&!B*ʮ !}2'!')2 *(&}2(!)2 *(&͎(*!x*'!x*')!*'&)ͽ)*(&*'&*)/**'&*'& !x*')3B*(&! )*(&*ͽ)*(&"#(*U&*#(B*ʿ *'&!>.)ʕ *'&!S*}2'!')!')ü *'!.)ʼ !5}2'!M}2'!')!')*V&*#(B* ͖!*#(B* !}2'!*#(B*!*}2(B!}2(*(&3!x*'*(&/**'&*'& *(&F͖*'&!/*'&))*)* r *'"N(*'&!SB*ʃ!)(!!/*!}2I(2(2J(2'(2'2'!}2((!! *!'+!)()+!)(!)(!)!!/*!)(!"G(!)(!)!B*-ʹ!! *!?**N("'!*}2'!}2K(*K(&!)^!'*K(&!/*!K(])4*G(!)(!!)(!))y*G()!\B*ʬ*'(&!*)}2'(!G(>)^*G()!;B**J(&!*)}2J(!G(>)! /*^*J(&|!'!'])*G()͎(/*!G(>)! /*^*G()!,B*3!G(>)!}2((^*'(&|Y!'!'])!G(>))/*v!G(>))͎(}2%(*%(&!A)*%(&!F.))*%(&!0)*%(&!9.))ͽ)ʽ!*!}2I(yV*%(&!Ao)*%(&!FK)ͽ)*%(&!AS*! }2&(*%(&!0S*}2&(!'*'&!'*'&)*((&*&(&͑)/**((&!B*O!'])!}2((!}2((*'&!.)v!*!}2I(y^*I(&|w!"P("R(}2'2L(*(&*'&}2K(*'&!C)!}2(!U͵|F!*}2(!}2M(*M(&*'&K)F!'*M(&)!ao)!'*M(&)!zK)ͽ)=!'*M(&!'*M(&)!ͽ)/*!M(])!}2'!Z͵|`!}2'!O͵|ʃ͕ !'+!S*"P(!M͵|ʠ͕ !1'+}2'!A͵|*'!"'7*!\+*L(&*'&)!'*L(&)*K(&VB*ͽ)!L(])!}2L(*L(&*'&B*ʀ!O͵*P(*R()ͽ)9!}2L(!R(>)À*K(&*'&o)e*K(&*'&S*!}2(n*K(&}2(!}2'!*}2'!K(])*K(&!o)!B͵|ʪ!')ð!'>)*'*'7*!}2K(!\+|*N("'!! *!)(!+!M'+!*!}2'*|9*K(&}2(*}2L(!! *!Y'+!}2'**I=*}2T(*T(&!x!9))*'&ͽ)}2U(*(&|ʬ*U(&!ao)*U(&!zK)ͽ)ʬ*U(&!ͽ)͠**U(&͠**'&!B*!͠*!}2V(*V(&*'&K)!'*V(&)!9)B* !*͠*!V(])!͠**'&|3!'])!}2'Õ*'&!6)g*'&!}2'!'])!'>)!}2'Õ*'!)ʕ!}2'!>}2'!'])!'>)!}2'*'&!M)*'&!}2'!'])!'>)*'!)!}2'!>}2'!'])!'>)!9!9)͎(/*!9)!A)!!9)!0S*͠*!9)!7S*͠**'&!S*!**'&!>S*!:"W(!W(d)h\͕ !h'+!i+!o'+*'!!z'+*'!}'+!'+!(+!'+*'!'+͕ !'+!}2Y(*Y(&!) *Y(&*'!ͽ)F! *!Y(])!'+!}2Y(*Y(&!)M*Y(&*'!ͽ)!̀)!Y(])͕ !'+!}2Y(*Y(&!)}!'+!Y(])^!'+*'!͑)*'"(!}2Y(*Y(&!)e͕ *(*Y(&"\(*\(s!'+!}2Z(*Z(&!) !x*Y(&*Z(&)F! *!Z(])!'+!}2Z(*Z(&!)L!x*Y(&*Z(&)3!Z(])!<**Y(&!}2Y(Þ͕ ''!9!9)!ͽ)/*!9)!.)h!9)*o!.*͠*!9)*"(!}2^(*^(&!K)*(!̀)}2`(*(!^*"(*`(&! )*`(&!0}2_(*`(&!7}2_(!*^(&*_(&/*!^()Ä!!!/*!+! *͠*!9)*"(!}2b(*b(&!K)*(!)ͽ)ʄ*(! ̀)}2a(*(! ^*"(!!b()*a(&!0/*.*b(&!K)ʩ!!b()!0/*Ä!!!/*!9)*!+!͠*!}2c(*c(&!)B*c(&!S*}2c(!9)**c(&)!ͽ)!0}2d(*d(&!9.)6*d(&!}2d(*d(&*͠*!9)!)!ͽ)!0}2e(*e(&!9.)ʃ*e(&!}2e(*e(&*!9)!ͽ)!0}2e(*e(&!9.)*e(&!}2e(*e(&*͠*!9)!ͽ)!0}2f(*f(&!9.)*f(&!}2f(*f(&*͠*!i(!!/*!i()+!i(!)}2h(!i(!͛(!i(*h(&!)!HB*t!h()!}2o({! }2o(!"q(!"s(*h(&!}2g(*g(&!o)!i(*g(&)}2p(!0"u(*p(&!9.)!7"u(*q(*s(*p(&*u(S*͑)"q(*s(*o(&͑)"s(!g()Ö*q(!}2w(*w(&!@!)K)D!@*w(&)*!w(])*E&!)|!9)**E&*!9)**E&*ð!9)**E&!ͽ)*!9)**E&!ͽ)*͠*!}2x(*x(&!P!)K)!P*x(&)*!x(])û!}2y(*y(&!K!)K))!K*y(&)*!y(])!F!)!B*p!}2z(*z(&!O)f! *!z(])G! *ê!}2z(*z(&!F!)K)ʪ!F*z(&)*!z(])wNo File Specified. Not Found.Bad Record.RECORD = ADDRESS = OFFSET = HelpRead/Edit File Utility Functions:A - Address to dump B - Dump at beginning C - Continue SearchE - Enter Edit Mode H - This help list M - Expanded Help listO - Set address offsetQ - Quit this program R - Read & dump recordS - Search for string Z - Dump at end of fileCR - (+/=) - Adv record(-/_) - Decr record Edit Mode Functions:^E - Toggle data fields^W - Write buffer out ^X - Abort Edit Mode ^J - Cursor Down ^K - Cursor Up ^H - Cursor Left ^L - Cursor Right Expanded HelpRead/Edit File Utility Functions:A - Enter relative address to dumpB - Set record to beginning of file and dump dataC - Continue search. Restarts search on last entered search string.E - Enter Edit mode on current recordH - Brief description of the functionsM - This help descriptionO - Enter offset address relative to start of file (.COM = 100h)Q - Quit programR - Enter record number to dumpS - Search for hex or ASCII string in file (starts at current record)'\' = ASCII string delimiters (ex: \Test\)',' = hex and/or ASCII delimiters (ex: 41,\Test\,4A';' = select search optionsA - Start search from beginning of fileB - Search BackwardsM - Search on certain bits set; use mask xxO - Stop on xx occurrence of stringU - Translate lower case characters to upper caseZ - Search recognition on least significant 7 bits onlyHit for more -Z - Set record to end of file and dump dataCR - carriage return (or +/= key) - advances record and dumps the data-/_ key - decrements record and dumps the dataEdit mode: ('^' refers to the Control key)^[ - (ESC) Accept next char into edit field even if a control char^E - Toggle between ASCII and hex data fields^W - Flush record to disk^X - Abort edit mode without updating record^J - Cursor down ^K - Cursor up ^H - Cursor left ^L - Cursor right Input integers are decimal. Use 'h' suffix for hexadecimal entries.Hit to continue -Edit RecordWriting Buffer ** WRITE ERROR **EDIT ABORTED** READ ERROR **?Search String = Stop on string occurrence = Enter string search mask = Not Found.SEARCH ABORTEDFile: Record: (H) LOF: (H) -- ---------------- - >xʌ(~# (}a{ o~aڭ({ҭ( w#Ý(~#õ(!^#6~( (#(}|#~ (((6#(i`^#Vr+s|͋)!*+Ý*ng͋)!ڝ*+Ý*͋)!ڝ*+Ý*(+|4ng*͋)!+E)-|^#Vr+s|*͋)!+^*|z{.zW{_-ʹ)Ұ)} DMoxGyOÚ)|}o|g}o|gd)#|5ng),|}o|gzʝ*|g}o)zʝ*}o|g*ͪ*#||!*#Ý*~#fo}}|͋)!ʝ*+Ý*}o|g"*."*{_zW**-"*ʝ*>)D**OxGҕ* ?m*} =£*}/o|/g!,**o&*Ͳ*!**Ͳ*K* !6+**Ͳ*Ͳ* Ͳ*_+Ͳ*  *>*  Ͳ*Ͳ**Ͳ**Ͳ***Ͳ**Ͳ**Ͳ**Ͳ**Ͳ***Ͳ*Ͳ** *Ͳ* Ͳ*!*Ͳ*"*Ͳ*#Ͳ*$Ͳ*%Ͳ*(*ʌ(~# (}a{ o~aڭ({ҭ( w#Ý(~#õ(!^#6~( (#(}|#~ (((6#(i`^#V EDFILE UTILITY USAGE Jan 10, 1984 by Mike Mosko, K3RL EDFILE is a public domain utility which allows display and editing of data in files. It has been tested and run under CP/M- 80 version 2.2 and TurboDOS 1.2 and should run in any CP/M-80 type environment. EDFILE is approximately 11k in size. EDFILE may be freely distributed to whomever desires it. The date of this document should agree with the version date in EDFILE. FEATURES: ======== - Hex and ASCII display of record data. - Screen editing of selected record. - Hex or ASCII input when editing file records. - Fully programmable cursor control. - Powerful file search capabilities. - Forward and backward record scrolling. - Address and/or record number referencing. - Decimal or Hex number inputs. - Disk reset on input (prevents Disk R/O error). - Full online abbreviated help AND expanded help menus. INSTALLATION: ============ The following information will aid the user when installing EDFILE on a different terminal. The EDFILE original distribution program is originally configured for an ADM-3A type terminal or equivalent (I use a Digilog S1500). The terminal must be able to display 80 columns by 24 rows. The only absolutely necessary function required for proper use is the cursor positioning function. Other functions that can be added merely for visual purposes are the cursor on, cursor off and clear to end-of-line functions. If the clear to end-of-line function is not preprogrammed, it is performed in software. These functions are not implemented in the original distribution version of EDFILE. For ADM-3A type terminals, the following commands can be patched in EDFILE if these attributes are desired: Clear to end-of-line .... ESC 'Q' (1B,51) Enable Cursor ........... ESC 'X' (1B,58) Disable Cursor .......... ESC 'Y' (1B,59) For example, to add the clear to end-of-line function, patch a 02 for the string length (2 bytes for the sequence) at address 146. Then patch a 1B in location 147 and a 51 in location 148. Certain functions are programmable for the type of terminal in use. Five bytes are reserved for each terminal function (string sequence). The first byte represents the length of the string sequence. For example: the initial cursor positioning string for an ADM-3A terminal is 'ESC ='. This is two bytes in length. Therefore, the values inserted into the cursor positioning sequence area are (in hex): 02,1B,3D. To complete the cursor positioning sequence for the terminal, the row and column must be issued as well. The ADM-3A requires an adjustment value (or offset) of 32 decimal (20 hex) be added to the row and column. For terminals that require a different offset, this value can be changed as well. The row is usually sent before the column, but if your terminal is different, i.e., the column must be issued first, then set the high order bit of the cursor offset value. This flags the cursor positioning routine to send the column before the row. The following addresses detail the location of the modifiable parameters for the terminal. Address Default (hex) Function ------- ------------- -------- 140 02,1B,3D,00,00 *Initial cursor positioning string sequence 145 20 *Row/column adjustment (set high bit for column/row) 146 00,00,00,00,00 Clear to end-of-line string sequence 14B 00,00,00,00,00 Enable cursor (cursor on) string sequence 150 00,00,00,00,00 Disable cursor (cursor off) string sequence 155 08 Cursor left (normally CTRL-H) 156 0C Cursor right (normally CTRL-L) 157 0B Cursor up (normally CTRL-K) 158 0A Cursor down (normally CTRL-J) 159 00..........00 Terminal initialization string (35 bytes) * - Must be implemented. If your terminal requires some sort of initialization string, either to preset it or to program a function key pad, this can be inserted into the terminal initialization string area provided. The first byte represents the length of the string to be issued to the terminal. There are 35 bytes available for an initialization string. Why so many? The Digilog S1500 computer I use allows reprogramming of the numeric keypad. This requires 28 bytes. The actual control sequences for positioning the cursor (up, down, left and right) can be changed. This is provided for terminals that have cursor positioning keypads which don't issue the same ones programmed here. For example: usually a CTRL-L moves the cursor one space to the right. However, if your cursor pad issues some other control character, like a CTRL-D (WordStar type), then patch a 04 (hex equivalent of CTRL-D) for the cursor right value. Note, the help menus will still display the default values for up, down, left and right cursor movements. You'll have to make a note about this or, better yet, use EDFILE to patch the help menus. All of the above modifications (patches) can be made easily with EDFILE itself. Of course, if it won't run at all, you'll have to resort to some sort of debugger such as DDT, SID, MONITOR, etc..., or better yet, use someone elses computer with a (working) version of EDFILE to modify it for your terminal. EDFILE should work on virtually all terminals currently in use. There may be some real strange ones out there that I don't know about, but that's life. OPERATION: ========= EDFILE is simple to use especially with the online help menus. Therefore, just a few tidbits of information is provided here for operation. To invoke EDFILE, simply type EDFILE followed by the name of the file you wish to dump and/or edit. Example: EDFILE EDFILE.COM The display should look similar to the following: ----------------------------------------------------------------- Vers: 01-10-84; by: J.C.Kaltwasser & M.J.Mosko, K3RL File: EDFILE.COM Record: 00000 (0000H) LOF: 00086 (0056H) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---------------- 0100 - 31 EA 01 C3 EA 01 0D 0A 56 65 72 73 3A 20 30 31 >1j.Cj...Vers: 01< 0110 - 2D 31 30 2D 38 34 3B 20 62 79 3A 20 4A 2E 43 2E >-10-84; by: J.C.< 0120 - 4B 61 6C 74 77 61 73 73 65 72 20 26 20 4D 2E 4A >Kaltwasser & M.J< 0130 - 2E 4D 6F 73 6B 6F 2C 20 4B 33 52 4C 0D 0A 24 1A >.Mosko, K3RL..$.< 0140 - 02 1B 3D 00 00 20 00 00 00 00 00 00 00 00 00 00 >..=.............< 0150 - 00 00 00 00 00 08 0C 0B 0A 00 00 00 00 00 00 00 >................< 0160 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................< 0170 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................< ----------------------------------------------------------------- EDFILE performs an automatic disk reset (^C) when executed. Therefore, don't panic if you suddenly realized you forgot to perform a Control-C after making some changes. This prevents the infamous (and frustrating) Bdos Err on A: R/O from occuring when writing records. The LOF means the Length-Of-File which is the total number of records in the file. Record numbers begin at 0; the last displayable record number is actually the LOF - 1. If you don't specify a file on the command line, you'll get an error: "No File Specified."; or if the file is not found, you'll get an error telling you this: " Not Found." Simple. At the ? prompt, type 'H'. The brief help menu will be displayed: ----------------------------------------------------------------- Read/Edit File Utility Functions: A - Address to dump B - Dump at beginning C - Continue Search E - Enter Edit Mode H - This help list M - Expanded Help list O - Set address offset Q - Quit this program R - Read & dump record S - Search for string Z - Dump at end of file CR - (+/=) - Adv record (-/_) - Decr record Edit Mode Functions: ^E - Toggle data fields ^W - Write buffer out ^X - Abort Edit Mode ^J - Cursor Down ^K - Cursor Up ^H - Cursor Left ^L - Cursor Right ----------------------------------------------------------------- Again at the ? prompt, type 'M'. This will display the expanded help menu. ----------------------------------------------------------------- Read/Edit File Utility Functions: A - Enter relative address to dump B - Set record to beginning of file and dump data C - Continue search. Restarts search on last entered search string. E - Enter Edit mode on current record H - Brief description of the functions M - This help description O - Enter offset address relative to start of file (.COM = 100h) Q - Quit program R - Enter record number to dump S - Search for hex or ASCII string in file (starts at current record) '\' = ASCII string delimiters (ex: \Test\) ',' = hex and/or ASCII delimiters (ex: 41,\Test\,4A  ';' = select search options A - Start search from beginning of file B - Search Backwards M - Search on certain bits set; use mask xx O - Stop on xx occurrence of string U - Translate lower case characters to upper case Z - Search recognition on least significant 7 bits only Z - Set record to end of file and dump data CR - carriage return (or +/= key) - advances record and dumps the data -/_ key - decrements record and dumps the data Edit mode: ('^' refers to the Control key) ^[ - (ESC) Accept next char into edit field even if a control char ^E - Toggle between ASCII and hex data fields ^W - Flush record to disk ^X - Abort edit mode without updating record ^J - Cursor down ^K - Cursor up ^H - Cursor left ^L - Cursor right Input integers are decimal. Use 'h' suffix for hexadecimal entries. ----------------------------------------------------------------- Use the '=' key (which has the '+') or the RETURN key to advance the record. You don't have to use the shift key with the '=' key. EDFILE will wrap around to the start of the file when attempting to advance beyond the end of the file. The following paragraphs expand on the features available in EDFILE. Most of the options are self-explanatory from the help menus. However, some require additional explanations and are provided below. ADDRESS/OFFSET OPTIONS ---------------------- The address option allows you to specify an address within the file. This is useful for patching COM files and the like when the address of the patch is known. Note that when EDFILE'ing COM files, EDFILE automatically sets the offset to 0100h. The offset can be changed by typing 'O' at the command level and entering the desired offset. The headings will be adjusted for the different offset automatically. The address option always references the starting offset so that locations within programs which don't begin at 0100h (overlays, for example) can be easily referenced once the offset has been properly programmed. The Address option also has a wrap-around feature so that references below the current offset will be readjusted. This feature can be quite handy when tinkering around with COM files. You have to experiment a little to pickup the usefulness of these options. SEARCH OPTION ------------- The 'search' option is the most involved because it offers so many different possibilites. The description provided here should provide enough information to effectively use it. String searches normally start from the current record and proceed until the end of the file (EOF) is encountered. Certain suboptions can alter this sequence. If a match is not found, the program will indicate this and restore the screen to the record last displayed. The search can be aborted at any time by simply striking a key. If a string match occurs across records, the search will stop on the last record read into its' local buffer and position the cursor at the end of the found string. It just wasn't worth putting in the extra code to handle this wierd situation. When using the Occurrence ('O') and Mask ('M') suboptions, the program will prompt for the occurrence number and/or search mask to be used. The suboptions are inserted after a semicolon to delimit them from the search string entered. No spaces should be inserted between the suboptions. Upper or lower case is acceptable. Example: ?Search String = \This is great\;auo Stop on string occurrence = 3 This means to search for the string 'This is great' starting from the beginning of the file, ignoring the case of the string (i.e., translate lower to upper case) and stopping on the third occurrence of the string. ASCII strings must be delimitted by backslashes ('\'). The limitation here, of course, is that you can't search for backslashes in the file. So use the hex equivalent if necessary: 5C. The 'U' suboption (translate lower case to upper case) will translate the search string to upper case automatically, as well as converting all lower case characters read from the file. So, you don't have to input the search string in upper case when using the 'U' suboption. When inputting hexidecimal values as part of a search key, they MUST be two-digit HEX (not decimal) numbers. An invalid hex digit entry will cause an error and the string entry must be reentered. Two digits must be supplied for each hex number otherwise the search won't work properly. Upper or lower case for the hexidecimal letters is acceptable. Example: ?Search String = 40,FE,e5,05 You can mix hex entries with string entries within the search key. Example: ?Search String = 40,FE,\help me\,E5,05 The Backward search suboption (B) will start the search from the current record and continue towards the start of the file. It DOES NOT reverse the search string key, that is, if you enter \HELP\ for a search string key, it will not search backwards for \PLEH\. It only refers to the direction the records will be read while searching for a matching string. Also, each record is searched from the start of the record. The search stops when the start of the file (SOF) is encountered. The Mask suboption is for those cases where bytes in a file use certain bits for special meanings. The input mask is logically AND'd with each byte in the file before comparing it to the search string. Therefore, some bytes could pass the search test but still may not be exactly what your looking for. ?Search String = 03;M Enter string search mask = 0Fh This will mask all upper nibbles (upper 4 bits of each byte) and then compare it to a 3. Therefore, any data bytes which have a 3 in the lower nibble will cause a match with the search key. When the search string is found in the file, the search is temporarily terminated and the cursor is positioned at the start of the found string. Note, that the program is NOT in the edit mode, so the next key entered is a command not an edit control key. Hit a space (or any unrecognizable command) to redump the record and place the cursor on the command line. Hit an 'E' to go into the edit mode. The cursor will remain positioned at the start of the found string. CONTINUE SEARCH OPTION ---------------------- Hitting a 'C' at the command level will restart the search from the current record and cursor position (if previously defined). The search facility will then look for the NEXT occurrence of the entered string sequence. The 'O' suboption is affective only on the initial start of the search. The Continue ('C') option effectively disables the occurrence value previously entered. The default string occurrence is 1, i.e., the first (or next) occurrence. The Continue option can be invoked at any time after a search string key has been entered. All other suboptions are in affect when continuing the search. RECORD EDITING -------------- Record editing is accomplished by typing an 'E' at the command level. When in the edit mode, there are two modes of editing. You can edit the HEXIDECIMAL field area of the record or the ASCII field area. When entering the edit mode the cursor will be positioned at the upper left corner in the HEX data field of the current record. To switch to the ASCII data field of the record, simply enter a CTRL-E. This will toggle the cursor between the two fields. The HEX field area will only accept hexidecimal digits for inputs. The ASCII field will accept all key inputs including control key inputs if they are preceeded by an ESC key. For example: to input a CTRL-K into the record at the current cursor position, hit the ESC key followed by a CTRL-K. The ESC key simply means 'put the next input character into the record even if its' a control c haracter'. This is only affective in the ASCII field area. Non-control characters (i.e., regular ASCII) can be typed in directly. To make the record changes permanently to the file, they must be flushed to the disk by typing a CTRL-W. Typing a CTRL-X will exit the edit mode without updating the file. BUGS: ==== There are currenly no know bugs. However, inputs are not completely validated, therefore, some conditions could cause different results. None, however, are know to cause file crashes or anything catastrophic. Any reports of bugs will be noted and appreciated. USE UNDER TURBODOS: ================== EDFILE is especially useful under TurboDOS. Using the filename $.DSK or $.DIR upon entering EDFILE allows editing of the disk and/or directory. I use EDFILE in every case when I need to look at the disk directory and make changes to it. The search facility makes this task a breeze. BACKGROUND INFO: =============== EDFILE was written in a language called SIL (Systems Implementation Language) which was obtained from DDJ and then enhanced and improved at Digilog, Inc for use in writing systems programs and utilities. SIL is very similar to 'C' but allows true inline 8080/Z80 assembly language coding (very useful) and compiles to actual assembly mnemonics. The output of the compiler is passed to Digital Research Inc's Relocatable Assembler (RMAC) and then to DRI's Linker (LINK). No special tricks were used in this program; that is, no system specific calls or locations were referenced, therefore, it should run on any CP/M or equivalent system. Of course, Murphy is lurking around, so don't depend on that assumption. FUTURE VERSIONS: =============== On the wish list is to add the capability to read and edit the data off of the disk on a track/sector basis. Any other ideas will be seriously considered in future versions of EDFILE. Thanks and good EDFILE'ing. Problems, suggestions or questions can be sent to me on my CompuServe number (#72345,1540) or via my home address: Mike Mosko 519 E. Station Ave. Coopersburg, PA 18036 nguage coding (very useful) and compiles to actual assembly mnemonics. The output of the compiler is passed to Digital Research Inc's Relocatable Assembler (RMAC) and then to DRI's Linker (LINK). No special tricks were used in this program; that is, no system specific calls or locations were referenced, therefore, it should run on any CP/M or equivalent system. Of course, Murphy is lurking around, so don't depend on that assumption. FUTURE VERSIONS: =============== On the wish list is to add the capability to read and edit the data off of the disk on a track/sector basis. Any other ideas will be seriously considered in future versions of EDFILE. Thanks and good EDFILE'ing. Problems, suggestions or questions can be sent to This is a short note which describes some simple patches to EDFIL8.COM to make the cursor controls match the WordStar set:  = down,  = up,  = left,  = right. To do so meant changing EDFIL8's "abort edit" from  to , and "toggle edit mode" from  to . In addition, I defeated EDFIL8's other uses of  and . Change the bytes at the addresses shown to the values shown: Address Contents 042CH 00H 0455H 00H 0B01H 03H 0C7FH 14H 0DD5H 14H 0155H 13H 0156H 04H 0157H 05H 0158H 18H Don't forget to patch the help and menu areas which begin at 2000H. F NULU 1.1 (02/03/85) Copyright (C) 1984, 1985 by Martin MurrayUPPFD!9"2*L&###:MO *<"!9*ODM) "<+ã-OWORK-LBR.$$$ NCF NOF LBR Add membersBrief toggleClose the libraryDelete membersExtract membersFilesweep modeGet filespecKrunch libraryList membersMenuRename membersOpen a libraryPrint membersUnsqueeze membersReplace membersReplace/Add membersDrive/User changeView membersExit NULUDisk directoryZap disk filesRedirect inputRedirect outputREADYNext memberPrevious memberClose libraryDelete memberExtract memberFind memberLog new drive/userMass operationsOpen new libraryPrint memberUnsqueeze memberRename memberTag memberUntag memberView memberWildcard renameExit NULUDisk directoryNULU command modeMenu?DIJKMNOSUVXdktsambiguity errordisk fullinvalid drivechecksum errorCRC errornot enough memoryuser cancelNULU is READ ONLYcan't make f ilefile not foundCP/M 2.x or higher requiredseek to unwritten sectorno library directorylibrary directory CRC errorsqueeze decode tablebad syntaxundefined <".=}1-<:I!"{_Tm<k V>VI2*#"<"!r+s22ͺ0!N#=_< 6!"5>2yʛ:2S͂" Û2&2l*5>u!I͞2$%;$>2$%!313 <>D4:<2*313 closed. 2:<Į*~-#~Gx<*6élS! -!3Console input to be received from >OͿ'ʎ:2,2*ZéI6l:*ēIV! !3Console output to be sent to ͮ*2̈́9*3>KͿ'Iʔ2:<2<ͩ!7l!S1>UI!",!3Press ^C to stop...ͮ*:\!- = ,:*\*+̀.u!3Deleting: ͵->PD16*,#",6l*5% :Hʜ\I%I͂8I!3Undeleting...͏% !3 ͧ%%*%*%*%..%"%"% 13 cannot be undeleted--name existsþ &þ8~(#>);6 +6>2H:X jX x<6:S2S> ͦ;2 2 Iz } !܆3~;>܆3# y½ >=2 *3>2 Õ 13 | Õ ͽ21M2:R;=*3/*3M2ú0e#?!:2H<2ɗ2[ l̈́9**5>͚9I*5"J*"P!"̀/!"4 >O2# :*8:*;$yʷ`i#" " ͂8@ͽ<͏% s#r#6 #ͧ%:=P7s#r#ÿ ͂8@8!"*4  *3! yʷ͸: "4 <"D 2v <"U *3!F13.>4!4&-.."5!m 4>  7>k2s 13 : C3O5ABCDEFLMOPQRTUVWXYZ? x y;!1:*4 # *4 +} * ð Á 13elete?2- *D Õ ͧ%!3Deleting: %:>OI> &13xtract to: \- 6 - 13ind what? \- O >*w#w#w%- ͏%BK͸:K *  13Log drive/user: \ʁ "5͹Á >*!3Delete, Extract, Print, Unsqueeze, or View (DEPQV) Enter one: C32+ O5EQDPV- y;# !3Destination drive/user? \\b,I- ->:;#6H >D7 # 4&.."5$ # :+ Dʕ - 13Library name: \ʁ "5SÁ - 13Unsqueeze to: \- - 13ename to: \- <Õ 5* >*"22 13 Tagged = F>k;æ 5 :> - !3Old filespec: \- <<O_<"5!3New filespec: ë a Á I8!"5!"̀- >!/45C3O5LOXYZ?y?{ { ͥNULU Filesweep Menu>͆32 2C>28 !\%> 2 No members. g÷No library open. g'313+9 !" 2$!#" ͸:<>2 #N#F<*4 ##~" #<**5"]*<"5*͇5!"5*>"#;}6#"?O:# ʂ2y2# 5BCFKLMXY>y5'":;HJʂ:ͩÂ" ͩÂI3 lͩSͮ*921Insert disk containing !3 and press RETURN̈́9͚9!="5"!~6‚>!3-::# ʟ5ABCDEFGKLMNOPQRTUVXYZ<>?O!͚7͓75(5â;> ;b>:\313:>>X*5::*|&n5]7 Â!͇5"*528>*7:"͕"!+" } ͷ3!" !" 6:,2&>D4O*5> Hw# C͔>4&2͚9ͳclosed. 2!ó7!3CONOUT file 13l!3 Krunching...* ̈́9;$`i""͂8ͽ<͏%4&#x<͂88G+!-!<͓7Vͮ*D1>͆3!-13will be krunched to >W\3>͆3*3ʎ!"ͧ%"\"!!V1!"."%!<":}"*%}:13 CRC ERROR-Continue?2}!}+"!3 Copying: !#" &#!x<"$_<-ͧ% s#r###"`&M+>5+͡(5+y*!"!!"IMŸ*,DM!"\>Oq)}*,"(.4ʟI&2* ̈́913Krunch aborted...reopening old library>K2# *5!"5S"5ͩ8*I}*,DM*\>Oq)}\D1G+!>:;#>.5 213 krunched.ͩ8!"I*3IL% >N!͆32>-2C>28m!%>?2'3313 >͆313Sͮ*M2͘2ͺ0é2>/*>G+*<-V1Cannot find !3Replace it and press RETURNʤ1®*:# 5KOX©!3NO LIBRARY OPENéSͮ*! $ʲ213 open. (Buffer size: *,* ,:>͖:F13 sectors)ͩUI:>UI!<> 5(513 not found. To make it, enter the number of entries to allow.!"!3 Press RETURN now to abort making the library. Allow how many entries: I~~<~#(5É!> /4ʑ}4}>NI͸:ڪ͸:ҼDM!=;6#D<"l33> b3*5% :H 33I!3Library '322'3O>?>4B*3>;y;> ;(5#:222+:<2<*3(52;*D4ʚ*5͇55~:Úͩ*6" :*ē*3>M2>2:.=1m<*P ͓7*2</<!"*P D<2}.q͓7*2bk.s#r.l*5% *<͸:>sI:HB$I>Oó>Ró:>OIé!3Brief now O:2š>N;73FF:<2<:# 5'":BHIJLMOUY<>>>?2# G+*<-> 5(5͂" >7 5'":;ABCDEFGHJKL MNOPQRTUVXYZ<>?:*͠&n>*u3.z6 i O5n<Sgb? a 6  \ S u { :CV )(lm<  "\b,:ͥ:"))j&*!;>PͿ'>2<͇:͸:'*}+ !.͋&" *+6s#r*+",&*$M¹<ͽ<>KD1*&>M ͺ02"!3Library: ̈́*!3Name Index Size KiloBytes CRC2$%>!%"<͏%,ͧ% xͶ>͆3!3DIRECTORY >͆3Û*3%>3ͭ>3ͭ>3:=P7ͭ>3:<>2<*%<4>0 7(52<Û"<*U%jͶ*f%ͶͶ>͆3!3Active sectors !3Unused !3Total <2$%>͆3ͳ(5<4> 72w:+2^'՗%<͂8< =b,%\BKJ.%ͮ*!3Extracting...!H'"{/:^'*:%͏%$. <8!3 ͧ%*%-\13 to `&<͡(`I&!H'"͏***"L'*+ "I'><´."I'tIô*+:"(!<̓<**:>tI!*/"͠&÷&:^'**,*%}:>KI\b,BK! =J.I&\92͵-!<->K;Ϳ'I* ̈́9:<&%*,>͖:!DMq)(G+ͷ1921M2ë%!3Deleting...͏%<ͧ%!3 %y–> &͞p> &p*%+">2< *+"!6A !3Active entries: *N%F13, Deleted: *_%F13, Free: *\&F13, Total: *%F13.ɗ2<>OͿ'!"Z&"^&"\&(~ #~ P###<<"&))j&"%"!9" ͚9;*<>Ϳ'>m:͸:!"+{DM>O!(*+",%{:>kI*+ ~B& x:+ >M&>d̈́9&%:+2^':͏%͡(g I!H'"{/" !͏***"L'*+ ."I'Ž tIû *+:"(13---> !<(5**:>tI!*/" !o!:!>͆3!3^C=abort,^X=next file,L=next line,=next page>3>2*!*3!!! !I; >=2*!o!A!:2*!> b3C35 LA!!V!:`!e!j!<`!>,!>,! :<2" =b,! ="<+!*$-!",}2":>#!"$2$%#>#*,#", =!*$ ,6#̓<=$!!*$>.;#$!Õ!!"$#*3%1"<"$$1">Oc"Rc"%13 already exists--not added.Õ!:"Rc" =͵-13 not in library--not replacedÕ! =Ͷ.Җ"͵-13: Cannot add an 8 megabyte file!Õ!"#$> &<$͏%"ͧ%"#*#:¤"L#*#>D"13No room for:  =͵-< #*\&}>f #13No directory space for: "*$"#*%:L#*#$> &•!2"IÕ!*,+}>U>2$%!\"<+$e#13Replacing: t#13Adding: "# &! =͓7̓<͵- q#p###"## =1*,DM!"#>5+͡(5+#¹<"<*#>Oq)"#*#"##õ#!> &q#p<$͏%ͧ%͸:#"$#!+|#ͧ%!'$.7LBR!<%% =b,\J.%͂8!3Renaming...͏%$!3 ͧ%*%! =J.*%*%`i..%"%"%$-13 can't be renamed--new name existsq$<2<-13 to ! _<-q$%8͞<2m%\b,ͽ^%!#"N%!"U%l%!#"_%!"f%&%s#r#&%"%DM"%y>U!|+"%!^#V#"%!:<*,DM"a&4&"%<~ <<<"%"d&"g&%-*+ " &6#6*,DM;"4&>2<~!Z&&&<##&^#Vr+swB&+>͇:*+!Z&Q&<##G&4W!A9 p9~<͠&7#|&xʝ&~͠&ʞ&# Ì&<͏***w:<&**+|&''<*+#"+<<&>&͏*<'< ':***;''2+͝+*+8<<*+DM͙.G+*+s20>D¹*͡(*+ "I'͏***"L'>*H'¹<>*+DMͧ' '*ʤ'!Ì'#"+*+͸:>Rڽ'*+ ~ɿ2^("D(`i>ͥ:>͇:"'(:+**+:NG~'#'>F:N<*;*94PY: (>͖:>͇:$(>$($(>MDM:1(BK*<*+s#r`i" ,͝+!:^(=$xe-*+* ,*+͂8*G+!$>;:+*>2+:<2<* ,DM*+ɷʷ("("(`i"(!",{*,!>O("(*(:"(U+M¹<+")"8)!"1)OM+PY* ,:L)>͖:|>Mg)DM*+s2G+!#")̓21Q)_+g2!#"1)!+"8)|c) x^))>Rg)>X*)+")d)>Md)͖:|>L)DM*+s2G+!#")̓2 1)g2!#")!+")|) x)â)>R)>D*)+"))>L)<*<*+:DM*)*)#!"+*!"F*͏***>͖:|>Mu:NO+*< ͂8+*+O:N+>B+!+ "+!++ "+<"+4 "+!"?,!s2b,<͘22\,3,<ʷ2O!+"?,}1,y!O #b,><÷2:<2Y-> 2<2<20-22S-! >  ;_<>:;,6#}4ʸ,|¸,:Rg}Ҹ,2S-~,6#ʹ,@O:Q$-y,1 ~#*,.,-,?y->,,x , ,+-?-2< -20-x+->I,-=>C-> ?bk#;y2;!#>w>2<7#ͰPD11Kʒ-2-1>Mʱ-1!<-(5ɗ-> !<->:;#5(5͘2:<> 2<2o&1@w#4D< 6:#x<6.#x<62<÷2# >._<~> 2z.#~?h.?g.2z.~=T.#PYx<>?< #~?ʒ.<….<`i|g}oҫ.# ."<1͘2#<# .+V+^<ý2<v͸: /2t/22/<"/!"a/<͓7 <͸:$/"//ɗ/>t/!]/>>/=22/>m/Y/m/P/>==22/:O>„/ʾ/O>=2t/yO!ғ/##^#Vzs/y2q/zʭ/{/*a/:>ʾ/>J<1@2/@@0<13Drive : Total *=]T*=#zW{_0+/:=0)= 0F13k, Used :F13k, Free F13k<<:.=1{0*<*͖:<ͺ0<*=#ڗ0W+|ʦ0ʌ0zÒ0`i:=ʵ0)=°0D÷2͘2!s2<<÷2<<<͘2<<>S÷2͘2<<>U÷2͘2\$_< _<mx<\<<>U÷2=w:%<<_:Qc2<<<<*< s2"<<<͘2!!s#r#6ý2222!#~2~w"2ý22>2!w <<_ <<1<13 (y/n) C3N3Y3;>͆3>2R;*313*313 (5(5:ð7<<*<#" ;3:<2 ; 4*L4++"L4D4##"L4O:L!=#6+qY4w <^#6{<<4(5՗24D<42"54: ;> ;T55:<5G:R;55> ;> ;55~#;)5+ͽ5"5=~ʮ5ʬ5#Ͳ5ʕ5ͽ5y~5 #Ͳ5½5<7O;U~̰Mڡ8*9*O:¦8>TDM#"9*!9 w#s#r9ͽ<" 9: 9"88!|!#~#09~;9͸:##9++~<2V9~>2h9bk"^9<>=2V9!##"^9><<;*9}: :<*9:ڕ9"9<>M!"9շ9_29DM99ʱ9W:929ñ9!9>՗2:>x:xGyO99!:4)=9:>y"Q:}|B:3333xD:՗yOxG{_zW:z[:}o|g!"Q::*Q:<`i͇:DM`i͖:DM͇:}/o|/g#ɷ}o|g=È:|g}o=×:|g}oҳ:#=æ:PY:}o|g>7<>N~w# x:<_ <<<y;͑< ;;_:<< Q; Q; U;Q; <:R;= GU;>G:J^;x2R;< _~;͓;:;=ʁ;o;͕; ʍ; >2; ><2;:<<W:K ʽ;ڼ;ҭ;ý; y2Ai1N N>2 )File Line 1 Col 1 ESC-M = menu ( =7o$!:\@w#6:#!]>  !e6.#>16 #=*!FNyvBP ##7>1B^4S ##NFyv>0S}0B> 6 #=„'d !"_Nɯ2!"h"j"k"|\NʀN:|G:k !h4!"j"k"|\N]\N€!~] R L L~B>L>R4R#wz#\N> r#w2͆72 00000 bytes free>V N N_N:!\ !\!NN\N\!"h"j"k"|N!% w#K2@\N:@†! > $|!}!!i>w\N†\N>2Au>2AuBAK!*y*˾ .4w# @>^*w#"*w#"Ô>ʔ+~*+ +"> * w#"> *w#"> *w#""Ô}րyô*r+6 *:Do%"v+"x:G#6 _*x#"> BDM*rDM*tt*x*vDMt*tDM*v++t́*v+*t"t#"v͌*t#*v"v+"t~*t~ >7> ###7?#+͉S> *v%7?z,7*x+> ##>q*+":=q=q:=*#"!qÝ:<=Ý:<=<Ï:<!<Ý:2<g~*rT]o~# ½~>ôò"t͉*xT]o~+  ~ >"vo͖+͖͡+>2A}*t#w"t*rͣ=u!"*xͺn͚~r> *tri"ʹҋBuͣ  +ڬWuú*x͚~ ºWú~w*t~5>+"t*v~~7?z4z+w"v ʚ z͚B͉͙*v~*5>.#"v*tC~C~4Ì#w"t ʂ ŒWu> qB p=_͔:<!*t~ *:+":>2 :<!B *:#":ÐG :=*:B":ÐG :=!*: ":Ð: y +~#=2r R :x$ :y$ >2A++ͺ=͚W[:r 2r ZÔ>2A: :8 =G% x“ =ƒ New string: ͑2 @  O!:8 s G p H ! ~R G#~.p ] R >2AyÌ چ Œ >2A.͌ K.͂ ~ڹ *t~ʹ ~4ÿ >.͌! ~*v>  ! ~ 6! 6! 1INSERT ͉ : ʒ> .WuͿ͔͉*v~2 5>7?#"v J *x~ #W +*t~ W #"v͡*t#">*>́u >2A*>+"t͚[ ʨ  *w#": =2 >P2 : O**>  0"â G: =0: =GH> *w#" : 2 ͛>P2 > ̓  ͛>P2 ~#̓   鯹4 ~#7 O > yU A% x z C yO*% s ́ 0w#Y ": Í : O":O> >PG: O: x H**>  ("+*0 "> – :=_" = :=2=u2 <2/:<Ox2'2 /x2<2 : ͛* :==G_͖ :<=VG: O: *":>P!<2A2">2A2*t"t#ͣ[͕1<͉͡*vî̓ͧ:A1*>́n*>͕ͮ>2Ah!\v :2!v\ :2 File name: ͑bbƀo&>6 #=!6#6  !:::Ab  bb<2!~.C Oa# b:7Ab[b>b#>b#\! 2>2A<͡ Printer setup codes: ͑ʟO!~͢# –1͉*v% ¶͢> ͢«*x{zҫ*v~A[a{nˮ Ô:2: 2G:<>_% !xG>:́x+6 W͔:ЯGͿG {QW x=ZÔ*:*͉*B ! ~w4ҋͿG *Q® B Q…  ÅG ʒͿG Q Wʔ Ϳ]1̣ ͣ ;wÅ>2A! ~206:02 *v*t~> !y`!x`!rB~p#e.?!:; ! ~ Macro: ͑O Repeat count (0-9,*): yy!6*0 Gx2x!!x"vx*v~ʐ:Aʝ2x!x"v*v~:x=2xʸ!"vy!x"v~#"vNF#^#V##^#V##!A!yMmW T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt ^- " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change y!A ڭʭ_T<EOF IS8WKNC PhB[ Df QXLRZ|>2A>2\ !]6 #<{B:] ͧ̓:2:Ai2A*>MD*t#t g y*:˾|   wXw  @    7  v :A ERROR::Ao&~_#~W [Press ESC to continue]y²͔!Out of MemoryInvalid CommandI/O FailureNot FoundDisk Full or R/ONot ChangedCannot Reformat I/O working... please WAITG*v~xh=^ xkɣʐ:Aʝ2x!x"v*v~:x=2xʸ!"vy!x"v~#"vNF#^#V##^#V##!A!yMmW T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt ^- " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt fi VDE-2C.DOC ---------- Documentation for VDE-2C.COM (for Osborne 1 or Vixen) and VDE-2CE.COM (for Osborne Executive) Version VDO-EX - G. Peace, February 1984 History: VDE - E. Meyer, July 1984 VDE-2,2B - " November 1984 VDE-2C - " December 1984 VDE-2C is my enhanced version of VDO-EX.COM, the Video Display Oriented editor for Osborne computers. [Note: VDO-EX was originally adapted to the Osborne from the public domain VDO source by George Peace.] I have released it under the names VDE-2C(E) to keep versions straight, but I suggest you rename your version of the COM file to something like VDE or even V. I use it all the time; it's such a great program I wish I had written it. What I have done is to add some useful features to it. VDE is small - only 6k on disk, with no "overlays". VDE is fast - it edits the file in memory, so there's no waiting for disk accesses, and it uses memory-mapped video, so screen updates are blindingly fast too. Scroll with ^C once, and you'll be hooked. Editing in RAM imposes limits on the maximum file size: VDE has at most 55k free to work with (on an Executive). However, VDO used a nifty trick to compress adjacent spaces, so you can actually edit a somewhat larger file: I've loaded a 60k source file, with 7k still free. It depends on how many spaces are in the file. Another benefit of editing in RAM is that VDE couldn't care less what happens to the disk. For example if you get a "disk full" error message while trying to save a file, just change the disk. VDE is not as full-featured as true word processors, like Wordstar. It lacks right justification, and other fancy printing features. But it's a super editor for "non-document" files, including computer programs in any language. And it does now have wordwrap and "reformat", so you can easily write and format simple text files (like this one). Finally, VDE has a macro string capability, similar to (but more powerful than) Wordstar's ^QQ. VDE can read Wordstar "document" files, but writes only plain ASCII text. USING VDE VDE is invoked from the CP/M ">" prompt. As with Wordstar, you can specify the filename too; but if you omit it, VDE will ask you for it. If it's a new file, it will of course be empty. Since it operates entirely in RAM, VDE has no disk-management "Main Menu", as Wordstar does. The file is loaded in, and the amount of free RAM will briefly display. Then you will be in Edit mode. VDE gives you a half-intensity (inverse, on Vixen) "status line" at the top which includes the filename, line and column numbers, INSERT toggle (if on), and ESC toggle (if on). At first, the ESC toggle will be reminding you "ESC-M = menu". If you hit ESC-M, you will get a brief menu of the various VDE commands. The menu, like all command prompts and error messages, appears temporarily in the top portion of the screen. (The ESC toggle will not be visible without scrolling on a 52 column screen.) The cursor will display in inverse video (Exec, Vixen) or as an underline (Osborne 1). The same mode will be used to highlight control characters embedded in the text. The video display will scroll to the left when the cursor is moved past column 79 (or 51). VDE has two types of commands: control keys (including the arrow keys) and escape sequences. CONTROL KEYS: function while you are editing. Mostly like Wordstar. Arrow keys: CP/M standard: ^H left, ^J down, ^K up, ^L right. Or Wordstar: ^S left, ^X down, ^E up, ^D right. Note that the "up" arrow always moves you to the beginning of the current line first. The "down" arrow goes to the beginning of the next line. Once you're used to this, it's useful. ^F = fast right, 10 characters at a time. Stops at end of line. ^T = toggle case (upper/lower) of character at cursor. ^G = delete character to the right of the cursor. DEL or ^- = delete to the left. (^- is used in the O-1 version, while DEL (7Fh, given by ctl-backarrow) is used for the Exec.) ^Y = delete to end of line. If at start, deletes whole line. ^R = move up a whole page. ^C = move down a page. ^V = toggle INSERT mode on and off. ^P = insert following control code, usually for printer control. Note that you need the actual codes for the printer, not symbols like ^S and ^T in Wordstar. ^B = reformat to end of paragraph with current right margin. ^A = repeat find. (Used to repeat the ESC-F find command.) ^Z = repeat change. (Repeats the ESC-C change command.) ESCAPE SEQUENCES: first hit the ESC key, then the key shown. ESC- ESC = Cancel ESCape sequence, returns to editing. Q = Quit. Exits VDE without saving anything to disk. (Asks for confirmation (Y/N) first.) M = Menu. Displays a brief menu of commands, both ESCape and control-key. ESC- toggle remains active. Z = Zip. Asks for a macro string of commands, and a repeat count; then executes string. Abort with ESC. T = Top. Moves to top of file. E = End. Moves to end of file. F = Find. Asks for string, finds next occurrence. Repeats with ^A command. C = Change. Asks for new string to replace found string. Repeats with ^Z command. R = Right margin. Sets right margin at current cursor column. Setting the margin at column 1 turns off wordwrap, and is the default. B = Block. Marks the beginning of a block. D = Delete. Deletes everything from block start to cursor. W = Write. Asks for a filename, writes everything from block start to cursor to that disk file. I = Insert. Asks for a filename, reads that disk file into memory at present cursor position. P = Print. Prints the file as it now stands, from memory. (Asks for a printer initialization string if desired.) L = Load. Asks for a brand new filename to begin editing. (Asks for confirmation (Y/N) first.) N = Name. Asks for a new filename for the text being edited. The new name will be used by the Save command. S = Save. Saves the present memory contents to the disk file named in the header. If the file already exists, and the ESC-N command has not been used, it is saved as a BAK file. X = eXit. Does a Save, then a Quit (no confirmation). USING THE MAJOR NEW FUNCTIONS CHANGE (ESC-C, ^Z) - The "change" string may be empty, in which case the "found" string will simply be deleted. Once the "change" string is  set with ESC-C, the same change may be repeated with ^Z. I chose ^A and ^Z for repeat find/change because you can alternate between them comfortably with the left hand, finding occurrences of a string and changing them if desired. CAUTION: use ESC-C or ^Z only after you have found the string to be replaced with ESC-F or ^A. The Change function uses the length of that string. WORDWRAP, REFORMAT, MARGIN (^B, ESC-R) - ESC-R sets the right margin where the cursor is. The default is column 1, which turns OFF dynamic wordwrap. There is no left margin command; use macros to create indented text. ^B reformats from the line the cursor is on, to the end of that paragraph, which means either a blank line or one beginning with a space or tab. VDE can't hyphenate, so a word larger than the margins will produce an error. CAUTION: lines with lots of blank space (e.g. indented text, headings, tables) don't reformat too well. ZIP [Macro] (ESC-Z) - The repeat count may be either 0-9, or "*", which means global (actually, 255). If any other key is hit, it defaults to 0. The macro string may contain text, control keys, escape commands, etc as desired, and will execute exactly as if you had typed in that same sequence. If no string is entered, the last macro defined will be used again. You will see the results as the macro executes, and you can abort it at any time by pressing ESC. CAUTION: Macros can be confusing, even dangerous; be careful. Macros don't nest; if you define a macro within a macro, the original one is simply replaced. A repeat count of "*" will insist on repeating 255 times, even once the end of the file is reached, unless an ERROR occurs. Thus a Reformat or Find/Change macro will stop immediately at the end with an error message, but some others may keep running for several seconds. Abort them manually if you wish. ESC-Z turns INSERT OFF for consistency, so that the same macro will always work the same way. Here are some examples of macros I have used. 1. Global find/change. To change all occurrences of "gort" in your file to "widget", do ESC-T, then find "gort" once with ESC-F, and change it to "widget" with ESC-C. Now, since the ^A,^Z pair will repeat that find/change, put them in a macro: ESC-Z, ^A, ^Z, return, "*". All the gorts in the file will turn into widgets, until you abort the macro. (You could of course have put the original ESC-F, ESC-C commands in the macro; but it would be harder to do correctly, with ^P's and all, and it would run more slowly.) This can be used to create (or destroy) left margins, by changing each CR into CR, spaces, or vice versa. 2. Here's a much more complex macro. Read it carefully; when you under- stand how it works, try it out. It will take all comments in parentheses out of a file, making a list of them at the end of the file. For "string",  You type: ESC,T,ESC,F,(,^P,CR,^G,ESC,B,ESC,F,),^P,CR,^G, ESC,W,$,^P,CR,ESC,D,ESC,E,ESC,I,$,^P,CR Which looks like: ^[T^[F(^M^G^[B^[F)^M^G^[W$^M^[D^[E^[I$^M Then hit CR, and give a repeat count of "*". If you understand this one, you can do what you like with ESC-Z. MY MODIFICATIONS Here is a summary of the major changes I've made to the original VDO-EX. VDE-2C.COM is now 6k on disk; VDO-EX was 5k. Note that VDE-2CE.COM is an 80-column version for the Executive, and VDE-2C.COM is an 80-column version for the Osborne 1 or Vixen. If you are in doubt which version you have, TYPE the COM file, and a version message will display. You cannot easily convert one to the other simply by patching. You may select 52 columns for the Osborne 1 by using DDT (or equivalent) to patch byte 0103h of VDO-2C.COM from 50h to 34h. 1. Bugs fixed: the DEL key now works properly all the time, even in the midst of spaces. The "Find" function now properly finds strings beginning with spaces, though it still won't find all occurrences of a string of only spaces within a larger string of spaces! "Find" no longer fails occasion- ally in large files. "Load" won't accept a null filename. VDE-2B won't crash to CP/M on a disk write error on the Executive. 2. String input: whenever a VDE command asks for a string (as for Find String), you may use ^P to include the characters Return or Backspace (or ^P itself). Otherwise these keys edit or end your input. Thus to find lines beginning with a tab (that is, the sequence CR,TAB), you would enter ESC-F, then ^P, Return, Tab (which will display as "^M^I"), then Return. 3. BAK files: are now made every time you save, not just the first time. (As before, no BAK file is made if ESC-N has been used.) 4. Added dynamic wordwrap feature, plus Change, Repeat Change, Right Margin, Reformat, and Zip commands. 5. Miscellaneous changes: Header redesigned with more visible INSERT toggle, new ESC toggle and menu reminder. Menu and error message display no longer blank out the entire screen. Menu appears only after you hit ESC M, rather than every time you hit ESC. Invalid ESC commands now generate errors. Renamed "Block" and "End". Redid the Block "Write" and "Insert" so they ask for filename, rather than needing two ESC-N commands. Renamed repeat find from ^F to ^A. Added ^F "fast right", ^T "toggle case" commands. Deleted some redundant control keys. Control codes now display as contrasted letters, not graphics characters. When disk files are read in (with ESC-L or I), the amount of free RAM will now display. 6. Internal changes: With VDE-2C, the arrow keys now work more quickly, since they do not cause text redisplay unless necessary. Also, VDE-2C no longer writes into columns 81-128 of video RAM; this now allows it to run on the Vixen. Lines of more than 255 characters are now allowed, and their mere presence will not make a mess of the display. However, any attempt to move the cursor past column 255 will cause such lines to be broken, and the fragment may not display correctly until the next text redisplay. Consult VDO-EX.DOC for further operating details (noting the above modifications). Eric Meyer 427 N. Washington Bloomington IN 47401 CompuServe [74415,1305]  Eric Meyer 427 N. Washington Bloomington IN 47401 CompuServe [74415,13aphics characters. When disk files are read in (with ESC-L or I), the amount of free RAM will now display. 6. Internal changes: With VDE-2C, the arrow keys now work more quickly, since they do not cause text redisplay unless necessary. Also, VDE-2C no longer writes into columns 81-128 of video RAM; this now allows it to run on the Vixen. LiCPM22RSX1I FBAD57 - bad record lockout program Type ^C to abort $͐i(\̈́> &T*|ʄ!Ç@*"""" " |2*.":\O &>*&:=2:23!"**DM : g"$ Bad block: $x͗y͗*:<_"*#"*q#:Wp#"00ú:>2>0! ":!yʟ)=š:G¤}2*DMx`i"ô"!:<22<d| | .:22<}2?:G*!@w#:2w##rBÊ Drive specifier out of range$ +++ Warning...System tracks bad +++ $Ê Bad directory area, try reformatting$Ê Can't create [UNUSED].BAD$$ z~s_#~rW#6{0&~w#~w#~w> &> _*.h*. hQ Test aborted by ^C $* DM6# xu}o|g}/o|/g#~#Ž͠Ɛ'@'&::i&" ɷ|g}o!>w#>w#>w:͎*.:^#"^#"~#2~#2^#"^#"^"[UNUSED]BAD bad blocks found $No$ directory/data records read $ system records read $ Track $ yBIOS2.21çç69<?BE1>6CO]; BIOS ver 2.21 ACTIVE ! "Ͱ*"3-!"!`Ͳ *"22!"22 :e22222y22> ;|^#V"! ^#V"+~2###~2 ~2!!CCi`y2>2<2ò2y2 :<2:2:2:2:(8=2:! +:! ":! 4~!8 *#"222<22:G:!( 0)2"!~6(":! :! :!($:e:2*":2:Y2**: >2: : 2e:q> ;2q>;2:o&"*">;}2"> ;*"> ;!"> ;>2>;~N<#ò$I$I $ @I D @A"I$H$D AI$  I IBB"!#w!48",6!%wHv!5xyͩw_z#/xXxXxH)y!54@zxJv!5Azy4xͩw_{w!54wsx)))){/w!4+ʒx~ʁx’x{244H)k yx+C!ނ-k0y**M5d*O5*|x͕_}x!ނ|k> ZD-x!ڂ|kk y y+wC-y:qw:=͋wH)xͷK*s"lͿ7(ly *"sͷK*s":s_lͿ(lCy;y!*x#/x-Vx;yzy'%ͫ$f#Gy¨yͶ#ʦy!¨yW#Ͷ7yyͶ{|y|y~:0#bk))wy{&1wzYzSPELSTAROVRSTARINDXOVR%3 COMMAND? WHAT???   NOT FOUND  Enter the name of the program you wish to Run,  optionally followed by appropriate arguments.  Example (shows disk space): SHOW check / ad  1ͅ>2@*.:TH-"͎k!!"҈3!]͎Ҡ**#ҴbÈ""ff:Rp:TI*!*!k>Gͥ#U11ͱxGBxGUU1 >9xp:P͆x͞W͆͞:=2͎>2T͆U͆fO~/wGNx/wyē#f**p#**~ē#$p#Fx/w#4~ē#x/G~ēx/G#I ʂ ''z͗>͗0:OxGw#ҵxG~ē#xGw#xG~ē#x2/w#* z{:G/w#5)DMe ''s_eʇs 7O0  $7g"7*o_{_0Ҳ1¨¦   #|7{z*"p#*"~ē#*}Gog"1!$>F~/wNp0% MEMR Rasmussen Memory Test - Version 1.8 Copyright (C) 1979 Lifeboat Associates BIOS located at Top of memory at Press "SP" or "^C" to warm boot at any time or "^X" to restart test from beginning. Response of "CR" gives default test range which starts above this program and ends at BIOS.LOCATION SHOULD BE WAS "CR" to continue test - "SP", "^C" or "X" to stop Test series complete Starting address (Hex or "CR") Ending address (Hex or "CR") Input error - Retype 4 hex digits Fast complement test from 0 to Bit stuck high or low test Adjacent bits shorted test Checkerboard (55AAH pattern) test Walking bit left test Walking bit right test Address line test Random number test - Cycle: Re-enter, starting address must be at least Re-enter, ending address too low:2 22.OP MEMORY TEST DOCUMENT FILE (MEMTST.DOC) Whe yo ar runnin th MEMTST.CO progra ther ar certia value tha mus b entere fo thi progra t wor o a Executive system. The Executive values are as follows F800 - enter value 0892 THATS ALL THERE IS TO IT.  BE WAS "CR" to continue test - "SP", "^C" or "X" to stop Test series complete Starting address (Hex or "CR") Ending address (Hex or "CR") Input error - Retype 4 hex digits Fast complement test from 0 to Bit stuck high or low test Adjacent bits shorted test Checkerboard (55AAH pattern) test Walking bit left test Walking bit right test Address line test Random number test - Cycle: Re-enter, starting address must be at least Re-enter, ending address too low:2 22..&챁V˻hE!Ek'T.KT2 bjGT8)/0,o&0 &챁|G|B8KT]4'f̈́X/H,cSo%ey3!챁e>GFs^-BW2*Zq SZv~΋%2T>Tpw;{oNͺ#< j=X՝=60U2*Zq SZvfq%* f35'>f/9d LZ>T>Tꠧ wќXUl^e9.ϟRfs͝jbWYQe<70U)DEl&:NY)b L-a*߄Xi»IJ8,`W]5ap*IeqXT+o]i$:u:GTxn`wVN T8)/0<._8heqg3Е'DElޕ CWfW_B-T5nls37Y4f֡KkQ7ujuk6Z9bɣ L5# =U=iE,7jɥ/qx[?)`5f}K}-`:R,>fN,zɉeQ`6+b*_Esb L-4_\TB,Qe0y~0)`XL"aSIJ8,`9dyS*aSaw|;U3`{]9e<70|y;/0<. Cr)O &| ֈ&2Xfw0_ RtqP)5n]GbgXqRT97U Xo0XX*$XsSF>KE* Ēav0$챁˻hN,㹁B&ζb,CM,IS}0뻎xm=60U2*Z?O,DEl&J`s'fS,H,9by0X.!c}]wxn`6OR_ j=#qSbOH.XWb,LJOS~hġ5A&Kr6!E&KuSwuruKTd&JE,f^g*%՗AO' m(:N_?`O,f[K{;5Ē]M,םib0h">@!!f^GbrnuhuAK"u;:S^'ibO\_aS`T+o~_ igÑXl%hTxFkvXLU_[?ukĚX^_wڠp{ !+bY|+͢~!T^%z o}'e>AOXL_K^M>K 'q%qSe{ML ZⰀV0Ҹr(mr2X><|+N&h\T<&RfStK=T+bWYYX8X/ ⬼O h0ՊXsShB,y4}>2Y_ VYYX#L"z0rX&+q<:vSEĒG*"4 L5'J=/N@n[P:Il]b#U_0g{⺿W07__ quvJ^K7037u*uhS0#/0a6oڥ&pLߕSIibg*Zfla97_ '&aSe{bO*a60\IL+wuē(G٬%[e9̦'p3L-3bY0ՊXLU|A=NIsqPhmt=UHW3Bۻ:ӒkD)LwۓV ]Y{E VYYx8TXd,3}K=T+bɣGjE,[ Ğ؏KUu6I mpLK$zj1-~BO:5?P8T9wuwWa@_$ģR ,dQ0>hܞJ-K$"l0bXZcz'l0E=/0,'Rf3W'hN,ZKrM1QO,{KM_0/@O*'헚2$ X&d,,ꉥ>T+byVĒfStKfB,*a6LG=j <0;֩4QHT)ZM,7]V1*Uhp$f[aVlav+by0Xd}%QP$ֱ q8"o:*!W[Os+0.`vM/\GVĒzŁXf"z0UԻ,', ݊Xٝ-=<|l:|KM`v< ]fዸ  Y9M,zS%[e9L.4G݊XUTQ8KV,*!h\FbY0<|l:|K by0̦ @0,*!l:|ZibLNs+0.`vM)q @0uKM`vLވa\2Skz[dy[Y=fWa@,v+a\^ЮN٭ `Q`d n<;Df7Ⰰ٭eN`v< ]faJ< 9V߉3P_ ʺe{bO8AߜuZA%HZ/J5 )VۓV Ov)? 4X=U''KN@TdLՄX_OwSqJx 2j~|dq{*LC󭾔D O}՗ўXh̷Rc'/ ̷ysC4A}TI7byxV_?E{]": 6(b_`cM~hܞBkSI߈ [})v`^AA R9nR0@OZKm\P>zB:8h[@,o0KhK$::$S4TqJ,㹁?TD17I1+\'ۨ6-q})O8LSKHv_:$j@R"ZøegEg1q})Oh0f:WA5< ]VG{[t^jCח _}~)^Fi㠕#z0\͢@0W'/ Qe0v~> OHgZ9KX&d,aD3._`65b8 _x8ˌX"`Zy Zi%wۓVhmrY{? +#ƿ+8I+b#L|Sl^g?DG0ZCkTKM`vOз q({A fW_Xh̷R1"/stBm\PIkht*IԀL[E,o0Kyo{v6%6F7 aBkSI߈ [})?#]"X$WRswqwt*Xoy< ְ_:7byxV_Xs+_db2obWN>Qqm[RG'& )] ht*Ib0#av)^I+by0h*UY[ח3:!av9ujF^qøeUT$/;̿wa{]VXUTLG=K!MPtd}!?QwڢMN9bO^)i) {̬ {iV+G Z?^"QaO43h{XG,Qe0IWđ^O,(hmuUB,cS{by`vwq'PR?xn`bM%[e9ffQOf- upjK%[e9ffQ/l4RۓVu me'#Li{*6Z9%ԫ,,Z[k'R~fl0b_8h3%Kh`?7!QNIXo0U})ioGSۓV/0ys7 nOZ!ERI߈ fW_?f[8$iBR"pSw '%Z40S&AOX"T=afu[$v.W fJ%KixՈC^XKT#7?%T< *W fG m=q})Z|@OJXLkm*ܞ"z0b(T+Bi㠕#hTS4Akz~X`vX`6TD:ShK#hTf_) K  U]h_ m%* f3X"`6j0_ 'mP$ֱ 2Y_='RSwuAA[詂SM'qOY˴UOpѩX&DElC4_tNR ߈eKTd`f'bVY)f:FۓV20Ua*4T/0ysC7 bKD HʴU/D~knCp{ҊXhS0D }>h{XESwIkӴOe<70U%^L[8 LU_ω|Cb iRO Z|R(mrKbWY)f::R5q})?'l0E=D|tHi~#LU_?N4/0ys7 (cP8hHʴU̮hbgX-O| H; GO߈e_db2obWN>Qqm[bija@*L[E,jBy/ m`#Dla7qH5T3L5. bWYYKh`kz| HqMoV-*K HѦQ)ݻO4%֡Ic=~)DibObpH&~]0)'j wqx^\Z.1Q3&/ XJ Kgmy2SKh$O-jD&/&Y&8IJ8,dQKM GEB,7yɬ-_ MN8,dQwJ.$6r eܞM_IJ DEIwuSC]D,B LWbOQ+Y-/pjK0s;. {*x=Uv,/de]-'ɛO5:5'85I٥OĒ=6ZcXq!#LDM=0ǩ>!N.}"l2W'pb9KhZ̉e&uz;!N.}"l.qĒGNpTh{X&m z.qĵﺓFT|40o.=K>8$B mR8L[ìKR_ ɓK2Y_=z8IuKjywbƅ2y7d8)X"NvJ,ѢhB,7j N qRvDFŜX&o"^'bVY.QG,QVi mP$ֱ R\%Xƅ:=z8DEɝtN,ѢhB,훈V#՘'bBibMħ]OpjKyv*uhS瞈%[eDKd̗?ė6ڢt ]/R9ԫ,w#q!:bO*?ITd)N-&2پ`5R!;!N.}",/䬜&챑2J%2Mħ]htqP'85I٥OĒ\%XFߟWK m.X"9ԫ,w#q!:bOG mNU:2=Ğx ]i~Sv.*!f; o>JgKTY9 F.]sj8ଜƟqO, SʗĒf.ESRf.DEl"75qS}M { ƁXUluq 2M䲙6zjhby`vW[ ڒX"`6R?/=Uh{XcZKTdj3?*K#2M6+bĞ4N7g{&mH m`T!۶]Z;CcpI0ڝagbk=]2Mխ#2Ms]4YF]$xX"`6J~kB]~&7ðvXkSa#챁]Z?x8TѲ T3d LZcA, .˛ ƏKAOpD=DwqNfs]iBQO0)`X`vwqo-pDR6j 2vߕF7-6 V߅  SĒ=60jy֎X#L5'peD,e! jby0UF,7*+?bbZ8)`M9bB겝GbY|+Y/8) ZH]H,B DEɻHʴUGbyu]G\?$3'ðvl'Zke{8 rBl]Z?K0]Z;bɣ LUX f3'G٬.: S͗DElޕ hN,ѸFbgXΉaSE1ZK}rbɣ LU .(}L"aS͉e{bh:0}h#'Zsy&?{h:!* fuu%* f'eG,fMdUߑh gb,ټ+]kE vq8"XkSEc&&UFӣW>Qfﱞb/Ē=60UZ?x8TѲ T3d LZcA, .˛ ƏKAOpD=Dx,/.C&&wqx8|Yom4ri'e4?^ɜX"dMSG,BI4=#<ȜXo2)=dXk'qvq8x8Kŷ©K[E,I!<ɝ F ObĞMtBTd̦ SۓVL"(ݻxYuYiB~)K#2M44!|:Sh̬C4vP0.exqi)unݥ%'ľ r)tz#5DEl8M,X"`6b>HZT@iX6ø 'ľ r)2m*tjagSwuĞ˴=Qe01 `fnOZA[tj!՗Kixո)uiKr\͢+,Q8h&f7FIkuiF,o0R753LU,Gʿ+ =Uh{Thm4Dӟ`*$5xv ?Rd\'p|ll'0} =Uhm4< M w[/ m=q})TJ:ؠi%* fӄi~kq*hC$"/gSYiBw8NUSwu҄챁V&$w]z_8hqHӘuXݼa 2پ+,vd,3.Y{A 4ui#T2K4.`o)o2yTD/Xø4u.1NiX{bO8Aߜu=; r6 lF쉛u|S=?Oa*߄D9DN'͈=qscwBTe.=/l4R =UuXݼa k6l.{k@,㹁3LJ%Kv6#챁VٌXLU_둸p0j\><%챁V@\_s<(l%{l`|'eFl䊽J%{l`%ey3hBq%J쉛kd 0f['W|{ٽ{bO원(MӣSw7,l(hp R ߈!5ѤR0 EPAK0U.=K7?| r.=†߈ ffvRh{XGD`<70U&04RDb,4!q_FeKTd̦ fG.%* f fG-: ;CE,{bvi 4uiSN4 z.8W fY&io~_ meTB߈%*L.Ϭk'bYuSgbMSObO.MT.mrzTΠ m=:DElC4߱OR-\|߈ez#ri%[e9̦6I+b_`voݗN%i fW_u]º!{I+bɣ L5|%&j[L[Axn`by;MU{:}%0H,nE|:[qHi~I,% |nB]bq@&]3LU,Gb LM`vIХI+&K}V}K_g'#L6vihB,zYKr\͢_8h3g]b3LU,GbY0 曟D[P8h%Z40U44Aۻ:pO,7 [D:KE,Z|%)Mv%/:;^e9̦s) ]LWbO}S8Aۻ:tMul―r/l ,D%Ēf3WߕF: N% 'pS34GjͿ+Y{SIB,*a6+LWbOڥB:;*hCgRNA[s*hb.Mb7?=z:}UlV)WI6Z9b,dQ0?WHz.>N5h 2X~K}-`v*I 2Y_=q})׋UlV)bɣGjE,*a6s5z>W @[SYzO}.XL>{&'f OݣS3 q.{bI٥OAl*$S*`f*IңJR=Uio548ǃ>Ѹ)j6SFb-ڴp uxP+}qS7muj7ٮpSw3gSg{IhTfFhB,o0RsJH.qI, n\PT̬CkSI$e*byؾTc>'hz5̿^#ְzN@,Y^TM`6]iKCiX6KM`XkS6E1֩ Z J^ᖶbl߈KOύ˗xS{XkS6Zi@[|=%J=pwli̬C4!/}>?aQ`697_ ND+^lVĒLZfJYGf6"peS8:N*U>hb L5_>KrM F:J:q*#h󯾳逤uJ6ulJtRۀKrM w6N&m@ k:XeC,㹁+^J#ERB@OKC2SRf|iPviЈ5RwNuJ6ul4G*:WAcPCcSIB,y4"o~PS{4*U>h̬I+SE,o0RާTI̺Vaw:m1X]7OʴU_DAח>'}а~> OĒLZ؄X9L|5BRBfXkS6!J=::5u8 :n2ձ 3UG$QWDEl>lJFԻ:bύ˗xSbLZf/8(bύ?o;:Sh ]TH,xPg}TT2KTd&OO::ؠAKM`Xo0UVG [)q%2G4?O *h[xnXă(NK}-`&2Y_='y]=UFimq{*)* ?=q]z*#Lߕ*bhܞ"fS`&NUr0U7 b =UPaX&o0JpJ.9mYɓFa{M,xP+< *O.s~hؠe{bO8) zӸ"{v@O"ˈ=q ⰀV0Rmc%* f'ey]X"Ze0'J.@[3='i o: GBP?4:jԥVm&{޺*CDp'ZS5`f/U(Uሴu6ITRi%?='qR b.& R68mXo0R޿kbg]a6]iC4G݊XoX`՗]7 bݗN%p{ҊXm{+,{`g3¬K20hYl|~)~SvL[ח]G]5BRBke<70bWw")Vח]-]4|40# LWbOu'H'e>%Hh#l*$S*$h  vL[@[$,v&0'iV+Щ$A4,vbm bhܞ!.GbO'ԝpeSw %.>hb9L z 7byx՗3oeQ`6soNP&pJ#%ZM,㹁3LN. 8+DElޕ 7]})X#E4!hTS&Aވ%z՗y R'zN%&0曟oT}}>oH;IX*LK֥AⰀ0hK[Z[^e6Z~K7=OӋS. ZXl%fW_X9VUИYZ4ruKkQH,y40D } &Ly Aи=iEgޞkK/zuJ6ulni{!JKy', jOTShm4LWbO\_? Y^TҰ.>!ЩpSb?0_ا Kh7by0U})Ğ%.eחOy{Bm`?|TX' Lo _iĚXLk . XsSW¿+ =U.ѰAd}%%mJ I Y4 z0I٥O' 잉='i o: C]`ۓV :#R^eC$ҶUN"%Z8 Z" Ҁ+)b_$ֱ hm49'Γ,$'`<7R,_AOwN20|YK0ն%3L- bOa6y]8(bO'YN@Td&O#pMAC}&LU̮yG=pwzL[`f ,>fN,za$Rp'ZX f"pquv+8UT}2j|&l0za?*uJ6ulUF,_}gI (m 8:!l0zal: iRMbۀ4Ab{*uXlOǺ+- āXsSWFL[4*hdb#&0Ҡkm I (mbi0UǡujƠT6 XhSE0Z*h8UT}ИYۓVH; Xgw]zHt*I 8){.اw zjr SP)8i=iV+@[]gCO94u3+f`O}jmqSi Z?=q':+e rR_ *]d;by0U})1/=q})'cZoxn`X"$R Z;( 8 ]4'0^+KtqP?% je]20U,e*A1oR_ j[_+,' &qS՗󒸾*sʿ+vʡ}=ZY=J-NX"`6y{R0Uq})~7%cSeYyݞTt@a{ﱞ֥K}VG L-d LZ> T݀ԩXsSgGJ)~SX#L"TKSd L/sJ,cS͗07`gui$J j ffΖ1 zĒ=60U|)6FH 1d LZcFĒLfk0K!)Ub5Kh`+_8h}I w*#LߕFۓVYYCEk^K}VĒG*"L /z =U{]kR>/ QeH,Qe0 Gzp{*!ID,*a6LG=qH5fK4lP2*Z>T .{w?~N@Td]]ihK[Nq{*!mSe%)h%JB& vv!h{XG?~?Ir)f:eN5G/2ok{m){ߕ["Kb_^_4&R%~'2ǩ_ .>N5f!byu]'~f]'e>{b_+ =UpqO1H5%֡]ĞVz2$ zَXk!=H,xO^=tB;uwĞGS^ .>N5;ƁGdq,/$]d;}qz6ulsy,8^&I"$]x=)w. BE#p ,/dN c.sbĞO]@;Fk~!OL7Y^ ]dC#EAd<7R,ŷ=IvhDx8zYKTdD.iN"ID,c#3u'-'HĢMN 9G;qeI"]GXE#F,7{bg)s:%HBR6N;b9Lxg0/׿NSޒ!p 4ۉŷzNSG,㹑bK4.dN,D<wqP֢H,B bƅD}(JG-ϐibY|+Y^ɜX"$}:Um1W'a!sbY"m$QJ# VO["ao'XD2R,4կ ޵I,8p̉%*L4uY&M4)ߜJ/⠈eqXȜXYXh"xE,Qen' q!Qugֵ N qRv'~yY;wa!sby2{b?Q3F2uѥO̺ISwog33L'h=Lވ'x2(ކ 6 tC$~:M!I<(LFLS?=dDEv&H&9T̬pG,Qert;%hH4CF,o2퟉%{ldzَXE#&^SHJiG,\&۷_,r$&A}ЗY߉, f;QߗhmAKTdLTKTdDd!giXLf|&ē$Qeom,Eg'DEɝtN,ѢhB,o2KTd4ɼ 7 R[ Jby2GbO<Νd<7R,@,vX&+'{ZK$ںҋjIFV&$w]z?UhB 2R,GbܥՄ_e<72.V2Y_'*M8Ir^T~TShBXk!MHH,;)iV+T㯭MͬSwuĞNvzlRtK>wJIU\͢XYH,Ѣߟ2DuCRۓV2)x%*2m'W6Fۻ:bO$.\N=6Zλ։/m4u0.I*MH]z챑r#q!MrU&nEړd>\o'nJIJVY&wJSbY"nkV$ysH,7ikŧ* 3[DBFb7$J#avJ,QV0.IYI$Dߟ0)v*uxC\oIn*^c=ݔx;I>h"giAO]Oyw޺syZ̗wwSbOǴuj{ۀYZ@$c#e.=׽ hzr͈%ys(:!֯ lbo\KTdD]:b,<);bMd:'.%*Lޕ#phYO/Axnd|&G9DEIխ#2ɓ#|.dM}:QJ5Z~oNx]>KTdLJOIJ8,dN,z%E|~)R XYeD,I!wpX-.%{ldB~)vq8KH|Z;b_$˛ -.O8,dQxndӟ%Z4_c\M,o(h'ا?} Fg8fi!Wby$Q-?6FAx8|Y6 $,r.>Qh&ZȤQĒ=6ZeAC[!!äXo(ObY-'߇N% \8QП'WY.~XhG,e \B,y-(~L[g> _'C퇅v'_dR(h fAPmc'>I>gN*hmrK]b1/Z}Rm'JCOqQOHn-.1] 'oN\ЎXYH,I!}:ipXoSX"omқuN^%7bXޤY?'dy!a&sa]اÛeu$B Hoi'B&&챑rR(hbWY.~XhG,BV=5A-m/tĞ-.pl퇅vĒȼa?ؠ=S߈M ĒLJ-A©R7bɣR_ : Xdk'&챑-.kպI,*% a\ȤDR${ld: ZXUKøUOM ~&|dm[8-TATS8$Quq8"QWU'b,C&l9; *Aʼn&0@fii$^A!!XSN=&]Q_i+h})/l㠠-ڴϰOu;%0ffN>vj@7`gLc{Ob7tJ{$^A%GiNLߕMpM, S͗#Lߕ*X#L6Ơfiibgja*4fK4nOZK}V20Ua*404Gj͏KA[bhtqvOYy' 0Xcv4Gj/l4R98(byؾTRo-n*e%S ObONڴT'9ǃM֥uaA9bj\tX'-d L5_XʗyRX]7bj\thBB,cS͗KfB,xP^KTdfR}"hJ,oQXES_aSms;ПYu|ԩAO)%* f'ey]=UثK>l{EW0z%| 3;iߝD9&ĒF`X+l:T5/y%4wX?#bxa&N :5n8$iDe4!٬zM,;Di oЩw[!QN#. 1f͛;bxCM)\4WټK>nezT0]]Wj0. sFᨀ!QNh1x%| Ck6MwopF;MQ.X"`6R4T!Qjul.xkxW0ESyNbDb9ǃMS]ú0Ud LZT:4!!챁˿KT2OuKfB,xP^Ⰰ DF^*uhuKkE,6DFp7:#7Y'm;b)ٽ.^%-\4sXAK>ٽĒ֋ib0__%ǚX9XG%^Wb_`vh%XĒXyK1 2Nd}%:iO LU,?0zX;G,xN-YבuMCX&oIJ8,d%wҽ 0.$-Vw'bO}ԩ!HHÀDN~)OT>ITdD6b?wϟ XsSgGJ94fq0]4]E,㹁˻hwaO,cSw.'*0j\X#L"Ibul:4X"`6MFl҈CkNK2]w$Z]ܩH,Y^zX;'u%Z4rO,oR_@=Ƣ";'bO!=q s<Ǖ{̬C})=UDڠA%Ĺ[t2M&X9#ߔANAbKki\Ҿ8 r4ui#5ݟaOKǩ&|oKLK>?|nb_`v%av$fQK>&NK"/ Ēav/Zo%MTK>_%ej%>%{ |7QK(%]_Pvf}O@, ns0;wupK /0EzTsb0WuX]SiK,fwMo07b_`v5K>E&ĒhB,fw]_PaXD8 Ē~A*v"E&Gb0m (M%5Ѥ |7wV#f#4wX?#b0?Ma*3\uJ+,B4M1fkbr7 hYlۼ#fX9O0;w_Ni.Xݺ"|;\)!QNKkx%fn_Z96hg;vPĒ"-%˧L̺}%Y'|._pcЦ"E>~'|ί`ĒI3:^=1'rκm{԰SJ5Ta%q}) Y^Ta&LU|T̬+g f{y]=UcB3詂r:UGE,Qe0[G,Qe0<);b0h|dr^gbZkwni{!"ambM, Se˂XsSĒ=60U\;wMoĒ9Lx8TrwܞaL(x8TeA,Zx8Tr$peA,X"`6yRv)DEl%2,?3s]8$XEkCxYy"`6RDFuD,7Y'mVKTdD]~׉Y*85I٥O0.`_Ğx5잗c~Xq9Yc˱~'|{=vQ{z]> @>ٽ6+0.'fwiN./'fwxtavy\pwg~ǓsyZh^csyDͬۧuL_OY&QWN|2J0?%*L%K4YF?_6|w.q8eDhgbĞ/ilQ'0$Ĺҧ̗d,h?,,եOgا88e?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aXyy>>7R5\JՐE'M}'7a'^ /  C[cӌfonq߉M؉W =5XKb^?O=^v2?o~~X ,~z\ukȏ*Nx߷5<_aP#}[cG,?s*o~~mX \@348!(qSp2 ]XEp)Snkʎţ"ͪb>? +\?anpj1Nl+ p ;J4DXU 47RBMDkBWHvBvJ3yp"5py>>ܯ= '  G*B5 TmI!LRyNҁassE 45ăNHqWq[[D`78~`<ce WH1{L =^&c\! u%X@]ёq)Ʋ<_bqEva?bv39!m g=py ,0p֔p"t.F4"8*ͱxdR( #L3 ںFtllIFA(HQ1't: C#fǩO7-44cmȞrXkV( q(8{⚪A"!W<_#Y1 y"`8^X?R;.3qy~*PA]ػK[iVB?Y!e #` V'Pv Cdh~ Ezz{Bb2 GB"'G`#:OWL+ $3ө '8'B" 'ؑRҁc.1.m]Y2yB0'c$[HX]3'֬"u@ Yva]{h(sr~r:NE*0J2م}XktUǎ+O"3V^ >nOx)>6W>!1Tv+Ntip"δLXyt@Gƕo*֡ZeщǙ!3t.R*;PYUL+/&)LCef8F P0ϳL36߷u[c^x/34Wk6+~GG :V#NwC⾭ۍK9W8= R#NBYGQFû!qXGa'cp"U32lS@#'0Ip"hpNHXZNRyOʈN {.βz^f B,DTmJO)$[Oe # uUwC/>$V|1 *!:lO`H(jEkCI0yT>"1$V?@_;!nBxYٛ2?T2:DX??5<2Eb H3CtJ=pL$RXx 4rBV0I"aeme{SBYaX@}[cٞ^)2 pxXޡLit]Xp3:Qf({(iD*qB'+ɣط5QTP N+\YDLxp"S&?BKf'1 =ӌ;8K9lO)aeoqB'ex7$Fc~pڷ5Vdi_eӊ>l9(4hk,x xZ1J2oiEAIHӘz}\^/ {Fp"'ž&$maƴP!*B#"9;QC[c^)pMZ hSauhH+H"McÈp5_fQ{z`}2 1V؝PXV=px+^; 4i#L3 VdXQRN'T*;qO;YP XVԷ5O `it\l)i#w:' )PX~}K+2'^HӘ澭l7x l@=px(`UBҌз5̎N?HӘ澭louCb4=p nH(R EbhX~ f8SH p5@<{[m.!SgU侭l)&J}'Žtt0좔}Xx S$8HLtB~t@.J#y Jl_);N< Ј;:!?qr:`gT> 8#G"me{aЉsr'cd\$8eAC+OQ*c%5S)p"t.,1Tf6aDACok,N< +écgE`t)8Ohk,A,Etay X)(;v:maЉGo(|}|@|lxz":0(\$Љ'ƎrX~}J3bĎPMD8 HӘ澭lxP8V)F"ʤNr[cSp"$L:p"t.,z5iӌd* G8 vB`xsGt.RX?)'=p.`8 D o+ǸWAoCXmX'}__nn~gl 1yLR! 5m'fp"N`GV(cv>l =pd:J ;ѶƲp"Dҁ'cNۋ#nnn/F\_~zx#>l јbN䩭l9Jxw*2\@X5#JW^n=CWvgoK .@:Fc~p"Mc ƊOXN3)S7ԉo:/ 8S'B| :l'cmFɕLq".C:0;Nmek++`-#MDjL#0ψd N45bK \rwu )̎ptE= G[c:ͤLLOxD"N0m)< ex7`cm5>_[_68wiE(R) ;9Nq׳sr%5mCCE[bF<:NN䱧 . 9:"5KƊN469QDKĞ0BHӘ05-qd Sa1AOTL'V8Na 2xZQSp2nk,` !*B=pA.S-0+^sJ;jk,*P Hň@NO`/'T*04c Ŵlm'0!&l׀7Ϟ"\`2ND+^0lS,~N` aok,w X +^P}[cپ)":kI$Ӂ`1BJ'- |\f@|6" ևn'RtN3|B'%`i as#BD8O?`ecv1ӊ$Ӂƶ^U N) />lF^80W^G.b' szv1+pʂ8]$l'X_B*fH"d'֫ N-b}X6 4ip NƊoU ǘ;B2ɷ5 T8N#f fX#L3c*fJш'(s.b;B(œ1^<22= RhNÈ݄LJNY:P!'Ny|'Oo MU"*4V-YcU1N0'RLRLցM3pY>`?1b.F #4 )8<)'  t0t.҈N 4C:p"t.R<p65/Ra3>v<4͸>lgxz܎ƶa327a3a3^O_۶2EN?ߝ~~vz}NO?~~租קrzw16#L3wB0xZ1Tʐg=끫T4l҈I.Ȃ9c asзu[5gWC[5w`UӘ 8xd:PBcNnpj7O}[_7.@eEva 7O-ݾok,Ga'c\7~ss `?ĪQNxp"P؝֗M 0Eb(N'N<8nN^@<.0Im1J D1Id'45867\l .ƶ.M=E*SYpqB=!%A8Gp*NMXt/RucE*wQ$Vtpv Up:A܉ER~ V%nb .o7>&SmTC@P~N}ˊ|`1]C#NиlCXYwpi>CWia' +/+qB4N Nqjk,۰Ba'b,9Ͱ!Tޓ  Ʋ ++0;NNaae|Dс<:s1@JDmek1Nph~ t.R聳fѷ +V V1s̢ol!{' m{_aNtB54i}@'{ XNThlB%VPy+L> xceVVl5Cp"?@D)ci$U=pƲfD:0;N0p.D6śTme;K3H<ևN8}=▸:v+ مU pvz}zu05-'RW^n??s+05ԣl/vԉ*xsGt.\@c:#U?u[)#Oj+ WFbIcLqme{m~p::ӌn"McCm]()IP@e)A)cvЈ'vpxXށe"me4c}؀e"4!q5i ^< BvamJ[cFсlzJO,a"McTf 䍩l{nI7Q gkg=pKep"R8{L3ή4糶Ʋ N4xt.ZC#q"NPtςas|D1͡ok,[Rk(ӊ948}^mș2NᬳnH|6g, HӘ)#HCme)WMEDi =e/E2.M"SF$falk,[m\ (ɼ&ze"EvaE 0OdNq?;NX6 Wc[cr"X#2Cp{qمUo[\)W(t x8|}|`ˌ=M*3f{4 \ilk,8ф,Pa SvamBBRO=p<_oVQt ;,(F~~q|gHIp{q \ Q`ik,[_)Dp鞐m)HF<){[a *3,F)0DΣ!OmeH av1B؞`h(HN*e#L'35+K[c6rBD(Ⱳ(F;.F!T%!:;/{l9:oCChl #6T8N]'*Էu[5F4Tqy~s\ԟlЉGWyN!+Ndbs1^DP[7]犱 }[5_+|[c?K mWoHt`Q|?oYU'?k[G[cڻkȷ5_#{,X~&4N_`FUu B/ލ/ystem. [55k]@]@HB1:M80DATE.LBR A Patch to the MicrosoftKP VDE-2C editor - E.Meyer 12/84 - for Osborne 1 or Vixen computer only*"h!j"*h"*h"{>2Ai1N N>2 )File Line 1 Col 1 ESC-M = menu ( =7o$!:\@w#6:#!]>  !e6.#>16 #=*!FNyvBP ##7>1B^4S ##NFyv>0S}0B> 6 #=„'d !"_Nɯ2!"h"j"k"|\NʀN:|G:k !h4!"j"k"|\N]\N€!~] R L L~B>L>R4R#wz#\N> r#w2͆72 00000 bytes free>V N N_N:!\ !\!NN\N\!"h"j"k"|N!% w#K2@\N:@†! > $|!}!!i>w\N†\N>2Au>2AuBAK!*y*˾ .4w# @>^*w#"*w#"Ô>ʔ+~*+ +"> *w#"> *w#"> *w#""Ô}րyô*r+6 *:Do%"v+"x:G#6 _*x#"> BDM*rDM*tt*x*vDMt*tDM*v++t́*v+*t"t#"v͌*t#*v"v+"t~*t~ >7> ###7?#+͉S> *v%7?z,7*x+> ##>q*+":=q=q:=*#"!qÝ:<=Ý:<=<Ï:<!<Ý:2<g~*rT]o~# ½~>ôò"t͉*xT]o~+  ~ >"vo͖+͖͡+>2A}*t#w"t*rͣ=u!"*xͺn͚~r> *tri"ʹҋBuͣ  +ڬWuú*x͚~ ºWú~w*t~5>+"t*v~~7?z4z+w"v ʚ z͚B͉͙*v~*5>.#"v*tC~C~4Ì#w"t ʂ ŒWu> qB p=_͔:<!*t~ *:+":>2 :<!B *:#":ÐG :=*:B":ÐG :=!*: ":Ð: y +~#=2r R :x$ :y$ >2A++ͺ=͚W[:r 2r ZÔ>2A: :8 =G% x“ =ƒ New string: ͑2 @  O!:8 s G p H ! ~R G#~.p ] R >2AyÌ چ Œ >2A.͌ K.͂ ~ڹ *t~ʹ ~4ÿ >.͌! ~*v>  ! ~ 6! 6! 1INSERT ͉ : ʒ> .WuͿ͔͉*v~2 5>7?#"v J *x~ #W +*t~ W #"v͡*t#">*>́u >2A*>+"t͚[ ʨ  *w#": =2 >P2 : O**>  0"â G: =0: =GH> *w#" : 2 ͛>P2 > ̓  ͛>P2 ~#̓   鯹4 ~#7 O > yU A% x z C yO*% s ́ 0w#Y ": Í : O":O> >PG: O: x H**>  ("+*0 "> – :=_" = :=2=u2 <2/:<Ox2'2 /x2<2 : ͛* :==G_͖ :<=VG: O: *":>P!<2A2">2A2*t"t#ͣ[͕1<͉͡*vî̓ͧ:A1*>́n*>͕ͮ>2Ah!\v :2!v\ :2 File name: ͑bbƀo&>6 #=!6#6  !:::Ab  bb<2!~.C Oa# b:7Ab[b>b#>b#\! 2>2A<͡ Printer setup codes: ͑ʟO!~͢# –1͉*v% ¶͢> ͢«*x{zҫ*v~A[a{nˮ Ô:2: 2G:<>_% !xG>:́x+6 W͔:ЯGͿG {QW x=ZÔ*:*͉*B ! ~w4ҋͿG *Q® B Q…  ÅG ʒͿG Q Wʔ Ϳ]1̣ ͣ ;wÅ>2A! ~206:02 *v*t~> !y`!x`!rB~p#e.?!:; ! ~ Macro: ͑O Repeat count (0-9,*): yy!6*0 Gx2x!!x"vx*v~ʐ:Aʝ2x!x"v*v~:x=2xʸ!"vy!x"v~#"vNF#^#V##^#V##!A!yMmW T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt ^- " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change y!A ڭʭ_T<EOF IS8WKNC PhB[ Df QXLRZ|>2A>2\ !]6 #<{B:] ͧ̓:2:Ai2A*>MD*t#t g y*:˾|   wXw  @    7  v :A ERROR::Ao&~_#~W [Press ESC to continue]y²͔!Out of MemoryInvalid CommandI/O FailureNot FoundDisk Full or R/ONot ChangedCannot Reformat I/O working... please WAITG*v~xh=^ xkɣJP VDE-2C editor - E.Meyer 12/84 - for Osborne Executive computer only-K1*q >2 )File Line 1 Col 1 ESC-M = menu ( =7o$>A!:\@w#6:#!]> !e6.#>6 #= >!qFNy[B5 ##>1BC48 ##NFy[>08}0B> 6 #=i'd !"{_ɯ2!"h"j"k"|\e:|G:k!h4!"j"k"|\¾B\e!~B 7 1 1~'>1>747#wz#þ\> W#w2k7z Y 00000  bytes free>  _:!\ !\!s\\!"h"j"k"|!^ w#02U\:Uk! > |}N>w\k\>2VZ>2VZBAK!>A*{>>A*{˾>= CIw#>A @>^*{w#"{*{w#"{>y>y+~*{+ +"{>A> *{w#"{> *{w#"{> *{w#"{>"{y}րñ*+6 *:Do%"+":G#6 t*#"S BDM*DM*É**DMÉ*DM*++É͖*+*"#"͡*#*"+"͓*~ >7> ###7?#+͞(S> *:.7?zA7*+> ##>Æ*~+"~:Rʆ=Æ:R*~#"~!ʆ<Æ:2R>ò:Q=ò:Q=<ä:Q!<ò:2Q|͓*T]̈́~# ~>"͞*T]̈́~+ %!~!>"oͫ@Ͷͫ@>2V}**#w"*͸R͊!"~*͓̓ͯڇ> *‡~"~ҠW͊͸+l͊*ͯ~ l*͓͌*~5>+"* ~ ~7?ʏ4Ï+w" ʯ ͯW*ͮ͞*~?5>C#"*X~X~4á#w" ʗ ¡lÊ> ʆͦ ʅ#=tͩ:Q!*~ *O+"O>2.:Q!ͦ *O#"Oåͫ :R*OB"Oåͫ :R!*O "Oå:2V++Rͯlp: 2 oé>2VO :M =G^ x¨ =˜  Y New string: v2 U  O!:M ʈ G@ څ ] ! ~g G#~Cڅ r g >2Vá ڛ ¡ >2VC͡ ïC͗ ͓ *~ ~4 >C͡! ~*> @ ! ~ 6! 6! >A1>INSERT ͞, : ʧ> Cl͊ͩ͞*~S 5>7?#"k *~ #x +*~ x #"Ͷ*#"S*S͖Җ >2V*S+"ͯp  *{w#"{: =2 >P2 : O*{*{>  0"{ G: =0: =GH> *{w#"{ : 2 ̀>P2 >A> ͤ * >̀>P2 ~#>Aͤ >B B 鯹m ~#p O > yʎ A^ ʽ ̿ | yO*{^ ʸ 0>Aw>#’ "{: : O"{:{O> >PG: Os xH*{*{>A>  (>"{+*{0 "{>  :R_",BRI:R2R_͊2 <2}Ày:QOx2}x2 Àx2Q2 :.̀*,:R=ʘ_ :Q=ʧG: Os *{"O>P!Q<G* *#:R_:_ 2.>A*~%:}o&*O>͜:V-- Y Abandon file? (Y/N) _Y :V͹Ͷͫs*͔{>2VÖ҆>2VÖ*"#͸p͹QͶ͞*Ó :V͹*S͖*S͓>2V!\ :2!\ :2 Y File name: vƀo&>6 #=2!6#6  !::u:An <2!~.ʧ ʳaڇ :ڛA[>#u>#u\! 2>2VQͶ Y Printer setup codes: vO!~͇# ͹͞*^ ͇> ͇*{z*~A#[Ga#{#nˮ #é:}2\:}o2}G:\<>_^ …xG>ڞy͖yx+6 lͩy:\bЯGͫ ͵»@ , x=oéÎ:\bڎ͞ڎͦ C!} ~w4#]ͫ ʎ͵@ , ͦ =͵@ )@ ͫ ʧͫ b͵b@ K##ͻʩ9 #̸͕ ͸ ͌͟>2V! ~26:2 **~> !!!ͦ~#.?!:; ! ~  Y Macro: vO Y Repeat count (0-9,*): y4![6*I0I IGx2![W!"*~3+:V2!"3*~%:=2!["!"3~#"+3F#^#V##O^#VP##D>A!A!>Mʄm Y T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt DEL " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change >A!A> ))_=#TQEdF ISSWN C+ PB| D QX L0RUZ>2Và->2\ !]6 #>QKTW:] _ Q^:2:V2V*SMD*#͉҉|/>A*O˾>= #  m# &   U , @ 9 X   /X:Vs Y ERROR::Vo&H~_#~WB Y [Press ESC to continue]:ͩsXfvOut of MemoryInvalid CommandI/O FailureNot FoundDisk Full or R/ONot ChangedCannot Reformat Y I/O working... please WAITG*~x= x+*m Y T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt DEL " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change >A!A> ))_=#TQEdF ISSWN C+ PB| D QX L0RUZ>2Và->2\ !]6 #>QKTW:] _ Q^:2:V2V*SMD*#͉҉|/>A*O˾>= #  m# &   U , @ 9 X   /X:Vs Y ERROR::Vo&H~_#~WB Y [Press ESC to continue]:ͩsXfvOut of MemoryInvalid CommandI/O FailurJP VDE-2C editor - E.Meyer 12/84 - for Osborne Executive computer only-K1*q >2 )File Line 1 Col 1 ESC-M = menu ( =7o$>A!:\@w#6:#!]> !e6.#>6 #= >!qFNy[B5 ##>1BC48 ##NFy[>08}0B> 6 #=i'd !"{_ɯ2!"h"j"k"|\e:|G:k!h4!"j"k"|\¾B\e!~B 7 1 1~'>1>747#wz#þ\> W#w2k7z Y 00000 bytes free>  _:!\ !\!s\\!"h"j"k"|!^ w#02U\:Uk! > |}N>w\k\>2VZ>2VZBAK!>A*{>>A*{˾>= CIw#>A @>^*{w#"{*{w#"{>y>y+~*{+ +"{>A> *{w#"{> *{w#"{> *{w#"{>"{y}րñ*+6 *:Do%"+":G#6 t*#"S BDM*DM*É**DMÉ*DM*++É͖*+*"#"͡*#*"+"͓*~ >7> ###7?#+͞(S> *:.7?zA7*+> ##>Æ*~+"~:Rʆ=Æ:R*~#"~!ʆ<Æ:2R>ò:Q=ò:Q=<ä:Q!<ò:2Q|͓*T]̈́~# ~>"͞*T]̈́~+ %!~!>"oͫ@Ͷͫ@>2V}**#w"*͸R͊!"~*͓̓ͯڇ> *‡~"~ҠW͊͸+l͊*ͯ~ l*͓͌*~5>+"* ~ ~7?ʏ4Ï+w" ʯ ͯW*ͮ͞*~?5>C#"*X~X~4á#w" ʗ ¡lÊ> ʆͦ ʅ#=tͩ:Q!*~ *O+"O>2.:Q!ͦ *O#"Oåͫ :R*OB"Oåͫ :R!*O "Oå:2V++Rͯlp: 2 oé>2VO :M =G^ x¨ =˜  Y New string: v2 U  O!:M ʈ G@ څ ] ! ~g G#~Cڅ r g >2Vá ڛ ¡ >2VC͡ ïC͗ ͓ *~ ~4 >C͡! ~*> @ ! ~ 6! 6! >A1>INSERT ͞, : ʧ> Cl͊ͩ͞*~S 5>7?#"k *~ #x +*~ x #"Ͷ*#"S*S͖Җ >2V*S+"ͯp  *{w#"{: =2 >P2 : O*{*{>  0"{ G: =0: =GH> *{w#"{ : 2 ̀>P2 >A> ͤ * >̀>P2 ~#>Aͤ >B B 鯹m ~#p O > yʎ A^ ʽ ̿ | yO*{^ ʸ 0>Aw>#’ "{: : O"{:{O> >PG: Os xH*{*{>A>  (>"{+*{0 "{>  :R_",BRI:R2R_͊2 <2}Ày:QOx2}x2 Àx2Q2 :.̀*,:R=ʘ_ :Q=ʧG: Os *{"O>P!Q<G* *#:R_:_ 2.>A*~%:}o&*O>͜:V-- Y Abandon file? (Y/N) _Y :V͹Ͷͫs*͔{>2VÖ҆>2VÖ*"#͸p͹QͶ͞*Ó :V͹*S͖*S͓>2V!\ :2!\ :2 Y File name: vƀo&>6 #=2!6#6  !::u:An <2!~.ʧ ʳaڇ :ڛA[>#u>#u\! 2>2VQͶ Y Printer setup codes: vO!~͇# ͹͞*^ ͇> ͇*{z*~A#[Ga#{#nˮ #é:}2\:}o2}G:\<>_^ …xG>ڞy͖yx+6 lͩy:\bЯGͫ ͵»@ , x=oéÎ:\bڎ͞ڎͦ C!} ~w4#]ͫ ʎ͵@ , ͦ =͵@ )@ ͫ ʧͫ b͵b@ K##ͻʩ9 #̸͕ ͸ ͌͟>2V! ~26:2 **~> !!!ͦ~#.?!:; ! ~  Y Macro: vO Y Repeat count (0-9,*): y4![6*I0I IGx2![W!"*~3+:V2!"3*~%:=2!["!"3~#"+3F#^#V##O^#VP##D>A!A!>Mʄm Y T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt DEL " left ^N insert CR F ind D elete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change >A!A> ))_=#TQEdF ISSWN C+ PB| D QX L0RUZ>2Và->2\ !]6 #>QKTW:] _ Q^:2:V2V*SMD*#͉҉|/>A*O˾>= #  m# &   U , @ 9 X   /X:Vs Y ERROR::Vo&H~_#~WB Y [Press ESC to continue]:ͩsXfvOut of MemoryInvalid CommandI/O FailureNot FoundDisk Full or R/ONot ChangedCannot Reformat Y I/O working... please WAITG*~x= x+*m Y T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F !"#$%&'