ou may enter commands to other banks after a Z command; the current bank is then changed: z d [We set the current bank to D] D [SPMON confirms] d 9000.20;f [We enter the command to Terry M. Peterson 8628 Edgehill Court El Cerrito, California 94530 An earlier version of SPMON, without many of the current features, was issued on the first ISPUG Utility disk, but with rotten awful instructions. We suspect many disassemble in bank F] z [We ask for the current bank designation] D [SPMON says it is bank D] 4. At entry, SPMON always shows the current bank as bank 0. We prefer to use ";bank" in commands people who tried it got thoroughly confused and gave up. This time around, we spent two weeks (full time) writing, editing, and testing the mater- ial you have just read. We simply did not have time to do it the first time around. ith the author at:  wherever possible to make certain we are in the proper one. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PART VIII : AN EXERCISE How far can you go in loading an old program into SPMON, TRANSFERring it to a new address, and running it? We suggest you find out. There are limitations to any transfer unless your code is written as PIC. We suggest you transfer TAB, on this disk, from bank F at $9F00, for $B0 bytes (where it loads), to $5500 in user memory--and then disassemble it. You'll find it will run at $5500, but ONLY if you Zelect Bank F before you Quickstep it with a breakpoint, starting at $5500. Why? The disassembly should tell you quickly. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fini! Good luck, and enjoy SPMON. Terry Peterson has given us a superb, powerful tool; at this writing we know of no major problems in the program. If you should run into any, get in touch with the author at: ches are always position-independent (PIC). Don't assume that transferred code will run--for any immediate values in the code (#$9600, for example) remain the same. Lesson: do not try to GO or RUN transferre000;a [Begins execution in bank 10, at $9000] 4. You will find WALK of particular value when you deal with a strange pro- gram which gets a number of unknown values from the stack. The SP will point to them; usually they're loaded into the X, Y,ange registers, and resume a WALK: d 5900.0b First, we disassemble a simple ,5900 4F |CLRA loop so we know what the code does. ,5901 5F |CLRB ,5902 C3 0001 |ADDD #$0001 ,5905 1We use a short sys- tem routine: PutNL_, which puts a new, blank line to screen. We start at a jump table address, $B1F9, which in turn will call a jump: w b1f9 B1FB 054C 0000 0000 0000 0220 00 C0||B1FB 7E B324 |JMP $B324 B324 054C 0000 0000 000 full-speed execute the SR at $C6C6. If you want to make a second run, going through the SR there, go to it. Last, note the wealth of detail in the registers; you know what's stacked, and where. In more complex routines, the data in X and Y registers wil d code unless it was written as PIC, even if a glance says it's okay. After a transfer command, it's wise to see if all the code you wanted went to the new address. It's easy to transfer part, but not all. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ or D registers, where you can record them. We find WALK priceless when we work through Waterloo ROM routines. 5. You can resume a WALK safely after a STOP (and perhaps a dump to disk of results) if you have not modified the registers. It is wise to 083 FFFF |CMPD #$FFFF ,5909 26 F7 |BNE $5902 ,590B 3F |SWI We begin the WALK. Note that the first line of code (at $5900) executes; WALK pauses at the second instruction, at $5901. We touch the Spacebar to execute each line but 0 0220 00 C0||B324 34 06 |PSHS B,A B326 054C 0000 0000 0000 021E 00 C0||B326 CC FFFF |LDD #$FFFF B329 FFFF 0000 0000 0000 021E 00 C8||B329 34 06 |PSHS B,A B32B FFFF 0000 0000 0000 021C 00 C8||B32B EC 62 |LDD $02,S B32Dl be invaluable. 10. As you become more familiar with SPMON and SuperPET, you'll be able to stack the values used by more complex routines. If a routine expects two values to be stacked as parms, you can put 'em there, and then follow what happens. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ w WALK 1. WALK is a companion to QUICKSTEP with far more detail. It executes one instruction, displays registers, disassembles and displays the next line of code, and waits for a keystroke. WALK will not execu check the registers against the last recorded WALK register line to make sure of this. So long as there aren't any changes except those you want to make, you may resume WALK after a STOP. 6. WALK, as with QUICKSTEP, executes (or RUNS) the code, so  the last: w 5900 5901 0080 0000 0000 0000 0220 00 C4||5901 5F |CLRB 5902 0000 0000 0000 0000 0220 00 C4||5902 C3 0001 |ADDD #$0001 5905 0001 0000 0000 0000 0220 00 C0||5905 1083 FFFF |CMPD #$FFFF 5909 0001 0000 0000 0000 0220 00  054C 0000 0000 0000 021C 00 C0||B32D BD C6C6 |JSR $C6C6 B330 0001 0554 0000 0000 021C 00 C0||B330 7E B4BD |JMP $B4BD B4BD 0001 0554 0000 0000 021C 00 C0||B4BD 32 62 |LEAS $02,S B4BF 0001 0554 0000 0000 021E 00 C0||B4BF AE EYou may do the same thing with all the registers. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ z ZELECT 1. If you don't want to keep entering ";f" for bank F, you may change the current bank with: te the next line of code until you touch any key except STOP, which ends a WALK at any time. We use the Spacebar to WALK through code. 2. You also may overtype registers on the line next to be executed if you want to explore alternatives to the dispWALK carefully. WALK will pause for an input if any is needed. You must always enter input if asked for in the first pass through the code. Sometimes, on second and subse- quent passes, input is not required. 7. Many of the routines you examine withC1||5909 26 F7 |BNE $5902 We hit STOP before the last line above is executed, and dump registers: r PC A B XR YR UP SP DP CC:bits set The register dump comes back ;5909 0001 0000 0000 0000 0220 00 C4:efz with the ZERO f4 |LDX ,S B4C1 0001 054C 0000 0000 021E 00 C0||B4C1 4F |CLRA B4C2 0001 054C 0000 0000 021E 00 C4||B4C2 E698 04 |LDB [$04,X] B4C5 0000 054C 0000 0000 021E 00 C4||B4C5 E7 03 |STB $03,X B4C7 0000 054C 0000 0000 021E 00 C4|z f [where "f" is bank 15] and from then on, any operation at addresses $9000-$9FFF will go only to bank 15. The current bank will remain as set until you change it OR the code you execute in SPMON changes it. The TRANSFER command will work only layed code. If, for example, a BNE (Branch if Not Equal to Zero) instruction is about to be executed, you may STOP, dump registers, and change the CC register so that the branch is or is not exe- cuted. You may then resume your WALK. 3. Enter WALK w WALK will call system subroutines or common subroutines in the code. You can skip these whenever you see a JSR on the screen by depressing the "j" key (for JSR execute immediately). The subroutine code is executed at full speed; you return to WALK mode lag clear, at C1. We change it to C4 to set the flag, hit RETURN, and then WALK again, starting at $5909. It's no surprise that we SWI: w 5909 590B 0001 00|B4C7 20 4C |BRA $B515 B515 0000 054C 0000 0000 021E 00 C4||B515 32 62 |LEAS $02,S B517 0000 054C 0000 0000 0220 00 C4||B517 39 |RTS This WALK operation demonstrates several features: First, have NO doubt the code ran--the if the bank wanted is Zelected by the "z" command. If you receive an error indication (a reverse-field question mark) on a ";bank" command, set the current bank with Zelect. 2. If you want to know the current bank, simply enter: z 3. Yith the same memory commands used elsewhere. If you enter WALK with an address, execution starts there. If you enter no address, execu- tion begins at the address in the PC. w 5900 [Begins execution at memory location $5900] w 9at the re- entry point in the main code. WARNING--don't 'j' through "JSR $B009"! It diddles with the stack. 8. Because WALK is so powerful and useful, we give two examples of how to use it. The first example is simple and shows how to STOP, ch00 0000 0000 0220 00 C4||590B 3F |SWI You may modify any register in the manner above in the midst of a WALK to deter- mine what will happen in alternative paths through the code. 9. WALKing through a system routine; use of the "j" key. blank line just below JSR $C6C6 was put there by PutNL_! Second, note that though the code (like most Waterloo code) jumps all over the lot, WALK sets down the code in the order in which it is performed. Next, we used (and suggest you use) the "j" key to SPMON Assembler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When you are through with this section of the instructions, *d it, and get spmon_instr1:e into memory. The instructions are in short sections to leave pracDick Barnes file: spmon_instr2:e April 20, 1985 PART VII : THE MONITOR COMMANDS IN DETAIL, WITH EXAMPLES (cont.) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ q QUICKSTEP set to zero before an RTS to main menu. We want to return to SPMON, so we stop there.] [Don't clear the screen; give the next command near the bottom of the screen.] q 9f00;f [Now, QUI order than in the similar Waterloo monitor register dump when the r command is entered: r PC A B XR YR UP SP DP CC:bits set ;6039 0000 0000 0000 0000 0220 00 C4:efz Whenever a register dump appears in SPMON, the registers are  45;9 [to default drive 8/0] s disk9/1.bank_4=9000.345;4 2. You may save several modules at difference locations, as shown below, in one package. The module pieces will reload at their several addresses: s module=1000.fff,900$ticing room above the top of text. yond the top of this text in the Editor, so you can practice with the assembler. To be safe, start assembly at $5500 and do not go above $5700 whilst using SPMON with these instructions. Fini on the (continued) 8. QUICKSTEPping in the banks can be a bit tricky if you don't watch your identification of the bank wanted--or if you try to set a breakpoint with a bank command after it. Why? A breakpoint is a pure number for the PC, which knows noth CKSTEP through the program. Use the ";f" to make sure you're in bank 15.] [Enter input] [The program will ask you to press a key. Do so and hit RETURN.]  shown in the order above. We commented on the CC "bits set" feature in the introduction. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STOP [Key] and : STOP [Keys] 1. The STOP key will often rescue you from a 0.a00;2,9000-9456;3, .... 3. Such STORED modules are put on directory as PRG files. Programs assembled and linked with the SPMON assembler may be so saved to disk. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ood code, and yet need to revise it, TRANSFER a copy. 3. Examine this transfer of code from $5500 to Bank D. See anything unusual? d 5500.0b Here's the code we transfer. ,5500 4F |CLRA ing about banks. If you enter: b $9f00 f, SPMON will think you want the breakpoint executed on the FIFTEENTH pass through that instruction, hmmm? So, despite the fact that you may, time after time, type ";f" to say you want something done in Bank F, neve[Register Dump (in one line) will occur at the breakpoint $9F26. Hit the STOP key. The cursor will return to left margin. You are out of QUICKSTEP. Should you continue to STEP...well, second run, do so five or six times and seecrash. When a register dump appears, KILL SPMON, for you don't know what part of the code may have been overwritten and ruined. Load SPMON again. 2. Similarly, the colon and STOP keys, depressed together, will rescue you from an infinite loop and si t TRANSFER 1. You may copy any portion of memory to any other suitable part of memory, without disturbing the code which is copied. When you are done, two copies of the code exist internally. t 5500-5530 5900 or t 5500,5501 5F |CLRB ,5502 C3 0001 |ADDD #$0001 ,5505 1083 FFFF |CMPD #$FFFF ,5509 26 F7 |BNE $5502 ,550B 3F |SWI z d We Zelect bank D (see Z, r enter a bank number for a breakpoint! 9. On this disk, find a small program called TAB; it loads at $9f00 in bank 15; don't re-direct the load anywhere else or thee will crash if you run it. We suggest you send this paragraph to printer; then foll what happens...which will depend on whatever code happens to be in bank 15 at the time.] 10. Did SPMON reprint everything on the screen while QUICKSTEP operated? It often does--slowly. You are advised to clear screen with SHIFT/CLR before milar nasties. It's best to KILL SPMON as soon as a register dump appears. If you keep going, SPMON should work okay, but KILL is the only safe exit. Do it now, not later. You may forget. 3. STOP ends QUICKSTEP, WALK, and INTERPRET commands. See the.30 5900 makes a copy of the code from $5500 through $5530, starting at $5900. You may not transfer between banks directly. Instead, transfer code from a bank to user memory and then transfer it to another bank. Because bank-to-bank transfer is not possbelow). D SPMON confirms the bank. t 5500.0b 9000 We transfer it. d 9000.0b;d And check it. ,9000 4F |CLRA ,9001 ow the sequence below: l disk/1.tab [We assume this disk is in drive 1] 9F00-9FB0;F [SPMON responds with load addresses and bank] d 9f00.30;f [Disassemble until main program is printed QUICKSTEPPing, and to enter the command at the top of the screen. 11. Bank identification. We identify the bank in every command above, since we haven't yet come to the Z (or Zelect) command. As you'll later see, we could could have Zelected (Geez,  summary of commands in the introduction for other commands which STOP terminates. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ s STORE 1. You may save any defined part of memory to disk (not to your printer ible directly, Terry forbids the use of the bank number after the dest- ination (you cannot say: t 5500-5530;e 5900;f, above). The Z for Zelect command must set the desired bank if you transfer in or out of a bank. 2. If you want to keep a copy of g 5F |CLRB ,9002 C3 0001 |ADDD #$0001 ,9005 1083 FFFF |CMPD #$FFFF ,9009 26 F7 |BNE $9002 <-- You may think the code has been ,900B 3F |SWI revised. It has not. All bran so we can see where we'll breakpoint] b 9f26 [Clear a line with ESC; set a breakpoint at the address shown--where SERVICE ($32) is Terry!) bank 15 at the start of our work; all our commands would then have been directed to that bank. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r REGISTER DUMP The registers appear in a slightly different, which will gag on the hex code) as shown below: s disk/1.d_rom=d000-dfff or s disk/1.d_rom=d000.1000 where the 4K ($1000) bytes are defined by memory or by byte range. Working in the banks, merely add the bank number: s bank_9=9000-93 o ieee4 o printer o serial Again, be sure to divert the output back to screen when you finish. 2. PUT (or DUMP). You may dump whatever is on screen to a disk or to a printer, from line 1 of the screen down to, but not includine No other program in User Memory $3900-$7FFF $0A00-$5FFF In an Editor, with these instructions $0A00-$1FFF $5500-$5700 2. Though SPMON sets end of user memory at $5FFF, any Editor will set high pointers just below llowing a semicolon: 9000-9100;f or 9000.100;#15 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ a ASSEMBLE 1. The assembler within SPMON is simple and limited in capability, bry is accepted. Your instructions are overwritten by the 6809 opcodes and operands, and the next entry address is automatically printed on the next line. The re- sult of the instruction above looks like this: a5000 CC 5600 |LDD #$5600 [SPMON's ::: NOTE on BRANCHES: A simple BRANCH instruction (BEQ, BNE, BHS, BLE, etc.) can only occur if the branch-to address is 255 bytes or less from the address of the BRANCH instruction itself. In the Waterloo assembler, you will receive an error if the  g, the line the cursor is on. If you have uttered a series of commands with results you wish to keep, this is the method to use. We show below the commands to put the material to disk or printer. A plain "p " sends material to an ieee4 printer:  that address; we thus suggest you not extend your work past $5700 while using SPMON with these instructions. Do not attempt to use these instructions with SPMONLO. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ut very handy when you want to revise a program already in memory or to test a few alternatives without having to load the Editor, write a program, assemble it, link it, and then load and GO it... 2. The assembler not only assembles but links (puts response to a good entry] a5003 [Address for next code prints automatically] If the entry is bad, you should see a reverse-field ? If NOTHING happens after you hit RETURN, you have made an error. A good instruction albranch-to address is more than 255 bytes away. SPMON automatic- ally substitutes a LONG BRANCH for any such distant address. Don't be surprised if this happens. Long Branches have a two-byte operand, and will find an add- ress anywhere in 6809 memory sp p disk/1.a_file p disk.record p ieee4 p printer p serial A trick on dumps: When you enter SPMON, clear the screen. Begin work on screen line 1. When ready to dump your results, put the cursor on the line just below the last one to be save PART VII : THE MONITOR COMMANDS IN DETAIL, WITH EXAMPLES Preface on Setting Ranges 1. Any range in memory may be set either of two ways; as two memory loca- tions, or as a location plus a number of bytes, in hex, decim the code into the prop- er address). It uses all standard 6809 mnemonics, but none of the 6800 hybrids. You may not use the 6809 conventions FCC, FCB, or RMB. 3. If you enter decimal values, they are converted to hex. An entry of ##5600 is convertways returns the opcodes and confirms the line, as shown above. 4. Terry Peterson designed the assembler to interpret some bad entries. In the lines below, the omissions or errors are ignored: a5000 lda 34,x++ Here, x++ is valid code, but it mace. Because short branches need only one byte of code, we suggest you use them. If a BEQ must be transformed into the long-branch equivalent, LBEQ, SPMON will do it for you. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::d. Then dump. You'll avoid a screenful of trash. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PART VI : MEMORY ALLOCATION WITH SPMON 1. Either version of SPMON is $18E7 or decimal 6375 bytes long.al, or binary. Entries without notation default to hex. We show no binary examples. Ranges in Memory Locations: In Bytes a000-afff a000.1000 or a000.#4096 #40960-#45055 ed to #$15E0. We suggest you stick to hex to avoid confusion between the "immediate value" meaning of # and the decimal notation meaning of the same symbol, #. 4. The format for the ASSEMBLE command follows: a5500 ldd #$5600 or ay NOT be prefaced by an offset of any kind. The assembler ignores the 34. a5000 jsr [a,x The missing right bracket will be supplied. In short, the assembler will try to make a legal entry of what it receives. You should :::::: 5. After your program is assembled and confirmed by good reponses from SPMON you may GO it by simply saying: g 5000 (if that is its starting address). If you wish to use breakpoints, you may (but not with plain GO). See BREAKPOINTS, below.  The code is in part position-independent; part is not. You may not transfer SPMON and expect it to run in any other location. Pointers and Addresses in: SPMONLO SPMON MemBeg_ $38E7  #40960.#4096 or #40960.1000 2. Any number appearing after a period or hyphen will default to hex unless you specify it otherwise. Hex, decimal and binary may be intermixed. 3. Any bank may be specified by its number, following a semicolon a 5500 ldd #5600 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Annotation: assemble at $5500 in memory 6809 Mnemonic Operand | | check the responses to be sure that the assembled code is good. A few mnemonics are duplicates (in what they do), such as BCC (Branch if Carry Clear) and BHS (Branch if Higher or Same). To save code, the disassembler will use only BHS in this case, which 6. We've left 500 bytes free, beyond the top of this text in the Editor, so you can practice with the assembler. To be safe, start assembly at $5500 and do not go above $5700 whilst using SPMON with these instructions. Fini on the $0A00 MemEnd_ $7FFF $5FFF GO addresss of code $2000 $6000 Top of Module $38E7 $78E7 Suggested User Working Spac: 9000;f specifies bank F 9000;#15 specifies the same bank in decimal The number of the bank always returns in hex to confirm the command. 4. When ranges are specified, the bank command may be appended to the range, fo | | a 5500 ldd #$5500 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: The response from SPMON shows to the right of your entry if the ent means exactly the same as BCC. In attempting to be for- giving, the assembler may misinterpret your intent. Check. Legal entries will, however, result in correct object code. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::I v not implemented j Jump to Subroutine (JSR) w Walk, step by step, through program k Kill SPMON; reset MemEnd_ x Exit to calling routine or menu * l Load program z Zelect bank to be used (Hmmm...) lon are, in fact, commands. Note the semicolon prefacing the register dump below. It's easiest to dump and modify. Registers in SPMON appear in a slightly different order than in the Waterloo monitor, but are more clearly identified. The flags set in th Command (default to hex) to multiply the values. $00FC = #00252 Answer in Hex and Decimal fff+#31000 Command in Hex and Decimal $8917 = #34095 Answer #45678-#252 Command in Decimal $B172 = #45426 Answer 'a'*#40 (ASCII code o questionable. Enter the monitor in the Editor you use, and say: >g 6000. Then try the math. Return to this text with an: x . ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PART IV : DOS  ~~~~~~~~~~~~~~~~~~~~~~~~~~ PART V : DIVERTING OUTPUT, DUMPING RECORDS 1. DIVERT. You may divert output from the screen either to a printer or to a disk file. Be warned that the output will no longer appear on the screen, for it has be 2. Math Operators. You may perform the following operations in SPMON, using these operators: + add values & AND values bitwise - subtract values ! OR values bitwise * multiply values  e Condition Code register (CC) are named for you: PC A B XR YR UP SP DP CC:bits set ;6039 0000 0000 0000 0000 0220 00 C4:efz As a convenience, we list the CC flags: ::::::::::::::::::::::::::::::::::::::::::::::: f "a" times decimal 40) $0F28 = #03880 Answer 'a'&$34 (AND the values) $0020 = #00032 Answer 'a'*100!'b' (ASCII code of "a" times $100 OR'd with ASCII code of "b") $6162 = #24930 Answer :::::::::::::::::::::::::::::::::::::::::::::: OPERATIONS 1. The symbol @ must preface all DOS commands. You use the DOS commands de- fined in Commodore manuals as that for 3.0 BASIC; they are on this disk in a separate file named: dos_commands:e. We illustrate with a few examples, below. Commanen diverted! Diversion is most useful for long disassemblies or long memory dumps. To divert, enter an "o" (not a zero!) and the filename to divert to: o disk/1.record o disk.record A file named "record" will be ^ exclusive OR values bitwise No division is allowed. 3. You may specify Control characters (such as Control A) in filenames or in DOS support strings by prefixing the character with ^, as in ^A. You may not HUNT with this::::::::::::::::::::::::::::::::: Entire FIRQ Half IRQ Sign Zero Overflow Carry Interrupt Mask Carry Mask Flag Flag Flag Flag Flag Bit Flag Bit E F H :::::::::::::::::::::::::::::::::: The last operation is performed in the order specified, from left to right, as we show below in detail: 'a'=$61 times $100=$6100, which in binary is: 0110 0001 0000 0000 OR the above binary value with $62, in binary: ds may be in capitals or lower case: @$1 Display directory of drive 1 (Scroll with any key but STOP) @$0 Directory of drive 0 @s0:trash Scratch file "trash" on drive 0 @c1:*=0:a_file Copy a file "a_file"  opened, and any further output will go to that file, not to the screen. When through making the file, you MUST close it by diverting output back to the screen: o This command returns you to screen by default. If you fail to divert ba notation. 4. Notation. All numbers entered in SPMON are assumed to be hex. You may use $ to preface hex; % prefaces binary entries, and #, decimal. You may also indicate an ASCII numeric value by prefixing a character with '. Spaces are allowed ONL I N Z V C 7 6 5 4 3 2 1 0 CC Bit :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 5. Errors. Most errors in entry will be c 0110 0010 Result is $6162, or binary 0110 0001 0110 0010 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2. As you might infer from the last example, you may couple as many arithme- tic anfrom drive 0 to drive 1 under the same name. 2. You may re-direct DOS commands to any device but 8 with the following command: @@9 . This redirects all DOS commands to device 9 until you manually return to device 8 wck to the screen, the disk file remains open for WRITE and cannot be read. Remember that your commands to SPMON will not appear in the file. Only OUTPUT from SPMON is diverted. If you want a complete record of what occurred, DUMP (see below). You maY in binary entries: Decimal value: Hex value: Binary value: ASCII value: #45343 7ed0 or $7edo %0110 1101 or %01101101 'a' or 'a 4. Implicit Operations. You may also revise memory and registers directly. aught and cause SPMON to display a reverse-field question mark on the line of entry. If this happens, you have made a mistake in entering a command. Check these instructions and try again.< ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~d Boolean operations as you can fit onto one screen line. 3. All arithmetic in SPMON is integer; you are limited to a maximum of 65535. SPMON won't warn you when this is exceeded, but it will refuse to give you results in some cases. Try a series ofith: @@8 . 3. All directories appear on screen in two columns (in the swiftest direc- tory printout we've seen yet). Don't expect the screen to clear when BLOCKS FREE ends the listing. You are already back in SPMON, ready for the next com- my divert output to any printer as well, and must give the printer filename, as we show. All output henceforth goes to printer, not screen. If your printer is "ieee4", you may toggle between "ieee4" and screen with: o . Use the forms below: All register dumps are preceded by a semicolon; all memory dumps with a colon. You may either overtype and confirm with to change them--or you may enter the new values wanted (prefaced by colon or semicolon) and RETURN them. The colon and semico~~~~~~~~~~~~~~~~ PART III : ARITHMETIC and BOOLEAN OPERATIONS 1. You may perform one or more of these operations in the manner shown, executing the command with a ; you have no division or parentheses. 7e*2  multiplications by 2 until you rec- eive an answer of 00000 when you exceed 65535: 2*2*2*2*2*2*2 (keep it up; watch the answers) We suggest you explore addition and subtraction as well, to learn the limits, what results you may trust, and which may beand. You may, if you wish, clear screen with the SHIFT/CLR keys at this or any other time while in SPMON. You may edit the directory listings on screen if you want to issue DOS or load/save commands. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1݂'&~!j&D' ]* &@& 'ц Yj&&o'SoT Hn2~ &d' 0m1qZ&&@1:% ~0ˆ1:$Do01'NLHHm*IND4HJ4FL;10'Bc&od 91<$40ed4Xb;' Dick Barnes file spmon_instr0:e April 21, 1985 INSTRUCTIONS FOR SPMON AND SPMON LO, Version 1.1 PART I : GENERAL HANDLING AND USE Before you read further, we suggest you print h  the job. 2. Where do you use SPMON? Either at main menu, with no other major program loaded, or with various versions of the Editor, with microBASIC, or with the Development package and its Editor. SPMON loads from main menu. If you want to use it through using SPMON, leave it with the EXIT command: x d. You will instantly return to the Editor. We suggest you do this now, so you are familiar with gittin' in and out. For this first try, exit SPMON with an x . Then load an Editor or mBASIC as you normally do. We suggest you do it now; then load a stand-alone Editor, either Waterloo's mED, Toebes' V1.3, BEDIT, or BEDCALC. For your first try TURN> as soon as you get in. 5. Using SPMON within mBASIC: a. Load SPMON from main menu and leave it with: x b. Load mBASIC from main menu. c. When you want SPMON in mBASIC, do this in immediate mode: ter a KILL, you may RESET to any language or facility which was resident in the banks before the KILL. Unless you want to re-initialize SuperPET to startup configuration, always leave SPMON with an x for exit. 8. Crashes in Language or mED. You can=984, 1985 by T. M. Peterson All rights reserved. &o'SoT Hn2~ &d' 0m1qZ&&@1:% ~0ˆ1:$Do01'NLHHm*IND4HJ4FL;10'Bc&od 91<$40ed4Xb;' examples with SPMON, above Editor text. With SPMON, an Editor, and instructions loaded, user memory looks like this: ------------ $8000 Start of Screen SPMON ------------ $6000 Start of , don't load mBASIC. Then get these instructions into the Editor. The instructions are sized to work with one of the Editors and will NOT work in mBASIC. In an Editor, you may read these instructions, switch to SPMON, try the examples, and come right ba  poke 8*4096,63 : sys 8*4096 d. You will immediately be in SPMON; when through, you must RTS to mBASIC. Do this by creating an RTS with SPMON's assembler in an unused spot in user memory. Then GO that address. ::::::::::::::::::::::::  easily crash the language/facility being used IF you employ those features of SPMON which run the program in memory or which overload a program on top of the one you are in. After all, if you are IN the mED, and it's running, and you GO it again.... On ll of them are entered in lower case, not capitals. All commands preceded by an asterisk may be ended with the STOP key: @ prefaces a DOS Command * m Memory display (same as Waterloo Dump) a Assemble 6809 mnemonic code n not implem SPMON SPMON examples You use this work area. ------------ $5500 Editor Text ------------ $0a00 Start of User Memory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ck into the Editor without reloading anything. 3. Interference between SPMON, Editors or mBASIC. SPMON sets end of user memory at $5FFF; you lose user memory from there to $7fff, but still have about 21,000 bytes free. SPMONLO may also be used with :::::::::::::::::::::::::::::::::::::::::::::::::::::::: Note: If you shift to the mED in mBASIC and then enter SPMON, the data you see will be quite different from that you get from direct entrance to SPMON. When you enter mED in mBASIC, all variables a the other hand, you may quite safely disassemble code, examine memory, hunt for particular code, dump what you find, or save parts of memory to disk or printer. As with any powerful tool, you must use SPMON with care and judgment. ~~~~~~~~~~~~~~~~~~ ented b set a Breakpoint o Output divert (to disk or printer) bc Clear a Breakpoint * p Print screen (dump to disk or printer) * c Compare blocks of memory q Quickstep through program * d Disassemble co ~~~~~~~~~~~~~~~~~~~~~~~ 1. What Is SPMON? It is an extended monitor, with far more capabilities than the monitor in SuperPET's ROMs. The name is a play on words, meaning SuperPET Super Monitor. It was written by Terry Peterson over a period of years  an Editor or in mBASIC, but these instructions are too large to fit. 4. Using SPMON with an Editor: The instructions below apply whenever you want to use SPMON from an Editor, whether a stand-alone version or those which run in mBASIC and Deve re set null and all pointers to start- up values. Beware: If you enter a BYE in SPMON after entering mED's monitor, you may crash. Exit with the usual: x , which SWI's back to mED in mBASIC. :::::::::::::::::::::::::::::::::::::::::::::::::::::: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PART II : COMMANDS AND CAPABILITIES - GENERAL 1. We briefly summarize SPMON's commands in alphabetical order. Each command is explained in more detail later. Note that ade r Register display f Fill memory s Save program to disk g Go (run) code t Transfer memory block * h Hunt for code phrase u not implemented i Interpret memory as ASCI , and comes in two versions. Memory allocation is shown in Part VI, below. Why two versions? If you have a machine-language program to test, and it loads at $6000, you cannot use SPMON, for it loads at the same address. You should employ SPMONLO for lopment: a. Enter the Waterloo monitor with: mon at command cursor. b. Enter: >g 6000 in the monitor. This runs SPMON, which will announce itself with a Register dump on the monitor screen. c. When :::::::::::::::::::::::::: 6. How to Re-enter SPMON from main menu. If you've left SPMON and want it back, enter the monitor, give: >g 6000, and you re-enter SPMON. The GO address for SPMONLO is $2000. 7. How to abandon SPMON and get back all u  jsr whatkey admit cmpa #129 quif lo cmpa #139 quif hi ldx #$8781 ; Git damn PF keys jsr dopf admit cmpa #255 ; OFF/RVS quif ne 8j8 % 294@6  ood08O_5@?O' &,'0:',''(0J*56 ~04=5XiAi946O_ĆPJ'$ލ%5642&,,' ''/L 'N' @/', HP"P .c1,*' '&c0O9M&9{&c0,'Lb' La' d'&,'0-1.b,'"c1m0' .M& c00_-M9-&ߎ,{'J*& = *P&L0&m+'Z._'.ƌ--m0'o0-0+&A.' l-c00 (O / %454DDDD509#'l(&l'9$ , - # j)9Oצ)4m!'F+'03'05','-''0:'.'/|A02'0R 5#:)9DXYUSP??ABCD????CABDXYSP<6N N )V->ObBd I9~0gO_Bb &Y '&,'"0!1$'J*&H18A$ B9$+-*&!^1111 1!1&1+b &$0#B/ =0 #0B'd 0~!4CS%01!  2b~0PJ=À9'0P &'&0)90' /0N 9401཰& lda #33 jsr whatkey endguess ldd #prefix jsr printf_ ldd row_col ; Move cursor back so PF4 doesn't go stark mad! jsr tputcurs_ done rts dopf ldb #'P stb ,x+ ''!:'04'P5'%\&Z )P',/15݂&  {2݂'2 &2&&ƃ &Ɔ22* m& 4{5 &0L2r2100& H0+n J*~2@abcdefghiklmnopqrstuvwxz;:, 3s!7-O'7-7-/w74/n7227.5U-R88 787 4N/ ]'$-&m.*C&`-4-O1 9'&L0-~10.G/] ,/!č+ 4ia590+OZ& +Z&9o! %l)怯%9#'9o)#+& +o+,%@ @%0:'4 *C0%00ETT?B5YIYIYITTT?? P(Tbo * 4 -   ´´´ƉƉNyN:S ÑdÉU4RBb.4RXYSUSSUU I AAADAA AA AXO 4001_"4$_BĆm''č_'10&~!46/05&569.G1:$00'߬B"'č 0Pb%012d9 '؍~!&G42b 01O_9ieee4-15disk0^& 0^'瀽0&o0290210' 39402+(05' .ߍ ˎ42b'Uo914&5910&4 0R佰& 佰 &5 @' $'$~!1: % L#~0 0  ldb #'F stb ,x+ suba #$50 guess cmpa #$3b ; Change semicolon to . quif ne lda #$2e admit cmpa #$3a ; Change colon to 0 quif ne lda //!1:_'9'|')#&0'&10&~!02O a%z" M'0L'Ȁ&% "& c&02lb& +0 .or& b&"a t&a'r'a' ab'x_4섃__XXXXIXI6&  & 4 & ,4쁄'-0#5'~0,T,DDD C0H',$&$@$0$ $ف$4m+&N'^&TA@'P&\E`&Qp&zo+&ԁ''' &=CFC&~  .~&S0X$]&EFHINZVC%#.Ĉ'&G.TTTT'<`.'2h0æ;C' ' &P( ~0˽.G4021: %b40' 'J&2a 41:5$J&q01502&q&}'*'B%i_ B9J&1:$@Bb '/;'41:B5.&BBb;&1:$ B9&9' 2 72/-0R4/;0R6' Eb#%4%"佰خ#瀯#&5'佰O969042B4 Bb,&.G ׆?602172~#%O#%"怯#d  jsr nogood ; Print it at screen bottom leas 2,s rts control pshs d ; Stack the number value for printf_ pshs d ldd #$1901 jsr tputcurs_ ldd #conmsg jsr printf_ c%~4&-#5&C/o-c19CVZNIHFE%Ȅ'-&o0m+'Zl2&Z0o-._.m0&)('%j00,' &, 0+.94M*C&SM&]+M59xysu& ${ɪ,,o-%ȁ &)9&102'L3'O+9 '& u&l,l,,10 ,''&,00' &','$ρ" & ADBD <0DA'0l -"&STBD D LD +'U]'SDpm+'??BD0F')1.Đ&c0[h1ď%6"21'_"Ɇ+C&<J&/ j &  41:$'eHEE~!(4TTTT5$: 9435 /4 | %    m&45  47 47m&{ 45579oc2$' & ( &9DXXXXc9c9=%9O %9'*94')4& 怯' 2bb4jƀ AO* 45'9  ' 2b5μ' 5*5> 4@FHJ5LO5DNNm& B*0~.@'dZ+}0e:D&0qj&l+SD$N0$0D/D|0R/ldd row_col jsr tputcurs_ leas 4,s rts conmsg fcc "CONTROL KEY value is: D%d or $%h" fcb 0 end ouble A ldx #contabl ldx a,x ; Get right message in table pshs x '5! u's& 'S߆'H% --0',&'9 &d&ƃ w &d& k &ƍ c&,b#&ƌx' +ƌy'l+s'ƃu'j+d'_ 345&)u'#4+5s'Ŀy'o+x' @d'_b&@]+c$$ʀ,%4,,5&%'9J#&*C1 džA' L'D& \'&"1-' PC '.ŀ&m0&Z1' 1-& .*P!č3 N&4. /5 z1&-9 41X`' L 'U@'Se59m0']Y y u 9 m/ +K.9 V R b559%ƿ~~!0%:% F"A%99YB_1:$b;'9B9B9B=4C=AC=2a9CB9CB9CB90' '9OooA'&0' JA0'& g#&20'+0$& ""J4 A=aaA =M&Aa%;5 1%&'4T5& JTiAi% $' 0$ J `% 0& ;ascii1.asm. Mod of ascii.asm to work with rest of CALC. ;format: a=#@ (char to ASCII number); $24=@ or D24=@ (ASCII to char). No bin. ;March 9, 1985. xdef doascii xref tgetcurs_,tputcurs_,printf_,char2asc,asc2char,entryerr,total,prefix xref row_col, ;scr2asc.asm. Format: =#@ At entry, X points to # ;March 12 simplified. Check Mar 13. Mod March 14 for dopf routine. Was scr2asc1 ;in monitor routines. Mod Mar 15 to get rid of PF4 overlap. xdef char2asc,dopf xref row_col,entryerr,total,itohs_,prefix,t  cmpb #'. if eq jsr dofp ; It's a floating point entry else jsr doint ; It's an integer routine endif tst entryerr if ne jsr printerr  tfr x,d ; P1 address pshs y ; P2 stopping address jsr cnvs2f_ ; Convert to FP in FAC1 ldd #cur_dig jsr fstore_ ; Transfer number from FAC1 to buffer leas 2,s admit ldb #6 ; Default to divide endguess ldx #table jsr [b,x] ; Do it; results return in FAC1 ldd #total jsr cnvf2s_ ; Convert FAC1 string, store in TOTAL buffe entries,rowup,printerr doascii clr entryerr ; X arrives looking at @ clr entries clr rowup ldb ,-x guess cmpb #'# ; Convert a character to ASCII code quif ne putcurs_,printf_,nogood,contabl xref itos_,linebuf,clearbot kyputb_ equ $DD82 kyptr1_ equ $012C char2asc ldb ,-x cmpb #'= ; Check syntax. Text or a bad PF command? if ne inc entryerr jmp done clr total else tst prefix if ne ; If not a FP routine, ldb prefix cmpb #'% if eq jsr spread ; Move bin from LINEBUF to TOTAL in groups 4 puls x ; And get it back! ldb ,--x ; Now, let's get the second number tfr x,y ; Mark address last digit leay 1,y ; Set address one past cmpb #$20 if le Tr done rts operator rmb 1 table fdb fadd_,fsub_,fmul_,fdiv_ end offset into jsr table admit cmpa #'- quif ne ldb #2 admit cmpa #'* quif ne ldb #4  jsr char2asc admit cmpb #'= ; or vice versa quif ne jsr asc2char admit inc entryerr ; Anything else is an error. endguess tst entryerr endif leax -1,x ; Save position of unknown char pshs x ldd #press ; Put "press a key" message at bottom of screen pshs d jsr nogood leas 2,s loop ; Get char in  endif jsr moveit ; Preface TOTAL string with notation endif inc entries ; Set OK flag so we print later endif rts dofp tfr x,y ; Mark end address  ; Maybe Bodsworth forgot the entry, inc entryerr ; maybe we're in text. Spaces not allowed, jmp done ; since they END the whole entry. endif loop cmpb #$20 quif le  itohs_ ; Convert to a a hex string in Prefix thru TOTAL lda #'$ ; First zero in four-byte string is in PREFIX sta total ; Overwrite second zero with hex notation lda #$20 ; Bytes 1 and 2 a if ne jsr printerr endif clr total ; We print within routines in doascii rts ; so clear print flag end nvert a character to ASCII code quif ne B jsr kyputb_ until ne pshs b sei ; Stop interrupts until the key is released! loop jsr $DEF3 tstb until eq cli clr [kyptr1_] puls b  ldb ,-x ; Get first number loop ; Scan entry cmpb #'* quif eq cmpb #'+ ; Find end of it quif eq cmpb #'/ quif eq cmpb  cmpb #'. if ne jsr isdigit_ if eq inc entryerr jmp done endif endif ldb ,-x endloop leax 1,x tfr x,d ; P1 re the hex string value sta total+3 ; Stuff in a space separator sta prefix ; Give us a space for good layout lda #'D ; Add Decimal notation char sta total+4 ; store it, ;stack pointer mpty tfr b,a guess subb #$40 ; Is this a char-value CONTROL key? quif lt ; Nah, below zero cmpb #$1f ; quif hi ; Too big. clra jsr contr  puls x cmpb #$20 if eq lda #160 ; Load a reverse field space sta ,x else stb ,x ; Store char or graphics on screen left of = endif ;end of screening. Now convert  #'- quif eq cmpb #$20 if le inc entryerr jmp done endif cmpb #'. if ne jsr isdigit_ if eq inc entryerr jm starting address pshs y ; P2 end address jsr cnvs2f_ ; Convert to FP in FAC1 leas 2,s ldd #cur_dig jsr fload2_ ; Put first number in FAC2. Process lda operator g is already looking at number we pushed before ldd #total+5 ; P1 address for decimal string jsr itos_ ; Convert number to decimal string leas 2,s jsr clearbot ldd linebuf ; A comes back e ol admit cmpa #$19 ; Print names, values of low CONTROLS quif hi ; up through $19 jsr whatkey admit cmpa #$7f ; Repeat Key?? quif ne lda #32 . Number in B is hex ASCII value of character clra std linebuf ; ITOS_ clears the damn stack value later. Shit! pshs d ; P2 the value itself ldd #prefix ; P1 address of hex string jsr p done endif endif ldb ,-x endloop stb operator ; B holds the operator if we are successful leax 1,x ; Get back to first digit. pshs x ; Save address uess cmpa #'+ quif ne clrb ; B holds offset into jsr table admit cmpa #'- quif ne ldb #2 admit cmpa #'* quif ne ldb #4 ;spread1.asm. Groups binary into four bits; transfers string from linebuf ;to TOTAL xdef spread xref countit,total,linebuf spread lda #4 sta countit ldx #linebuf ldy #total loop ;con0.asm. Two conversion subroutines. Jan 28, 1985. xdef dec2cn,cn2hex xref length_,decimal_,total,itohs_,entryerr ;converts decimal string to counting number; eliminates any decimal value ;larger than 65535. Too damn bad overflow flag doesn't handle ; P1 of address of buffer for converted number jsr itohs_ ; Convert counting number to hex string leas 2,s rts end bne done ; Yes, it is. It should be negative. else clr entryerr ;con1.asm. Some more conversion subroutines. Jan 28, 1985. Mod to TOTAL Feb 7 xdef hex2cn,cn2dec xref hstob_,printf_,cnvif_,fadd2_,cnvf2s_,total,countit ;converts hex string to counting number. hex2cn ldd #total ;P1 address of hex string ;con2.asm. Two binary/cn conversion routines. xdef bin2cn,cn2bin xref total,linebuf ;converts binary string of 8 bits into counting number. bin2cn ldx #total lda #%10000000 ; Let marker byte set MSB of B, first pass pshs a ldb ,x+ quif eq stb ,y+ dec countit if eq ldb #$20 stb ,y+ lda #4 sta countit endif endloop this. dec2cn clr entryerr ldd #total ; How long is this mother? jsr length_ pshs d ; P2 length for DECIMAL_ cmpb #5 ; Is this a five-digit entry? if eq ; Yes. ; Otherwise, stack ASCII 0 endif leax -1,x ; Get next bit. until eq tst total ; Have anything in the high byte? if ne ldb total stb total+1 ; Move it pshs d ;P2 same address for converted number jsr hstob_ ;Put counting number in buffer TOTAL leas 2,s rts ;converts counting number to POSITIVE decimal string. cn2dec clr countit ;We use t  clrb loop lda ,x+ ; Convert byte to 0 or 1 quif eq ; Stop on endstring null suba #$30 lsra ; Get 0 or 1 into Carry Flag if cs orb ,s ; Set appr^ clr ,y ; Mark endstring with null rts end ead xref countit,total,linebuf spread lda #4 sta countit ldx #linebuf ldy #total loop  ldb total ; Get the first digit in the string cmpb #$36 ; Is it a 6 or larger? if eq inc entryerr ; Yes. We may exceed 65535 else if gt ; Bigger than 6! Too b  clr total jmp again endif ldx #linebuf loop ; Pull decimal string off stack, puls b ; store unformatted in LINEBUF stb ,x+ until eq ; Null on stack en his byte to set a negative flag ldd total ;get VALUE of counting number if mi inc countit ;Anything over 32767 will be in negative form. endif jsr cnvif_ ;Convert D to FP; store in F opriate bit in B endif lsr ,s ; Rotate the "1" right one bit in marker byte endloop leas 1,s clra std total rts ;Converts counting number to binary string. Handles 8 or 16-bit s ;rith1.asm. Master routine for arithmetic. FP add/sub/mul/div implemented and ;tested Feb 10, 1985. Modified to simplify FP format on Feb 11. Okay. ;Mod of RITH Feb 16 to integrate in final.asm. Mod for % preface Feb 17. ;Mod Feb 26 to stop jump to FP fr ig for sure. inc entryerr clr total jmp done endif endif endif ldd #total ; P1 address of value jsr decimal_ ; Value returns in D as counting nu^ds string and loop, returns stack rts ; to RTS position. end until eq tst total ; Have anything in the high byte? if ne ldb total stb total+1 ; Move it AC1 tst countit if ne ldd #max ;Load address of FP representation of 65536 jsr fadd2_ ;Put in FAC2; add to FAC1 endif ldd #total ;Get address of buffer jsr cnvf2 trings. cn2bin clra ; Shove null on stack to end converted string. pshs a ldy #total+1 ; Get low byte first. lda #$30 ; Load string format 0 and 1 again ldb #$31 ldx #0008 om text periods. Mod to repeat PREFIX. xdef operator,rithmetic xref tputcurs_,tgetcurs_,isdigit_,fadd_,fsub_,fmul_,fdiv_,cnvs2f_ xref cnvf2s_,printf_,putnl_,fstore_,fload2_,doint,prefix,spread xref entries,rowup,row_col,total,cur_dig,entryerr,printerr, mber if pl ; If number is LARGER than 32767, it should be neg. tst entryerr ; Is the number larger than 32767? bne done ; Yes, it is. It should be negative. else clr entryerr ,-x ; Should be on first number lda #19 ; Two nine-digit entries plus operator loop ; See if we have a FP routine. cmpb #'. quif eq cmpb #'$ ; Mod Feb s_ ;Convert FAC1 to decimal string; store in TOTAL ldx #total loop ldb ,x+ ; Find and get rid of decimal point. cmpb #'. until eq clr -1,x ; End string with null ; Bein' out of registers, we use X for decrement. loop lsr ,y ; Put first bit in Carry Flag. if cs ; If it's a 1, pshs b ; Stack an ASCII 1 else pshs a moveit rithmetic clr entryerr ; After SR WHAT, we get called with X pointing clr rowup ; to = sign on screen. clr entries clr prefix tfr x,y ; Mark address of = sign. ldb  ; Resume, Bodsworth. endif std total ; Buffer it. done leas 2,s rts ;converts counting number to hex string. cn2hex ldd total pshs d ; P2 value counting number ldd #total 26 to stop jump to FP from text periods quif eq cmpb #'% quif eq cmpb #'D quif eq ldb ,-x deca until eq tfr y,x ; Get back address of = S rts max fcb $48,$80,00,00,00 ; FP representation of 65536 end of FP representation of 65536 jsr fadd2_ ;Put in FAC2; add to FAC1 endif ldd #total ;Get address of buffer jsr cnvf2 er value back cmpb #$20 ; Does B hold a control (repetition count)? if lo ; Yes. stb repeat ; Store the rep count ldb ,x+ ; Get char to be repeated; adjust X lo ;sumfp.asm A routine to add/subtract digits and store the running total xdef buffp,sum,entries xref cur_dig,cease cnvs2f_ equ $A1B7 fadd2_ equ $A434 fstore_ equ $A2FA length_ equ $B7B1 ; Step 0: Stack x and y registers; subroutine calls ;round2.asm. Rounds final total to desired decimal places and aligns data ;with columns summed. Improved routine March 18. xdef round xref total,dotpos,chars,row_col round CLR carry CLR chars LDX #total+1 ; Go past the sign  endif endif ; If more than ten entries, accept what's there. endguess done jsr align rts roundup clra pshs a ; Mark end of stackstring inc carry ; Set carry ;printit1.asm A routine to read the total buffer, print it into mED, and ;tell user what he has done. Jan 15, 1984 xdef total,printit,prefix xref entries,printf_,tputcurs_,row_col cnvf2s_ equ $A06F printit tst entries if ne op stb ,y+ ; Store repeated char in buffer inc chars dec repeat until eq suba #2 ; A zero or neg A register will end main loop here else ; unle will mess 'em sum pshs y ; Step 1: Get length of number string we're gonna convert. ldd #cur_dig ; P1 address of string. jsr length_ ; String length returns in D register. Length is P2. ; Step 2: convert LDB 10,x ; Is this number in scientific format? CMPB #'E IF EQ LDB #14 ; Always 14 chars in this format STB chars JMP DONE ; Skip it. We don't convert it. ENDIF flag loop again lda ,-x cmpa #$20 ; Stop on a space or a neg sign Carry flag quif eq ; Pass .9998000 Stacked In out cmpa #'- quif eq cmpa #'.  ldd #total ; P1 address of total buffer in string format jsr cnvf2s_ ; Convert fac1 to string format; store in buff endif ldd #$1901 ; Print summary message on line 25 jsr ss we reached the column we wanted before. stb ,y+ ; Buffer it inc chars ; Increase char count deca ; Reduce forward pointer value endif until le thru clr ,y this string number to floating point format. pshs d ; Stack P2 ldd #cur_dig ; P1 is starting address of number jsr cnvs2f_ ; Convert it to fp format, store in fac1 ;Step 3: Load fac2 with total in buffe  loop ; Find the decimal point. inc chars ldb, x+ cmpb #'. ; X points one past the decimal point. until eq ; Chars holds char count thru dec point guess t  if eq pshs a jmp again endif cmpa #$39 if eq tst carry if ne lda #$30 ; Substitute a zero for a 9 endif else  tputcurs_ ldb entries cmpb #$FF if eq ; If NEG flag set by $FF for 255 entries... ldd #maximum ; tell Bodsworth we had to stop jsr printf_ else  ; End string with a zero puls y lda chars cmpa row_col+1 if lo ; We gotta short line. sta short ; May be error. Store it. endif thru1 rts short rmb 1 chars r ldd #buffp ; Set P1, addr of buffer for total in fp format pshs d ; We'll need it again. jsr fadd2_ ; Load buffer total into fac2; add it to fac1. puls d ; P1 address of buffer. j st dotpos quif ne clr ,-x ; Clear decimal point; mark endstring dec chars ; Eliminate . from count admit lda dotpos ; Holds count of chars past decimal tfr a,b  tst carry if ne ; Add one for carry to all but 9 adda #1 endif clr carry ; And clear subsequent carries endif pshs a endloop tst carry  clra ; Tell user how many entries were summed pshs d ; B already contains ENTRIES ldd #entrymsg jsr printf_ leas 2,s endif ldd row_col rmb 1 repeat rmb 1 linebuf rmb 82 ; buffer for parsed line + header + end rowup rmb 1 ; Finder for bad lines end ; Reduce forward pointer value endif until le thru clr ,y sr fstore_ ; Move new total from fac1 to buffp ;and recover leas 2,s puls y inc entries lda entries cmpa #$FF ; Stop at 255 entries if eq inc cease endif  addb chars ; Add count from start thru decimal point stb chars cmpb #10 ; We may have only nine digits + decimal point if le ; If that number or less-- leax a,x ; Point one pa  if ne ldb #$31 ; Stick a 1 in ahead of the string pshs b inc chars endif ldx #total+1 loop puls b stb ,x+ ; We store the null to mark endstring  ; Put cursor where it was jsr tputcurs_ rts maximum fcc "Work stopped at maximum of 255 entries" fcb 6,0 entrymsg fcc "%d number entries summed" fcb 6,0 prefix rmb 1 total fcb 0Y ; Binary conversions require this buffer size rmb 21 end ; B already contains ENTRIES ldd #entrymsg jsr printf_ leas 2,s endif ldd row_col rts entries fcb 0 ; Counter for good number entries buffp rmb 5 ; 40 bits (5 bytes) needed for fp representation. end ; This buffer stores running total puls d ; P1 address of buffer. j st last sig. digit lda ,x cmpa #$34 ; Is the trailing digit a 5 or more? if hi jsr roundup ; Roundup clears its own string else clr ,x ; Mark endstring until eq rts align ldb row_col+1 subb chars if le ldb #1 endif stb row_col+1 rts carry rmb 1 end endif pshs a endloop tst carry ;what1.asm. Subroutine to pick SR's. Revised for ASCII convert. March 9, '85. ;Determines which main SR to call by index in A. Sets X for processes. ;Mar 8. Modified to include ASCII conversions. xdef what xref prefix what ldd $0122 ; S;calcr1.asm. Jan 15, 1984, 1800. Revised to accomodate ROUND. Mod 7 Feb to ;accomodate CONVERT. xdef fini,entryerr,outmem,main,printerr xref count,rowup,chars,linebuf,short,row_col,dotpos,cur_dig,cease,round xref isdigit_,tputcurs_,printf_,parse,buffp,e endif jsr isbad ; Any errors so far? outmem tst cease ; Are we through summing? if ne jsr printit ;Okay, so sum it up jsr round jmp f clr ,x+ deca until eq rts isbad tst entryerr if ne jsr printerr leas 2,s jmp fini endif rts printerr  ;count.asm. Parses each line and stuffs the line into a buffer. ;Stops loading buffer when: 1) end of line is reached, or 2) desired number of ;characters (to the right column) have been put in buffer. There may be an ;excess of characters if a repetitio ense relative cursor position addd #$8000 ; Convert to absolute address tfr d,x clra ldb ,-x ; Look at first character cmpb #'d if eq ldb #'D stb ,x  ntries,printit,sum,total main clr entryerr ; Zap a bunch of flags clr rowup clr dotpos clr entries clr cease ldx #buffp lda #5 jsr cle ini endif tst short ; SHORT redefined in PARSE to mean text line if eq ; to be skipped IF set. If NOT set, jsr sum ; entry is to be summed. endif  ldd #$1901 ; Print error msg on line 25 jsr tputcurs_ clra ldb rowup pshs d ldd #badentry jsr printf_ ldd row_col n count is reached toward end. ;Jan 5, 1984. Modified Jan 16 to use MemBeg_ and for different jump to print xdef chars,rowup,count,linebuf,short xref row_col,isdigit_,outmem,cease count clr short clr chars inc rowup ; K ; Revise screen. We'll need it later. endif guess cmpb #'@ quif ne lda #6 ; Want ASCII conversions. admit cmpb #'= ; Want RITHMETIC? quif ar ; Clear floating point buffer ldx #cur_dig lda #14 ; Same, number string buffer jsr clear lda #16 ldx #total ; and total buffer jsr clear  tfr y,x ; Get address of line, start on next above endloop fini rts entryerr rmb 1 iserr lda row_col+1 ; Is this a real short line, or could it suba short ; be an almost goo ; Put cursor back where it was jsr tputcurs_ leas 2,s rts badentry fcc "ENTRY ERROR %d line(s) above starting line " fcb 6,0 end endif rts printerr eep track of lines above start. clra ; Set D up for some arithmetic ldb -1,x ; Get value of backpointer, previous line pshs d tfr x,d ; Get address, current line in D subne lda #4 ; Yes, load offset. admit cmpb #'D ; Want CONVERT; quif eq cmpb #'% quif eq cmpb #'$ quif eq admit stb prefix  ldx $0024 ; Get address of line cursor was on. cmpx $0020 ; Pointer holds MemBeg_ if ls inc entryerr ; If you put cursor on START OF FILE, jsr isbad ; This bd number entry? cmpa #4 ; If within 3 characters of right length, if lo ; see if: ldx #linebuf lda chars ldb a,x ; the previous char is a digit. 0 ; Are we at start of mED (pointer at $20) if ls ; Yes, inc cease ; Cease leas 2,s ; Clear RTS jmp outmem ; Sum what we got; there ain't no more endif d ,s++ ; And subtract from it backpointer value subd #1 ; and sub one more to get address of prev line tfr d,x ; Got previous line address in X tfr d,y ; Save it (address of forward lda #2 ; Set offset for CONVERT endguess rts ; 0 offset is default to "No Sum" message end CII conversions. admit cmpb #'= ; Want RITHMETIC? quif ails you out endif loop jsr count ; Parse the line and buffer entries. tst short ; SHORT means SHORT LINE here; after PARSE, if ne ; means a text line to be pshs a jsr isdigit_ if ne ; Yes, it is. Bad line. inc entryerr ; Well, the first one could be a decimal pt. endif puls a deca  inc short jmp thru1 ; SHORT will cause us to bypass line. endif pshs y ; Save address of line ldy #linebuf ; Get ready to load it with char in line. ldb #$ff stb  pointer on line) lda ,x+ ; Load the forward pointer for a dec register suba #2 ; We don't count front or back pointers. if eq ; Null line with 02 as starting pointer? cmpy $002 ; Have we reached the column we want yet? cmpa chars if ls puls a ; Don't forget! jmp thru ; We're done with this line endif puls a ; Get our forward point skipped. jsr iserr ; Is this a short, bad number entry? else tst chars ; If chars is null, we had a null line. if ne jsr parse endif  ldb a,x ; Geez, let's check another one. jsr isdigit_ if ne inc entryerr endif endif rts clear loop ; Clears buffers  ,y+ ; Mark START of string loop clr repeat ; Zero out repetition char loop counter ldb ,x+ ; Get next char pshs a ; Stack forward pointer count. lda row_col+1 JMP _comprint ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :reprints the screen. clear_ CALL _clrmsg JMP _printscreen ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ old_txtcur,txtcur SET2 old_cur_line,cur_line CALL _purge ;************** remove for standard insert *************** PULS d ;* STA textrow ;clmstarter ;include ;include XDEF open_key,close_key XREF openf_,closef_ XREF kbenable_,fputchar_ XREF copystr_,prefixst_ XREF read__,keyboard__,write__ XREF _commande ;pf 4 FDB set_cmdmode ;pf 5 FDB curbk1 ;pf 6 FDB cur_up ;pf 7 FDB set_txtmode ;pf 8 FDB curbk20 ;pf 9  SUBD #1 PSHS d LDD cur_line CMPD ,s IF LT STD ,s ENDIF LDX curpos_ LEAX screen_,x LDB ,x EORB #%10000000 ;flip in anticipation. STB ,x \\\\\\\\\ ;performs :insert normal or recovered line. ;recover delete key by inserting command_buf to screen. GUESS recover_del CALL _offsetall,#-1 ;forces a backward insert. CALL _updatescreen CALL copystr_,com ;* STB textcol ;* ;************** remove for standard insert *************** SET1 modeflag,(,s+) JMP _reprintrow ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ r XREF _screenstart,_title argc_ EQU $0221 argv_ EQU $0400 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;\\\\\\\\\\\\\\ main program start \\\\\\\\\\\\\ ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ; clear text are FDB ins_line ;pf 0 FDB curup20 ;pf . ;vector table for control keys. table_cntrl FDB cur_home ;home FDB recover_del ;run FDB _rts FDB _rts FDB SET1 textcol,#1 CLRA LDB textrow SUBD ,s STB textrow PSHS d CALL setcurtorpcp1,(2,s),#1 LEAS 2,s PULS d CALL ___neg CALL _offsetall Smand_buf,main_buf LDB modeflag ADMIT ;normal blank line insert with entry into text mode. ins_line CLR [main_buf] LDB #1 ;force text mode. ENDGUESS PSHS b ;************** remove for\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :delete the current line. del_line LDD txtcur GUESS CMPD txtbeg QUIF EQ CMPD txtend QUIF EQ CALL _fetchtext,txtcur,command_a =>02 01 02 01<= LDX membeg_ STX txtbeg STX txtcur LDA #2 LDB #1 STD ,x++ ;begining of text. STD ,x ;end of text. STX txtend ;set eot pointer. L _rts FDB _rts FDB _rts FDB _rts FDB _rts FDB cur_dn ;cursor down FDB cur_up ;cursor up FDB clear_ ;shift/home FDB car_rtn ;cET2 old_txtcur,txtcur SET2 old_cur_line,cur_line JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :goes to command mode. set_cmdmode CLR modeflag _rts RTS ;\\\\\\\\\\\\\\ standard insert *************** LDA textrow ;* LDB textcol ;* PSHS d ;* ;*******buf CALL _deleteline,txtcur ;delete current line. CALL _scrndelete ;close up screen. CALL _purge ENDGUESS RTS modeflag,(,s+) JMP _reprintrow ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\DD #1 STD eof_line ;eot is at line #1. ; set standard input/output for keyboard. push argv_ CALL open_key ;set standard input. CALL _title ;print header to screen. LDB argc_ CMPB #1 arraige return FDB _rts ;fetch & do FDB _rts ;shift/rubout FDB _rts ;shift/escape FDB _rts ;shift/zero FDB _rts ;reverse FDB _rts ;off\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :goes to text mode. set_txtmode SET1 modeflag,#1 CLR [main_buf] JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\******* remove for standard insert *************** LDD txtcur CMPD txtend IF EQ ;move cursor back to real line before inserting. CALL _offsetall,#-1 CALL _updatescreen CLR L lo ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :closes input file. close_key LDD kbin JMP closef_ ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;perf IF EQ ;handles a clm parameter. CALL prefixst_,#getter__ CALL copystr_,(2,s),command_buf CALL openf_,#keyboard__,#write__ PSHS d CALL fputchar_,(2,s),#14 PULS d ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :various cursor moves. GUESS curbk20 LDD #-(txtbottom-2) ADMIT curup20 LDD #txtbottom-2 ADMIT curbk1 LDD #-1 \\ ;performs :moves present line to command cursor. ftch_line PUSH main_buf CALL _fetchtext,txtcur PULS x CLR 81,x ;a command line is limited. CLR modeflag LDD main_buf [main_buf] ENDIF CALL _inserttextm,main_buf ;insert to text. IF NE ;memory full. CALL _printscreen DONE 3 ENDIF CALL _scrninsert ;insert to screen. SET2orms :opens the standard input and output devices. open_key CALL openf_,#keyboard__,#read__ STD kbin std orig_kbin RTS getter__ FCS "g " CALL _commander LDB service_ CMPB #1 UNTI CALL closef_ ENDIF leas 2,s CALL _screenstart ;print up screen and . LOOP ;main command loop. CALL _commander LDB service_ CMPB #1 UNTI ADMIT curfwd1 LDD #1 ENDGUESS CALL _offsetall JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :home the cursor. cur_home CLRA LDB textrow ;title.asm. Taken from BEDIT9 source; checked; revised for title for BEDIT10. ;15 May '85. D.B. Identical to ctitle.asm except for title itself. XDEF _title XREF printf_ XREF copy_,spawn_,copystr_ XREF getdate_,ges,what XREF _message,_fetchtext XREF _hinserttext,_deleteline XREF _printscreen,nogood,doascii ;include ;include calc CLR total LDA textrow LDB textcol STD rowdd spaces to it until we have a full LOOP ;80 character line in LINEBUFFER STB ,x+ CMPX #$8000 UNTIL HS CALL _deleteline,txtcur ;Delete the old line from mED Text  LEAS -10,s TFR s,d CALL maketime2p TFR s,d PSHS d PUSH #11 PUSH main_buf CALL getdate_ CALL copy_ ;move date string to buffer area. LEAS 4,s  ;keys.asm from BEDIT9. Checked against keycalc1 sent by Joe May 15. No diff. ;found except for XREFs to CALC. Removed. D.B. May 15. XDEF _dochar XREF _updatescreen,_offsetall,_purge,_clrmsg XREF curpos_,screen_,___neg,_re etrec_,ec_date XREF _cstart XREF maketime2p XREF _screenstart ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :setup system buffers and s _col JSR clearbot ; Clear line 25 JSR what ; Find which SR to execute LDY #table JSR [a,y] ; And do it. GUESS TST entryerr  LDB row_col+1 ; ROW_COL is adjusted by SUM, CONVERT, ARITH. LDX main_buf ; and for margins, so use it. No math needed. LEAX b,x ; Offset to pre-calculated position, DEX ; o LDX main_buf CLR 11,x PSHS x ;date. LDD max_memory SUBD membeg_ SUBD #4 ;safety margin. PSHS d ;free memory. CALL printf_,#title LEAS 16,s Cprintrow XREF _comprint,_fetchtext,_scrndelete,_deleteline XREF _printscreen,_inserttextm,_scrninsert,copystr_ XREF setcurtorpcp1,cur_dn,cur_up,car_rtn ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\how title page. ;parameters:none ;returns :none ;destroys :x keeps: _title LDX memend_ LEAX -255,x STX main_buf ;text fetching buffer. LEAX -35,x STX name_buf  QUIF NE TST entries QUIF EQ TST total QUIF EQ JSR buffit CALL _printscreen ENDGUESS RTS repeat TST total IF EQ LDA textrow ffset for 0/1 conversion, LDY #total LOOP LDB ,y+ ; transfer TOTAL to LINEBUFFER QUIF EQ ; prealigned, STB ,x+ ENDLOOP CALL _hinserttext,mainALL getrec_,main_buf,#80 ;get input for time/date. LDX main_buf CLR d,x ;end input in null. TFR x,d CALL _cstart ;start of entry. CALL spawn_,#ec_date \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :does the special character that the inputed line ended with. ;parameters:character to do. ;returns :none ;destroys :x keeps: GUESS _dochar LDX #_rts  ;file name. PSHS x CALL copystr_,#def_name PULS x LEAX -25,x STX def_buf ;default device buffer. PSHS x CALL copystr_,#def_dev PULS x LEAX -20,x  ; Can no longer call MESSAGE. No room LDB textcol ; for the code in Bank 0 STD row_col LDD #empty PSHS D JSR nogood LEAS 2,s ELSE _buf ; and remember it. RTS table FDB nosum,convert,rithmetic,doascii nosum LDD #none PSHS d JSR nogood LEAS 2,s RTS none FCC "ENTRY ERROR. Check format. (Column Sum routine not in CALCS) ;change time/date (maybe). JMP _screenstart ;print up screen and . title FCB 12 FCC "%nEDITOR :Copyright 1984 by Joe Bostic%n%n" FCC " %d bytes free.%n%n" FCC "Date: %s%nTime: %s%n%n" TSTB QUIF PL GUESS SUBB #$81 QUIF LT CMPB #10 QUIF HI LDX #table_fnctn ENDGUESS ADMIT GUESS SUBB #1  STX pref_buf CLR ,x LEAX -120,x STX prevsrchstr_buf ;search string buffer. CLR ,x LEAX -255,x STX alternate_buf ;utility catch-all working buffer. CLR  LDB textcol ; Get new cursor position so STB row_col+1 ; BUFFIT knows what it is JSR buffit CALL _printscreen ENDIF RTS buffit CALL _fetchtext,txtcur,main_buf " FCB 6,0 empty FCC "Total Buffer is Empty" ; Message returned to this routine FCB 6,0 ; since new message.asm does not have ; it and bank 0 is full! clearbot LDD #erasi FCS "Enter date and time or press RETURN%n" def_dev FCS "disk." def_name FCS "text:e" ;end input in null. TFR x,d CALL _cstart ;start of entry. CALL spawn_,#ec_date  QUIF LT ;must be >= 1. CMPB #18 QUIF HI ;must be <= carraige return. LDX #table_cntrl ENDGUESS ENDGUESS CMPX #_rts IF NE ASLB  ,x LEAX -81,x STX command_buf ;last command or last deleted line. CLR ,x LEAX -1,x STX max_memory ;limit of text memory pointer. ;put parameters on stack for title display.  ; Get present, unmodified mED LDX main_buf ; line into LINEBUFFER LOOP TST ,x+ ;find end of that line. UNTIL EQ DEX LDB #" " ;Ake PSHS d JSR nogood LEAS 2,s RTS erase FCB 6,0 row_col RMB 2 #none PSHS d JSR nogood LEAS 2,s RTS none FCC "ENTRY ERROR. Check format. (Column Sum routine not in CALCS) JSR [b,x] ENDIF JMP _updatescreen ;vector table for pf keys. table_fnctn FDB ftch_line ;pf 1 FDB del_line ;pf 2 FDB curfwd1 ;pf 3 FDB cur_dn  LEAX screen_,x LDB ,x EORB #%10000000 ;make cursor. STB ,x CALL putnl_ LDD ,s IF NE ;yes there is an output file. CALL fprintf_,(6,s),(8,s),(8,s),(8,s)  ,y IF NE LOOP ;main matcher loop. LDB ,y+ IF EQ LDA ,x CMPA #'" ENDIF QUIF EQ GUESS C ;setup for screen size. CALL zndclr_ ;clear screen. CALL put_entries,(8,s),#t_strnl,prevsrchstr_buf,#t_null GUESS LDD ,s QUIF EQ ;in theory there are no files. LDX txtend  CALL copystr_,prevsrchstr_buf,alternate_buf CLR [prevsrchstr_buf] LDB #$ff ENDIF BNE nope CALL dreadf_,(4,s),alternate_buf IF NE CALL copystr_,#input RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :pause if at end of screen. ;parameters:true/false ; is it ok to pause? ;returns :first character of inputed line (if any). ;destroys :  CALL errorouter,(2,s),#input_buffer+80 ENDIF DONE 2 printer LOOP LDB ,y+ QUIF EQ STB ,x+ ENDLOOP RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MPB #"?" QUIF NE quest LDB ,x ADMIT CMPB #"*" QUIF NE TST ,y BEQ thru ;is "*" at end of match string? LOO LEAX 4,x LDD ,x QUIF EQ ;in actuality there are no files. PSHS x LOOP LDX ,s PUSH (,x++) ;first filename. LDD ,x++ IF EQ  _buffer,alternate_buf CLR input_buffer LDB #$ff ENDIF BNE nope CALL tester,(4,s) PSHS d,x,y CALL put_entries,(6,s) LEAS 6,s BNE nope  keeps: GUESS pauser TSTB QUIF EQ CLRA ;no command can be entered if no pause. CLRB DEC temp_counter ;screen fill counter. QUIF NE CALL _pause \\\\\\\\\\\\ ;performs :compare one entry with another. ;parameters:entry 1 ~ entry 2 ;returns :true if entry 2 comes before entry 1. ;destroys :y keeps: parm1 compare PSHS x TFR d,x LEAX 6,x ;proper start. P PSHS y TFR x,d CALL matchit ;recursive matching attempt. LEAS 2,s BNE thru LDB ,x+ CMPB #'"  LDD #t_null LEAX -2,x ENDIF PSHS d ;second name. STX 4,s PUSH (2,s) CALL test,(14,s) PSHS d CALL put_e;bad output. CALL pauser,#-1 BNE alldone1 CALL copystr_,alternate_buf,prevsrchstr_buf LBRA yup GUESS nope LDB [prevsrchstr_buf] ORB input_buffer QUIF NE  PSHS d SET1 temp_counter,#txtbottom PULS d ;flag that a command was entered. ENDGUESS TSTB ;set cc register. RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LDY 4,s LEAY 6,y ;proper start. CLR ,-s LOOP LDB ,x CMPB #'" QUIF EQ LDB ,y+ CMPB #'" BEQ truer CMPB ,x+ BLO tru BEQ bad ;no match? ENDLOOP ENDGUESS CMPB ,x+ IF NE bad CLR ,s BRA thru ENDIF ENDLOOP ENDIntries,(12,s) LEAS 8,s QUIF NE ;output error! CALL pauser,#-1 LBNE alldone LDD [,s] UNTIL EQ LEAS 2,s ENDGUESS LEAS 2,s ;anADMIT ;first print any leftovers. CALL tester,(4,s) PSHS d,x,y CALL put_entries,(6,s) LEAS 6,s CALL pauser,#-1 ENDGUESS CALL put_entries,(6,s),#t_strnl,altern\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :puts directory entries to screen and file (if any). ;parameters:i/o block ~ entry 1 ~ entry 2 ;returns :error condition. ;destroys :x, y keeps: .p1, .p2 put_entries PSHS d LDY 6,s er UNTIL HI GUESS ADMIT truer DEC ,s ENDGUESS LDB ,s+ SEX PULS x,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :checks to see if aF thru PULS b SEX PULS x,y,pc middle1 FCS "%s%n%s%n" middle2 FCC "%s " t_strnl FCC "%s%n" t_null FCB 00 BNE thru LDB ,x+ CMPB #'" y additional filenames? ; .ti/o,fi/o,flag,rts CLR input_buffer CLR [prevsrchstr_buf] CALL eof_,(2,s) LBNE nope ;more to display. ; prev,alt,inp - 1,2,3 CLR [prevsrchstr_buf] yup ate_buf,#t_null CALL _holdit GUESS CALL pauser,#0 ADMIT alldone LEAS 4,s ENDGUESS alldone1 CALL closef_,(2,s) LDD ,s CNE closef_ CALL _printscreen JMP suic ;first string LDX curpos_ LEAX screen_,x BSR printer LDX curpos_ LEAX 40,x ;to start on the 40th column. LEAX screen_,x LDY 8,s BSR printer LDX curpos_  directory entry matches. ;PARAMETERS:pointer to entry ~ location of match string. ;RETURNS :Is this a legal match. ;DESTROYS :none KEEPS: matchit PSHS x,y TFR d,x LDY 6,s SET1 (,-s),#$ff TST ;join2.asm. A revision of marry2.asm to marry CALCSHORT to DEV:MEN ;May 15. Revised for DEVCALC on May 15 with parm call. XDEF row_col,calc,repeat,clearbot XREF tputcurs_,convert,rithmetic,printf_ XREF total,entryerr,entri CLR [alternate_buf] CLR input_buffer TST [prevsrchstr_buf] IF EQ CALL dreadf_,(4,s),prevsrchstr_buf ENDIF CALL dreadf_,(4,s),#input_buffer IF NE ide_ tester LDY #input_buffer LDX prevsrchstr_buf test TSTA IF NE ;single column directorys. LDD #middle1 ELSE ;dual column directorys. LDD #middle2 ENDIF ;_di XDEF ec_directory XDEF ec_catalog XREF errorouter,diropenf_ XREF _holdit,_pause XREF parse_to,skp_alpha,tableloo_,disk__ XREF copystr_,length_ XREF putnl_,_printscreen  QUIF NE TST entries QUIF EQ TST total QUIF EQ JSR buffit CALL _printscreen ENDGUESS RTS repeat TST total IF EQ LDA tex ; offset for 0/1 conversion, LDY #total LOOP LDB ,y+ ; transfer TOTAL to main_buf QUIF EQ ; prealigned, STB ,x+ ENDLOOP CALL _hinserttename..,rts LDD max_memory SUBD txtend SUBD #4 ;safety margin. PSHS d CALL ___div,#15 CMPD #4 ;60 byte minimum. IF HI ADDD txtend ADDD #7 ELS 4,s ADDD #6 CALL matchit ;check for a match. LEAS 2,s QUIF EQ PULS x,y STY ,x++ PSHS x,y CALL length_,(2,s)  XREF fprintf_,zndclr_,suicide_ XREF eof_,openf_,closef_ XREF dreadf_,stripdisk XREF ___div,curpos_ XREF write__,screen_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ trow ; Can no longer call MESSAGE. No room LDB textcol ; for the code in Bank 0 STD row_col LDD #empty PSHS D JSR nogood LEAS 2,s ELSE  xt,main_buf ; Provide for new, inserted line RTS table FDB main,convert,rithmetic,doascii empty FCC "Total Buffer is Empty" ; Message returned to this routine FCB 6,0 ; since message.asm does not have E CLRA CLRB ENDIF PSHS d ;= 0 if no room. ; .buffer,ti/o,fi/o,flag,namepoint,..name..,rts ; first entry is disk header and should be seperated. CALL dreadf_,(6,s),prevsrchstr_buf  ADDD #1 ;account for null at end. ADDD 2,s STD 2,s ENDGUESS SET2 ([,s]),#0 LDD max_memory SUBD 2,s CMPD #35 ;there must be at least 35 more \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :directory and catalog command. ;returns :no-repeat flag. GUESS ;dual column directory. ec_catalog CLRB ADMIT ;single column directory. ec_directory LDB #$ff  LDB textcol ; Get new cursor position so STB row_col+1 ; BUFFIT knows what it is JSR buffit CALL _printscreen ENDIF RTS buffit CALL _fetchtext,txtcur,main_b it. clearbot LDD #erase PSHS d JSR nogood LEAS 2,s RTS erase FCB 6,0 row_col RMB 2 main_buf QUIF EQ ; prealigned, STB ,x+ ENDLOOP CALL _hinsertte LDX ,s LBEQ dirdisp ;nothing to sort. ; read bulk of directory into free memory. PSHS x CLR ,-x ;safety margin in case of empty directory. LDX txtend LEAX 4,x PSHS x ;counterbytes to continue. UNTIL LO ; sort the directory. ungh!!! ;.bubbleflag,pointer,partflag,ti/o,fi/o,flag,namepoint,..name..,rts TST 10,s IF EQ ;only sort if "CATALOG". LOOP CLR ,s  ENDGUESS leas -40,s tfr s,x PSHS b,x ;dir-cat flag. PUSH name_buf push pref_buf SET2 name_buf,#$b128 ;a null in ROM. std pref_buf CALL parse_to ;uf ; Get present, unmodified mED LDX main_buf ; line into main buffer LOOP TST ,x+ ;find end of that line. UNTIL EQ DEX LDB #" "  PULS d IF NE ;swap entries. LDY ,x++ LDD ,x STY ,x STD ,--x DEC ,s ;flag that a sort to directory pointers. ; 0 2 4 6 8 10 11 13 ; .pointer,buffer,partflag,ti/o,fi/o,flag,namepoint,..name..,rts LOOP SET2 ([,s]),#0 ;starts out empty of entries. CALL dreadf_,(10,s),(2,;bubble sort flag. LDX curpos_ SET1 (screen_,x),#"." ;signal that something is going on. INX STX curpos_ LDX txtend LEAX 4,x LDD ,x parse the file source and destination (if any). pull pref_buf PULL name_buf call stripdisk,alternate_buf std filename_ tfr d,x clr -1,x CALL copystr_,filename_,(1,s) ;set  ;Add spaces to it until we have a full LOOP ;255 character line in main_buf STB ,x+ cmpx #screen_ UNTIL EQ CALL _deleteline,txtcur ;Delete the old line from mED Te occured. ENDIF LEAX 2,x STD 2,s LDD ,x UNTIL EQ TST ,s UNTIL EQ ENDIF LEAS 4,s ; .partflag,ti/o,fi/o,flag,rts ; s) IF NE CALL copystr_,(4,s),alternate_buf ;last entry seperate. LDB #$ff ENDIF QUIF NE GUESS LDX 2,s ;directory will not match if there  QUIF EQ ;just in case of no files. LOOP LDD 2,x QUIF EQ ;just in case if only one file. PSHS d CALL compare,(,x) ;is "next" < "this"? up any specifier. ;check to see if source is ok. CALL diropenf_,alternate_buf ;open source file. PSHS d CALL errorouter,(2,s),alternate_buf PUSH #0 ; 0 2 4 5 7 ; .ti/o,fi/o,flag,namepoint,..xt LDB row_col+1 ; ROW_COL is adjusted by SUM, CONVERT, ARITH. LDX main_buf ; and for margins, so use it. No math needed. LEAX b,x ; Offset to pre-calculated position, DEX display the directory. dirdisp TST input_buffer+80 IF NE CALL openf_,#input_buffer+80,#write__ STD 2,s CALL errorouter,(4,s),#input_buffer+80 ENDif SET1 temp_counter,#txtbottom-1  LOOP ; isn't a " in it someplace. LDB ,x+ QUIF EQ CMPB #'" UNTIL EQ TSTB QUIF EQ PUSH (11,s) LDD ;futil XDEF openup_4p,closeup,checkoutfname XREF errorouter,suicide_ XREF _message,_syntaxchk XREF copy_,copystr_,skip_prefix_ XREF suffixst_,prefixst_ XREF openf_,closef_,disk__ XREF ;* STB textcol ;* ;************** remove for standard insert *************** SET1 modeflag,(,s+) JMP _reprintrow ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ remember it. ;parameters:not remember filename? ~ put whole name here. ;returns :pointer to filename. ;destroys :x keeps: GUESS checkoutfname PSHS d ;rename flag. LDD 4,s PSHS d evice. CALL skip_prefix_,(4,s) PSHS d GUESS CALL devname QUIF EQ ;is it just a name? CMPB #1 ;disk QUIF EQ CMPB #4 ;host  ;MESSAGE XDEF _MESSAGE,_BMESSAGE XREF _MSGREADY XREF PRINTF_,SUICIDE_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :PRINTS OUT A MES scanfname,stripdisk XREF tableloo_,skp_alpha XREF devname ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :opens a file and handles errors. ;para \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :delete the current line. del_line LDD txtcur GUESS CMPD txtbeg QUIF EQ CMPD txtend QUIF EQ CALL _fetchtext,txtcur,command CALL scanfname CALL copystr_ ;move name to working area. LEAS 2,s TST [4,s] bne something ;is there a name to work with? ;nothing was named. CALL copystr_,name_buf,(4,s) BNE other ;it must be some other device. ENDGUESS CALL stripdisk,(,s) CMPD ,s CEQ prefixst_,def_buf ;insert a device. LEAS 2,s CALL stripdisk,(4,s) SAGE. ;PARAMETERS:MESSAGE NUMBER ~ PARAMETER ~ PARAMETER ~ PARAMETER ;RETURNS :POINTER TO MESSAGE JUST PRINTED. ;DESTROYS :X KEEPS: GUESS _BMESSAGE LDA #$ff ;A BAD MESSAGE THAT SUICIDES. ADMIT _MESSAGE clra meters:file mode ~ true/false flag to rename file? ;returns :true(i/ob)/false; was the open successful? ;destroys : keeps: openup_4p PSHS d SET2 temp_counter,#0 CLR error_flag CALL checkoutfname,(6,s)_buf CALL _deleteline,txtcur ;delete current line. CALL _scrndelete ;close up screen. CALL _purge ENDGUESS RTS modeflag,(,s+) JMP _reprintrow ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CALL prefixst_,def_buf,(4,s) call prefixst_,pref_buf,(4,s) lbra thru ;something was named. something CALL stripdisk,(4,s) TFR d,x TST ,x QUIF NE ;was mor PSHS d LDD 2,s if eq call copystr_,(2,s),name_buf ;remember the filename. CALL skip_prefix_,(6,s) std ,s ldb [,s] clr [,s]  ;A NORMAL MESSAGE. ENDGUESS PSHS A LDX #ET_SAYWHAT LOOP DECB QUIF EQ LOOP TST ,X+ UNTIL EQ TST ,X UNTIL EQ PSHS ,alternate_buf PSHS d CALL _syntaxchk GUESS TST [,s] QUIF EQ CALL openf_,(2,s),(2,s) STD ,--s CALL errorouter,(2,s),(2,s) LDD ,s++ QUIF E%S" FCS "%S - Lines transferred %D." FCS "%D" FCS "No line range allowed." FCS "%D Occurrences changed." FCS "%D lines of text." FCS "Memory full." FCS "Replacing string too lone than a device named? ;just device named. call skip_prefix_,(4,s) pshs d guess cmpd 6,s quif eq ldd 2,s quif ne ;define a renamed pshs b call copystr_,(9,s),pref_buf ;remember the prefix. puls b stb [,s] endif other LEAS 2,s ENDGUESS thru LDD 4,s PULS x,pc t_dot FCS "." X CALL _MSGREADY ;SETUP FOR MESSAGE TO BE PRINTED. CALL PRINTF_,(4,S),(7,S),(7,s) LDA 2,S JNE SUICIDE_ DONE 3 ET_SAYWHAT FCS "Say what?" FCS "Missing Filename." FCS "!" Q ADMIT JMP suicide_ ENDGUESS DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :close file and say 'lines transfered'. ;parameters:file i/o block ;returns :nong." FCS "%D bytes of free memory." FCS "*" FCS "Illegal destination line." FCS "Not enough free memory." FDB 0 "No search string defined." FCS "Illegal default device." FCS " record size designator. ldb [,s] clr [,s] pshs b call copystr_,(9,s),pref_buf puls b stb [,s] endguess call stripdisk ;marry.asm. A revision of marry2.asm to marry full CALC to BEDIT9. May 4, '85 ;based on Joe's revisions to BEDIT 9 XDEF row_col,calc,repeat,clearbot XREF tputcurs_,convert,rithmetic,printf_ XREF total,main,entryerr,entries FCS "Illegal line range." FCS "Illegal search string." FCS "Search string not found." FCS "Search string required." FCS "No search string defined." FCS "Illegal default device." FCS "e ;destroys : keeps: .p1 closeup CALL closef_ CALL _message,#11,alternate_buf,temp_counter RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :parse filename and maybe row_col JSR clearbot ; Clear line 25 JSR what ; Find which SR to execute LDY #table JSR [a,y] ; And do it. GUESS TST entryerr  cmpd ,s++ if eq call suffixst_,def_buf,(4,s) else CALL suffixst_,#t_dot,(4,s) endif CALL suffixst_,name_buf,(4,s) ADMIT ;name specified and or weird d,what XREF _message,_fetchtext,screen_ XREF _deleteline,_hinserttext XREF _printscreen,nogood,doascii ;include ;include calc CLR total LDA textrow LDB textcol STD'L zndreturn_ JMP suicide_ XREF ec_put,_chrgot XREF _syntaxchk,suicide_ XREF zndreturn_,curpos_,screen_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;list XDEF ec_list XREF _numberofp XREF _offsetall,_updatescreen XREF tbreak_,_bmessage,_message ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;keycalc1. As modified by Joe on version of May 15 '85. XDEF _dochar XREF _updatescreen,_offsetall,_purge,_clrmsg XREF curpos_,screen_,___neg,_reprintrow XREF _comprint,_fetchtext,_scrndelete,_deleteline pf 4 ;**Change in label FDB set_cmdmode ;pf 5 FDB curbk1 ;pf 6 FDB cur_up ;pf 7 FDB set_txtmode ;pf 8 FDB curbk20 ;pf 9  SUBD #1 PSHS d LDD cur_line CMPD ,s IF LT STD ,s ENDIF LDX curpos_ LEAX screen_,x LDB ,x EORB #%10000000 ;flip in anticipation. STB JMP _comprint ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :reprints the screen. clear_ CALL _clrmsg JMP _printscreen ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\ ;performs :do only a line range (ie. list). ;returns :repeatable flag. ec_list CALL _numberofp,range_start STD cur_line LDD range_start LOOP STD txtcur CALL _updatescreen ;up XREF _printscreen,_inserttextm,_scrninsert,copystr_ XREF setcurtorpcp1,cur_dn,cur_up,car_rtn XREF _numberofp,calc,repeat ;**change to CALC ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ FDB ins_line ;pf 0 FDB curup20 ;pf . ;vector table for control keys. table_cntrl FDB cur_home ;home FDB recover_del ;run FDB _rts FDB _rts  ,x SET1 textcol,#1 CLRA LDB textrow SUBD ,s STB textrow PSHS d CALL setcurtorpcp1,(2,s),#1 LEAS 2,s PULS d CALL ___neg CALL _offsetall \\\\\\\\\\\\\\ ;performs :insert normal or recovered line. ;recover delete key by inserting command_buf to screen. GUESS recover_del CALL _offsetall,#-1 ;forces a backward insert. CALL _updatescreen CALL copystrdate screen. LDD txtcur CMPD range_end QUIF EQ CALL tbreak_ ;check stop key. CNE _bmessage,#3 ;"!". CALL _offsetall,temp_counter ENDLOOP C\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :does the special character that the inputed line ended with. ;parameters:character to do. ;returns :none ;destroys :x keeps: GUESS _dochar LDX #_rts TSTB  FDB _rts FDB _rts FDB _rts FDB _rts FDB _rts FDB cur_dn ;cursor down FDB cur_up ;cursor up FDB clear_ ;shift/home FDB car_rtn  SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :goes to command mode. set_cmdmode CLR modeflag _rts RTS ;\\\\\\\\\_,command_buf,main_buf LDB modeflag ADMIT ;normal blank line insert with entry into text mode. ins_line CLR [main_buf] LDB #1 ;force text mode. ENDGUESS PSHS b ;************** removMPD txtend IF EQ LDD eof_line SUBD #1 PSHS d CALL _message,#15 LEAS 2,s ENDIF CLRB SEX RTS txtcur CALL _updatescreen ;up QUIF PL GUESS SUBB #$81 QUIF LT CMPB #10 QUIF HI LDX #table_fnctn ENDGUESS ADMIT GUESS SUBB #1 QUIF ;carriage return FDB _rts ;fetch & do FDB repeat ;shift/rubout FDB _rts ;shift/escape FDB _rts ;shift/zero FDB _rts ;reverse FDB _rts \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :goes to text mode. set_txtmode SET1 modeflag,#1 CLR [main_buf] JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\e for standard insert *************** LDA textrow ;* LDB textcol ;* PSHS d ;* ;**LR [main_buf] ENDIF CALL _inserttextm,main_buf ;insert to text. IF NE ;memory full. CALL _printscreen DONE 3 ENDIF CALL _scrninsert ;insert to screen. SET LT ;must be >= 1. CMPB #18 QUIF HI ;must be <= carraige return. LDX #table_cntrl ENDGUESS ENDGUESS CMPX #_rts IF NE ASLB JSR  ;off ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :various cursor moves. GUESS curbk20 LDD #-(txtbottom-2) ADMIT curup20 LDD #txtbottom-2 ADMIT curbk1 LDD #-1 \\\\\\\ ;performs :moves present line to command cursor. ftch_line push main_buf CALL _fetchtext,txtcur puls x clr 81,x ;a command line is limited. CLR modeflag LDD main_buf ************ remove for standard insert *************** LDD txtcur CMPD txtend IF EQ ;move cursor back to real line before inserting. CALL _offsetall,#-1 CALL _updatescreen C2 old_txtcur,txtcur SET2 old_cur_line,cur_line CALL _purge ;************** remove for standard insert *************** PULS d ;* STA textrow  [b,x] ENDIF JMP _updatescreen ;vector table for pf keys. table_fnctn FDB ftch_line ;pf 1 FDB del_line ;pf 2 FDB curfwd1 ;pf 3 FDB calc ; ADMIT curfwd1 LDD #1 ENDGUESS CALL _offsetall JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :home the cursor. cur_home CLRA LDB textrow  EQ LDB ,x ABX dey UNTIL EQ ADMIT QUIF EQ LOOP CMPX txtbeg QUIF EQ LEAX -1,x TFR x,d S;_look xdef ec_look xref tbreak_,kyputb_ xref zndreturn_ xref _printscreen xref fgetrec_,openup_4p xref eof_,closef_,suicide_ xref read__,_holdit,curpos_,screen_ ;include ; bne out call kyputb_ cmpb #" " until eq endif call eof_,(,s) until ne out call zndreturn_ call zndreturn_ call _holdit ; DEFAULT XDEF EC_DEFAULT XREF EC_NAME,_BMESSAGE,STRIPDISK XREF CHECKOUTFNAME,_SYNTAXCHK XREF DEF_DEVICE,SUFFIXST_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;RUN XDEF EC_RUN XREF _SYNTAXCHK,SUICIDE_ XREF _TITLE ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :SIMULATES A STARTUP OF EDITOR. ;RETURNS :NO-REPEAT FL UBB ,x SBCA #0 TFR d,x iny UNTIL EQ ENDGUESS TFR x,d RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :put text in m include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :examines a file by scrolling it on screen. ;returns :no-repeat flag. ec_look call openup_4p,#read__,#-1 pshs d ldx L call closef_,(,s++) call _printscreen jmp suicide_ l zndreturn_ call tbreak_ quif ne call kyputb_ cmpb #" " if eq loop call tbreak_  \\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :DEFINE DEFAULT DEVICE. ;RETURNS :NO-REPEAT FLAG. EC_DEFAULT TST CHRGOTCHAR JEQ EC_NAME CALL CHECKOUTFNAME,#-1,ALTERNATE_BUF CALL _SYNTAXCHK CALL STRIPDISK,ALTERNATE_BUF MAG. EC_RUN CALL _SYNTAXCHK CALL _TITLE JMP SUICIDE_ emory. ;parameters:pointer to source text. ;returns :true (if memory full)/false ;destroys : keeps: _inserttextm CALL _inserttext STD ,--s IF NE CALL _offsetall,#-1 CALL _message,#16  curpos_ leax screen_,x ldb ,x eorb #%10000000 stb ,x call zndreturn_ call zndreturn_ loop call fgetrec_,(4,s),main_buf,#254 ldx main_buf clr ;S XDEF EC_SETUP XREF _SYNTAXCHK XREF _SCREENSTART XREF SETUP_,SUICIDE_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :SETU CMPD ALTERNATE_BUF JEQ _BMESSAGE,#9 ;NOT A LEGAL DEFAULT DEVICE. CALL DEF_DEVICE,ALTERNATE_BUF,DEF_BUF CALL SUFFIXST_,#DOT__,DEF_BUF JMP EC_NAME DOT__ FCS "." \\\\\\\\\\\\\\\\\\\\\\\\\\;TAL XDEF EC_TALK XREF _SYNTAXCHK XREF PASSTHRU_,SUICIDE_ XREF _PRINTSCREEN ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :F ;'memory full' ENDIF LDD ,s++ RTS iny UNTIL EQ ENDGUESS TFR x,d RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :put text in m d,x clr crtwidth,x ;just in case. ldy curpos_ leay screen_,y pshs y clra loop ldb ,x quif eq inx stb ,yP ACIA CHIP. ;RETURNS :NO-REPEAT FLAG. EC_SETUP CALL _SYNTAXCHK CALL SETUP_,#1 SET1 SERVICE_,#1 CALL _SCREENSTART JMP SUICIDE_ ;_d XDEF ec_delete XREF _printscreen XREF _deleteptop1 XREF _numberofp,copystr_ XREF _syntaxchk,fix_range ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\TALK TO THE HOST DEVICE. ;RETURNS :NO-REPEAT FLAG. EC_TALK CALL _SYNTAXCHK CALL PASSTHRU_,#1 CALL _PRINTSCREEN SET1 SERVICE_,#1 JMP SUICIDE_ }opystr_,#def_name,name_buf clr [pref_buf] endif JMP _printscreen def_name fcs "text:e" CALL fix_range SET2 txtcur,range_start CALL _numberofp STD cur_line CALL _numberofp+ inca endloop ldb #" " loop inca cmpa #crtwidth quif hi stb ,y+ endloop puls x ldb ,x eo;F XDEF EC_FREE XREF _SYNTAXCHK XREF _MESSAGE XREF SUICIDE_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :DISPLAYS FREE ME\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :deletes a line range. ;returns :repeatable flag. ec_delete CALL _syntaxchk CALL fix_range SET2 txtcur,range_start CALL _numberofp STD cur_line CALL _numberofp;exit XDEF ec_exit XREF ec_put,_chrgot XREF _syntaxchk,suicide_ XREF zndreturn_,curpos_,screen_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :LEAVES EDITOR. ;RETURNS :NO-REPEAT FLAG. ec_exit CALL _chrgot CNE ec_put CLR service_ LDX curpos_ LEAX screen_,x LDB ,x EORB #%10000000 STB ,x CALrb #%10000000 ;foil unsightly cursor. stb ,x call zndreturn_ call tbreak_ quif ne call kyputb_ cmpb #" " if eq loop call tbreak_ MORY. ;RETURNS :NO-REPEAT FLAG. EC_FREE CALL _SYNTAXCHK LDD MAX_MEMORY SUBD TXTEND SUBD #2 PSHS D CALL _MESSAGE,#18 ;BYTES FREE. JMP SUICIDE_ D cur_line CALL _numberofp,range_end SUBD cur_line ADDD #1 STD multi_copy CALL _deleteptop1,range_start,range_end Seq2 multi_copy,#0 ldd txtbeg addd #2 cmpd txtend if eq call ctext pointer. ;parameters:number of text lines to change (+ or -). ;returns :new text line pointer. ;destroys : keeps: _offsetall PSHS d CALL _offsetnum STD cur_line CALL _offsetbyp,(,s++) S ;destroys : keeps: .p1 setcurtorpcp1 LDA 3,s EXG a,b JMP tputcurs_ ;move cursor. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :moves cursor to new position  EQ STB ,x+ ENDLOOP TFR x,d SUBD #screen_ STD curpos_ ENDGUESS DONE 2 t_bof FCC "<=============================BEGINNING " FCS "OF FILE============ LDB #" " LOOP STB a,x ;place a space. DECA UNTIL MI RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :toggles the cursor(s). ;parameters:none  ne pointer ~ ending line pointer. ;returns :number of bytes deleted. ;destroys : keeps: _deleteptop1 CMPD txtbeg IF EQ ADDB [txtbeg] ADCA #0 ENDIF CMPD 2,s IF LE  TD txtcur RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :figures a new line number (within limits). ;parameters:offset to line number (integer + or -). ;returns :new line number if offsetted but don't reset the cursor. ;parameters:row (1-25), column (1-80). ;returns :none ;destroys :x keeps: .p1 liftcurto_rpcp1 PSHS d LDX curpos_ LDB screen_,x ANDB #%01111111 ;remove cursor.  ====================>" t_eof FCC "<================================END OF " FCS "FILE===================================>" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :scrolls the screen. ; ;returns :none ;destroys :x keeps: GUESS flp_cursors LDB textrow LDB textrow DECB LDA #crtwidth MUL TFR d,x LDB textcol ABX  PSHS d ;fist real line. LDD 4,s CMPD txtend IF NE ADDB [4,s] ADCA #0 ENDIF SUBD ,s PSHS d ;# of bytes from begining to end of this. ;destroys :none keeps: GUESS _offsetnum ADDD cur_line QUIF GE LDD #0 ADMIT CMPD eof_line QUIF LE LDD eof_line ENDGUESS RTS ;\\\\\\\\\\\\ STB screen_,x PULS d DECB LDA #crtwidth MUL ;figure new location. ADDB 3,s ADCA #0 SUBD #1 STD curpos_ ;remember it. RTS ;\\\\\\\\\\\\\\\\\parameters:top line ~ bottom line ~ offset (+ or -). ;returns :none ;destroys : keeps: scroll_scrn SUBD #1 PSHS d ;.from,rts,to,offset LDB 5,s SUBB 1,s LDA #crtwidth MUL  LEAX screen_-1,x LDB ,x EORB #%10000000 ;flips the char at text cursor position. STB ,x TST modeflag QUIF NE LDX curpos_ LEAX screen_,x LDB text. CALL closep_bytesp1,(4,s),(,s) PULS d LEAS 2,s ELSE LDD #0 ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :conv\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :gets text pointer to a line. ;parameters:number of line to get pointer for. ;returns :pointer to text in memory. ;destroys :x, y keeps: GUESS _poin\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :print a text line to the screen. ;parameters:text pointer of line to print. ;returns :none ;destroys :x, y keeps: GUESS print_linep PSHS d  PSHS d ;# of bytes between start of .p to end of .p1. LDD 2,s ADDD 8,s LDA #crtwidth MUL ADDD #screen_ PSHS d ;start of destination. LDB 5,s LDA #crtw ,x EORB #%10000000 ;flips the char at normal cursor pos. STB ,x ENDGUESS RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :deletes a line of text from memerts a text pointer into a line number. ;parameters:text pointer to convert. ;returns :line number of text pointer. ;destroys :x keeps: _numberofp PSHS d LDY #0 LDX txtbeg LOOP CMPX ,s terofp LDX txtbeg TFR d,y ADMIT ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :gets pointer to line offset from current text pointer. ;parameters:offset to text cursor (+ or -). ;retCMPD txtbeg QUIF LT CMPD txtend QUIF GT GUESS LDY #t_bof CMPD txtbeg QUIF EQ LDY #t_eof CMPD txtend QUIF EQ idth MUL ADDD #screen_ ;start of row p. PSHS d CALL copy_,(4,s),(4,s),(4,s) DONE 8 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :blanks out a row. ;parameterory. ;parameters:text pointer of line to delete. ;returns :number of bytes deleted. ;destroys : keeps: GUESS _deleteline PSHS d CMPD txtbeg QUIF EQ CMPD txtend QUIF EQ  QUIF GE iny LDB ,x ABX CMPX txtend UNTIL GE STY ,s PULS d,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :adjust the urns :pointer to text in memory. ;destroys :x, y keeps: _offsetbyp TFR d,y LDX txtcur ENDGUESS GUESS CMPY #0 QUIF LE LOOP CMPX txtend QUIF CALL _fetchtext,(2,s),main_buf LDY main_buf CLR 80,y ENDGUESS ;mach speed screen print. LDX curpos_ LEAX screen_,x LOOP LDB ,y+ QUIFs:row to blank (1-25). ;returns :none ;destroys :x keeps: blank_rowp DECB ;option base zero. LDA #crtwidth MUL ;(p-1)* 80 ADDD #screen_ TFR d,x LDA #crtwidth-1  CALL _deleteptop1,(2,s),(,s) ADMIT LDD #0 ENDGUESS DONE 2 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :deletes a series of text lines. ;parameters:starting li STB textcol ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :workhorse of downward cursor movement. ;parameters:none ;returns :none ;destroys : keeps: cursordn GUESS  ADDD #1 CMPD 2,s UNTIL GT RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :prints the text row that the cursor is on. ;parameters:none ;returns :none ;destroy CC SEI LDD kyptr2_ STD kyptr1_ PULS cc,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :jive-up screen with any changes. ;parameters:none ;returns :none ;destroy\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :inserts a line on the screen. ;parameters:none ;returns :none ;destroys : keeps: _scrninsert EQU * CLRA LDB textrow PSHS d  \\\\\\\\\\\\\\\\\\\\\\\\ ;performs :moves the text cursor up (scroll if necessary). ;parameters:none ;returns :none ;destroys : keeps: cur_up GUESS LDD txtcur CMPD txtbeg QUIF NE L LDD txtcur CMPD txtend QUIF NE LDB textrow CMPB #txtbottom IF NE ;drag screen down. CALL scroll_scrn,#1,#txtbottom-1,#1 INC textrow  s :x keeps: _reprintrow CLRA LDB textrow ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :prints a screen row. ;parameters:screen row to print (1-23). ;returns :none ;destroys  s : keeps: _updatescreen LDD txtcur CMPD old_txtcur IF EQ RTS ENDIF LDD cur_line SUBD old_cur_line PSHS d ;difference, - = scroll down. CALL __ CMPB #1 CNE scroll_scrn,#2,(2,s),#-1 SET1 modeflag,#1 ;forces text mode. SET1 textcol,#1 PULS d JMP blank_rowp ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;peDB textrow CMPB #$01 IF NE ; drag screen upward. CALL scroll_scrn,#2,#txtbottom,#-1 DEC textrow CALL prnt_scrnrowp,#txtbottom ENDIF ADMIT  CALL prnt_scrnrowp,#1 ENDIF ADMIT CALL _offsetall,#1 LDB textrow CMPB #txtbottom QUIF EQ ;just move the cursor. INC textrow SET2 old_txt:x keeps: prnt_scrnrowp PSHS d CALL liftcurto_rpcp1,(2,s),#1 LDD ,s SUBB textrow SBCA #0 PSHS d ;.line offset from textrow,row,x,rts GUESS LDD cur_line _neg PSHS d ;reversed value of offset. GUESS IF MI LDD 2,s ENDIF CMPD #txtbottom ;line txtcur - line old_txtcur QUIF LT ;print up whole screen. rforms :deletes a line from the screen. ;parameters:none ;returns :none ;destroys : keeps: _scrndelete EQU * CLRA LDB textrow CMPD #txtbottom IF NE ;if not at bottom of text then CALL _offsetall,#-1 LDB textrow CMPB #1 QUIF EQ ;just an onscreen movement. DEC textrow SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line ENDGUESS cur,txtcur SET2 old_cur_line,cur_line ENDGUESS RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :redefine the maximum line number. ;parameters:none ;returns :end line number ADDD ,s QUIF LT CMPD eof_line QUIF GT ; not past limits. CALL _offsetbyp,(,s) ;find offset line. CALL print_linep ;print line. ENDGUESS LDB  CALL _printscreen ADMIT LDD 2,s QUIF LE ;screen scrolls up by .d ADDD #1 STD 2,s ;move start. CALL scroll_scrn,(6,s),#txtbottom,(,s) LDD #txtbottom  scroll. ADDD #1 PSHS d CALL scroll_scrn,(4,s),#txtbottom,#-1 LEAS 2,s ENDIF LDD #txtbottom JMP prnt_scrnrowp ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :move the text cursor down (scroll if necessary). ;parameters:none ;returns :none ;destroys : keeps: cur_dn CALL c. ;destroys : keeps: set_eof_line CALL _numberofp,txtend STD eof_line RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :print a selective number of screen rows. ;par3,s LDA #crtwidth MUL ;find start of row .p+1 TFR d,x LEAX screen_,x SUBD curpos_ LDA #" " LOOP ;end the line with blank spaces. DECB  ADDD ,s ADDD #1 PSHS d CALL printrows_ptop1,(2,s),#txtbottom LEAS 2,s ADMIT BEQ gone ;scroll screen down. LDD #txtbottom SUBD ,s \\\\\\\\\\\\\\\\\\\\ ;performs :clears the command line. ;parameters:none ;returns :none ;destroys : keeps: GUESS _clrcmd LDD #cmdline ADMIT ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ursordn JMP _purge ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :cursors down and moves to first column. ;parameters:none ;returns :none ;destroys : keeps: car_rtn LDB #1ameters:top screen row to print ~ last screen row to print. ;returns :last printed line number+1. ;destroys : keeps: .p1 printrows_ptop1 EQU * LOOP PSHS d CALL prnt_scrnrowp PULS d QUIF MI STA ,-x ENDLOOP DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :moves the cursor to a new location. ;parameters:row (1-25) ~ column (1-80). ;returns :none PSHS d CALL scroll_scrn,#1,(2,s),(2,s) LEAS 2,s CALL printrows_ptop1,#1,(,s) ENDGUESS SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line gone DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :clears the message line. ;parameters:none ;returns :none ;destroys : keeps: _clrmsg LDD #msgline ENDGUESS JMP blank_rowp ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;_EXEC XDEF EC_EXEC XREF _COMMANDER,errorouter XREF CLOSEF_,openf_,suicide_ XREF CHECKOUTFNAME XREF READ__ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :returns with the drive number specified in a file name. ;parameters:file name pointer. ;returns :pointer to drive number (in ascii like '0:' or '1:'). ;destroys :x ]sdigit_ SEQ1 (,s),#"8" PULS d,pc t_c FCS "C" t_equ FCS "=" CMPA #"/" QUIF EQ CMPA #"-" QUIF EQ PSHS d,x TFR a,b CLRA CALL i;text XDEF _screenstart,_printscreen,_comprint XDEF _holdit,_updatescreen,_scrninsert XDEF _msgready,_deleteline XDEF _reprintrow,_deleteptop1,_numberofp XDEF _offsetbyp,_pointerofp XDEF _inser ;performs :wait to continue. ;parameters:none ;returns :none ;destroys :x keeps: _holdit equ * _pause CALL waiter,#t_pause,#(crtwidth/2)-(t_pend-t_pause)/2 ;center it. RTS t_pause FCC "<'RETURN' or Command>" t \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :EDIT CONNECT FILE TO KEYBOARD. ;RETURNS :ABLE TO REPEAT FLAG. EC_EXEC PUSH KBIN GUESS CALL opener,#READ__ STD KBIN LOOP CALL _COMMANDER  keeps: drive CALL skip_prefix_ TFR d,x LDD #d0prefix__ PSHS d LOOP LDA ,x+ QUIF EQ CMPA #"." QUIF EQ CMPA #"/" IF EQ  [main_buf] ;flag that something was entered. DONE 2 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :prints a startup screen. ;parameters:none ;returns :none ;destroys : keep ttextm,_purge,flp_cursors,liftcurto_rpcp1 XDEF _scrndelete,_offsetall XDEF _pause,cur_dn,cur_up,car_rtn,setcurtorpcp1 XDEF _clrcmd,set_eof_line,_clrmsg XREF closep_bytesp1,line_input XREF _inserttext,_fe_pend FCB 0 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :prints a message to the screen and waits for command entry. ;parameters:message to print ~ position on line. ;returns :first character entered LDB SERVICE_ CMPB #1 UNTIL NE CALL CLOSEF_,KBIN ENDGUESS PULL KBIN ;RESTORE ORIGINAL INPUT DEVICE. LDB SERVICE_ CMPB #2 IF EQ DEC SER ;drive number should follow. LDA ,x CMPA #"1" SEQ2 (,s),#d1prefix__ CLRB ENDIF UNTIL EQ PULS d,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\s: _screenstart EQU * SET1 textrow,#11 SET1 textcol,#1 CALL set_eof_line CLR modeflag ;default command mode. CALL _printscreen CALL _clrcmd CALL _clrmsg CALL liftcutchtext XREF _message XREF putbky_ XREF tputcurs_ XREF printf_ XREF ___neg,zndclr_ XREF copy_,copystr_ XREF curpos_,kyptr1_,kyptr2_ XREF screen_ ;include ;include <. ;destroys :x keeps: p1 waiter PSHS d CALL _purge ;clear any spurious keystrokes. CALL liftcurto_rpcp1,#msgline,(4,s) CALL printf_,(,s) ;print message first. LDA VICE_ ;SIGNAL ALL IS OK. ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :OPENS A FILE AND HANDLES ERRORS. ;PARAMETERS:FILE MODE ;RETURNS :TRUE(I/OB)/FALSE; WAS THE OPEN SUCCESS\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :checks out the specified device number. ;parameters:pointer to string to check. ;returns :ascii number(s). ;destroys :x keeps: device CALL skip_prefix_ TFR d,x LOOP rto_rpcp1,#msgline,#70 ;prepare for command. LDD #t_edit JMP printf_ t_edit FCS "" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :reprint the screen text lines and do soedit.labels> ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :prints a string to the command line. ;parameters:string to print. ;returns :none ;destroys : keeps: _comprint PSHS d #cmdline LDB #1 CALL tputcurs_ ;setup cursor. CLR [main_buf] ;clear buffer. CALL line_input ;get a command line. TST [main_buf] IF NE ;a reaFUL? ;DESTROYS : KEEPS: opener PSHS D CALL CHECKOUTFNAME,#-1,ALTERNATE_BUF PSHS D GUESS TST [,S] QUIF EQ CALL OPENF_,(2,s),(2,s) PSHS d CALL LDD ,x+ TSTA QUIF EQ CMPA #"." QUIF EQ CMPA #"/" QUIF EQ CMPA #"-" QUIF EQ PSHS d,x TFR a,b CLRA CALL ime housework. ;parameters:none ;returns :none ;destroys : keeps: _printscreen CALL _numberofp,txtcur STD cur_line SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line CALL printrows_ptop1,#1,#t CALL _clrcmd CALL liftcurto_rpcp1,#cmdline,#1 CALL printf_,#t_str,(,s) DONE 2 t_str FCS "%S" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :sets cursor to start of a cll command was entered. CALL copystr_,main_buf,command_buf CALL _purge CALL putbky_,#14 ;flag for command fetch and do. ENDIF CALL zndclr_ ;clear screen. CLRA LDB ERROROUTER,(2,s),(2,s) LDD ,S++ QUIF EQ ADMIT JMP SUICIDE_ ENDGUESS DONE 4 RMS :OPENS A FILE AND HANDLES ERRORS. ;PARAMETERS:FILE MODE ;RETURNS :TRUE(I/OB)/FALSE; WAS THE OPEN SUCCESSsdigit_ PULS d,x UNTIL NE IF EQ LDD #0 ENDIF PSHS d CLRA CALL isdigit_ IF EQ CLR 1,s ENDIF CLRA LDB ,s CALL ixtbottom RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :remove any keystrokes from the keyboard buffer. ;parameters:none ;returns :none ;destroys :none keeps: .cc _purge PSHSean message line. ;parameters:none ;returns :none ;destroys :x keeps: _msgready CALL _clrmsg CALL liftcurto_rpcp1,#msgline,#1 RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ alternate_buf ;utility catch-all working buffer. CLR ,x LEAX -81,x STX command_buf ;last command or last deleted line. CLR ,x LEAX -1,x STX max_memory ;l;_RENAM XDEF EC_RENAME XREF PARSE_TO,STRIPDISK XREF SUICIDE_ XREF _BMESSAGE XREF RENAMEF_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;_dc XDEF ec_copy,ec_dcommand,ec_rcopy XREF ec_look,skip_prefix_ XREF tbreak_,suicide_ XREF _message,_bmessage XREF stripdisk,parse_to XREF suffixst_,fgetrec_,fputrec_ XREF _chrgot,_disk_ STD 7,s ;timout for disk. CLR ioerrsta_ TFR s,d TST [filename_] CNE put_name ;send command to disk. ;read command channel. LDD to_disk1_ ;timeout.  t_buffer+80 CMPD input_buffer LBNE manual ;not to same device number. ;disk command copy. CLR input_buffer+2 LDD #input_buffer PSHS d CALL suffixst_,#t_c ;add "C".  imit of text memory pointer. ;put parameters on stack for title display. LEAS -10,s TFR s,d CALL maketime2p TFR s,d PSHS d PUSH #11 PUSH main_buf CALL getdate_ C \\\\\\\\\\\ ;PERFORMS :EDIT RENAME COMMAND. ;RETURNS :NO-REPEAT FLAG. EC_RENAME CALL PARSE_TO TST INPUT_BUFFER+80 CEQ _BMESSAGE,#1 ;MUST HAVE NEW NAME. CALL STRIPDISK,#INPUT_BUFFER+80 PSHS D  cstart,devname XREF isdigit_,zupstr_,skp_alpha XREF fgetchar_,fputchar_,kbdisabl_ XREF openf_,closef_,errorouter XREF read__,write__,d0prefix__,d1prefix__ XREF to_disk_,to_disk1_,put_name,ds_read  STD 7,s TFR s,d TST ioerrsta_ CEQ ds_read ;read command channel only if no other error. CLR ioerrsta_ CALL _bmessage,#10,#ioerrbuf_ ;show gotten message. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CALL drive,#input_buffer+80 CALL suffixst_ ;add drive prefix. CALL stripdisk,#input_buffer+80 CALL suffixst_ ;add destination. CALL suffixst_,#t_equ ;add "=". CALL drALL copy_ ;move date string to buffer area. LEAS 4,s LDX main_buf CLR 11,x PSHS x ;date. LDD max_memory SUBD membeg_ SUBD #4 ;safety margin. PSHS d ; CALL RENAMEF_,ALTERNATE_BUF JMP SUICIDE_ ,STRIPDISK XREF SUICIDE_ XREF _BMESSAGE XREF RENAMEF_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ XREF ioerrsta_,ioerrbuf_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :performs edit disk command. ;returns :no-repeat flag. ec_dcommand CALL _chrgot \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :edit copy command. ;returns :no-repeat flag. ec_copy ldx #0 pshs x CALL parse_to TST input_buffer+80 CEQ _bmessage,#1 ;must have destinatioive,alternate_buf CALL suffixst_ ;add source drive prefix. CALL stripdisk,alternate_buf CALL suffixst_ ;add source file name. PULS d JMP comm manual CALL openf_,alternate_ ;free memory. CALL printf_,#title LEAS 16,s CALL getrec_,main_buf,#80 ;get input for time/date. LDX main_buf CLR d,x ;end input in null. TFR x,d CALL _c LDB ioerrsta_ QUIF NE CALL tbreak_ IF NE CALL _message,#3 ;"!". BRA thru ENDIF UNTIL NE else LOOP LDD chrgetpointer comm TFR d,x STX filename_ LDB #8 PSHS b LDB ,x CALL isdigit_ IF NE LDX filename_ LDB ,x+ SUBB #"0" STB ,s n. ;inteligent copy? (or not). call skip_prefix_,#input_buffer+80 cmpd #input_buffer+80 sne2 (,s),#-1 call skip_prefix_,alternate_buf cmpd alternate_buf sne2 (,s),#-1 ldd ,sbuf,#read__ PSHS d CALL errorouter,(2,s),alternate_buf CALL openf_,#input_buffer+80,#write__ PSHS d CALL errorouter,(2,s),#input_buffer+80 ;main block transfer. LEAS -2,s ; 0 start ;start of entry. CALL spawn_,#ec_date ;change time/date (maybe). JMP _screenstart ;print up screen and . title FCB 12 FCC "%nCALCS :Copyright 1985, Dick Barnes%n"  CALL fgetrec_,(8,s),alternate_buf,#255 STD ,s LDB ioerrsta_ QUIF NE CALL fputrec_,(4,s),alternate_buf LDB ioerrsta_ QUIF NE CALL tbrea LDB #" " LOOP CMPB ,x+ UNTIL NE LEAX -1,x STX filename_ ENDIF CALL skp_alpha LDX filename_ LDA b,x CLR b,x PSHS d  bne manual CALL devname,#input_buffer+80 CMPB #5 IF EQ ;it is a copy to the terminal, so goto 'TYPE'. CALL _cstart,alternate_buf JMP ec_look ENDIF CMPB #1  2 4 6 ;.char,i/ot,i/of,flag,rts ldd 6,s if eq LOOP CALL fgetchar_,(4,s) STD ,s LDB ioerrsta_ QUIF NE CALL fputchar_,(2,s) FCC "EDITOR :Copyright 1984, Joe Bostic%n%n" FCC " %d bytes free.%n%n" FCC "Date: %s%nTime: %s%n%n" FCS "Enter date and time or press RETURN.%n" def_dev FCS "disk." def_name FCS "text:e" x,d CALL _ck_ IF NE CALL _message,#3 ;"!". BRA thru ENDIF UNTIL NE endif thru CALL closef_,(2,s) CALL closef_,(4,s) JMP suicide_ ;\\\\\\\\\\\\ CALL zupstr_,filename_ LDX filename_ PULS d STA b,x LDB ,s+ LEAS -13,s CLR ,s STB 9,s ;device number. LDB #15 STB 10,s LDD to_ BNE manual ;if not a 'disk' then manual. CALL devname,alternate_buf CMPB #1 BNE manual ;if not a 'disk' then manual. CALL device,alternate_buf STD input_buffer CALL device,#inpu PSHS d CALL _fetchnum ;get decimal number. SUBD #1 CALL ___mul CALL _offsetbyp ADMIT LDB chrgotchar CMPB #"/" QUIF EQ CMPB #"\" TD txtcur ENDLOOP ENDGUESS STD txtcur DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :fetch line numbers. ;parameters:none ;returns :true/false; was there  ADMIT CMPB #"&" QUIF NE ;following 20 lines. CALL _chrget CALL _offsetbyp,#20 ADMIT LDD range_start ENDGUESS ENDGUESS STB ;restore condition codes. RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :skips one character and inputs it. ;parameters:none ;returns :next character inputed. ;destroys :x E RTS must_more TST chrgotchar ;error if no more text. QUIF EQ RTS ADMIT CALL _bmessage,#1 ;say what? ENDGUESS CALL _cstart CALL decimal_,filename_ LEAS 2,s  QUIF EQ LDD txtcur ADMIT ;find a match line. PSHS b LDX chrgetpointer LDB 1,x CMPB ,s ;must end with same character. IF EQ  no error? ;destroys :x keeps: _fetchlines EQU * PUSH txtcur SET2 temp_counter,#1 ;default offset. CALL _chrgot ;skip past spaces. GUESS CMPB #"*" QUIF NE  STD range_end CMPD range_start IF LO LDB #-1 ELSE LDB #1 ENDIF SEX STD temp_counter ;offset direction for range. GUESS LDB #$ff  keeps: _chrget LDD chrgetpointer ADDD #1 _cstart STD chrgetpointer chrgot LDB [chrgetpointer] STB chrgotchar GUESS CALL isalpha_ QUIF EQ ;alpha flag. LDB ;title XDEF _title XREF printf_ XREF copy_,spawn_,copystr_ XREF getdate_,getrec_,ec_date XREF _cstart XREF maketime2p XREF _screenstart ;include ;include ;\\ CALL _message,#8 ;'no search string defined'. BRA bad ENDIF CALL _parsesrch ;parse search command. LDD txtcur LOOP CALL _searchline ;search txtcur lin ;set for all lines. CALL _chrget SET2 range_start,txtbeg ;set to first line. LDD txtend ADMIT CMPB #"|" QUIF NE ;set for all lines in reverse. CALL  ADMIT nogood CLRB ENDGUESS PSHS b SET2 txtcur,(1,s) CALL _numberofp STD cur_line PULS b,x SEX RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #1 ADMIT LDB chrgotchar CALL isdigit_ QUIF EQ ;number flag. LDB #3 ADMIT ;delimiter flag. LDB #2 ENDGUESS STB chrgottype \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :setup system buffers and show title page. ;parameters:none ;returns :none ;destroys :x keeps: _title LDX memend_ LEAX -255,x e. PULS b PSHS b IF NE ;match was found. CMPB #"/" BEQ okay ELSE ;no match was found. CMPB #"\"  _chrget SET2 range_start,txtend ;set to last line. LDD txtbeg ADMIT ;get starting line. CALL fetch_line BEQ nogood SET2 range_start,txtcur ;start line. \\\\\\\\\\\ ;performs :adjusts the range pointers so that the start is less than finish. ;parameters:none ;returns :none ;destroys :none keeps: fix_range LDD range_end CMPD range_start IF LO PSHS d  CLRA LDB chrgotchar RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :converts a ascii number into a binary value. ;parameters:none ;returns :value in binary. ;destroys :x  STX main_buf LEAX -35,x STX name_buf ;file name. PSHS x CALL copystr_,#def_name PULS x LEAX -25,x STX def_buf ;default device buffer. P BEQ okay IF EQ okay LDB #$ff BRA return ENDIF ENDIF LDD txtcur CMPD 9,s IF EQ  LDB chrgotchar GUESS CMPB #"," QUIF NE ;get ending line. CALL _chrget SET2 txtcur,(,s) CALL fetch_line BEQ nogood  SET2 range_end,range_start PULS d STD range_start ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :skip spaces and parse character code. ;para keeps: _fetchnum EQU * SET2 filename_,chrgetpointer CALL skp_nums IF NE PSHS d ADDD chrgetpointer CALL _cstart CALL decimal_,filename_ LEAS 2,s SHS x CALL copystr_,#def_dev PULS x LEAX -20,x STX pref_buf CLR ,x LEAX -120,x STX prevsrchstr_buf ;used for searches. CLR ,x LEAX -255,x STX  CALL _message,#6 ;search string not found. bad SET2 txtcur,(3,s) CLRB return SEX DONE 5 ENDIF CALL _offsetbyp,(1,s) ;next line to search. S LDD txtcur ADMIT SET2 txtcur,range_start LDB chrgotchar CMPB #"^" QUIF NE ;previous 20 lines. CALL _chrget CALL _offsetbyp,#-20 meters:none ;returns :character positioned to. ;destroys :x keeps: _chrgot CALL chrgot ;re-establish protocal indicators. LOOP CMPB #" " QUIF NE CALL _chrget ENDLOOP T ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :signal error according to more or less parameters. GUESS _syntaxchk TST chrgotchar ;error if more text. QUIF No prevsrchstr_buf. ;parameters:line to search. ;returns :was a match found? ;destroys :x keeps: _searchline EQU * CLR ,-s LDX alternate_buf PSHS x CLR ,-x CALL _fetchtext ;utils XDEF _chrgot,_cstart,_chrget XDEF _fetchnum XDEF _syntaxchk,must_more XDEF _fetchlines,fetch_line XDEF _scanner,fix_range XREF _searchline,_parsesrch XREF _offsetbyp,_numberof ;"NO SEARCH STRING DEFINED" badnews CALL _message LDB #$ff ADMIT CLRB ENDGUESS SEX DONE 3 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;perfoch? ENDIF CMPB #"$"!%10000000 IF EQ TST [2,s] BEQ searcher LBNE through ;bad match? ENDIF CMPB #"~"!%10000000 IF EQ  ENDLOOP LDB #$ff ELSE ;scan till match continues. LOOP CALL recur,(6,s),(8,s),(8,s) QUIF NE ;well, LOOP CALL _matchp1top,(4,s),prevsrchstr_buf,alternate_buf STB 2,s QUIF NE PULS x TST ,x+ PSHS x UNTIL EQ LDB 2,s SEX DONE 3 or a match t p XREF ___mul,isdigit_,isalpha_ XREF _message,_bmessage XREF skp_nums,decimal_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :get one l rms :check for match at location. ;parameters:location to check ~ match string ~ bol pointer ;returns :was the match successful? ;destroys :x, y keeps: none _matchp1top EQU * CLR found_len recur PSHS d PUSH # LDB [2,s] BEQ searcher ;at end is ok. STB ,s PSHS x CALL isdelim_ PULS x LBEQ through ENDIF LDB ,s CMPB no match here. LDX 2,s TST ,x QUIF EQ ;not at end of searched string. INX STX 2,s I CALL _offsetbyp,#-1 PSHS d CALL _scanner,#-1 LEAS 4,s ADMIT CMPB #"." QUIF NE CALL _chrget ;skip '.' ;note - if this is the only thing entered then it ine value. ;parameters:none ;returns :true/false; was a proper line found? ;destroys :x, y keeps: GUESS fetch_line LDB chrgotchar GUESS CMPB #"/" QUIF EQ CMPB #"\" 0 ; 0 1 2 4 6 8 ;.char,matchflag,at_loc,rts,srch_string,bol,... GUESS LDX 6,s LDB ,x+ QUIF EQ CMPB #"~"!%10000000 QUIF NE TST found_len #"*"!%10000000 IF EQ ;any number of chars. LDB ,x+ STX 6,s ;first past '*?'. STB ,s ;multiple match char. CMPB #"."!%10000000 IF NE NC found_len ENDLOOP ENDIF DONE 4 ENDIF LBRA searcher ENDIF CMPB #"."!%10000000 IF EQ ;any real char. will be ignored. ADMIT CMPB #"$" QUIF NE CALL _chrget SET2 txtcur,txtend ENDGUESS PSHS d CALL _numberofp,txtcur STD cur_line LDD ,s++ RT QUIF EQ LDB chrgottype CMPB #3 QUIF EQ ADMIT ;start search from begining. PUSH txtend LDD txtbeg ADDB [txtbeg]  QUIF NE ;a first delimiter character and not a recursion. STX 6,s LDX 2,s LDB -1,x CALL isdelim_ ENDGUESS LBEQ through ;no match if no search string. TST  ;any number of specified character. LDY 2,s LOOP LDB ,y+ QUIF EQ ;end of text. CMPB ,s QUIF NE  LDB [2,s] ;force a match. BEQ through ;out if at end of string. ENDIF LDX 2,s CMPB ,x+ IF EQ ;there was a match for one character. STX 2,s S ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :offsets txtcur forward or backward. ;parameters:direction to offset (+/-) ~ position start ~ position end ;returns :true/false; was a proper line found? ;de ADCA #0 PSHS d CALL _scanner,#1 LEAS 4,s CLRB ENDGUESS QUIF NE ADMIT LDB chrgotchar CMPB #"+" QUIF NE CALL [6,s] LBEQ through ;no match if no search string. searcher EQU * LDX 6,s ;search string. LDB ,x+ STX 6,s DEC 1,s STB ,s ;search char. LBEQ through ;hoora INC found_len ;length of matched string. ENDLOOP LEAY -1,y STY 2,s ;continuation of main text. ELSE ;skip characters only until a match.  INC found_len LBRA searcher ENDIF through LDB 1,s SEX DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :search through a line for a match tstroys :x, y keeps: GUESS _scanner LDX txtcur PSHS d,x ;.offset,txtcur,rts,start,end SET2 txtcur,(6,s) LDB chrgottype CMPB #3 QUIF NE LDD ,s  _chrget PUSH txtend CALL _offsetbyp,#1 PSHS d CALL _scanner,#1 LEAS 4,s ADMIT CMPB #"-" QUIF NE CALL _chrget PUSH txtbeg y! a match. CLR 1,s ;no match yet. CMPB #"^"!%10000000 IF EQ ;begining of line. LDD 2,s CMPD 8,s BEQ searcher LBNE through ;bad matTST [6,s] IF EQ ;scan till end. LDX 2,s LOOP TST ,x+ QUIF EQ INC found_len ;_srch XDEF ec_search XDEF _searchline XDEF _parsesrch,_matchp1top XREF _fetchtext,_scanner,_chrgot XREF _chrget,_cstart,suicide_ XREF _numberofp,_updatescreen XREF length_,_message, EXPORT EC_NUMBER = $9bec - 2 EXPORT EC_DEFAULT = $9baa - 2 EXPORT EC_LOOK = $9b12 - 2 EXPORT EC_PRINTL = $98d3 - 2 EXPORT EC_PUTLINES = $98ce - 2 EXPORT EC_PRINT = $98c1 - 2 EXPORT EC_PUT = $98bc - 2 EXPORT EC_GET = $97fb - 2 EXPORT EC_NAME = $97be - 2 RT _DOCHAR = $96f3 - 1 EXPORT SKIP_PREFIX_ = $96c4 - 1 EXPORT DEVNAME = $96da - 1 EXPORT DEF_DEVICE = $9672 - 1 EXPORT STRIPDISK = $963c - 1 EXPORT SCANFNAME = $95fd - 1 EXPORT EC_HELP = $94ec - 1 EXPORT _COMMAND_NUM = $903e - 1 EXPORT EC_LIST = $9000 - OP ;purge excess spaces. LDB ,-x CMPB #" " UNTIL NE INX CLR ,x ENDIF  LDD ,s CMPD prevsrchstr_buf IF EQ CALL length_ ADDD prevsrchstr_buf STD ,s ENDIF CLRB ENDGUESS QUI isdelim_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :text range search. ;returns :repeat flag. ec_search EQU * LDD chrgetpointer SUBD  EXPORT EC_EXEC = $975f - 2 EXPORT EC_DIRECTORY = $93b3 - 2 EXPORT EC_CATALOG = $93b0 - 2 EXPORT EC_TABSET = $9357 - 2 EXPORT EC_SCRATCH = $933d - 2 EXPORT EC_MOUNT = $9317 - 2 EXPORT EC_DATE = $9263 - 2 EXPORT EC_TIME = $9268 - 2 EXPORT EC_RCOPY = $90af  1 EXPORT DREADF_ = $9d67 - 0 EXPORT CLOSEP_BYTESP1 = $9d33 - 0 EXPORT OPENP_BYTESP1 = $9cf8 - 0 EXPORT _INSERTTEXT = $9c20 - 0 EXPORT _HINSERTTEXT = $9c2a - 0 EXPORT _FETCHTEXT = $9cd0 - 0 EXPORT _COMMANDER = $99e9 - 0 EXPORT _MESSAGE = $9835 - 0 EXPORT  ENDIF ENDGUESS UNTIL EQ ENDGUESS CALL _inserttextm,main_buf ;insert into memory. PSHS CC CALL _reprintrow ;maybe necessary if line was changed. LDD mulF EQ CMPB #"%" IF EQ CALL _chrget GUESS CMPB #"^" ;bol. QUIF EQ CMPB #"$" ;eol. QUIF EQ C#1 ;account for "/" or "\". CALL _cstart push txtcur CALL _scanner,temp_counter,range_start,range_end PSHS b SNE2 (1,s),txtcur ;a match was found. SET2 txtcur,(1,s) CALL _n- 2 EXPORT EC_COPY = $90aa - 2 EXPORT EC_DCOMMAND = $9030 - 2 EXPORT EC_UPPER = $9000 - 2 EXPORT EC_LOWER = $9005 - 2 EXPORT _GETLINE = $9d92 - 1 EXPORT LINE_INPUT = $9dbe - 1 EXPORT _SGETLINE = $9d8d - 1 EXPORT _POINTEROFP = $9d43 - 1 EXPORT _PRINTSCREE_BMESSAGE = $9831 - 0 EXPORT FIX_RANGE = $97be - 0 EXPORT FETCH_LINE = $9620 - 0 EXPORT _FETCHLINES = $972b - 0 EXPORT _FETCHNUM = $9807 - 0 EXPORT MUST_MORE = $9824 - 0 EXPORT _SYNTAXCHK = $981f - 0 EXPORT _CSTART = $97e3 - 0 EXPORT _CHRGOT = $97d0 - 0 ti_copy SUBD #1 ;account for increased text area. STD multi_copy PULS CC BNE loop_end SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line LDB 1,s CMPB #13 MPB #"." ;any char. QUIF EQ CMPB #"~" ;null/space. QUIF EQ ADMIT ORB #%10000000 ;make to meta code. ENDGUESS CMPBumberofp STD cur_line CALL _updatescreen TST ,s+ CEQ suicide_ DONE 2 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :parse a search command text. ;parameteN = $993c - 1 EXPORT _PURGE = $9959 - 1 EXPORT _PAUSE = $989f - 1 EXPORT _OFFSETBYP = $9d49 - 1 EXPORT _OFFSETALL = $9d23 - 1 EXPORT _NUMBEROFP = $9d09 - 1 EXPORT _MSGREADY = $988e - 1 EXPORT _INSERTTEXTM = $9d77 - 1 EXPORT SETCURTORPCP1 = $9b2f - 1 EXPOEXPORT _CHRGET = $97de - 0 EXPORT _SCANNER = $96a9 - 0 EXPORT EC_MONITOR = $960a - 0 EXPORT EC_RENAME = $95ec - 0 EXPORT _PARSESRCH = $9456 - 0 EXPORT _MATCHP1TOP = $94d9 - 0 EXPORT EC_SEARCH = $941d - 0 EXPORT _SEARCHLINE = $95c0 - 0 EXPORT EC_INPUT = $ LBEQ loop_beg CALL _dochar ;print last character. LDB 1,s CMPB #10 ;down cursor. BEQ gloop_end bra realbad bloop_end call ender_ ;remove line exit. CLR modef #"*" IF EQ LDX ,s GUESS CMPX prevsrchstr_buf QUIF EQ LDB ,-x CMPB #"~"!%10000000 QUIF EQ rs:none ;returns :was there an error? ;destroys :x keeps: _parsesrch CALL _chrgot PSHS b PUSH prevsrchstr_buf ;destination,delim,rts LOOP GUESS CALL _chrget RT CUR_DN = $9a87 - 1 EXPORT CUR_UP = $9a45 - 1 EXPORT SET_EOF_LINE = $9ad1 - 1 EXPORT _HOLDIT = $989f - 1 EXPORT LIFTCURTO_RPCP1 = $9b36 - 1 EXPORT CAR_RTN = $9a8d - 1 EXPORT _UPDATESCREEN = $9965 - 1 EXPORT _DELETEPTOP1 = $9cd2 - 1 EXPORT _DELETELINE =`9302 - 0 EXPORT EC_CHANGE = $9080 - 0 EXPORT CLOSE_KEY = $9066 - 0 EXPORT OPEN_KEY = $906b - 0 INES = $972b - 0 EXPORT _FETCHNUM = $9807 - 0 EXPORT MUST_MORE = $9824 - 0 EXPORT _SYNTAXCHK = $981f - 0 EXPORT _CSTART = $97e3 - 0 EXPORT _CHRGOT = $97d0 - 0 lag realbad JMP suicide_ ;abnormal exit. ; delete a line and goto command mode without error. loop_end CALL ender_ gloop_end clr modeflag DONE 2 ender_ CALL _offsetall,#1 CALL _scrndelete  ADMIT ldd #5 ;"ILLEGAL SEARCH STRING" bra badnews ENDGUESS LDA #"*"!%10000000 STA ,x+ ;'*',char STX ,s  QUIF EQ CMPB 2,s ;will end on end delimiter character. IF EQ CALL _chrget ;skip over ending "/" or "\". CLRB ENDIF QUIF EQ ADMIT  $9cb3 - 1 EXPORT FLP_CURSORS = $9c8a - 1 EXPORT _SCRNDELETE = $9a13 - 1 EXPORT _SCRNINSERT = $99ec - 1 EXPORT _SCREENSTART = $990c - 1 EXPORT _CLRMSG = $9a3f - 1 EXPORT _CLRCMD = $9a3a - 1 EXPORT _COMPRINT = $986a - 1 EXPORT _REPRINTROW = $9ae9 - 1 EXPO ENDIF ENDIF LDX ,s STB ,x+ STX ,s ENDLOOP CLR [,s] ;make sure it ends in null. GUESS CALL length_,prevsrchstr_buf QUIF NE ldd #8 b SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line RTS et_point FCS "." CMPB #10 ;down cursor. BEQ gloop_end bra realbad bloop_end call ender_ ;remove line exit. CLR modefb2b&)0'ܦ4̙ 2b&$' 4ܬn$at'~2d9Aborted: 4'w<&l4 (&< _&040d4b2b50Z A& 40佰50 2&"40佰E44d4̚W2d2b50'Z &><!5 o 94$&O'U1!O4$*5$& 1   ޽  U r  g 齰 C A I н   ҽ  3 ѽ  4ݼܦ4fU2b4m'b4b2bb4b2b' ~2d9ܼ4ܦ4 2d94d4H2bm~j?~<#e4ܤH2bֹ o4ֺ4$(& #eoҽw'<2c9$ݶܬݪY5׺׹~$&'('ܤ4$P2b$Y94:462b4̘2b2b9%S?462b94̘2b9<'RETURN' or Command>4Yd462b佰]'a&ca&o'Ya- . o/@ '<'-')P& a - m&ֹ&jaJ &La '& a'& 2 '׺a&ܤ4̞2b a'\' &S & _ҽb5%s4P=À4bJP=0砬 ܦ4dH2b&?b'"&]'#k4d2b'5040bEbbܮb#$mj&?o".牀0"(0'''4섽5' j0b&m&2d}P'̱4P2bbP4d2b׼٩̗^4ܨ4̗Z4ht2f'A(0'944&̗^04db4nR4l ?O>&L>+'#-'O$&' 1!O4$!5$&O>& ' 1!O4$$5$&O>&5'o? 59nulsohstxetxeotenqackbelbshtlfvtffcrsosidledc1dc2dc3dc4naksynetbcanemsubescfsgsrsus4̱z2b4"0Ȁ焽rr44d &$d4ܰH2bd4½ 2bd4н 2bdm&Sd4f'b&o44iH2b5& d4½Q2b d4̑GQ2bd4ܰQ2b Yd4''&C佒&½ 2bd4b&'ܰ4bH2bfo44iH2b52bd5.4sѽDo oҽm'ܤ4ҽH2bYݭ٩O2b9 ׻׺<:?F462b̙5~$ ݬ$ݶܬݪ42b94.,5$&9ܬ4c4*b-< Zb//b44fA2d44b2b2b ''-4b4b4A2d2b4 &2c &$o!9oX%T'm& j9 +o⎟$'lm&m'2a9c0a26 5 1  ޽ н н 3 ̰< ̰94ZZo4b5\:/2b~,h4愽$'h0 '0ht2h&^&&2b2bob&oom& ܨ4db2b4db2b'ܦ4ܨH2bo&Fܦ4db2b'ܦ4H2b&&dL46ft2f&^&Oܨ4ܦH2b& dL46ft2f^̗^4ܦ4̗Z4ft2f\^ 2db'~2dooP"14 O'0L LP" 5Ȁ焽r&݂ & &݂ &佰'rr\ὰ~ &~ܦ4P2bܦ & ~24ܦV2b4̛꽰Q2b~.$4 2b9H2~ܲ$ݬܴܴ4ܲ2b& mh'}h4̑ 2bm &h4̑ 2b h4̑ 2bh4̑ 2bF 2b9:01$"00ݟ4̒ѽH504̒˽H50o0o0o0o02v@@4 44K2do 4ܮ 4̒P2P4ҽ2bo̓~ %nEDITOR :Copy2b$ݶܬݪ2d9Oֻ4'4b4A2d׹׺5~wOֻ'444dA2d2b~ ~w$&&"ֻ'44A2d  #ֻ' $ݶܬݪ~Y~Y׺$(&"ֻ'44A2d  #ֻ' $ݶܬݪ9( ho4h<================================END OF FILE===================================>4eaP=4bhP=À4eP=À4d4d4dK2d2h9ZP=ÀO J*9ֻֻZP=ֺ:0Ȁ & "0Ȁ94&'(' 4b2b 2b9$&85C= 484m'qoa':' 4$5&jm''佰8m& B2|d&,@Bo& 4 >5 l':& 4 D5 2a@2dJb'4̓m' {2bܦ ܦ~%S4P2b4V2b~4P2b42do佰S'(佝&!ҽ׸'ܦ4̘ 2b&0 4ܦ4ct2bcݬn$'~2d9Out of memory: Aborted: &ݲ(ݴ  4m'o44̱z2b5m'4 ܲ$&&$('d4$2bb'ҽ ҽE444f2d2bܦ49P2@4ܰH2b2@4нH2bܦ4P2b'#ܦ4½H2bܦ4ܰQ2bܦ4н 2b @ܰ4ܦ H2bܦo44ܦH2b5 '#P4P2b' ' P4P2b@4H2@4H2 ~  < Ľ 5 ڽ < 㽰 н$9e3d - 2 EXPORT EC_EXIT = $9d87 - 2 EXPORT EC_RUN = $9d7e - 2 EXPORT EC_TALK = $9d6b - 2 EXPORT EC_MOVE = $9c85 - 2 EXPORT EC_ECHO = $9c89 - 2 EXPORT EC_NULL = $9c7b - 2 EXPORT EC_FREE = $9c66 - 2 EXPORT EC_DELETE = $9c15 - 2 EXPORT EC_SETUP = $9c02 - 2&&&b.#4d('44dV2b52b 94&, 1!:(-542ݬὝI$9Ӭ, /ܾ9& $/ (':1?& '&'01!&9\' #29̝ ̝4 & 4 Oֺ4ֻ62b49 Oo_4\'u2b9O44,&>P/PbHoLZlbb &۽JobbX4̓2blbb &~%S %D _ 2A4ܰ44̱(ݰн=55ݰܦ hoa4hH2bܦ4ܦ4b2b4ܮ(4f#( O_4ܨ4fb2b'4o(04b4jb2b' "bedit10" ; Based on Joe's disk of May 15 include "watlib.exp" include "usr.exp" bank 0 "clmstart.b09" "_c.b09" "_i.b09" "_srch.b09" "_renam.b09" "_mon.b09" "utils.b09" "message.b09" "comm.b09" "omemory.b09" ; Ran out of   &$턟(ݾ4k!&1̐} ܤ4bH2ḇ4̱K2b44b2b52b2$~̱4̱K2b9g &Iܲ'1$$&#/($* нM,'$ݶܬݪҽ 944& *&oa/'_MESSAGE = $9835 - 0 EXPORT _BMESSAGE = $9831 - 0 EXPORT FIX_RANGE = $97be - 0 EXPORT FETCH_LINE = $9620 - 0 EXPORT _FETCHLINES = $972b - 0 EXPORT _FETCHNUM = $9807 - 0 EXPORT MUST_MORE = $9824 - 0 EXPORT _SYNTAXCHK = $981f - 0 EXPORT _CSTART = $97e3 - 0}P&1P4ܦ~f\k2~/' \'' (4&&42d_& P+&(442d 1-&&442d .& $&($4$ݬ9$4f$&4` ]/'\'$ O4&5 +V ~xrl f`ZTNHB<60*$ 454$ݶܬݪ4o' %Ā&  0 &o m'9O' 0L'#M'"#14 b4bH2b2b îb_\m&4\O4$2b&$\4eH2b$:焽2e9Z4cj' memory. Stuffed title in bank 11. "dir.b09" bank 1 "_list.b09" "_help.b09" "fname.b09" "keys.b09" "text.b09" "line.b09" bank 2 "_ul.b09" "_dc.b09" "_dt.b09" "_mount.b09" "_scrat.b09" "_tab.b09" "_di.b09" "_exec.b09" "_name.b09" "_get.b09" "_put.b09" "_ 1/&1V&BVܲ$&佑bb$$ $#ܬ$b452b2d9ܦ4'$/' %&&'~' ʀ504 o/&2b9444$&'('4$2bo4ܨ4d2d& 'I 彰&@d' 'd '4ܦ4d72d EXPORT _CHRGOT = $97d0 - 0 EXPORT _CHRGET = $97de - 0 EXPORT _SCANNER = $96a9 - 0 EXPORT EC_MONITOR = $960a - 0 EXPORT EC_RENAME = $95ec - 0 EXPORT _PARSESRCH = $9456 - 0 EXPORT _MATCHP1TOP = $94d9 - 0 EXPORT EC_SEARCH = $941d - 0 EXPORT _SEARCHLINE = $ $54'/' \'& $i&5c$_2e9a$ $2d9$4ݼ*& &ݲ( T|& (ݲ& E 'T$ݲ,&$ '>$ &ܲ$^& 콝 &&  ܲݴ$ ݼ _4a$ݬ59ܴ$ 4ܲݴ5ݲ9 & ]9 $ j䧠Z&  o2a942|(넉hb""d4fj4hK2d(h(ܴhݴ2f94(:4bf4bd4f4dK2b2b(h(ܴhݴ2f942@4*..4bH2b.oO_2,9P  < C I # w  e  :look.b09" "_def.b09" "_#.b09" "_s.b09" "_d.b09" "_f.b09" "_nul.b09" "_em.b09" "_tal.b09" "_run.b09" "_exit.b09" "dutil.b09" bank 11 "futil.b09" "dparse.b09" "title.b09" .b09" "utils.b09" "message.b09" "comm.b09" "omemory.b09" ; Ran out of 'b0bd&'504 b'o$ҽb2f9b2`B46d4dH2bm'om'm&0& d'<&60404b4bH2b2bĮb:4oc4g 2b5O dE4EĂ# 1bĉ4d4bH2b2bb4h|95c0 - 0 EXPORT EC_INPUT = $9302 - 0 EXPORT EC_CHANGE = $9080 - 0 EXPORT CLOSE_KEY = $9066 - 0 EXPORT OPEN_KEY = $906b - 0 INES = $972b - 0 EXPORT _FETCHNUM = $9807 - 0 EXPORT MUST_MORE = $9824 - 0 EXPORT _SYNTAXCHK = $981f - 0 EXPORT _CSTART = $97e3 - 0Ƚ!' Ƚ$' O9h'4ƽhT2b9 &9 '9 1 O4dZ'm&m&4g4g4d2db'~2c9Say what?Missing Filename.!Illegal line range.Illegal search string.Search string not found.Search string required.No search  齰     콰 = <   0 f _ 콰 W h c   =     k   ~ 콰       ν  ӽ   { > extMake upper caseMake lower caseShow line numberRun editorLeave editor & save textSet ACIA chipEnter ML monitorEnter 'PASSTHROUGH' modeOne column directoryTwo column directory (sorted)Rename textRedefine assumed deviceRemove file from disk 2bb29ܲ'1$ݬ$(&Ľo2~׹ֻZP="ܦ"׺'2Z&̔4?2b&oj&O aҽEP-B01P4 -] +1'4 ' &04ܦ4bH2b5 '0o&ҽ4̃5&#$ݶܬݪa 'Derange>̐4̑e4̓44٩ OJ&0_  1?&m'[42b] 4h2bfbm'$0何'[4 2b何']焞:.0/4fH2bҽE0.턮dm&d"0Ȁ' b0b0&& m&*string defined.Illegal default device.%S%S - Lines transferred %D.%DNo line range allowed.%D Occurrences changed.%D lines of text.Memory full.Replacing string too long.%D bytes of free memory.*Illegal destination line.Not enough free memory.? j ѐ2ܲ ݬܲ$e$''8ܼ# (&ܾ422b_9J44&l 9#'/'\'@'&laD laDa'O4d4̐W2d佟J2d9 prINTprINTpUTpUTcHANGE/\dELETEgETiNPUTeCHOmOVEuPPERlOWER#runexitseChange name of file on diskInitialize diskTransfer fileShow/rename date and timeShow time, rename date and timeShow/set tabstopsShow command summaryMacro keyboard entryFree memory availableSend command to diskExamines a filePrints formatted tea '  ~ 2b9$ݶܬݪ9.ƃ$4ܴ4ܲ4ܼ2d4'$aa$ݬm&2b94ܨ4' b&_' &EӨ_'@%&4^'$' .'~' ʀ*&䜨''  瀯 oܨE& 5 _2c944f'& & <~'9b' 9o⽟J"''' 佟D㽟J' & mb&oƽD_' b''D&2c9h4h4̖gW2b2b'h'0.&hh9diskhosth4h4̖gW2b2b'4h_' .'\0 O4# ~84f4hK2d5bo o94(& ')&52~н 'Cm'/$&'%(' a'$ҽ' 佝a'2b9a '佝a'2b9?&'2b9ܤ2b 'ܤ4ҽH2b$ݲݴ̽&P4' ' '2b 05ƽн+&~c&'' '' \# ~5::섽9o⽞ҽtUPmonITORtaLKdiRECTORYcaTALOGnAMEdefAULTscrATCHrENAMEmouNTcoPYdaTEtiMEtabSEThELPexECUTEfREE@tYPEprINTSaves textAlters textSearches for matchSearches for no matchPurge textLoad textAutomatic text entryDuplicate textTransfer txtqzؔؔݔߔqߔݔ䔅䔅ݔݔݔݔqݔݔݔꔑꔑqꔨqꔑꔨꔑꔴꔴ”ݔqݔɔqqFileName/srch/repldestination[FileName] to FileNamedevice-name[date] [time]{tabs}command-stringtextlinfb''m'f怯fja'oa& bh'&& m'&&'4'5't&X怯f'b'& 1?b 5m&bm' h4h4f2d&bm'0b 2d9`&' b&b Ja2d9o➦4oܦ4ܨ4d2db&5m4&b2c9h4h4̱$W2b2b9]* - " -"2'X~eʘGgbEX]p嗾Eߚ   #~YOֻ4ܬ,"0Ȁ׺Oֻ׻44b/2b2b5c#$ݶܬݪ~Y9׹o~Y4$P5oQ$444ܲ$ݬ&}ܴ4$42d&mf'_'^$ݬfܴ4~5&H44ܤH2bd㽗bb& $ݬὝݴ$($#_ bdݬ$b2g9o/'\' %m'' &00 ','j91̞ƞBank 0 clmstart.b09 = 9000 - 907f . 0080 _c.b09 = 9080 - 9301 . 0282 _i.b09 = 9302 - 941c . 011b _srch.b09 = 941d - 95eb . 01cf _renam.b09 = 95ec - 9609 . 001e _mon.b09 = 960a - 961f . 0016 utils.b09 = 9620 - 9830 . 0211 message.b0,154(both) Import SKP_ALPHA Export OPENUP_4P=$0000 Import OPENF_ 36(both) Export CLOSEUP=$0041 Import CLOSEF_ 66(both) Reloc 0,214(both),0,16(both) Object 3406cc0000ddbc0fb8dca63406ec66bd005532623406bd00006df4271eec623406ec62bd00003262 ede3ec623406ec62b . 00cc Length of Module = 0fc8 Bank 11 marry.b09 = 9000 - 90b9 . 00ba what1.b09 = 90ba - 90f0 . 0037 calcr1.b09 = 90f1 - 91dd . 00ed count.b09 = 91de - 92b4 . 00d7 parse1.b09 = 92b5 - 93eb . 0137 sumfp.b09 = 93ec - 9420 . 0035 roEXPORT _TITLE = $91b7 - 12 EXPORT DPARSE = $9149 - 12 EXPORT CLOSEUP = $9041 - 12 EXPORT OPENUP_4P = $9000 - 12 EXPORT CHECKOUTFNAME = $9055 - 12 EXPORT ASC2CHAR = $9c32 - 11 EXPORT CONTABL = $9ce7 - 11 EXPORT CHAR2ASC = $9aff - 11 EXPORT DOPF = $9bb4 -  $9dc6 - 2 EXPORT PARSE_TO = $9e3d - 2 EXPORT EC_EXIT = $9d87 - 2 EXPORT EC_RUN = $9d7e - 2 EXPORT EC_TALK = $9d6b - 2 EXPORT EC_MOVE = $9c85 - 2 EXPORT EC_ECHO = $9c89 - 2 EXPORT EC_NULL = $9c7b - 2 EXPORT EC_FREE = $9c66 - 2 EXPORT EC_DELETE = $9c15 - 2 9 = 9831 - 99e8 . 01b8 comm.b09 = 99e9 - 9c1f . 0237 omemory.b09 = 9c20 - 9d66 . 0147 dir.b09 = 9d67 - 9d93 . 002d 56 Auto Load Vectors 9d94 - 9ee3 . 0150 Length of Module = 0ee4 Bank 1 _list.b09 = 9000 - 903d . 003e _help.b09 = 903e d00003262ece1270220037e0000326439bd0000dcbc3406dca63406cc000bbd 00003264393406ec643406bd0000bd000032626df8042624ec643406dcb0bd00003262ec643406dc c2bd00003262ec643406dcd0bd000032621600b7ec64bd00001f016d842653ec64bd0000340610a3 662719ec622615e6f46ff43404dc und2.b09 = 9421 - 94c7 . 00a7 printit1.b09 = 94c8 - 9552 . 008b convert.b09 = 9553 - 9697 . 0145 spread1.b09 = 9698 - 96bc . 0025 con0.b09 = 96bd - 9708 . 004c con1.b09 = 9709 - 9743 . 003b con2.b09 = 9744 - 9798 . 0055 rith1.b09 =  11 EXPORT DOASCII = $9ad3 - 11 EXPORT DOINT = $98a3 - 11 EXPORT NOGOOD = $9991 - 11 EXPORT MOVEIT = $99d9 - 11 EXPORT RITHMETIC = $9799 - 11 EXPORT OPERATOR = $989a - 11 EXPORT BIN2CN = $9744 - 11 EXPORT CN2BIN = $9762 - 11 EXPORT HEX2CN = $9709 - 11 EXP EXPORT EC_SETUP = $9c02 - 2 EXPORT EC_NUMBER = $9bec - 2 EXPORT EC_DEFAULT = $9baa - 2 EXPORT EC_LOOK = $9b12 - 2 EXPORT EC_PRINTL = $98d3 - 2 EXPORT EC_PUTLINES = $98ce - 2 EXPORT EC_PRINT = $98c1 - 2 EXPORT EC_PUT = $98bc - 2 EXPORT EC_GET = $97fb - 2 - 95fc . 05bf fname.b09 = 95fd - 96f2 . 00f6 keycalc3.b09 = 96f3 - 9869 . 0177 text.b09 = 986a - 9d8c . 0523 line.b09 = 9d8d - 9f31 . 01a5 11 Auto Load Vectors 9f32 - 9f73 . 0042 Length of Module = 0f74 Bank 2 _ul.b09 = 9000 - 902f .d03406ec69bd000032623504e7f4bd000010a3e1260dec643406 dcc2bd00003262200cec643406cc0147bd00003262ec643406dcb0bd000032622059ec64bd000034 06bd00002708c1012704c1042643ece4bd000010a3e42605dcc2bd00003262ec64bd00003406ec62 2627dcb03406ec62bd00003262ec66bd0000ede9799 - 98a2 . 010a doint1.b09 = 98a3 - 9ad2 . 0230 ascii1.b09 = 9ad3 - 9afe . 002c scr2asc.b09 = 9aff - 9c31 . 0133 asc2char1.b09 = 9c32 - 9eee . 02bd 5 Auto Load Vectors 9eef - 9f0c . 001e Length of Module = 0f0d Bank 12 futil.b09 = ORT CN2DEC = $9714 - 11 EXPORT DEC2CN = $96bd - 11 EXPORT CN2HEX = $96fb - 11 EXPORT SPREAD = $9698 - 11 EXPORT CONVERT = $9553 - 11 EXPORT COUNTIT = $9697 - 11 EXPORT STR2CN = $9666 - 11 EXPORT CN2STR = $967e - 11 EXPORT CHECKIT = $95a2 - 11 EXPORT PRIN EXPORT EC_NAME = $97be - 2 EXPORT EC_EXEC = $975f - 2 EXPORT EC_DIRECTORY = $93b3 - 2 EXPORT EC_CATALOG = $93b0 - 2 EXPORT EC_TABSET = $9357 - 2 EXPORT EC_SCRATCH = $933d - 2 EXPORT EC_MOUNT = $9317 - 2 EXPORT EC_DATE = $9263 - 2 EXPORT EC_TIME = $9268  0030 _dc.b09 = 9030 - 9262 . 0233 _dt.b09 = 9263 - 9316 . 00b4 _mount.b09 = 9317 - 933c . 0026 _scrat.b09 = 933d - 9356 . 001a _tab.b09 = 9357 - 93af . 0059 _di.b09 = 93b0 - 975e . 03af _exec.b09 = 975f - 97bd . 005f _name.b09 = >4e6f46ff43404dcd03406ec69bd000032623504e7 f43262ec6435902e00 bd 00003264393406ec643406bd0000bd000032626df8042624ec643406dcb0bd00003262ec643406dc c2bd00003262ec643406dcd0bd000032621600b7ec64bd00001f016d842653ec64bd0000340610a3 662719ec622615e6f46ff43404dc9000 - 9148 . 0149 dparse.b09 = 9149 - 91b6 . 006e title1.b09 = 91b7 - 92ff . 0149 12 Auto Load Vectors 9300 - 9347 . 0048 Length of Module = 0348 - 9708 . 004c con1.b09 = 9709 - 9743 . 003b con2.b09 = 9744 - 9798 . 0055 rith1.b09 = TIT = $94c8 - 11 EXPORT TOTAL = $953d - 11 EXPORT PREFIX = $953c - 11 EXPORT ROUND = $9421 - 11 EXPORT SUM = $93ec - 11 EXPORT BUFFP = $941c - 11 EXPORT ENTRIES = $941b - 11 EXPORT PARSE = $92b5 - 11 EXPORT CEASE = $93da - 11 EXPORT DOTPOS = $93eb - 11 E- 2 EXPORT EC_RCOPY = $90af - 2 EXPORT EC_COPY = $90aa - 2 EXPORT EC_DCOMMAND = $9030 - 2 EXPORT EC_UPPER = $9000 - 2 EXPORT EC_LOWER = $9005 - 2 EXPORT _GETLINE = $9d92 - 1 EXPORT LINE_INPUT = $9dbe - 1 EXPORT _SGETLINE = $9d8d - 1 EXPORT _POINTEROFP = 97be - 97fa . 003d _get.b09 = 97fb - 98bb . 00c1 _put.b09 = 98bc - 9b11 . 0256 _look.b09 = 9b12 - 9ba9 . 0098 _def.b09 = 9baa - 9beb . 0042 _#.b09 = 9bec - 9c01 . 0016 _s.b09 = 9c02 - 9c14 . 0013 _d.b09 = 9c15 - 9c65 . 0051 _f.b09 TCURTORPCP1 = $9b2f - 1 EXPORT CUR_DN = $9a87 - 1 EXPORT CUR_UP = $9a45 - 1 EXPORT SET_EOF_LINE = $9ad1 - 1 EXPORT _HOLDIT = $989f - 1 EXPORT LIFTCURTO_RPCP1 = $9b36 - 1 EXPORT CAR_RTN = $9a8d - 1 EXPORT _UPDATESCREEN = $9965 - 1 EXPORT _DELETEPTOP1 = $9_REPRINTROW = $9ae9 - 1 EXPORT _DOCHAR = $96f3 - 1 EXPORT SKIP_PREFIX_ = $96c4 - 1 EXPORT DEVNAME = $96da - 1 EXPORT DEF_DEVICE = $9672 - 1 EXPORT STRIPDISK = $963c - 1 EXPORT SCANFNAME = $95fd - 1 EXPORT EC_HELP = $94ec - 1 EXPORT _COMMAND_NUM = $903e -XPORT CUR_DIG = $93dc - 11 EXPORT COUNT = $91de - 11 EXPORT SHORT = $925f - 11 EXPORT CHARS = $9260 - 11 EXPORT ROWUP = $92b4 - 11 EXPORT LINEBUF = $9262 - 11 EXPORT MAIN = $90f1 - 11 EXPORT ENTRYERR = $9157 - 11 EXPORT OUTMEM = $913c - 11 EXPORT FINI = $9d43 - 1 EXPORT _PRINTSCREEN = $993c - 1 EXPORT _PURGE = $9959 - 1 EXPORT _PAUSE = $989f - 1 EXPORT _OFFSETBYP = $9d49 - 1 EXPORT _OFFSETALL = $9d23 - 1 EXPORT _NUMBEROFP = $9d09 - 1 EXPORT _MSGREADY = $988e - 1 EXPORT _INSERTTEXTM = $9d77 - 1 EXPORT SE = 9c66 - 9c7a . 0015 _nul.b09 = 9c7b - 9c84 . 000a _em.b09 = 9c85 - 9d6a . 00e6 _tal.b09 = 9d6b - 9d7d . 0013 _run.b09 = 9d7e - 9d86 . 0009 _exit.b09 = 9d87 - 9da3 . 001d dutil.b09 = 9da4 - 9efb . 0158 34 Auto Load Vectors 9efc - 9fc7cd2 - 1 EXPORT _DELETELINE = $9cb3 - 1 EXPORT FLP_CURSORS = $9c8a - 1 EXPORT _SCRNDELETE = $9a13 - 1 EXPORT _SCRNINSERT = $99ec - 1 EXPORT _SCREENSTART = $990c - 1 EXPORT _CLRMSG = $9a3f - 1 EXPORT _CLRCMD = $9a3a - 1 EXPORT _COMPRINT = $986a - 1 EXPORT  1 EXPORT EC_LIST = $9000 - 1 EXPORT DREADF_ = $9d67 - 0 EXPORT CLOSEP_BYTESP1 = $9d33 - 0 EXPORT OPENP_BYTESP1 = $9cf8 - 0 EXPORT _INSERTTEXT = $9c20 - 0 EXPORT _HINSERTTEXT = $9c2a - 0 EXPORT _FETCHTEXT = $9cd0 - 0 EXPORT _COMMANDER = $99e9 - 0 EXPORT $9156 - 11 EXPORT PRINTERR = $9196 - 11 EXPORT WHAT = $90ba - 11 EXPORT CLEARBOT = $90ab - 11 EXPORT REPEAT = $902c - 11 EXPORT CALC = $9000 - 11 EXPORT ROW_COL = $90b8 - 11 EXPORT MAKETIME2P = $9e0a - 2 EXPORT ERRORCHECK = $9dd8 - 2 EXPORT ERROROUTER = Errors 0 $022f ; Length Export MOVEIT=$0136 Import ITOHS_ 277(both) Import LINEBUF 286(both),274(both) Import ROW_COL 297(both),250(both) Import PRINTF_ 294(both),247(both) Import TPUTCURS_ 300(both),283(both),253(both),242(both) Import CN2STR 235(both) 00cc00003406cc01f9bd0000fc0000bd000032643506fd000039b600008e0000e684a780 27041f9820f639524553554c5420455843454544532036353533352e205265636f6d707574652069 6e20466c6f6174696e6720506f696e742e0600454e545259204552524f523a203129204120446967 69742061626f7665203 Errors 0 $002b ; Length Import ROW_COL Import PREFIX Import PRINTF_ Import TPUTCURS_ Import TGETCURS_ Import TOTAL 41(both) Import PRINTERR 38(both) Import ASC2CHAR 25(both) Import CHAR2ASC 16(both) Import ROWUP 7(both) Import ENTRIES 4(both) Import>b60136b1012627037c00003961672703bd61bcbd608d7d62e12709bd63ec 61fc13a26057c012520037c00007e00ff2046c1 202627e61fc1202602e61e3404bd0000350427057c0000200cc12e26057e007a20037c00007e00ff 201bc12e2611e61fbd000027057c000020037c000020037c00007e00ff7e00d23404bd00 Errors 0 $0132 ; Length Import CONTABL 237(both) Import TPUTCURS_ 269(both),257(both),178(both) Import ROW_COL 266(both),175(both) Import PRINTF_ 263(both),172(both) Export DOPF=$00b5 Import CLEARBOT 102(both) Import ITOS_ 97(both) Import TOTAL 94(both), Import ___DIV 229(both) Import ___MUL 134(both) Export NOGOOD=$00ee Import CUR_DIG 260(both),186(both),131(both),80(both),40(both) Import OPERATOR 73(both),29(both) Import STR2CN 68(both),22(both) Import PREFIX 311(both),221(both),17(both) Import TOTAL 3 33237363720282437666666292c206f72203229204469766973696f6e2062 7920300600524553554c542045584345454453202b333237363720446563696d616c2e205265636f 6d7075746520696e20466c6f6174696e6720506f696e740600524553554c5420494e2054776f2773 20436f6d706c656d656e742e205661 ENTRYERR 33(both),30(both),1(both) Export DOASCII=$0000 Object 7f00007f00007f0000e682c1232605bd0000200cc13d2605bd000020037c00007d00002703bd0000 7f000039 -rith1.b09 doint1.b09 Errors 0 $02bc ; Length Import ROW_COL Import PRINTF_ Import HSTOB_ Import TPUTCURS_ Import PREFIX 635(both) Import STOI_ 632(both) Import HEX2CN 177(both) Import ISDIGIT_ 175(both) Import ISHEX_ 173(both) Export CONTABL=$00b5 Import DOPF 125(both) I 91(both),83(both),78(both) Import ITOHS_ 73(both) Import PREFIX 169(both),86(both),70(both) Import LINEBUF 105(both),65(both) Import NOGOOD 244(both),22(both) Import ENTRYERR 7(both) Export CHAR2ASC=$0000 Reloc 0,260(both),0,166(both),0,155(both),0,139(b 14(both),307(both),257(both),232(both),218(both),169(both), 159(both),126(both),102(both),83(both),60(both),36(both), 9(both) Import ENTRYERR 215(both),200(both),195(both),178(both),55(both),4(both) Import CHECKIT 52(both),1(both) Export DOINT=$0000 Relo56c75652062656c6f77207a65726f2069733a202d2425730600 b600008e0000e684a780 27041f9820f639524553554c5420455843454544532036353533352e205265636f6d707574652069 6e20466c6f6174696e6720506f696e742e0600454e545259204552524f523a203129204120446967 69742061626f7665203 8e00 b510aea6e6a02704e78020f839000000000000027400f90100010e011b0129013a014a0160017101 82018e01a001b001c101d201d801de01e501ec01f301fa02010208020f0216021d0223022a023a02 400246024c025202664e554c3a5e4000534f483a5e412028486f6d6529005354583a5e4220285275 6e2900 mport ENTRYERR 78(both) Import TOTAL 629(both),101(both),56(both) Import NOGOOD 49(both) Import LINEBUF 96(both),1(both) Export ASC2CHAR=$0000 Reloc 0,247(both),0,245(both),0,243(both),0,241(both),0,239(both),0,237(both), 0,235(both),0,233(both),0,231(bo oth),0,128(both),0,119(both), 0,17(both),0,10(both) Object e682c13d27067c00007e00b4301f3410cc00d03406bd00003262bddd8227fb34041a10bddef35d26 fa1cef6f9f012c35043510c120260686a0a7842002e7844ffd00003406cc0000bd00008624b70000 8620b70003b700008644b70004cc0005b c 0,291(both),0,224(both),0,210(both),0,205(both),0,181(both),0,162(both), 0,152(both),0,147(both),0,119(both),0,114(both),0,105(both),0,95(both), 0,90(both),0,63(both),0,12(both) Object bd00007d000027067f00007e00ede684f700003410bd00003510e682f7000034108V46f203220646967697420636f64652c206f722044 20706c7573203120746f2033206469676974730600 23a5e4d2028436172722052746e2900534f3a5e4e0053493a5e4f00444c 453a5e50004443313a5e51004443323a5e52004443333a5e53004443343a5e54004e414b3a5e5500 53594e3a5e56004554423a5e5700 4554583a5e43202853746f702900454f543a5e44202844656c204b65792900454e513a5e45 2028496e73657274290041434b3a5e462028455343204b65792c20454f4c290042454c3a5e472028 43757273205274290042533a5e48202843757273204c6674290048543a5e49202854616229004c46 3a5e4a20284375727 th),0,229(both),0,227(both),0,225(both), 0,223(both),0,221(both),0,219(both),0,217(both),0,215(both),0,213(both), 0,211(both),0,209(both),0,207(both),0,205(both),0,203(both),0,201(both), 0,199(both),0,197(both),0,195(both),0,193(both),0,191(both),0,189(b d00003262bd0000fc00001f98c0402d0ac11f22064fbd00 f9202d81192205bd00eb2024817f26078620bd00eb20198181250c818b22088e8781bd00b5200981 ff26058621bd00ebcc0000bd0000fc0000bd000039c650e780c646e7808050813b2604862e200681 3a26028630a784395052455353204b455920544f2042 6028e0000108e 0000e680e7a04a26f93510bd00007d000027067f00007e00ed3410bd00003510b60000812b261cfc 0000f30000240e3406cc01473406bd00ee32623506fd00007e00ea812d260a3410bd010035107e00 ea812a2627fc00003406fc0000bd000025062b042702200e3406cc01bd3406bd00ee32623506fd Errors 0 $0148 ; Length Import _SYNTAXCHK 23(both) Import COPYSTR_ 313(both),289(both),180(both),111(both),95(both) Import PREFIXST_ 267(both),133(both),122(both) Import COPY_ Import TABLELOO_ Import SCANFNAME 92(both) Import ERROROUTER 49(both) Import 320446f776e290056543a5e4b202843757273205570290046463a5e4c202843 6c72205363726e290043523a5e4d2028436172722052746e2900534f3a5e4e0053493a5e4f00444c 453a5e50004443313a5e51004443323a5e52004443333a5e53004443343a5e54004e414b3a5e5500 53594e3a5e56004554423a5e5700 oth), 0,187(both),0,185(both),0,183(both),0,181(both),0,179(both),0,159(both), 0,153(both),0,136(both),0,112(both),0,91(both),0,81(both),0,69(both), 0,44(both),0,39(both),0,25(both) Object bf00008604e682c1442707c12427034a26f3c14426078602bd00362018c1242604520434f4e5645525445440600488e0000ae 863410bd000032623934063406cc1901bd0000cc0112bd0000fc0000bd0000326439434f4e54524f 4c204b45592076616c75652069733a20442564206f722024256800 0a7842002e7844ffd00003406cc0000bd00008624b70000 8620b70003b700008644b70004cc0005b 00 007e00ea812f2642fc000027042b0220067c00007e00c73406fc000027042b0220057c000032627d 00002718cc017b3406bd00ee32627f00007f00007f00007e00ed2006bd0000fd0000bd000039cc19 01bd0000ec62bd0000fc0000bd000039fc0000b30000340624264353c300013406cc0000bd0000cc 1901bd00 STRIPDISK 274(both),257(both),189(both),143(both) Import SUICIDE_ 60(both) Import SUFFIXST_ 228(both),217(both),203(both) Import DEVNAME 242(both) Export CHECKOUTFNAME=$0055 Import _MESSAGE 80(both) Import DISK__ Import SKIP_PREFIX_ 296(both),237(both) 43414e3a5e5800454d3a5e59005355423a5e5a004553433a5e5b 20284e6f204b6579290046533a5e5c0047533a5e5d0052533a5e5e0055533a5e5f0044656c657465 2028526570656174204b65792900284f46462f525653204b65792900cc0000bd0000fd0000394552 524f523a20456e746572202420616e642031207 a81022d064fbd00 36200acc027e3406bd0000326239108e00003001e680c13d271534168e00adad96351626067c0000 7e009be7a020e56fa4108e00b1adb6be00003003b60000a781817f26078620bd009c202781812509 818b2205bd0000201a81ff26078621bd009c200f812025082604c6a0e71f2003bd009c394810 6c6600767400666600637200736f00736900646c6500646331006463320064633300646334006e61 6b0073796e006574620063616e00656d00737562006573630066730067730072730075730000 c1f213520e7a016ff836fa41f 20a3e13934101f12e6a0c124261e4fe6a41027005531214f3424bd0000352426ede63!;i XDEF ec_input XREF _syntaxchk,tgetcurs_ XREF _numberofp,_offsetall XREF _updatescreen,_clrcmd XREF _sgetline,_dochar,_bmessage XREF _scrninsert,_scrndelete XREF _inserttextm,_repr! ;move text cursor to right spot. CALL _sgetline ;get line from screen. STD ,s CMPB #3 ;stop LBEQ bloop_end ;end insert and signal error. LDB service_ DECB Errors 0 $0036 ; Length Import PREFIX 50(both) Export WHAT=$0000 Object fc0122c380001f014fe682c1642604c644e784c14026048606201bc13d260486042013c144270ac1 252706c12427022005f70000860239 ! Errors 0 $00ec ; Length Import PRINTF_ 181(both) Import TPUTCURS_ 187(both),169(both) Export PRINTERR=$00a5 Import ISDIGIT_ 137(both),124(both) Import LINEBUF 114(both) Import ROW_COL 184(both),104(both) Import SUM 95(both) Export FINI=$0065 Import ROUND%5207374617274696e67206c696e65200600 0,21(both),0,1(both) Object 7f00667f00007f00007f00007f00008e00008605bd00918e0000860ebd009186108e0000bd00919e 249c2022067c0066bd0097bd00007d00002705bd006720087d00002703bd0000bd00977d00002709 bd0000bd00007e00657d00002603! introw XREF copystr_,length_,printf_,streq_ XREF curpos_,suicide_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :continuous input with word wrap! LBNE loop_end CALL streq_,#input_buffer,#et_point LBNE loop_end ;not a '.' was entered. GUESS CLR [alternate_buf] ;null out buffer. DEC ,s QUIF NE ;word wrap in pr! Errors 0 $00d6 ; Length Import ISDIGIT_ Import ROW_COL 121(both),68(both) Export LINEBUF=$0084 Import OUTMEM 42(both) Import CEASE 37(both) Export ROWUP=$00d6 Export CHARS=$0082 Export SHORT=$0081 Export COUNT=$0000 Reloc 0,126(both),0,118(both),0,108(b! 84(both) Import PRINTIT 81(both) Export OUTMEM=$004b Import PARSE 70(both) Import CHARS 117(both),65(both) Import SHORT 107(both),90(both),55(both) Import COUNT 52(both) Import TOTAL 34(both) Import CUR_DIG 24(both) Import BUFFP 16(both) Import CEASE 76!Errors 0 $0136 ; Length Export CUR_DIG=$0127 Export DOTPOS=$0136 Export CEASE=$0125 Import ENTRYERR 290(both),253(both),243(both),223(both),205(both),134(both), 101(both),44(both) Import ISDIGIT_ 155(both),129(both),94(both),39(both),24(both) Import ROW_!. ;returns :true/false; was input mode forced off abnormally? ec_input CALL _syntaxchk LDD range_start CMPD range_end CNE _bmessage,#4 ;illegal line range. STD txtcur CALL _numberofp !ogress. SET1 (1,s),#13 ;force normal line handling. CALL length_,main_buf CMPB #crtwidth QUIF LT ;find word and move to buffer. LDX main_buf LEAX d,x !oth),0,97(both),0,94(both),0,87(both), 0,78(both),0,71(both),0,61(both),0,54(both),0,48(both),0,45(both), 0,7(both),0,4(both),0,1(both) Object 7f00817f00827c00d64fe61f34061f10a3e18300011f011f02a68080022613109c2022087c000032 627e00007c00817e00803420108e00!(both),13(both) Import ENTRIES 10(both) Import DOTPOS 7(both) Import ROWUP 173(both),4(both) Export ENTRYERR=$0066 Export MAIN=$0000 Reloc 0,178(both),0,162(both),0,157(both),0,152(both),0,142(both),0,129(both), 0,87(both),0,73(both),0,60(both),0,49(both!COL 16(both) Import LINEBUF 13(both) Import SHORT 144(both),139(both),115(both),72(both),49(both),1(both) Export PARSE=$0000 Reloc 0,285(both),0,282(both),0,277(both),0,274(both),0,269(both),0,266(both), 0,256(both),0,248(both),0,238(both),0,233(both),0,! STD cur_line LDD txtcur CMPD txtend CEQ _offsetall,#-1 ;move back to real line. CALL _updatescreen ;reprint screen to show any update. CALL _clrcmd ;remove unsi! ;points to end of line. LOOP LDB ,-x GUESS ldy main_buf leay crtwidth,y pshs y CMPX ,s++ QUIF LT !84c6ffe7a07f0083e6803402b60001b10082220535027e0071 3502c1202413f70083e680e7a07c00827a008326f680022006e7a07c00824a2ecb6fa43520b60082 b100012403b7008139006635024ae686bd000027037c0066396f804a26fb397d00662708bd00a532 627e006539cc1901bd00004ff600003406cc00c0b!),0,46(both),0,37(both), 0,29(both),0,21(both),0,1(both) Object 7f00667f00007f00007f00007f00008e00008605bd00918e0000860ebd009186108e0000bd00919e 249c2022067c0066bd0097bd00007d00002705bd006720087d00002703bd0000bd00977d00002709 bd0000bd00007e00657d00002603!226(both),0,216(both), 0,213(both),0,208(both),0,200(both),0,191(both),0,168(both),0,150(both), 0,147(both),0,118(both),0,110(both),0,75(both),0,67(both),0,52(both), 0,7(both),0,4(both) Object 7f00007f01357f01264f34028e0000f600013ae6843404bd000035042a022!ghtly insert command. CLR [alternate_buf] ;null out present wrapped word. LEAS -2,s loop_beg CALL _scrninsert ;insert a line. SET1 modeflag,#3 ;insert mode. LDB textrow ! TSTB ;don't break. ADMIT ldy main_buf leay crtwidth-41,y pshs y CMPX ,s++ IF NE ;optional break. Hd0000fc0000bd0000326239454e545259204552 524f52202564206c696e6528732920 ,0,54(both),0,48(both),0,45(both), 0,7(both),0,4(both),0,1(both) Object 7f00817f00827c00d64fe61f34061f10a3e18300011f011f02a68080022613109c2022087c000032 627e00007c00817e00803420108e00!bd00001f2120ce392ab60001b000008104241f8e0000b60000e6 863402bd000027037c006635024ae686bd000027037c0066396f804a26fb397d00662708bd00a532 627e006539cc1901bd00004ff600003406cc00c0bd0000fc0000bd0000326239454e545259204552 524f52202564206c696e652873292061626f766!075c13b2514e61fbd00 0027057c000020037c00007e00ff205dc13a2613e61fc13a26057c012520037c00007e00ff2046c1 202627e61fc1202602e61e3404bd0000350427057c0000200cc12e26057e007a20037c00007e00ff 201bc12e2611e61fbd000027057c000020037c000020037c00007e00ff7e00d23404bd00!DECB LDA #80 MUL STD curpos_ ;set cursor to right spot. CALL printf_,alternate_buf ;print any 'wrap' from previous line. LDD curpos_ CALL tgetcurs_ STB textcol  CMPB #" " IF EQ ;break. INX PSHS x CALL copystr_,(2,s),alternate_buf PULS x LO 0035042a 02202fc12e2605bd01092026c12d26022020c1282604c62d2018c12026057e00e8200fc1ff26057e 00e820067c00007e00ff34047c0126f60126c10d23067c00007e00ffe68220b07d0135270a7d0136 26037c000020087d013627037c00008e01273504e78026fa397c01357d01292608b60126b7013620 0b"Errors 0 $0058 ; Length Import _CHRGET Import SUICIDE_ 79(both) Import PRINTF_ 66(both) Import _MSGREADY 46(both) Import _FETCHNUM 18(both) Import _CHRGOT 9(both) Import TABGET_ 4(both) Export EC_TABSET=$0000 Reloc 0,63(both) Object 4f3402bd00003406bd00"Errors 0 $03ae ; Length Import PARSE_TO 28(both) Import LENGTH_ 214(both) Import COPYSTR_ 578(both),536(both),503(both),167(both),56(both) Import EOF_ 448(both) Import PUTNL_ 751(both) Import TABLELOO_ Import DREADF_ 522(both),490(both),478(both),154(bo"13353010af813430ec62bd0000c30001e362ed62cc0000edf4dcaea3621083002324a06d6a 263f6fe4be0000c62ee78900003001bf00009e283004ec842727ec02271f3406ec84bd0320350627 0c10ae81ec8410af84ed836ae43002ed62ec8426dd6de426c132647d0450271bcc00003406cc0450 bd00003262ed62cc0"Errors 0 $005e ; Length Import SUICIDE_ 90(both) Import ERROROUTER 79(both) Import OPENF_ 66(both) Import CHECKOUTFNAME 49(both) Import CLOSEF_ 24(both) Import _COMMANDER 13(both) Import READ__ 5(both) Export EC_EXEC=$0000 Reloc 0,8(both) Object dcc03406" Errors 0 $003c ; Length Import _BMESSAGE 57(both) Import COPYSTR_ 20(both) Import PREFIXST_ 44(both),32(both) Export EC_NAME=$0000 Import CHECKOUTFNAME 8(both) Object dca63406cc0000bd00003262cc04003406dcb0bd00003262cc04003406dcc2bd00003262cc040034 06dcd000d6c9c103261cbd0000c1502f02c650aee4a662486f864c5ae7866c62a6 62810a26dbbd00006f62e66258aee4ec85c300013406cc0055bd000032626c62e662c10a26e47e00 002553200025442000 " th),122(both) Import SCREEN_ 742(both),730(both),718(both),251(both) Import FPRINTF_ 772(both) Import STRIPDISK 41(both) Import ERROROUTER 784(both),335(both),74(both) Import _HOLDIT 638(both) Export EC_CATALOG=$0000 Export EC_DIRECTORY=$0003 Import CURP" 4503406ec64bd00003262c616d7bcbd0000cc03ae3406dca83406cc03aa3406 ec68bd02c43266ece427419e283004ec8427393410aee4ec813406ec812605cc03ae301e3406af64 ec623406ec6ebd02a23406ec6cbd02c43268260eccffffbd02ae102600daecf426cb326232627f04 006f9f00a8ec62bd000010260083cc0000bd0027ddc0bd0000d632c10127f7dcc0bd00003506ddc0d632c10226020a323934 06dca63406ccffffbd0000326234066df4271eec623406ec62bd000032623406ec623406ec62bd00 003262ece1270220037e0000326439 56e0025732020202020202020202020202573256e00 c260bbd00003406c617d7bc35&bd00003262cc04003406cc000abd00003262 0bd00003506ddc0d632c10226020a323934 06dca63406ccffffbd0000326234066df4271eec623406ec62bd000032623406ec623406ec62bd00 003262ece1270220037e0000326439 56e0025732020202020202020202020202573256e00 c260bbd00003406c617d7bc35"Errors 0 $00c0 ; Length Import PREFIXST_ 116(both),56(both) Import EOF_ 87(both) Import TBREAK_ 44(both) Import READ__ 19(both) Import ERRORCHECK 95(both) Export EC_GET=$0000 Import _INSERTTEXT 102(both) Import SUICIDE_ 162(both) Import FGETREC_ 76(both)"OS_ 738(both),723(both),714(both),256(both),245(both) Import ZNDCLR_ 344(both) Import SUICIDE_ 666(both) Import WRITE__ 313(both) Import DIROPENF_ 63(both) Import DISK__ Import ___DIV 96(both) Import SKP_ALPHA Import OPENF_ 321(both) Import CLOSEF_ 660"6f9f00a86f9f00a67f04006d9f00a8260bdca83406ec64bd0000 3262cc04003406ec64bd000032622711dca63406dca8bd000032626f9f00a8c6ff2646dca63406ec 64bd000032622711dca63406cc0400bd000032627f0400c6ff2626ec64bd029c3436ec66bd02c432 662616ccffffbd02ae264fdca83406dca6bd000"Errors 0 $0255 ; Length Import LENGTH_ 307(both),114(both) Import PREFIXST_ 167(both) Import _FETCHTEXT 96(both) Import TABLELOO_ 323(both) Import FPUTREC_ 129(both) Import TBREAK_ 155(both) Import ERRORCHECK 142(both) Import STOI_ 292(both) Export EC_PU"0326226299ebc30019fbcbd0000270edc a63406cc00d8bd00003262c6ff260edc2493b42708cc0001bd000020963404dcacbd0000dd24ec61 bd0000bd0000e6e027037e000032643941626f727465643a20001f011f023406e68010270077c13c 1026006c3420bd016c2604c63c205fc101261830013430ec643406ec62" Import _OFFSETBYP 39(both) Import OPENUP_4P 22(both) Import CLOSEUP 141(both) Import _POINTEROFP 150(both) Import _PRINTSCREEN 155(both) Reloc 0,113(both),0,53(both) Object dcac3406dcbe83000127054fe69f00b03406cc0000bd0000ede4dcb2dd241093282606ccffffbd00"(both),653(both) Import _PRINTSCREEN 663(both) Import _PAUSE 696(both) Reloc 0,886(both),0,683(both),0,678(both),0,644(both),0,633(both),0,626(both), 0,617(both),0,614(both),0,606(both),0,599(both),0,567(both),0,557(both), 0,550(both),0,424(both),0,414(b"0326216ff81e69f00a8fa040026022014ec64bd02 9c3436ec66bd02c43266ccffffbd02aecc03ae3406dca63406cc03aa3406ec66bd02c43266bd0000 cc0000bd02ae20023264ec62bd0000ece42703bd0000bd00007e0000108e04009ea84d2705cc0393 2003cc039c395d27114f5f0abc260bbd00003406c617d7bc35"T=$0000 Export EC_PRINT=$0005 Export EC_PUTLINES=$0012 Export EC_PRINTL=$0017 Import SUICIDE_ 211(both) Import WRITE__ 49(both) Import HSTOB_ 270(both) Import ISHEX_ 387(both) Import ISDIGIT_ 453(both),414(both) Import ISALPHA_ 428(both) Import _OFFSETBY"bd000032623530aee45ae6 852041c103260b3430ece4bd000035302032c10226223430ece4bd00003406ece43406ec643406cc 01e2bd000032643262353027035a200c1f12e68026fcc63ee782c63c1f213520e7a016ff836fa41f 20a3e13934101f12e6a0c124261e4fe6a41027005531214f3424bd0000352426ede63" 00dd24bd0000270edca63406cc00b7bd00003262c6ff2644cc00ff3406dcd23406ec64bd00003264 9ed26f8bece4bd0000532728ece4bd00002621dcd2bd0000d7b8270edca63406cc00a7bd00003262 c6ff26089ebc30019fbc20a73404dca63406ec63bd00003262ec63ddacbd0000dd24bd0000e6e027 037e000032"oth),0,407(both),0,392(both),0,363(both), 0,356(both),0,347(both),0,275(both),0,198(both) Object 5f2002c6ff32e8d81f413414dcb03406dcd03406ccb128ddb0ddd0bd00003506ddd03506ddb0dca6 bd0000dd681f016f1fec613406dc68bd00003262dca6bd00003406dca63406ec62bd00003262"065d39340610ae66be000030890000 8d45be00003088283089000010ae688d36be000030890000e684c880e784bd0000ece4271fec6834 06ec683406ec683406ec66bd00003266cc04503406ec62bd00003262326239e6a02704e78020f839 34101f01300610ae6431266fe2e684c122270ce6a0c1222708e180250423e"P 185(both),81(both) Import FIX_RANGE 29(both) Import OPENUP_4P 52(both) Import _POINTEROFP 194(both) Import CLOSEUP 201(both) Import _PRINTSCREEN 204(both) Reloc 0,320(both),0,247(both),0,164(both),0,107(both) Object 8e000020038effffdc26ddb2dc28ddb42008!f4fc13e2601 4c16003ec12b2723c12d271f4fbd00002619e6a4270c31214f3424bd0000352426f04fc13e260286 022017e6a4270c31214f3424bd0000352426f04fc13e260286033510a7e227046f3f20021f123504 1d396e756c00736f68007374780065747800656f7400656e710061636b0062656c00627300687400:64394f7574206f66206d656d6f72793a200041626f727465643a2000 ort CLOSEUP 141(both) Import _POINTEROFP 150(both) Import _PRINTSCREEN 155(both) Reloc 0,113(both),0,53(both) Object dcac3406dcbe83000127054fe69f00b03406cc0000bd0000ede4dcb2dd241093282606ccffffbd00"cc00 003406dcae93288300043406cc000fbd0000108300042307d328c3000720024f5f3406dca83406ec 66bd00003262aee4102700af34106f829e2830043410cc0000edf4ec623406ec6abd00003262270d dca63406ec64bd00003262c6ff263fae62e6802704c12226f85d2723ec6b3406ec64c30006bd0348 326227e20026ae4e6e01d3590 34301f0110ae66c6ffe7e26da42737e6a02604a6848122272dc13f2604e684201bc12a26176da427 1d34201f10bd034832622612e680c122270620ede18027046fe4200220c935041d35b02573256e25 73256e0025732020202020202020202020202573256e00 c260bbd00003406c617d7bc35"8e000020038effff3410bd00009eb0a6846de427026f 843412ccffff3406cc0000bd000032621f0235126de42702a7843420dcb2dd241093262606cc0001 bd0000dd2493282764dcd23406dc24bd00003262ec622707dcd2bd00e22005dcd2bd00003406ece4 3406dcd23406ec66bd000032643262dca63406ec62bd000#Errors 0 $0522 ; Length Export _REPRINTROW=$027f Export _COMPRINT=$0000 Export _CLRCMD=$01d0 Import PRINTF_ 201(both),109(both),26(both) Export _CLRMSG=$01d5 Import COPYSTR_ 138(both) Export _SCREENSTART=$00a2 Export _SCRNINSERT=$0182 Export _SCRNDELETE=#ICE=$0075 Export DEVNAME=$00dd Import DISK__ 236(both) Export SKIP_PREFIX_=$00c7 Import SKP_ALPHA 227(both),123(both),69(both) Reloc 0,222(both),0,132(both),0,118(both),0,78(both),0,64(both) Object 6fe2bd0000c1222706c12727022005e7e4bd0000dcc6ede3bd000027#3(both),0,462(both),0,452(both),0,423(both), 0,408(both),0,371(both),0,357(both),0,328(both),0,306(both),0,281(both), 0,234(both),0,213(both),0,198(both),0,193(both),0,182(both),0,179(both), 0,176(both),0,171(both),0,143(both),0,102(both),0,92(both),0,62#02822016cc0001bd04b9d6bb c117270a0cbbdc24ddb6dcacddaa39dc28bd049fddbe393406bd02823506c3000110a3622ff1394f d6bb3406cc00013406ec62bd02cc3262ece4d0bb82003406dcace3e42d0d1093be2e08ece4bd04df bd02ece66386503d1f0130890000b3000086205a2b04a78220f9326439a6631e897# Errors 0 $01a4 ; Length Export _SGETLINE=$0000 Import FLP_CURSORS 44(both),37(both) Import PRINTF_ 237(both) Import _CSTART 278(both) Import TPUTCURS_ 174(both),159(both) Import EOF_ 191(both) Import KYINDX_ 378(both) Export LINE_INPUT=$0031 Import LIFTC# $01a9 Import COPY_ 1030(both) Export FLP_CURSORS=$0420 Export _DELETELINE=$0449 Export _DELETEPTOP1=$0468 Import TPUTCURS_ 714(both),116(both) Import KYPTR2_ 244(both) Import KYPTR1_ 247(both) Export _UPDATESCREEN=$00fb Export CAR_RTN=$0223 Export LIFTCU# 1dc120260c6d6226086f9f00 c6bd00005f270be16227f22705bd000026e1ece4326339bd00c7dd68bd00003406dc683406cc006a bd000032623262270e9e68e68427063001c12e26f69f68dc68396469736b00686f73740000bd00c7 dd68bd00003406dc683406cc006abd00003262326227349e685fa6842709812e270# (both), 0,59(both),0,48(both),0,37(both),0,23(both),0,14(both),0,3(both) Object 3406bd01d0cc00013406cc0018bd02cc3262ece43406cc0021bd00003262326239255300bd01d5cc 00013406cc0019bd02cc326239cc001e3406cc0043bd00593262393c2752455455524e27206f7220 436f6d6d616e# e00003406be00 00e6890000c47fe789000035065a86503deb638900830001fd00003934061093262d3f1093282e3a 108e0335109326271a108e03861093282711dcd23406ec62bd00003262109ed26fa850be00003089 0000e6a02704e78020f81f10830000fd00003262393c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d#URTO_RPCP1 32(both) Import PUTCHAR_ 179(both),152(both) Export _GETLINE=$0005 Import TBREAK_ 202(both) Import SCREEN_ 308(both),294(both) Import TGETCURS_ 286(both),213(both),166(both),155(both),125(both) Import FGETCHAR_ 69(both) Reloc 0,383(both),0,346#RTO_RPCP1=$02cc Import LINE_INPUT 123(both) Import PUTBKY_ 149(both) Import _FETCHTEXT 785(both) Import SCREEN_ 1088(both),1071(both),1042(both),1015(both),1005(both),813(both), 800(both),729(both),723(both),692(both) Export _HOLDIT=$0035 Import ZNDCLR_ 55c300120f34f 3406c10e2306cc00097e0000ece43406ec663406dc68bd000032643506ae626f8b20036ff8023934 161f01e684c128260ae6802706c12926f8afe43596bd00c7dd68bd00003406dc683406cc0000bd00 003262326239 ) Object 6fe2bd0000c1222706c12727022005e7e4bd0000dcc6ede3bd000027#643e003406bd00efec643406cc0019bd02cc3262ece4bd00008618c601bd00006f9f 00d2bd00006d9f00d22714dca43406dcd2bd00003262bd00efcc000ebd0000bd00004fe69f00d232 6239c60bd7bbc601d7babd02670fb9bd00d2bd01d0bd01d5cc00463406cc0019bd02cc3262cc00cb 7e00003c454449543e00dc2#3d 3d3d3d3d3d3d3d3d3d3d3d424547494e4e494e47204f462046494c453d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e003c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d454e44204f462046494c453d3d3d3d3d3d3d3d3d3d3d3d3d3d 3d3d3d3d#(both),0,255(both),0,234(both),0,80(both),0,75(both), 0,6(both),0,1(both) Object cc00352003cc003134060db9260acc00013406cc001820074fd6ba3406d6bbbd00003262bd0000ad f13406bd0000ece13996b920014f6f9f00d25f3406e6e45c2775dcc0bd00005d27f8bd0179e761bd 01532663e66#152(both) Export SET_EOF_LINE=$0267 Export CUR_UP=$01db Export CUR_DN=$021d Import CURPOS_ 1084(both),816(both),796(both),745(both),719(both),695(both) Export SETCURTORPCP1=$02c5 Export _INSERTTEXTM=$050d Import _INSERTTEXT 1294(both) Export _MSGREADY=$0f21396fe258250e548e016ce18027066d8426f820026ae4 e6e01d390102030a0b0c0d0f1011121300b600006fe28e019710a38427066ce46d8126f56d842704 c60febe4326139637f9106963010ff61ff00000000 6044cbd0000e661bd00002086dcc01093ce2716bd0000260de661c10327 07bd000026022004c602d7#4bd049fddacdc24ddb6dcacddaacc00173406cc0001bd026f32623934 011a10fc0000fd00003581dc241093b6260139dcac93aa3406bd000034062a02ec62108300172d05 bd00d2205aec622f2fc30001ed62ece43406cc00173406ec66bd03d73264cc0017e3e4c300013406 cc00173406ec62bd026f32623262202727#3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e008300013406e665e06186503d3406ec62e3 6886503dc300003406e66586503dc300003406ec643406ec643406ec64bd000032643268395a8650 3dc300001f01864fc620e7864a2afb39d6bbd6bb5a86503d1f01d6ba3a3089ffffe684c880e7840d b9260dbe00003089000#1c10e26026fe42759e661c1072d06c1092e0220026fe4c1062f40c109273cc17f272d c1082729bd0000c1502620e661c1202d0c6de42608d6b9c10326026ae4e661bd0000bd00004abd00 00209a200bbd0000c10126044cbd0000e661bd00002086dcc01093ce2716bd0000260de661c10327 07bd000026022004c602d7#024 Import _MESSAGE 1310(both) Export _NUMBEROFP=$049f Import ___NEG 266(both) Export _OFFSETALL=$04b9 Export _OFFSETBYP=$04df Export _PAUSE=$0035 Export _PURGE=$00ef Export _PRINTSCREEN=$00d2 Import CLOSEP_BYTESP1 1169(both) Export _POINTEROFP=$04d9 Rel#Errors 0 $002f ; Length Import _PRINTSCREEN 46(both) Import FIX_RANGE 14(both) Import _SYNTAXCHK 11(both) Import ZLOSTR_ 6(both) Export EC_LOWER=$0005 Import ZUPSTR_ 1(both) Export EC_UPPER=$0000 Object cc00002003cc00003406bd0000bd00009eb2e6805a5aa6856f8#2dcc0017a3e43406ec623406ec623406cc0001bd03d732 643262ece43406cc0001bd026f3262dc24ddb6dcacddaa3264394fd6bb3406c1012711ccffff3406 ec623406cc0002bd03d73264c601d7b9c601d7ba35067e040d4fd6bb108300172718c300013406cc ffff3406cc00173406ec64bd03d732643262cc00177e0#0e684c880e7843934061093262712109328270dece43406ec62bd04683262 2003cc00003262391093262606eb9f0026890010a3622e233406ec641093282705ebf8048900a3e4 3406ece43406ec64bd00003262350632622003cc0000393406108e00009e26ace42c093121e6843a 9c282df310afe435863406bd04c8dd#32bd00000db9270497bbd7bae661c10e2610dca43406cc011abd000032 62c60de761e6e427055c27022003bd011de6e42603532009c1ff2604c60120015fe7e4dcd2bd0000 3586257300bd00003402c6503dc300003406a6624ac6503d1f0130890000109ed2e680c47fe7a0ac e426f63263e6a2c1202605109cd224f56#oc 0,1304(both),0,1219(both),0,1212(both),0,1116(both),0,771(both),0,762(both), 0,681(both),0,678(both),0,652(both),0,626(both),0,618(both),0,596(both), 0,588(both),0,578(both),0,545(both),0,542(both),0,539(both),0,520(both), 0,512(both),0,502(both),0,47053416ec62adf8043516a7855c3a9c b42fe732627e0000 e6e01d390102030a0b0c0d0f1011121300b600006fe28e019710a38427066ce46d8126f56d842704 c60febe4326139637f9106963010ff61ff00000000 6044cbd0000e661bd00002086dcc01093ce2716bd0000260de661c10327 07bd000026022004c602d7#282cc00182003cc00197e040ddc24109326 2622d6bbc101271accffff3406cc00173406cc0002bd03d732640abbcc0017bd02822016ccffffbd 04b9d6bbc101270a0abbdc24ddb6dcacddaa7e00efbd02277e00efc601d7badc241093282622d6bb c117271acc00013406cc00163406cc0001bd03d732640cbbcc0001bdacece1bd04dfdd2439d3ac2c05cc000020071093be2f02dcbe 399e261f0220041f029e24108c00002f0d9c282707e6843a313f26f5201427129c26270e301f1f10 e08482001f01312126ee1f1039bd0000ede3270cccffffbd04b9cc0010bd0000ece139 f01d6ba3a3089ffffe684c880e7840d b9260dbe00003089000Errors 0 $002c ; Length Import COPYSTR_ 29(both) Import DIRREADF_ 13(both) Export DREADF_=$0000 Object 340632e8d81f403406ece82abd0000108300012e14ece82e3406ec62bd00003262aee82e6f881c4f 5f32e82c39 comm.b09 )omemory.b09$Errors 0 $003d ; Length Import _BMESSAGE 30(both) Import _UPDATESCREEN 12(both) Import TBREAK_ 22(both) Export EC_LIST=$0000 Import _MESSAGE 55(both) Import _NUMBEROFP 3(both) Import _OFFSETALL 35(both) Object dcb2bd0000ddacdcb2dd24bd0000dc241093b42712bd$Errors 0 $05be ; Length Import LENGTH_ 1363(both) Export _COMMAND_NUM=$0000 Import _CHRGOT 78(both),1(both) Import _CHRGET 54(both),45(both) Import _SYNTAXCHK 1199(both) Import COPYSTR_ 1356(both) Import TABLELOO_ 71(both) Import PUTNL_ 1407(both) Import$$010b Import DECIMAL_ 506(both) Export FETCH_LINE=$0000 Import _MESSAGE 242(both),197(both) Import ISALPHA_ 460(both) Import ISDIGIT_ 471(both) Import _NUMBEROFP 406(both),130(both) Import _OFFSETBYP 372(both),357(both),256(both),165(both),91(both),62(bo7c8bd00002704c601200dd6c8bd00002704c6032002c6 02d7c94fd6c839dcc6dd68bd0000270e3406d3c6bd01c3dc68bd00003262390dc82608390dc82703 392006cc0001bd0000 c1 2a260bbd01bedc26ddb2dc282054c17c260bbd01bedc28ddb2dc262045bd00002754dc24ddb2d6c8 c12c2610bd01beece4dd24bd$ 9c101 26076c61bd000020f320056c61bd0000e66127114f3406ec643406cc0055bd00003264e7e4bd0000 e6e4326439200020007072494e54007072494e540070555400705554006348414e4745002f005c00 64454c4554450067455400694e505554006543484f006d4f5645007550504552006c4f5745520023 00727S00002706cc0003bd0000dcbcbd000020e210 9328260fdcbe8300013406cc000fbd000032625f1d39 $ SCREEN_ 1387(both) Import _HOLDIT 1439(both) Export EC_HELP=$04ae Import ZNDCLR_ 1222(both) Import CURPOS_ 1383(both) Import SUICIDE_ 1445(both) Import _PAUSE 1427(both) Import _PRINTSCREEN 1442(both) Reloc 0,1333(both),0,1326(both),0,1313(both),0,1289($ th) Import ___MUL 162(both) Import SKP_NUMS 492(both) Import _PARSESRCH 202(both) Export FIX_RANGE=$019e Reloc 0,501(both),0,440(both),0,433(both),0,366(both),0,351(both),0,332(both), 0,325(both),0,310(both),0,299(both),0,284(both),0,277(both),0,156(both$066696c652066726f6d206469736b00 4368616e6765206e616d65206f662066696c65206f6e206469736b00496e697469616c697a652064 69736b005472616e736665722066696c650053686f772f72656e616d65206461746520616e642074 696d650053686f772074696d652c2072656e616d65206461746520616e64$56e0065786974007365745550006d6f6e49544f520074614c4b006469524543544f52590063 6154414c4f47006e414d450064656641554c5400736372415443480072454e414d45006d6f754e54 00636f505900646154450074694d45007461625345540068454c5000657845435554450066524545 0040007459504500$6d616e642d737472696e6700746578740000006c696e650072616e6765000000bd00 00cc00693406cc01273406cc03ab3406cc00003406bd00009ed2c6204fe7804a26fb9ed2308814cc 5f20108e000ded81313f26faaef8026d8427149ed2c65be7803410ecf804bd05b23262c65de784dc d2c3000a3406ec68bd05b23$both),0,1271(both),0,1212(both), 0,1207(both),0,1202(both),0,1073(both),0,1071(both),0,1069(both),0,1067(both), 0,1065(both),0,1063(both),0,1061(both),0,1059(both),0,1057(both),0,1055(both), 0,1053(both),0,1051(both),0,1049(both),0,1047(both),0,1045(both$), 0,119(both),0,110(both),0,99(both),0,81(both),0,70(both),0,52(both), 0,36(both) Object d6c8c12f270cc15c2708d6c9c10327022017dc283406dc26eb9f002689003406cc0001bd00893264 5f26022050d6c8c12b2619bd01bedc283406cc0001bd00003406cc0001bd008932642031c12d2619 bd$2074696d650053686f77 2f7365742074616273746f70730053686f7720636f6d6d616e642073756d6d617279004d6163726f 206b6579626f61726420656e7472790046726565206d656d6f727920617661696c61626c65005365 6e6420636f6d6d616e6420746f206469736b004578616d696e657320612066696c65005$7072494e5400005361766573207465787400416c746572732074657874005365 61726368657320666f72206d6174636800536561726368657320666f72206e6f206d617463680050 757267652074657874004c6f61642074657874004175746f6d61746963207465787420656e747279 004475706c69636174652074657$26210af66ae6210ae026da427249ed2308814ece4bd05a72704c65be7 8034101f20bd05b23262ece4bd05a72704c65de7849ed2c63ae7882e30882f3410ec66bd00003262 dcd2bd00009ed2308bcc2e00ed84ae646d8026fcaf64be000030890000109ed2e6a4c880e7a4e6a0 2704e78020f8bd0000ae623004af62aee4$),0,1043(both), 0,1041(both),0,1039(both),0,1037(both),0,1035(both),0,1033(both),0,1031(both), 0,1029(both),0,1027(both),0,1025(both),0,1023(both),0,1021(both),0,1019(both), 0,1017(both),0,1015(both),0,1013(both),0,1011(both),0,1009(both),0,1007(both), 0$01bedc263406ccffffbd00003406ccffffbd008932642014c12e2605bd01be200bc1242607bd01 bedc28dd243406dc24bd0000ddacece1399e243416ec66dd24d6c9c1032612ece43406bd01e78300 01bd0000bd0000205dd6c8c12f2708c15c2704dc24204f34049ec6e601e1e42608cc0008bd000020 2bbd0000dc24b$072696e74 7320666f726d6174746564207465787400000004a6043304a6043c04a6049a04a6049a04a6049f04 a1043304a1049f04a6044704a6044704a6049f04a6049f04ac049f04ac049f04ac043304ac049f04 ac049f04ac049f04ac045304ac045304ac043304ac046a04ac043304ac045304ac046a04ac045304 a$874005472616e736665722074657874004d616b65207570706572 2063617365004d616b65206c6f77657220636173650053686f77206c696e65206e756d6265720052 756e20656469746f72004c6561766520656469746f72202620736176652074657874005365742041 434941206368697000456e746572204d4c206do3001afe48c00142605bd0000260a6df8041026ff2abd00 00bd00007e000010830016270410830018391f02ae62e6a02704e78020f839 6bd00009ed2c6204fe7804a26fb9ed2308814cc 5f20108e000ded81313f26faaef8026d8427149ed2c65be7803410ecf804bd05b23262c65de784dc d2c3000a3406ec68bd05b23$,1005(both),0,1003(both),0,1001(both),0,999(both),0,997(both),0,995(both), 0,993(both),0,991(both),0,989(both),0,987(both),0,985(both),0,983(both), 0,981(both),0,979(both),0,977(both),0,975(both),0,973(both),0,971(both), 0,969(both),0,967(both),0,965(bot$d0000350434042706c12f2708200ac15c27022604c6ff2012dc2410a369260fcc00 06bd0000ec63dd245f1d326539ec61bd0000dd2420c8dd24326439dc243406cc0001ddbcbd01b0c1 2a260bbd01bedc26ddb2dc282054c17c260bbd01bedc28ddb2dc262045bd00002754dc24ddb2d6c8 c12c2610bd01beece4dd24bd$ c047604ac047604ac048404ac049f04ac043304ac049f04ac048b04ac043304a6043346696c654e 616d65002f737263682f7265706c0064657374696e6174696f6e005b46696c654e616d655d20746f 2046696c654e616d65006465766963652d6e616d65005b646174655d205b74696d655d007b746162 737d00636f6d$ 6f6e69746f7200456e746572202750415353544852 4f55474827206d6f6465004f6e6520636f6c756d6e206469726563746f72790054776f20636f6c75 6d6e206469726563746f72792028736f72746564290052656e616d65207465787400526564656669 6e6520617373756d6564206465766963650052656d6f76652#Errors 0 $00f5 ; Length Import _BMESSAGE 170(both) Import _CHRGOT 25(both),3(both) Import _CHRGET 54(both),42(both),18(both) Import COPY_ 183(both) Import TABLELOO_ 239(both),135(both),81(both) Export SCANFNAME=$0000 Export STRIPDISK=$003f Export DEF_DEV$h),0,963(both),0,961(both),0,959(both), 0,957(both),0,955(both),0,953(both),0,951(both),0,949(both),0,947(both), 0,945(both),0,943(both),0,941(both),0,939(both),0,68(both) Object bd0000dcc63406cc00003406d6c826046ce42039c123271bc12f2717c15c2713c140270fd6c$0000273edc242026dcb2dd24d6c8c15e260bbd01beccffecbd000020 11c126260bbd01becc0014bd00002002dcb2ddb41093b22404c6ff2002c6011dddbcc6ff20015f34 04ec61dd24bd0000ddac35141d39dcb41093b2240a3406dcb2ddb43506ddb239bd01c5c1202605bd 01be20f75d39dcc6c30001ddc6e69f00c6d%;start of screen address. export set_msgp = $b653 ;sets system error to strint .p. export setup = $ad57 export skp_alpha = $e6c0 ;count number of alpha characters. export skp_nums = $e6d5 ;count number of numbers. export std%Errors 0 $007f ; Length Import KEYBOARD__ 113(both),62(both) Import PREFIXST_ 43(both) Import COPYSTR_ 52(both) Import _SCREENSTART 91(both) Import _COMMANDER 94(both) Import _TITLE 30(both) Import FPUTCHAR_ 79(both) Import READ__ 108(both) Import WRITE_%Errors 0 $0281 ; Length Import _BMESSAGE 599(both),138(both),124(both),15(both) Import _REPRINTROW 72(both) Import LENGTH_ 570(both),561(both) Import _CLRCMD 37(both) Import _CHRGET 265(both),254(both),231(both),110(both) Import _SYNTAXCHK 149(both) Impo%0003264260aaee4e6802749afe420e5bd00002640ec6427098300012704ed642027dcd234 06dca63406ec64bd01b73264ede42714830001ede4ae623001af62ec648300012602ede4ece42708 35103001341020a0ec6227169ed26f8900ffdc24bd0000ccffffbd0000dcd2bd0000ec62326639ae 6232e9ff601f423436% Errors 0 $011a ; Length Import _BMESSAGE 14(both) Import LENGTH_ 127(both) Import _REPRINTROW 207(both) Import _SYNTAXCHK 1(both) Import _CLRCMD 40(both) Import _SCRNINSERT 49(both) Import PRINTF_ 67(both) Import _SGETLINE 78(both) Import COPYSTR_ 181(bo% in_ = $6b export talk2me = $c0dd export terminal__ = $b13b ;'terminal'. export time_ = $0160 ;clock hh/mm/ss/tt. export to_disk1_ = $036a ;another disk timeout constant. export to_disk_ = $0368 ;disk device ti% _ 57(both) Import KBENABLE_ Export OPEN_KEY=$006b Import OPENF_ 116(both),65(both) Import CLOSEF_ 105(both),86(both) Export CLOSE_KEY=$0066 Reloc 0,40(both),0,27(both) Object 9e209f269f248602c601ed81ed849f28cc0001ddbefc04003406bd006bbd0000f60221c1012631% rt COPYSTR_ 616(both),517(both),456(both) Import PREFIXST_ 629(both),541(both) Import _DELETELINE 421(both),52(both) Import _UPDATESCREEN 20(both) Import _FETCHNUM 97(both) Import _FETCHTEXT 304(both) Import _GETLINE 40(both) Import TBREAK_ 340(both),156% ec643406ec64bd00003262aee4d6c46d8527189ea86f1f6d8427106d8026fc c6fe301fe18226040ac420f8ae64e680273cc1a62636301f341030013410ec623406ec62bd000032 623262d6c4ae623ae68434146f84ec633406ec67bd000032623514e7844fd6c4e3e11f0120c0ec64 bd00003406ece900acbd0000e3e90%th) Import _SCRNDELETE 270(both) Import _DOCHAR 237(both) Import _UPDATESCREEN 37(both) Import STREQ_ 104(both) Export EC_INPUT=$0000 Import CURPOS_ 70(both),62(both) Import _INSERTTEXTM 202(both) Import SUICIDE_ 253(both) Import TGETCURS_ 73(both) Impormeout constant. export write__ = $b191 ;'write'. export zndclr_ = $d9a9 ;clear screen export zndreturn_ = $d872 ;carraige return 0 ;count number of alpha characters. export skp_nums = $e6d5 ;count number of numbers. export stdcc 007dbd0000dca43406ec62bd00003262cc00003406cc0000bd000032623406cc000e3406ec62bd00 0032623506bd00003262bd0000bd0000d632c10124f7dcc07e0000cc00003406cc0000bd00003262 ddc0ddce39672000 30(both) Import FPUTCHAR_ 79(both) Import READ__ 108(both) Import WRITE_%(both) Export EC_CHANGE=$0000 Import _INSERTTEXTM 432(both),69(both) Import _MESSAGE 207(both) Import _MATCHP1TOP 323(both) Import _OFFSETALL 427(both),58(both) Import _OFFSETBYP 180(both) Import FIX_RANGE 88(both) Import _PARSESRCH 141(both) Import _POI0ac8300fed0c48200e3e410a3e900ac2309bd0000cc0011bd00 00ec62dbc489003406ec643406ec62bd000032623262ec623406ec68bd00003262ece4e36232e900 a839 2602ede4ece42708 35103001341020a0ec6227169ed26f8900ffdc24bd0000ccffffbd0000dcd2bd0000ec62326639ae 6232e9ff601f423436%t _NUMBEROFP 19(both) Import _OFFSETALL 267(both),34(both) Reloc 0,256(both),0,248(both),0,96(both) Object bd0000dcb21093b42706cc0004bd0000dd24bd0000ddacdc241093282606ccffffbd0000bd0000bd 00006f9f00a6327ebd0000c603d7b9d6bb5a86503dfd0000dca6bd0000fc0000bd%Errors 0 $01ce ; Length Import LENGTH_ 169(both),91(both) Import _CSTART 6(both) Import _SCANNER 23(both) Import _CHRGOT 58(both) Import _CHRGET 105(both),76(both),67(both) Export _SEARCHLINE=$01a3 Import _UPDATESCREEN 45(both) Import _FETCHTEXT 428(both%fe27022005cc0005201a86aaa780afe4aee4e780 afe4209e6ff4dca8bd0000260acc0008bd0000c6ff20015f1d3263390fc43406cc00003406ae66e6 802711c1fe260d0dc42609af66ae62e61fbd0000102700bd6df806102700b6ae66e680af666a61e7 e4102700a86f61c1de260bec6210a36827e510260097c1a4260%NTEROFP 192(both) Import _PRINTSCREEN 593(both),197(both) Reloc 0,368(both),0,163(both),0,146(both) Object 0dc82649dcb21093b42706cc0004bd0000dd24bd0000dc24109326232f109328242a0cb9bd0000bd 00004d2c1ac1032716dc24bd0000ccffffbd0000ddb6dcacddaadcd2bd0000bd00Errors 0 $001d ; Length Import SUICIDE_ 28(both) Import RENAMEF_ 25(both) Import STRIPDISK 18(both) Import _BMESSAGE 12(both) Import PARSE_TO 1(both) Export EC_RENAME=$0000 Object bd00007d04502606cc0001bd0000cc0450bd00003406dca6bd00007e0000 %0000d7babd0000 ede4c1031027009fd6325a102600a0cc01193406cc0400bd000032621026008f6f9f00a66ae4264f c60de761dcd2bd0000c1502d429ed2308be682109ed231a8503420ace12d035d202b109ed231a827 3420ace1271fc120261b30013410dca63406ec62bd000032623510e682c12027fa30016f8426c%) Export EC_SEARCH=$0000 Import SUICIDE_ 52(both) Import _MESSAGE 177(both) Export _MATCHP1TOP=$00bc Import ISDELIM_ 289(both),218(both) Import _NUMBEROFP 40(both) Export _PARSESRCH=$0039 Reloc 0,441(both),0,365(both) Object dcc6830001bd0000dc243406dcb43%96df80227d81026008ac1fe2612e6 f80227cbe7e43410bd0000351010270074e6e4c1aa2658e680af66e7e4c1ae271610ae62e6a02708 e1e426040cc420f4313f10af6220356df806260eae626d8027040cc420f8c6ff201fec683406ec68 3406ec66bd00be3264260eae626d8427083001af620cc420e132643916ff60%000ab939cc0000 3406cc00013406bd0000d6c9c1032607bd0000ede4200bd6c8c12a2605bd00006f61d6c8c12f2706 cc0007bd00009ec6e601c12f2606cc0008bd0000bd00002642bd00d6bd0000dcb2dd24bd0000261d ece4bd010ee362ed62dc241093b4240dcc0001bd0000dd241093b423dedcacbd0000dd24bd000Errors 0 $0015 ; Length Import SUICIDE_ 20(both) Import _SCREENSTART 17(both) Import OPEN_KEY 10(both) Import MONITOR 7(both) Import CLOSE_KEY 4(both) Import _SYNTAXCHK 1(both) Export EC_MONITOR=$0000 Object bd0000bd0000bd0000bd0000c601d732bd00007e0000 2dc d2bd00003401bd0000dccc830001ddcc35012623dc24ddb6dcacddaae661c10d1027ff44bd0000e6 61c10a270d2005bd01070fb97e0000bd01070fb9326239cc0001bd0000bd0000dc24ddb6dcacddaa 392e00 bd0000bd0000bd 00006f9f00a6327ebd0000c603d7b9d6bb5a86503dfd0000dca6bd0000fc0000bd%406dcb23406dcbcbd0000326434042704dc24ed61ec61dd24bd 0000ddacbd00006de02603bd0000326239bd00003404dca83406bd0000270ce1622604bd00005f27 02200fece41093a82607bd0000d3a8ede45f2740c1252634bd0000c15e270ec124270ac12e2706c1 7e27022002ca80c12a2619aee49ca82708e682c1c1ae2605e6f802270d ae62e1802607af620cc416ff4ae6611d3264396fe29ea634106f82bd0000dca63406dca83406ec64 bd00bc3264e762260835106d80341026e5e6621d326339 6ae62e61fbd0000102700bd6df806102700b6ae66e680af666a61e7 e4102700a86f61c1de260bec6210a36827e510260097c1a4260%0ec 623406cc000ebd00003262326439dca63406d6c82724c12f2720c125260fbd0000c1262706c17e27 022002ca80e7f4351030013410bd000020d86ff4c12f2603bd00003262393406cc00003406dcd234 06dc241093261027009010932810270089ece43406dc24bd000032629ed26f1fdcd23406dca83406 ec64bd0$Errors 0 $0210 ; Length Import _BMESSAGE 527(both) Export _SCANNER=$0089 Export _CHRGET=$01be Import _SEARCHLINE 207(both) Export _CHRGOT=$01b0 Export _CSTART=$01c3 Export _SYNTAXCHK=$01ff Export MUST_MORE=$0204 Export _FETCHNUM=$01e7 Export _FETCHLINES=&C3{ H$ &EXPORT SPAWN_ = $B000 ;SPAWN A PROCESS TO ROUTINE STARTING AT .P. EXPORT SUICIDE_ = $B003 ;HAS SOMETHING TO DO WITH ABOVE. EXPORT BANKSW = $B009 ;A SUB TO HERE PERFORMES A BANK JUMP; BNK,DEST. EXPORT BANKINIT_ = $B00C ;SETS .U TO $02FF& EXPORT COPYSTR_ = $B048 ;MOVE STRING [.P] TO LOC. [.P1]. EXPORT COPY_ = $B04B ;MOVE MEMORY FROM [.P] TO [.P1] OF LENGTH .P2. EXPORT PREFIXST_ = $B04E ;SQUEEZE STRING [.P] BEFORE STRING [.P1]. EXPORT SUFFIXST_ = $B051 ;TAG STRING [.P] TO'C3Nc & ORT DIRREADF_ = $B0A2 ;READ A DIRECTORY FROM .PI/OB TO [.P1] ^ ERROR #. EXPORT DIRCLOSEF_ = $B0A5 ;CLOSE DIRECTORY .PI/OB. EXPORT SYSIOINI_ = $B0A8 ;SETUP THE SYSTEM. EXPORT INITSTD_ = $B0AB ;INITIALIZE STANDARD I/O DEVICES (IE. TERMINAL). EX& _ = $B0DB ;IS FILE .PI/OB AT END OF RECORD ^ T/F. EXPORT EOF_ = $B0DE ;IS FILE .PI/OB AT END OF FILE ^ T/F. EXPORT ERRORF_ = $B0E1 ;CONDITION OF FILE .PI/OB ^ ERROR NUMBER. EXPORT ERRORMSG_ = $B0E4 ;ERROR MESSAGE ^ POINTER TO ERRO& AND CLEARS BANK COPY. EXPORT STOI_ = $B00F ;CONVERT STRING [.P] ^ INTEGER IN .D. EXPORT ITOS_ = $B012 ;CONVERT INTEGER .P1 TO STRING AT [.P]. EXPORT ITOHS_ = $B015 ;CONVERT INTEGER .P1 TO HEX STRING AT [.P]. EXPORT HEX_ = $B018& END OF STRING [.P1]. EXPORT DECIMAL_ = $B054 ;ASCII STRING [.P] OF LENGTH .P1 ^ INTEGER VALUE. EXPORT TABLELOO_ = $B057 ;SEARCH TABLE [.P] WITH STRING [.P1] OF LENGTH .P2 ; ^ # OF MATCH OR 0 IF NO MATCH. EXPORT ___MU& export line_buffer_ = $0400 export asignfcb = $d412 ;allocate an i/o block. export chddevcd = $e47d ;parse '.' separator. export chkdevnm = $e373 ;parse device name. export chkdskdr = $e444 ;parse disk drive. export chkieed&PORT OPENF_ = $B0AE ;OPEN A FILENAME [.P] WITH MODE [.P1] ^ I/OB. EXPORT CLOSEF_ = $B0B1 ;CLOSE FILE .PI/OB. EXPORT PRINTF_ = $B0B7 ;PRINT STRING [.P] WITH .P?S TO TERMINAL. EXPORT PUTREC_ = $B0BA ;PUT STRING [.P] OF LENGTH .P1 TO TE&R STRING. EXPORT MOUNT_ = $B0E7 ;MOUNT DISK ACCORDING TO STRING [.P]. EXPORT SCRATCHF_ = $B0EA ;SCRATCH FILE [.P]. EXPORT RENAMEF_ = $B0ED ;RENAME FILE [.P] TO NAME [.P1]. EXPORT REQUEST_ = $B0F0 ;SIMULATED MENU REQUEST WITH .P?S. EXPORT& ;CONVERT .B ASCII DIGIT ^ INTEGER IN .B. EXPORT BTOHS_ = $B01B ;CONVERT BINARY # [.P] OF LENGTH .P1 TO [.P2]. EXPORT HSTOB_ = $B01E ;MAKE HEX STRING [.P] TO BINARY AT [.P1] ^ # BYTES. EXPORT ISALPHA_ = $B021 ;IS .B AN ASCII LETTER ^ T/&L = $B060 ;.P * .P1 AND UNSTUFFS .P1 ^ INTEGER VALUE. EXPORT ___NEG = $B063 ;CHANGE .P TO TWO'S COMPLIMENT ^ -INTERGER. EXPORT ___DIV = $B066 ;.P1 / .P AND UNSTUFFS .P1 ^ QUOTIENT VALUE. EXPORT ___MOD = $B069 ;.P1 / .P AND UNSTUFF&v = $e3d1 ;parse device number. export curpos_ = $0122 ;cursor postion. export d0prefix__ = $e738 ;'0:' export d1prefix__ = $e73b ;'1:' export disk__ = $b124 ;'disk'. export ds_read = $bfef ;read a disk status me&RMINAL. EXPORT PUTCHAR_ = $B0BD ;PRINT CHARACTER .B TO TERMINAL. EXPORT PUTNL_ = $B0C0 ;SKIP TO NEW LINE ON TERMINAL. EXPORT GETREC_ = $B0C3 ;GET STRING TO [.P] OF LENGTH .P1 ^ ACTUAL #. EXPORT GETCHAR_ = $B0C6 ;GET CHARACTER FROM TERM& SETDATE_ = $B0F3 ;SET THE DATE TO STRING [.P]. EXPORT GETDATE_ = $B0F6 ;DATE ^ POINTER TO DATE STRING. EXPORT SETTIME_ = $B0F9 ;SETS TIME TO [.P] (4 BYTES LONG). EXPORT GETTIME_ = $B0FC ;PUTS THE TIME TO [.P] (4 BYTES LONG). EXPORT KBENA&F. EXPORT ISDIGIT_ = $B024 ;IS .B AN ASCII DIGIT ^ T/F. EXPORT ISDELIM_ = $B027 ;IS .B A NON-ALPHANUMERIC CHARACTER ^ T/F. EXPORT ISHEX_ = $B02A ;IS .B AN ASCII HEX DIGIT ^ T/F. EXPORT ISUPPER_ = $B02D ;IS .B AN ASCII UPPERCASE LETTER ^&S .P1 ^ REMAINDER VALUE. EXPORT PASSTHRU_ = $B075 ;PASSTHRU MODE TO THE HOST. EXPORT TIOINIT_ = $B078 ;INITIALIZE LOCAL TERMINAL. EXPORT TPUTCHR_ = $B07B ;PUT A CHARACTER .B TO TERMINAL. EXPORT TGETCHR_ = $B07E ;GET A CHARACTER FROM TERMIN&ssage from .pi/od. export freefcb = $d483 export gioblk_ = $0011 export gsysblk_ = $13 ;global system block. export hex__ = $fcf9 ;'57'. export igetbyte = $befb ;get a byte from ieee. export ioerrbuf_ = $03&INAL ^ CHARACTER. EXPORT FPRINTF_ = $B0C9 ;PRINT STRING [.P1] WITH .P?S TO .PI/OB. EXPORT FPUTREC_ = $B0CC ;PUT STRING [.P1] OF LENGTH .P2 TO .PI/OB. EXPORT FPUTCHAR_ = $B0CF ;PUT CHARACTER .P1 TO .PI/OB. EXPORT FPUTNL_ = $B0D2 ;MOVE TO NBLE_ = $B0FF ;ENABLE THE KEYBOARD. EXPORT KBDISABL_ = $B102 ;DISABEL THE KEYBOARD. EXPORT DEVLIST_ = $B124 ;DEVICE NAME LIST. EXPORT SETUP_ = $AD48 ;SETUP ACIA CHIP. EXPORT MONITOR_ = $F020 ;MACHINE LANGUAGE MONITOR. WITH .P?S. EXPORT& T/F. EXPORT ISLOWER_ = $B030 ;IS .B AN ASCII LOWERCASE LETTER ^ T/F. EXPORT UPPER_ = $B033 ;FORCE .B TO UPPERCASE ^ CHARACTER. EXPORT LOWER_ = $B036 ;FORCE .B TO LOWERCASE ^ CHARACTER. EXPORT ZLOSTR_ = $B039 ;FORCE STRING TO LOWERCA&AL ^ CHARACTER. EXPORT TBREAK_ = $B081 ;CHECK FOR STOP KEY ^ T/F. EXPORT TGETCURS_ = $B084 ;GET CURSOR POSITION ^ .A = ROW, .B = COLUMN. EXPORT TPUTCURS_ = $B087 ;SET CURSOR POSITION TO ROW .A AND COLUMN .B. EXPORT TSETCHAR_ = $B08A ;SET KE&00 ;i/o error text goes here. export ioerrsta_ = $006a export isdelim = $ba14 ;(isdelim) check. see if on watlib. export keyboard__ = $b14b export kyindx_ = $012b export kyptr1_ = $012c ;start of input buffer pointer. e&EXT RECORD IN FILE .PI/OB. EXPORT FGETREC_ = $B0D5 ;GET RECORD FROM FILE .PI/OB TO [.P1] OF MAX ; LENGTH OF .P2 ^ ACTUAL # CHARS GOTTEN. EXPORT FGETCHAR_ = $B0D8 ;GET CHARACTER FROM FILE .PI/OB ^ CHARACTER. EXPORT EOR%ditions. export prefixst_ = $b80a ;(prefixst) export putbky_ = $ddad ;stuffs char .b to keyboard buffer. export put_name = $bcd0 ;puts a name to ieee file .pi/od export read__ = $b18c ;'read'. export screen_ = $8000 &SE. EXPORT ZUPSTR_ = $B03C ;FORCE STRING TO UPPERCASE. EXPORT STREQ_ = $B03F ;DOES STRING [.P] = STRING [.P1] ^ T/F. EXPORT EQUAL_ = $B042 ;DOES [.P] = [.P1] FOR LENGTH OF .P2 ^ T/F. EXPORT LENGTH_ = $B045 ;FOR STRING [.P] ^ LENGTH.&YBOARD BY .P, 1 = STANDARD, 2 = APL. EXPORT TABSET_ = $B08D ;SET TAB STOPS ACCORDING TO [.P] TABLE. EXPORT TABGET_ = $B090 ;CURRENT TAB STOPS ^ POINTER TO TABSTOP TABLE. EXPORT DIROPENF_ = $B09F ;OPEN FILE NAME [.P] FOR DIRECTORY ^ I/OB. EXP&xport kyptr2_ = $012e ;end of input buffer pointer. export kyputb_ = $dd82 ;returns a char from the keyboard buffer. export memend_ = $0022 export monitor = $f05c ;(monitor). export nosys_err = $b636 ;clear error con&Cbedcalc10iu2C'&watlib.exp&usr.exp (fp.exp(bedcalc10.cmd(macros(edit.labels %clmstart.b09%_c.b09 '3comm.asm( ctitle.asm 4dparse.asm4dir.asm_renam.asm_dc.asm5_dt.asm 5_mount.asm'%_i.b09%_srch.b09%_renam.b09%_mon.b09%utils.b09)message.b09)comm.b09 )omemory.b09'5_scrat.asm5_help.asm(_exec.asmtext.asmN7_tab.asm7_name.asm7_get.asm7_put.asm' $dir.b09$_list.b09$_help.b09$fname.b09*keycalc3.b09*dev.asm#text.b09#line.b09' _look.asm_def.asm_run.asm _s.asm_tal.asm_d.asm_f.asm_exit.asm' #_ul.b09+_dc.b09 +_dt.b09+_mount.b09+_scrat.b09"_tab.b09"_di.b09 "_exec.b09'9_mon.asm9_nul.asm9_em.asm 9_dul.asm9_#.asm_list.asmkeycalc3.asm:fname.asm'"_name.b09" _get.b09" _put.b09,_look.b09,_def.b09,_#.b09,_s.b09,_d.b09': dutil.asmfutil.asmmessage.asmmarry.asm ;dmemory.asmA_di.asm0join2.asm title.asm ',_f.b09,_nul.b09, _em.b09, _tal.b09, _run.b09,_exit.b09,dutil.b09,marry.b09'keys.asm>title1.asm >keys.b09> title.b09clmstart.asm?omemory.asm?_ul.asmwhat1.asm'+_c.asm#!what1.b09!calcr1.b09!count.b09! parse1.b09-sumfp.b09-round2.b09-printit1.b09'calcr1.asmcount.asm@parse1.asm sumfp.asm round2.asm printit1.asmAconvert.asm spread1.asm'-convert.b09-spread1.b09-con0.b09-con1.b09-con2.b09-rith1.b09 doint1.b09 ascii1.b09' con0.asm con1.asm con2.asm rith1.asmBdoint1.asm ascii1.asm scr2asc.asmCasc2char1.asm' scr2asc.b09 asc2char1.b09 futil.b09.dparse.b09.title1.b09!_i.asm.bedcalc10.modBbedcalc10.map Cspmon spmonlo spmon_instr0:eVEspmon_instr1:eSspmon_instr2:e@Htab'bedcalc10.expbedit10.cmdbedit10.mod2bedit10.exp 1bedit10.map_srch.asm2line.asm utils.asm#(export fload2_ = $a018 export fstore_ = $a01b export cnvif_ = $a02d export fadd_ = $a030 export fadd2_ = $a033 export fsub_ = $a036 export fsub2_ = $a039 export fmul_ = $a042 export fdiv_ = $a048 export cnvs2f_ = $a051 export cnvf2s_("bedcalc10" ; Version received from Joe on May 15, 1985 include "watlib.exp" ; Revised to put proper title on file. include "usr.exp" include "fp.exp" bank 0 "clmstart.b09" ; File taken from BEDIT9 "_c.b09" "_i.b09" (; macros for use with assembly. OPT nolist ; 6800 compatabilty macros. clf MACR OPT nolist ANDCC #%10111111 ENDM sef MACR OPT nolist ORCC #%01000000 ENDM clif MACR ( LDD \1 ENDC STD \0 ENDC ENDM ;conditional set two memory locations SEQ2 MACR OPT nolist IF EQ SET2 (\0),(\1) ENDIF ENDM ;conditional set two memor( IFNC .,\0. LEAS \0,s ENDC RTS ENDM ;conditional call. CEQ MACR OPT nolist IF EQ CALL (\0),(\1),(\2),(\3) ENDIF ENDM ;conditional call. CNE MACR = $a054 exp&usr.exp ( "_srch.b09" "_renam.b09" "_mon.b09" "utils.b09" "message.b09" "comm.b09" "omemory.b09" ; File taken from BEDIT9 "dir.b09" bank 1 "_list.b09" "_help.b09" "fname.b09" "keycalc3.b09" ; renumbered version which came from Joe. No chang( OPT nolist ANDCC #%10101111 ENDM seif MACR OPT nolist ORCC #%01010000 ENDM iny MACR OPT nolist LEAY 1,y ENDM dey MACR OPT nolist LEAY( y locations SNE2 MACR OPT nolist IF NE SET2 (\0),(\1) ENDIF ENDM ;system parameter passing call. CALL MACR ;call a system procedure p0-p5. OPT nolist pcount__ SET 0 IFNC( OPT nolist IF NE CALL (\0),(\1),(\2),(\3) ENDIF ENDM ;conditional jump. JEQ MACR OPT nolist IF EQ IFNC .,\1. LDD \1 ENDC JMP 4 STD \0 ENDM OPT list NC .,\1. LDD \1 ENDC JMP \0 ENDIF ENDM ;conditional jump. JLO MACR OPT nolist IF LO IFNC .,\1. (es. "text.b09" "line.b09" bank 2 "_ul.b09" ; File taken from BEDIT9 "_dc.b09" "_dt.b09" "_mount.b09" "_scrat.b09" "_tab.b09" "_di.b09" "_exec.b09" "_name.b09" "_get.b09" "_put.b09" "_look.b09" "_def.b09" "_#.b09" "_s.b09" "_d.b09" "_f.b09"( -1,y ENDM FCS MACR ;form character string OPT nolist FCC \0 FCB 0 ENDM ;convenient way to set a memory location SET1 MACR OPT nolist IFNC .,\0. IFNC .,\1. ( .,\1. IFNC .,\2. pcount__ SET 2 IFNC .,\3. pcount__ SET 4 IFNC .,\4. pcount__ SET 6 IFNC .,\5. pcount__ SET 8 ( \0 ENDIF ENDM ;conditional jump. JNE MACR OPT nolist IF NE IFNC .,\1. LDD \1 ENDC JMP \0 ENDIF ENDM ;conditional jump. JHI MACR ( OPT nolist ; constant values. txtbottom EQU 23 ;bottom of screen text. cmdline EQU 24 ;command line. msgline EQU 25 ;message line. crtwidth EQU 80 ;width of screen. ; lower label locations. membeg_( "_nul.b09" "_em.b09" "_tal.b09" "_run.b09" "_exit.b09" "dutil.b09" bank 11 "marry.b09" ;Used as it came from Joe. Fixes overrun onto "what1.b09" ;screen "calcr1.b09" "count.b09" "parse1.b09" "sumfp.b09" "round2.b09" ( LDB \1 ENDC STB \0 ENDC ENDM ;conditional set memory location SEQ1 MACR OPT nolist IF EQ SET1 (\0),(\1) ENDIF ENDM ;conditional set memory( LDD \5 PSHS d ENDC LDD \4 PSHS d ENDC LDD \3 PSHS d ENDC LDD \2 ( OPT nolist IF HI IFNC .,\1. LDD \1 ENDC JMP \0 ENDIF ENDM ;conditional jump. JLO MACR OPT nolist IF LO IFNC .,\1. ( EQU $20 ;start of free memory. memend_ EQU $22 ;end of free memory. txtcur EQU $24 ;pointer to current text line. txtbeg EQU $26 ;start of bof. txtend EQU $28 ;start of eof. service_ ( ; Standard full CALC pack, as previously sent. "printit1.b09" "convert.b09" "spread1.b09" "con0.b09" "con1.b09" "con2.b09" "rith1.b09" "doint1.b09" "ascii1.b09" "scr2asc.b09" "asc2char1.b09" bank 12 "futil.b09" "dparse.b09" "title1.b09" ( location SNE1 MACR OPT nolist IF NE SET1 (\0),(\1) ENDIF ENDM ;convenient way to set two memory locations SET2 MACR OPT nolist IFNC .,\0. IFNC .,\1. ( PSHS d ENDC LDD \1 ENDC JSR \0 IFNE pcount__ LEAS pcount__,s ENDC ENDM ;clean up stack and finish up a routine. DONE MACR OPT nolist ( LDD \1 ENDC JMP \0 ENDIF ENDM ;memory push. PUSH MACR OPT nolist LDD \0 PSHS d ENDM ;memory pull. PULL MACR OPT nolist PULS d ) EQU $32 ;service request number. filename_ EQU $68 ;pointer to filename. ; a0 - a3 is clobbered by setup. command_buf EQU $a4 ;previous command buffer. alternate_buf EQU $a6 ;buffer used for replace strings, etc... pr3 ; Revised to include CALC in title. .b09" "dutil.b09" bank 11 "marry.b09" ;Used as it came from Joe. Fixes overrun onto "what1.b09" ;screen "calcr1.b09" "count.b09" "parse1.b09" "sumfp.b09" "round2.b09" )in equ $ce ;original i/ob for keyboard. pref_buf equ $d0 ;file designator prefix (eg. "(f:20)"). main_buf equ $d2 ;large working buffer for text. input_buffer EQU $0400 ;command and text working buffer. input_)Errors 0 $01b7 ; Length Export _BMESSAGE=$0000 Import PRINTF_ 37(both) Import SUICIDE_ 46(both) Export _MESSAGE=$0004 Import _MSGREADY 24(both) Reloc 0,8(both) Object 86ff20014f34028e00335a27086d8026fc6d8426f53410bd0000ec673406ec673406ec64bd000032 64a662)evsrchstr_buf EQU $a8 ;used in searching. old_cur_line EQU $aa ;old screen line #. cur_line EQU $ac ;# of current text line. max_memory EQU $ae ;limit of text area. name_buf EQU $b0 ;file name buffer. range_)Errors 0 $0236 ; Length Import _REPRINTROW 66(both),61(both) Import _BMESSAGE 487(both) Export _COMMANDER=$0000 Import _CLRCMD 6(both) Import _CHRGOT 354(both),191(both),107(both) Import _CHRGET 114(both) Import _COMPRINT 124(both) Import COPYSTR_ 344(bo) _SCRATCH 543(both) Import EC_RENAME 545(both) Import EC_MOUNT 547(both) Import EC_COPY 549(both) Import EC_DATE 551(both) Import EC_TIME 553(both) Import EC_TABSET 555(both) Import EC_HELP 557(both) Import EC_EXEC 559(both) Import EC_FREE 561(both) Impor7bufferend EQU input_buffer+80 OPT list resent position. chrgottype EQU $c9 ;01=alpha, 02=other, 03=numeric. temp_copy EQU $ca ;used in screen printing. multi_copy EQU $cc ;count of # of lines deleted. orig_kb) 27037e000032633953617920776861743f004d697373696e672046696c656e616d652e0021 00496c6c6567616c206c696e652072616e67652e00496c6c6567616c207365617263682073747269 6e672e0053656172636820737472696e67206e6f7420666f756e642e005365617263682073747269 6e672072657175697) start EQU $b2 ;specified line range start and range_end EQU $b4 ; end. old_txtcur EQU $b6 ;old screen line pointer. error_flag EQU $b8 ;flag for file error condition. modeflag EQU $b9 ;00=command, 01=) th),142(both) Import _CLRMSG 305(both),248(both),147(both) Import _COMMAND_NUM 207(both),170(both) Import _SCANNER 294(both) Import _CSTART 351(both) Import _DELETELINE 42(both) Import _DOCHAR 93(both),71(both) Import SPAWN_ 242(both) Import _FETCHLINES )t EC_DCOMMAND 563(both) Import EC_LOOK 565(both) Import _MESSAGE 232(both) Import KBENABLE_ 3(both) Import _NUMBEROFP 381(both),324(both),313(both),273(both),256(both) Import _OFFSETALL 48(both) Import ___NEG 199(both) Import _OFFSETBYP 376(both) Import )01bd0000326426086d662703bd00005f275edc24bd0000ddacc6ffe7 66dcb4bd00003406bd0095350626483406dcd23406dca4bd00003262ec64bd0000bd0000ec62d3cc ed62ece493ccede4dccc260dcc0001bd0000dd24bd0000ddacece1bd0000ddb4dc24109328240510 93b423815f2002c6ffe762ece4ddccec64d)265642e004e6f2073656172636820737472696e6720646566696e65642e0049 6c6c6567616c2064656661756c74206465766963652e002553002553202d204c696e657320747261 6e736665727265642025442e002544004e6f206c696e652072616e676520616c6c6f7765642e0025 44204f6363757272656e63657320)text, $ff=input. textcol EQU $ba ;column of text cursor. textrow EQU $bb ;row of text cursor. temp_counter EQU $bc ;lines inserted, etc... eof_line EQU $be ;# of lines in text. kbin EQU $c0 ;i)194(both) Import _GETLINE 9(both) Import TBREAK_ 278(both) Import _INSERTTEXTM 53(both) Import EC_NULL 491(both) Import EC_LIST 493(both) Import EC_PRINT 495(both) Import EC_PRINTL 497(both) Import EC_PUT 499(both) Import EC_PUTLINES 501(both) Import EC_)_PRINTSCREEN 425(both),58(both) Import FIX_RANGE 251(both) Import _POINTEROFP 420(both),388(both) Reloc 0,489(both),0,329(both),0,235(both),0,202(both),0,161(both) Object 327ebd0000bd0000bd0000ede40db927436de4272fdc2410932627251093282720e661c103271adc 24)dacbd0000dd24bd0000e6621d3267396fe29ec6e680c1 2f2706c15c2702201e86256d842718e184270aa18426023001300120eee6012706c12c27026ae4e6 e01d39cc0001bd000001e30000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000)6368616e6765642e002544206c696e6573206f6620746578742e 004d656d6f72792066756c6c2e005265706c6163696e6720737472696e6720746f6f206c6f6e672e 002544206279746573206f662066726565206d656d6f72792e002a00496c6c6567616c2064657374 696e6174696f6e206c696e652e004e6f7420656)nput device. def_buf EQU $c2 ;default device buffer. ; it is ok for the following locations to get clobbered by host language. found_len EQU $c4 ;length of matched search string. chrgetpointer EQU $c6 ;pointer to next char )CHANGE 503(both) Import EC_SEARCH 507(both),505(both) Import EC_DELETE 509(both) Import EC_GET 511(both) Import EC_INPUT 513(both) Import EC_ECHO 515(both) Import EC_MOVE 517(both) Import EC_UPPER 519(both) Import EC_LOWER 521(both) Import EC_NUMBER 523()bd0000ccffffbd0000dcd2bd00002703bd0000bd00002003bd0000ece4bd0000e661c1811027ff b7326239e661c10d2710ece4bd0000e661c1811027ffa1326239bd0000c13f2610bd000027033262 39dca4bd000016ff8732620dc8270edca43406dcd2bd00003262bd0000dc24ddb2ddb4cc0000ddcc bd01b12650dcc30000000000000000000000000000000000 00000000000000 c6ffe7 66dcb4bd00003406bd0095350626483406dcd23406dca4bd00003262ec64bd0000bd0000ec62d3cc ed62ece493ccede4dccc260dcc0001bd0000dd24bd0000ddacece1bd0000ddb4dc24109328240510 93b423815f2002c6ffe762ece4ddccec64d,e6f7567682066726565206d656d6f72792e000000 646566696e65642e0049 6c6c6567616c2064656661756c74206465766963652e002553002553202d204c696e657320747261 6e736665727265642025442e002544004e6f206c696e652072616e676520616c6c6f7765642e0025 44204f6363757272656e63657320)for chrgeting. chrgotchar EQU $c8 ;char at present position. chrgottype EQU $c9 ;01=alpha, 02=other, 03=numeric. temp_copy EQU $ca ;used in screen printing. multi_copy EQU $cc ;count of # of lines deleted. orig_kb)both) Import EC_RUN 525(both) Import EC_EXIT 527(both) Import EC_SETUP 529(both) Import EC_MONITOR 531(both) Import EC_TALK 533(both) Import EC_DIRECTORY 535(both) Import EC_CATALOG 537(both) Import EC_NAME 539(both) Import EC_DEFAULT 541(both) Import EC) 63406bd0000270cc1082708c1092704326220303506ddc6bd0000bd000026037e00 00bd01b12627bd0000c101270ac1032706c105270220015cc1102306cc000d7e00008e01e93a3aec 84bd0000396fe2bd0000bd0000dc24bd00003406dcc63406dccc3406dcb2dd24bd0000ddacbd0000 267ddcb43406dc243406cc00)Errors 0 $0146 ; Length Import LENGTH_ Import COPYSTR_ 156(both),113(both) Import COPY_ 303(both),253(both) Export _FETCHTEXT=$00b0 Export _HINSERTTEXT=$000a Export _INSERTTEXT=$0000 Import SET_EOF_LINE 322(both),168(both) Import _OFFSETALL 6(both) Expo*rt OPENP_BYTESP1=$00d8 Export CLOSEP_BYTESP1=$0113 Reloc 0,138(both) Object 3406cc0001bd000035063406dc24ddb6dcacddaaaee434106f8900fee6842712c1202506c4802602 2004c620e784300120eac620e18226046f8420f86df42739aee44fe684270d1f1230014ce18027fb 810223ee4d272281*Errors 0 $0176 ; Length Import _REPRINTROW 338(both) Import _COMPRINT 234(both) Import _CLRMSG 237(both) Import COPYSTR_ 258(both) Import _SCRNINSERT 314(both) Import _SCRNDELETE 369(both) Export _DOCHAR=$0000 Import _DELETELINE 366(both) Import _UPDATES*; DEVELOPMENT XDEF OPEN_KEY,CLOSE_KEY XREF PRINTF_,GETCHAR_,PUTCHAR_ XREF MONITOR_,_screenstart xref prefixst_,copystr_,write__,fputchar_ XREF OPENF_,CLOSEF_ XREF KBENABLE_,BANKSW XRE*0dcd23406dc24bd000035106f88510fb9dcd27e0000bd00007e 0000ccffffbd0000bd0000dcd23406dca4bd00003262d6b920066f9f00d2c601340496bbd6ba3406 dc24109328260dccffffbd0000bd00006f9f00d2dcd2bd00002706bd0000326339bd0000dc24ddb6 dcacddaabd0000350697bbd7bae6e0d7b97e0000*1f2302861fa7a08002e7a010afe431a63420ec623406ec62bd00003262326220 c3ae625f5c6d8026fb34045c4f3406dc24bd00d83262261d9e24e6e45ce7803410ec65bd00003262 9e24e6e43ae784bd0000cc00003265391f01e6805a340410ae636ae42715e680c120240ba6806ae4 a7a05a26fb2002e7a020e76fa43* IF EQ CLR SERVICE_ DONE 2 ENDIF LDB ,S CLRA PSHS D CALL PRINTF_,#_NOTVLD ;NOT A LEGAL SELECTION OCCURED. LEAS 2,S LDX #0 * CREEN 294(both),249(both),39(both) Import CALC 47(both) Import CAR_RTN 87(both) Import _FETCHTEXT 359(both),222(both) Import SCREEN_ 147(both) Import REPEAT 91(both) Import CUR_UP 83(both),53(both) Import CUR_DN 81(both) Import CURPOS_ 143(both) Import S* F READ__,KEYBOARD__ XREF _COMMANDER XREF _TITLE ;include ;include LDD 2,S LBNE EDIT1 LEAS -2,S CALL CLS_ MAINLOOP LDB #1 STB SERVICE_ ;ALWIdc24109326271b1093282716dca43406dc24bd00 003262dc24bd0000bd0000bd000039 04fd6bb8300013406dcac10a3e42c02ede4be000030890000e684c880e784c601d7ba4f d6bba3e4d7bb3406cc00013406ec62bd0000326232623506bd0000bd0000dc24ddb6dcacddaa7e00 000fb939c601d7b96f9f00d27e000261393406327cdc281f01eb848900ede4e368ed6293ae2222ece4 a3643406ec66e36a3406ec68bd00003264dc28e368dd28dcb4e368ddb4cc000032663934069e28e6 843a3410ec62e3663406ec62a3643406ec663406ec64bd000032623262dc28a368dd28dcb4a368dd b4bd0000326639 8027fb 810223ee4d272281* ;BAD NEWS FLAG. ENDGUESS STX ,S IF NE LOOP ;KEEP PERFORMING SELECTION TILL SERVICE_ IS CLEARED. LDD #0 PSHS D PSHS D ;SAFETY BUFF*ETCURTORPCP1 176(both) Import _INSERTTEXTM 303(both) Import _NUMBEROFP Import _OFFSETALL 291(both),246(both),188(both),120(both) Import ___NEG 185(both) Import _PURGE 372(both),325(both),213(both),199(both),123(both) Import _PRINTSCREEN 308(both),240(bo*AYS A STANDARD REQUEST. LOOP ;LOOP TILL SOMETHING SUBSTANTIAL IS ENTERED. CALL PRINTF_,#_MSG1 ;SELECT MESSAGE DISPLAY. LOOP ;GET THE SELECTION. CALL GETCHAR_ * PUTCHAR_,#12 RTS _MSG1 FCC "Waterloo microSystems%N" FCC "%Nselect :%N%N asm%N edit%N" FCS " linker%N monitor%N quit%N%N " _NOTVLD FCS "'%C' not valid selection%N%N%N%N" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\* CALL open_key ;set standard input. CALL _title ;print header to screen. CALL _screenstart ;print up screen and . LOOP ;main command loop. CALL _commander LDB service_ *ERS (WHY?). CLRA LDB SERVICE_ CALL ([4,S]) ;DO THE REQUEST. LEAS 4,S LDB SERVICE_ UNTIL EQ CALL CLS_ ;CLEAR SCREEN FOR SELECTION REQUEST. *th) Reloc 0,99(both),0,97(both),0,95(both),0,93(both),0,89(both),0,85(both), 0,79(both),0,77(both),0,75(both),0,73(both),0,71(both),0,69(both), 0,67(both),0,65(both),0,63(both),0,61(both),0,59(both),0,57(both), 0,55(both),0,51(both),0,49(both),0,45(both)* STB ,S CMPB #" " ;BUT SKIP LEADING SPACES. UNTIL NE CMPB #$0D IF EQ CALL CLS_ CLRB ENDIF UNTIL NE LOOP ;PURGE REST OF INP*\\\\\\\\\\\\\ ;\\\\\\\\\\\\\\ main program start \\\\\\\\\\\\\ ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ; clear text area =>02 01 02 01<= edit LDX membeg_ STX txtbeg STX txtcur LDA #2 LDB * UNTIL eq ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :closes input file. close_key LDD kbin JMP closef_ ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\* ENDIF LBRA MAINLOOP ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :ASSEMBLER SELECTION. ASSEMBLE JSR BANKSW FCB 3 FDB $9000 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*,0,43(both),0,41(both), 0,31(both),0,28(both),0,15(both),0,1(both) Object 8e00cb5d2a0dc0812d07c10a22038e0029200bc0012d07c11222038e003f8c00cb270358ad957e00 0000d701540074000000c9006f000000cc0065010a006a007d00f200cb00cb00cb00cb00cb00cb00 cb0000000000ec0000*UTED LINE. CALL GETCHAR_ CMPD #$0D UNTIL EQ CALL CLS_ ;CLEAR SCREEN. GUESS ;DO ACCORDING TO WHAT WAS ENTERED. LDB ,S LDX #ASSEMBLE CMPB #'* #1 STD ,x++ ;begining of text. STD ,x ;end of text. STX txtend ;set eot pointer. LDD #1 STD eof_line ;eot is at line #1. ; set standard input/output for keyboard. edit1 equ * \\ ;performs :opens the standard input and output devices. open_key CALL openf_,#keyboard__,#read__ STD kbin std orig_kbin RTS getter__ FCS "g " mmand loop. CALL _commander LDB service_ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :LINKER SELECTION. LINK JSR BANKSW FCB 7 FDB $9000 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :CLEARS THE SCREEN. CLS_ CALL*00cb000000cb00cb00cb00cbccffeb200dcc00152008ccffff2003cc0001bd 00007e00004fd6bb8300013406dcac10a3e42c02ede4be000030890000e684c880e784c601d7ba4f d6bba3e4d7bb3406cc00013406ec62bd0000326232623506bd0000bd0000dc24ddb6dcacddaa7e00 000fb939c601d7b96f9f00d27e000*a' QUIF EQ LDX #EDIT CMPB #'e' QUIF EQ LDX #LINK CMPB #'l' QUIF EQ LDX #MONITOR_ CMPB #'m' QUIF EQ CMPB #'q' +;_c XDEF ec_change XREF tbreak_,_printscreen XREF _message,_bmessage XREF _chrget,fix_range XREF _fetchnum,_syntaxchk XREF _parsesrch,_pointerofp XREF _getline,_updatescreen +Errors 0 $0232 ; Length Import _BMESSAGE 144(both),118(both) Import PARSE_TO 133(both) Import _CHRGOT 1(both) Import _CSTART 195(both) Import TO_DISK_ 73(both) Import TO_DISK1_ 92(both) Import D0PREFIX__ 464(both) Import PUT_NAME 89(both) Import D1PREFIX+ ENDIF ENDIF CALL _reprintrow DEC modeflag ;back to command mode. ENDGUESS RTS ENDIF ; a complex change. push #0 ;# of changes counter. +d0000 32628e000020038effff3410bd00007d04502606cc0001bd0000cc0450bd0000108304502705ccff ffede4dca6bd00001093a62705ccffffede4ece42670cc0450bd0000c1052608dca6bd00007e0000 c101265adca6bd0000c1012651dca6bd01f0fd0400cc0450bd01f010b304001026003b7f0402cc04 00340+ Errors 0 $00b3 ; Length Import SUICIDE_ 175(both) Import MAKETIME2P 167(both) Import TPUTCHR_ 160(both) Import PRINTF_ 172(both),150(both) Import GETDATE_ 142(both) Import _MSGREADY 135(both) Import SETTIME_ 130(both) Import _CHRGET 119(both) Import _FET+ XREF _reprintrow,_clrcmd XREF _inserttextm,_deleteline XREF _offsetbyp,_offsetall XREF _fetchtext,_matchp1top XREF copystr_,prefixst_,length_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\+ __ 487(both) Import FPUTCHAR_ 367(both) Import TBREAK_ 431(both),375(both) Import FPUTREC_ 421(both) Import DS_READ 104(both) Import STRIPDISK 284(both),262(both) Import READ__ 295(both) Import ERROROUTER 342(both),315(both) Export EC_DCOMMAND=$0000 Impo+ push #1 ;first occurance. ;.skipper,changecounter,rts CALL fix_range LDB chrgottype GUESS CMPB #$03 QUIF NE CALL _fetchnum STD ,s ;number of changes to + 6cc022fbd0000cc0450bd01cabd0000cc0450bd0000bd0000cc0231bd0000dca6bd01cabd00 00dca6bd0000bd000035067e0005cc00003406dca6bd000032623406dca63406ec62bd00003262cc 00003406cc0450bd000032623406cc04503406ec62bd00003262327eec662627ec64bd0000ede4f6 00002619ec62bd00+CHNUM 96(both) Import GETTIME_ 81(both) Import _CHRGOT 76(both) Import _CSTART 73(both) Import SETDATE_ 55(both) Import ISDIGIT_ 36(both) Import SCANFNAME 58(both),11(both) Export EC_TIME=$0005 Export EC_DATE=$0000 Reloc 0,147(both) Object ccffff2003cc00+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :change command. ;returns :true/false; has an error occured? ec_change EQU * TST chrgotchar IF EQ LDD range_start CMPD range_end +rt IOERRSTA_ 426(both),410(both),370(both),360(both),107(both),99(both), 78(both) Import IOERRBUF_ 110(both) Export EC_COPY=$007a Export EC_RCOPY=$007f Import EC_LOOK 198(both) Import SUFFIXST_ 287(both),279(both),271(both),265(both),256(both),247(both) +skip. ADMIT LDB chrgotchar CMPB #"*" QUIF NE CALL _chrget CLR 1,s ;change all. ENDGUESS LDB chrgotchar CMPB #"/" CNE _bmessage,#7 +00f60000260fbd00002708cc0003bd0000203a27db2036cc00ff3406dca63406 ec68bd00003264ede4f60000261fdca63406ec64bd00003262f60000260fbd00002708cc0003bd00 00200227caec62bd0000ec64bd00007e0000bd00001f01cc00003406a6802716812e2712812f260c a68481312605cc0000ede45f26e+003406bd000034066df4102700716fe2ae61e6802713c13a270b3410bd00003510 26026ae46de427e9e6e02710ece4bd0000bd0000ede46df426022042327cec64bd0000bd00001f40 bd00001f426fe2d6c9c10326203420bd00003520a6e4e7a66ce48103270fd6c8c13a26093420bd00 00352020da32611f40bd00003+ CNE _bmessage,#4 ;"ILLEGAL LINE RANGE" GUESS STD txtcur CALL _updatescreen LDD txtcur CMPD txtbeg QUIF LS CMPD txtend Q+Import SUICIDE_ 456(both) Import DEVNAME 207(both),186(both) Import WRITE__ 320(both) Import ISDIGIT_ 549(both),539(both),524(both),16(both) Import _MESSAGE 439(both),383(both) Import FGETCHAR_ 355(both) Import FGETREC_ 403(both) Import KBDISABL_ Import. ;"search string required". LDX chrgetpointer LDB 1,x CMPB #"/" CEQ _bmessage,#8 ;"no search string defined". CALL _parsesrch IF EQ ;no error in parsing the search com63586bd00001f01ec804d2718812e2714812f2710812d270c3416 1f894fbd0000351627e32603cc000034064fbd000026026f614fe6e4bd00002604c638e7e4358643 003d00 62bd00003262cc 00003406cc0450bd000032623406cc04503406ec62bd00003262327eec662627ec64bd0000ede4f6 00002619ec62bd00b264bd0000ec622717bd00003406cc00b1bd00006df42706cc0020bd 00003262dca6bd0000dca6bd00007e0000255300 TDATE_ 55(both) Import ISDIGIT_ 36(both) Import SCANFNAME 58(both),11(both) Export EC_TIME=$0005 Export EC_DATE=$0000 Reloc 0,147(both) Object ccffff2003cc00+UIF HS ;single line change. INC modeflag ;set to input mode. CALL _clrcmd ;clear command line. CALL _getline ;input a text line. TSTA IF LT CMPB #3 + SKP_ALPHA 39(both) Import SKIP_PREFIX_ 497(both),459(both),166(both),150(both) Import ZUPSTR_ 52(both) Import OPENF_ 328(both),302(both) Import CLOSEF_ 453(both),448(both) Reloc 0,292(both),0,276(both),0,268(both),0,253(both),0,244(both),0,225(both), 0,+Errors 0 $0025 ; Length Import SUICIDE_ 36(both) Import MOUNT_ 33(both) Import _SYNTAXCHK 27(both) Import DEF_DEVICE 22(both) Import CHECKOUTFNAME 9(both) Export EC_MOUNT=$0000 Object cc04003406ccffffbd00003262cc04003406cc0400bd00003262bd0000cc0400bd00007e0000 00ec622717bd00003406cc00b1bd00006df42706cc0020bd 00003262dca6bd0000dca6bd00007e0000255300 TDATE_ 55(both) Import ISDIGIT_ 36(both) Import SCANFNAME 58(both),11(both) Export EC_TIME=$0005 Export EC_DATE=$0000 Reloc 0,147(both) Object ccffff2003cc00Errors 0 $0019 ; Length Import SCRATCHF_ 21(both) Import _SYNTAXCHK 16(both) Import CHECKOUTFNAME 9(both) Export EC_SCRATCH=$0000 Object cc04003406ccffffbd000032623406bd0000ece4bd0000326239 + IF NE CALL _deleteline,txtcur CALL _offsetall,#-1 STD old_txtcur SET2 old_cur_line,cur_line CALL _inserttextm,main_buf +216(both) Object bd0000dcc61f019f68c6083404e684bd000027129e68e680c030e7e4c620e18027fc301f9f68bd00 009e68a6856f853406dc68bd00009e683506a785e6e032736fe4e769c60fe76afc0000ed677f0000 1f406d9f00682703bd0000fc0000ed671f407d00002603bd00007f0000cc00003406cc000ab,Errors 0 $0097 ; Length Import KYPUTB_ 119(both),107(both) Import EOF_ 128(both) Import SCREEN_ 63(both),20(both) Import TBREAK_ 114(both),102(both) Import READ__ 6(both) Import _HOLDIT 139(both) Export EC_LOOK=$0000 Import CURPOS_ 59(both),16(both) Impo,Errors 0 $0041 ; Length Import SUFFIXST_ 57(both) Import DEF_DEVICE 45(both) Import _BMESSAGE 36(both) Import STRIPDISK 25(both) Import _SYNTAXCHK 20(both) Import CHECKOUTFNAME 15(both) Import EC_NAME 62(both),5(both) Export EC_DEFAULT=$0000 Reloc 0,54(bErrors 0 $0015 ; Length Import _MESSAGE 14(both) Import _NUMBEROFP 6(both) Import _SYNTAXCHK 1(both) Export EC_NUMBER=$0000 Object bd0000dc24bd00003406cc000cbd0000cc0000326239 Errors 0 $0012 ; Length Import SUICIDE_ 17(both) Import _SCREENSTART 14(both) Import SETUP_ 7(both) Import _SYNTAXCHK 1(both) Export EC_SETUP=$0000 Object bd0000cc0001bd0000c601d732bd00007e0000 , Errors 0 $0050 ; Length Import _SYNTAXCHK 1(both) Import COPYSTR_ 63(both) Import _DELETEPTOP1 34(both) Export EC_DELETE=$0000 Import _NUMBEROFP 18(both),11(both) Import FIX_RANGE 4(both) Import _PRINTSCREEN 72(both) Reloc 0,60(both) Object bd0000bd0000d, rt ZNDRETURN_ 136(both),133(both),99(both),32(both),29(both) Import SUICIDE_ 150(both) Import FGETREC_ 46(both) Import OPENUP_4P 9(both) Import CLOSEF_ 144(both) Import _PRINTSCREEN 147(both) Object ccffff3406cc0000bd000032623406be000030890000e684c880e78oth) Object 0dc826037e0000dca63406ccffffbd00003262bd0000dca6bd00001093a62606cc00097e0000dcc2 3406dca6bd00003262dcc23406cc0040bd000032627e00002e00 Errors 0 $0014 ; Length Import SUICIDE_ 19(both) Import _MESSAGE 16(both) Import _SYNTAXCHK 1(both) Export EC_FREE=$0000 Object bd0000dcae93288300023406cc0012bd00007e0000 ,_s.b09,_d.b09aErrors 0 $0009 ; Length Import _DOCHAR 4(both) Export EC_NULL=$0000 Object cc000dbd0000cc000039 th) Export EC_FREE=$0000 Object bd0000dcae93288300023406cc0012bd00007e0000 ,_s.b09,_d.b09cb2dd24bd0000ddacdcb4bd000093acc30001ddccdcb43406dcb2bd000032622605 cc0000ddccdc26c300021093282610dcb03406cc004abd000032626f9f00d07e0000746578743a65 00 ,_#.b09,_s.b094bd0000bd0000cc00fe3406dc d23406ec64bd000032649ed26f8b6f885010be000031a9000034204fe68427073001e7a04c20f5c6 204c81502204e7a020f73510e684c880e784bd0000bd0000261abd0000c120260cbd0000260ebd00 00c12026f4ece4bd0000279ebd0000bd0000bd0000ece1bd0000bd00007e0000 o,Errors 0 $00e5 ; Length Import _MESSAGE Import _PRINTSCREEN 225(both) Import SET_EOF_LINE 222(both) Import _NUMBEROFP 217(both) Import CLOSEP_BYTESP1 199(both) Import COPY_ 173(both) Import OPENP_BYTESP1 130(both) Import _BMESSAGE 138(both),119(both) ImErrors 0 $0012 ; Length Import SUICIDE_ 17(both) Import _PRINTSCREEN 10(both) Import PASSTHRU_ 7(both) Import _SYNTAXCHK 1(both) Export EC_TALK=$0000 Object bd0000cc0001bd0000bd0000c601d7327e0000 Errors 0 $0008 ; Length Import SUICIDE_ 7(both) Import _TITLE 4(both) Import _SYNTAXCHK 1(both) Export EC_RUN=$0000 Object bd0000bd00007e0000 K=$0000 Object bd0000cc0001bd0000bd0000c601d7327e0000 ,Errors 0 $001c ; Length Import _CHRGOT 1(both) Import _SYNTAXCHK Import SCREEN_ 15(both) Export EC_EXIT=$0000 Import EC_PUT 6(both) Import CURPOS_ 11(both) Import ZNDRETURN_ 24(both) Import SUICIDE_ 27(both) Object bd00002703bd00000f32be000030890000e684,Errors 0 $0157 ; Length Import _BMESSAGE 47(both) Export PARSE_TO=$0099 Import PREFIXST_ 230(both),87(both),69(both) Import COPYSTR_ 336(both),324(both),270(both),246(both),208(both),180(both), 166(both) Import _SYNTAXCHK 342(both) Import STRIPDISK 243(b,port _SYNTAXCHK 50(both) Import _CHRGET 36(both) Import SUICIDE_ 31(both) Import FETCH_LINE 26(both) Import _CHRGOT 47(both),11(both) Import FIX_RANGE 8(both) Export EC_ECHO=$0004 Export EC_MOVE=$0000 Object c6ff20015f3404bd0000bd0000dc24ede3d6c82719c12e,43406cc0063bd00003262ece4bd00003406 ec663406ec62bd0000326232624fd6b83262393a20003406327a1f40bd0000c603e765ae661f4286 30e6a0c10a2d054cc00a20f7a780cb30e7806a652706863aa78020e36f843268397f045032e8e21f 403406dcb0bd0000326232e8ec1f403406dcd0bd00003262dca63406@00032621f409e d03410bd000032e8161f409eb03410bd000032e8207e0000 fd6b83262393a20003406327a1f40bd0000c603e765ae661f4286 30e6a0c10a2d054cc00a20f7a780cb30e7806a652706863aa78020e36f843268397f045032e8e21f 403406dcb0bd0000326232e8ec1f403406dcd0bd00003262dca63406c880e784bd00007e0000 ,_nul.b09, _em.b09, _tal.b09, _run.b09,oth),1(both) Import STREQ_ 23(both),13(both) Export ERROROUTER=$0022 Export ERRORCHECK=$0034 Import ERRORF_ 55(both) Import ERRORMSG_ 76(both) Import SUFFIXST_ 219(both) Import CHECKOUTFNAME 313(both),291(both),192(both) Import GETTIME_ 109(both) Export ,270abd000026037e00002003bd0000dc24 351034069f24bd0000bd0000ece41093282706ebf48900ede4dcb21093262608eb9f00b28900ddb2 dcb41093282708eb9f00b48900ddb41093b22203326339ece41093b22f0b1093b42c06cc0014bd00 00dcb493b23406ec62bd00002706cc0015bd0000dcb210a3622504e3e,ccffffbd00003262bd000027 23dca63406dcc2bd00003262dca63406dcb0bd00003262dca63406dcd0bd000032622040dcb03406 dca6bd0000bd00003262dca6bd00001f01e6846f843414dcd03406dca6bd000032623514e7840dc8 2723cc04503406ccffffbd00003262bd000027110dc8270dcc04503406ccffffbd0,Errors 0 $00b9 ; Length Export ROW_COL=$00b8 Import CONVERT 142(both) Import PRINTF_ Import TOTAL 124(both),45(both),33(both),1(both) Import ENTRYERR 23(both) Import ENTRIES 28(both) Import _DELETELINE 111(both) Import DOASCII 146(both) Export CALC=$000-0 Import TPUTCURS_ Import _FETCHTEXT 87(both) Import SCREEN_ 104(both) Export REPEAT=$002c Import _HINSERTTEXT 137(both) Import RITHMETIC 144(both) Import _MESSAGE Import NOGOOD 177(both),62(both) Import MAIN 140(both) Export CLEARBOT=$00ab Import WHAT,MAKETIME2P=$0066 Import SKIP_PREFIX_ 253(both) Reloc 0,296(both),0,197(both),0,66(both),0,39(both),0,20(both),0,10(both) Object bd00003406ece43406cc001fbd000032622606cc001cbd0000326239544f00746f00ae623410bd00 342706cc000abd00003262393406bd0000d7b82720ec64ddb2dc2410a3622304e3e4 dd24ece43406ec643406dcb2bd000032646d64271fdc2493b22d0910a3e42204dcb2dd24dcb2bd00 00dc241093b22302a3e42002dc24dd24bd0000ddacbd0000bd0000326539 EC_ECHO=$0004 Export EC_MOVE=$0000 Object c6ff20015f3404bd0000bd0000dc24ede3d6c82719c12e-Errors 0 $0034 ; Length Import CEASE 44(both) Export ENTRIES=$002f Export BUFFP=$0030 Import CUR_DIG 11(both),3(both) Export SUM=$0000 Reloc 0,37(both),0,34(both),0,17(both) Object 3420cc0000bdb7b13406cc0000bda1b7cc00303406bda4343506bda2fa326235207c002fb- 14(both) Import _PRINTSCREEN 77(both),41(both) Reloc 0,172(both),0,114(both),0,74(both),0,71(both),0,57(both),0,54(both), 0,38(both),0,18(both),0,11(both),0,8(both) Object 7f000096bbd6bafd00b8bd00abbd0000108e008cadb67d000026107d0000270b7d00002706bd0050 -Errors 0 $00a6 ; Length Import ROW_COL 163(both),153(both) Import DOTPOS 45(both),33(both) Import TOTAL 143(both),7(both) Import CHARS 156(both),140(both),53(both),50(both),40(both),24(both), 18(both),4(both) Export ROUND=$0000 Reloc 0,131(both),0,124(bo-Errors 0 $008a ; Length Export PREFIX=$0074 Import ROW_COL 44(both) Import PRINTF_ 39(both),28(both) Import TPUTCURS_ 47(both),15(both) Export TOTAL=$0075 Import ENTRIES 18(both),1(both) Export PRINTIT=$0000 Reloc 0,36(both),0,25(both),0,6(both) Object 7- Errors 0 $0144 ; Length Import PRINTF_ Import TPUTCURS_ Import TGETCURS_ Import CN2BIN 321(both) Import CN2HEX 316(both) Import CN2DEC 307(both) Import BIN2CN 296(both) Import DEC2CN 291(both) Import HEX2CN 282(both) Import LINEBUF 244(both),235(both)$6002f81 ff26037c000039007c00007e00 1bcbd608d7d62e12709bd63ec 61fc13a26057c012520037c00007e00ff2046c1 202627e61fc1202602e61e3404bd0000350427057c0000200cc12e26057e007a20037c00007e00ff 201bc12e2611e61fbd000027057c000020037c000020037c00007e00ff7e00d23404bd00- bd0000397d0000261396bbd6bafd00b8cc00943406bd00003262200bd6baf700b9bd0050bd000039 dcd23406dc24bd000032629ed26d8026fc301fc620e7808c000026f9dc24bd0000f600b99ed23085 301f108e0000e6a02704e78020f8dcd2bd0000390000000000000000546f74616c20427566666572 20697320456- th),0,117(both),0,108(both),0,101(both),0,82(both), 0,75(both),0,68(both),0,21(both),0,1(both) Object 7f00a67f00008e0001e60ac1452608c60ef700007e004a7c0000e680c12e26f77d000026076f827a 0000201eb600001f89fb0000f70000c10a2e0f3086a68481342305bd004e20026f84bd0- d00002706cc0075bda06fcc1901bd0000f60000c1ff2608cc0032bd0000200b4f3406cc005abd00 003262fc0000bd000039576f726b2073746f70706564206174206d6178696d756d206f6620323535 20656e747269657306002564206e756d62657220656e74726965732073756d6d656406006e007269 65732073756d-,210(both) Import ISDIGIT_ 130(both) Export CHECKIT=$004f Import ROW_COL 61(both) Import MOVEIT 58(both) Import SPREAD 55(both) Import PREFIX 300(both),48(both) Export CN2STR=$012b Export STR2CN=$0113 Import TOTAL 266(both),40(both),24(both) Import PRINT-014420e87d01442c037c00007e01088604b701 44e682c12426167d01442f09c63034047a01442ef92c037c00007e010834047a0144bdba2d26067c 00007e010820d286087f0000e682c1252728c13026043404201dc1312604340420157d0000260bc1 2026077c000020dc20057c000020094a20d24d27037c0000108e0+d7074790600cc00b63406bd000032623906000000 both) Reloc 0,172(both),0,114(both),0,74(both),0,71(both),0,57(both),0,54(both), 0,38(both),0,18(both),0,11(both),0,8(both) Object 7f000096bbd6bafd00b8bd00abbd0000108e008cadb67d000026107d0000270b7d00002706bd0050 098394f34 027c00a6a68281202728812d2724812e260534027e0054813926097d00a627028630200a7d00a627 028b017f00a6340220d27d00a62707c63134047c00008e00013504e78026fa39f60001f000002e02 c601f700013934 th), 18(both),4(both) Export ROUND=$0000 Reloc 0,131(both),0,124(bo6d6564256e003922067c61767e ort PREFIX=$0074 Import ROW_COL 44(both) Import PRINTF_ 39(both),28(both) Import TPUTCURS_ 47(both),15(both) Export TOTAL=$0075 Import ENTRIES 18(both),1(both) Export PRINTIT=$0000 Reloc 0,36(both),0,25(both),0,6(both) Object 7-ERR 37(both),21(both) Import ROWUP 10(both) Export COUNTIT=$0144 Import ENTRIES 64(both),4(both) Import ENTRYERR 262(both),251(both),200(both),184(both),151(both),135(both), 109(both),74(both),32(both),16(both),1(both) Export CONVERT=$0000 Reloc 0,203(boy000e6e0e7a026fa39e684c12426 05bd0000200cc1442605bd00002003bd000039f60000c1442605bd0000200cc1242605bd00002003 bd00003920 007e01124f 3402860ab701441f12e6a2c1442715c1242739c12527687a014426067c00007e010820e58605b701 44e682c14427123404bd000026067c00007e01087aErrors 0 $0024 ; Length Import TOTAL 10(both) Import LINEBUF 6(both) Import COUNTIT 30(both),19(both),3(both) Export SPREAD=$0000 Object 8604b700008e0000108e0000e6802712e7a07a00002609c620e7a08604b7000020ea6fa439 44e682c14427123404bd000026067c00007e01087a-Errors 0 $004b ; Length Import ITOHS_ 71(both) Export CN2HEX=$003e Import DECIMAL_ 42(both) Import LENGTH_ 7(both) Import TOTAL 68(both),63(both),57(both),39(both),33(both),16(both), 4(both) Import ENTRYERR 54(both),47(both),30(both),23(both),1(both) Exp-Errors 0 $003a ; Length Import PRINTF_ Import CNVF2S_ 40(both) Import FADD2_ 34(both) Import CNVIF_ 23(both) Import COUNTIT 26(both),20(both),12(both) Export CN2DEC=$000b Import HSTOB_ 6(both) Import TOTAL 43(both),37(both),15(both),1(both) Export HEX2C-th),0,192(both),0,187(both),0,177(both),0,168(both),0,159(both), 0,154(both),0,146(both),0,141(both),0,138(both),0,119(both),0,112(both), 0,104(both),0,85(both),0,77(both),0,45(both),0,29(both),0,13(both), 0,7(both) Object 7f00007f00007f01447f0000bd00437-Errors 0 $0054 ; Length Import LINEBUF 76(both) Export CN2BIN=$001e Import TOTAL 70(both),67(both),64(both),59(both),35(both),27(both), 1(both) Export BIN2CN=$0000 Reloc 0,73(both) Object 8e0000868034025fa680270b8030442402eae464e420f132614ffd0000394f3402-Errors 0 $0109 ; Length Import ROW_COL Import PUTNL_ Import PRINTF_ Import TGETCURS_ Import TPUTCURS_ Import FDIV_ 264(both) Import FMUL_ 262(both) Import FSUB_ 260(both) Import FADD_ 258(both) Import CNVF2S_ 254(both) Import FLOAD2_ 215(both) Imporort DEC2CN=$0000 Reloc 0,36(both) Object 7f0000cc0000bd00003406c1052617f60000c13626057c0000200b2f097c00007f00007e003bcc00 00bd00002b077d0000260820037f0000fd0000326239fc00003406cc0000bd0000326239 N=$0000 Reloc 0,31(both) Object cc00003406bd00003262397f0000fc00002a037c0000bd00007d00002706cc0036bd0000cc0000bd 00008e0000e680c12e26fa6f1f394880000000 00fd0000326239fc00003406cc0000bd0000326239 - d00002708bd00007f00002026bd01137d00002708bd00007f 00002016bd012bf60000c1252603bd0000bd00007a00017c000039e682c13d27067c00007e01124f 3402860ab701441f12e6a2c1442715c1242739c12527687a014426067c00007e010820e58605b701 44e682c14427123404bd000026067c00007e01087al108e00018630c6 318e000864a42404340420023402301f26f27d0000270cf60000f700017f00007e00278e00003504 e78026fa39 000bd 00008e0000e680c12e26fa6f1f394880000000 00fd0000326239fc00003406cc0000bd0000326239 .t FSTORE_ 155(both) Import CUR_DIG 212(both),152(both) Import CNVS2F_ 207(both),149(both) Export OPERATOR=$0101 Import ISDIGIT_ 186(both),123(both) Import MOVEIT 82(both) Import SPREAD 79(both) Import TOTAL 251(both),62(both) Import PRINTERR 59(both) Imp.Errors 0 $006d ; Length Import IOERRSTA_ Import SET_MSGP Import _BMESSAGE Import PREFIXST_ 88(both),76(both),62(both),43(both) Import CHDDEVCD 33(both) Import CHKDSKDR 19(both) Import CHKIEEDV 16(both) Import CHKDEVNM 13(both) Import GSYSBLK_ 95(both).Errors 0 $0148 ; Length Import _SCREENSTART 151(both) Import SPAWN_ 148(both) Import EC_DATE 145(both) Import _CSTART 142(both) Import GETREC_ 131(both) Import PRINTF_ 118(both) Import COPY_ 95(both) Import GETDATE_ 92(both) Import MAKETIME2P 76(both) Im.LL _changeline,(,s) ADDD 2,s STD 2,s LDD txtcur CMPD range_end QUIF HS CALL _offsetbyp,#1 STD txtcur CMPD range_end .ort DOINT 51(both) Import PREFIX 72(both),67(both),10(both) Import ENTRIES 85(both),7(both) Import ROWUP 4(both) Import ENTRYERR 191(both),172(both),128(both),113(both),54(both),1(both) Export RITHMETIC=$0000 Reloc 0,246(both),0,218(both),0,194(both),0,1. CEQ _chrget DONE 2 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :perform change on cursor line. ;parameters:# of matches needed to change. ;returns :true/false; a change occured? ;destroys . ,48(both),22(both),10(both) Import GIOBLK_ 5(both) Export DPARSE=$0000 Reloc 0,85(both),0,73(both),0,59(both),0,40(both) Object 34061f01bf0000ec04fd0000bd0000bd0000bd0000be00006f0a6d9f0068270fbd0000dc683406cc 0066bd00003262be00006d0b260edc683406cc0068bd0. port COPYSTR_ 34(both),19(both) Export _TITLE=$0000 Reloc 0,115(both),0,31(both),0,16(both) Object 9e223089ff019fd23088dd9fb03410cc0142bd000035103088e79fc23410cc013cbd000035103088 ec9fd06f843088889fa86f843089ff019fa66f843088af9fa46f84301f9fae32761f40bd00. UNTIL HI CALL _pointerofp,cur_line STD txtcur CALL _printscreen CALL _message,#14,(2,s) ;"# OCCURANCES CHANGED" ENDIF DONE 4 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\. 75(both),0,138(both),0,131(both), 0,116(both),0,46(both) Object 7f00007f00007f00007f00001f12e6828613c12e2711c124270dc1252709c1442705e6824a26eb1f 21c12e2605bd00582003bd00007d00002708bd00007f000020157d0000270df60000c1252603bd00 00bd00007c0000391f12e682c12a. :x keeps: _changeline PSHS d PUSH #0 ;change counter. PUSH main_buf ;working buffer. LDD txtcur CMPD txtbeg LBEQ out CMPD txtend LBEQ out b0003262200cdc683406cc006abd00003262 dc683406cc006cbd00003262c646be0000e70c3262393a00300031002400 both),76(both),62(both),43(both) Import CHDDEVCD 33(both) Import CHKDSKDR 19(both) Import CHKIEEDV 16(both) Import CHKDEVNM 13(both) Import GSYSBLK_ 95(both).001f40 3406cc000b3406dcd23406bd0000bd000032649ed26f0b3410dcae93208300043406cc0099bd0000 32e810cc00503406dcd2bd000032629ed26f8b1f10bd0000cc0000bd00007e00000c256e43414c43 3a20202020436f707972696768742031393835206279204469636b204261726e6573256e45444954 4f52.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :define replace string and store. ;parameters:none ;returns :none ;destroys :x keeps: repl_parse EQU * push alternate_buf LOOP LDB chrgotchar QUIF .2729c12b2725c12f2721c12d271dc1202e067c00007e0100c12e 270bbd000026067c00007e0100e68220d3f70101300134101f103420bd0000cc0000bd0000326235 10e6831f123121c1202e067c00007e0100c1202f13c12e270bbd000026067c00007e0100e68220e9 30011f103420bd00003262cc0000bd0000b6010. ;at least it will work on a legal line. CALL _fetchtext,txtcur,(,s) ldx main_buf clr -1,x ;previous byte in line must be a null. LOOP LOOP ;search till something to replace. 1 call tbreak_ quif ne GUESS LDD 4,s QUIF EQ SUBD #1 QUIF EQ STD 4,s ADMIT ;replace if the count allows. .3a2020436f707972696768742031393834206279204a6f6520426f73746963256e256e202564 20627974657320667265652e256e256e446174653a202573256e54696d653a202573256e256e456e 746572206461746520616e642074696d65206f722070726573732052455455524e256e006469736b 2e00746578743a6. EQ CMPB #"/" QUIF EQ CMPB #"%" IF EQ CALL _chrget GUESS CMPB #"&" QUIF EQ CMPB #"~" QUIF EQ `1812b26035f2012812d2604c602200a812a2604c6 042002c6068e0102ad95cc0000bd000039000000000000000000 28613c12e2711c124270dc1252709c1442705e6824a26eb1f 21c12e2605bd00582003bd00007d00002708bd00007f000020157d0000270df60000c1252603bd00 00bd00007c0000391f12e682c12a. CALL _matchp1top,(4,s),prevsrchstr_buf,main_buf QUIF NE LDX ,s LDB ,x+ BEQ ender ;reached the end of the line without a match. STX ,s ENDLOOP .  &$턟(ݾ4k!&1̐} ܤ4bH2ḇ4̱K2b44b2b52b2$~̱4̱K2b9g &Iܲ'1$$&#/($* нM,'$ݶܬݪҽ 944& *&oa/'500 40 3406cc000b3406dcd23406bd0000bd000032649ed26f0b3410dcae93208300043406cc0099bd0000 32e810cc00503406dcd2bd000032629ed26f8b1f10bd0000cc0000bd00007e00000c256e43414c43 3a20202020436f707972696768742031393835206279204469636b204261726e6573256e45444954 4f52.mand. CALL repl_parse ;parse replacement text. CALL _syntaxchk ;check for extra stuff. SET2 txtcur,range_start LOOP CALL tbreak_ QUIF NE CA.'b0bd&'504 b'o$ҽb2f9b2`B46d4dH2bm'om'm&0& d'<&60404b4bH2b2bĮb:4oc4g 2b5O dE4EĂ# 1bĉ4d4bH2b2bb4h. ADMIT ORB #%10000000 ENDGUESS ENDIF STB [,s] PULS x INX PSHS x CALL _chrget ENDLOOP CLR [,s] CMPB #"/" .1/&1V&BVܲ$&佑bb$$ $#ܬ$b452b2d9ܦ4'$/' %&&'~' ʀ504 o/&2b9444$&'('4$2bo4ܨ4d2d& 'I 彰&@d' 'd '4ܦ4d72d/ 2bb29ܲ'1$ݬ$(&Ľo2~׹ֻZP="ܦ"׺'2Z&̔4?2b&oj&O aҽEP-B01P4 -] +1'4 ' &04ܦ4bH2b5 '0o&ҽ4̃5&#$ݶܬݪa 'D/string defined.Illegal default device.%S%S - Lines transferred %D.%DNo line range allowed.%D Occurrences changed.%D lines of text.Memory full.Replacing string too long.%D bytes of free memory.*Illegal destination line.Not enough free memory./erange>̐4̑e4̓44٩ OJ&0_  1?&m'[42b] 4h2bfbm'$0何'[4 2b何']焞:.0/4fH2bҽE0.턮dm&d"0Ȁ' b0b0&& m&*/? j ѐ2ܲ ݬܲ$e$''8ܼ# (&ܾ422b_9J44&l 9#'/'\'@'&laD laDa'O4d4̐W2d佟J2d9 prINTprINTpUTpUTcHANGE/\dELETEgETiNPUTeCHOmOVEuPPERlOWER#runexitse/a '  ~ 2b9$ݶܬݪ9.ƃ$4ܴ4ܲ4ܼ2d4'$aa$ݬm&2b94ܨ4' b&_' &EӨ_'@%&4^'$' .'~' ʀ*&䜨''  瀯 oܨE& 5 _2c944f'& & / ݾ945b/9Oֻ44b62bл4ܬ- .佝IVcP=0" Z+ 2d9c~4"所牀5ZP=c"94&-?(.:&'('4bV2boP"0' "2b9<=============================BEGINNING OF FILE======/ 2~н 'Cm'/$&'%(' a'$ҽ' 佝a'2b9a '佝a'2b9?&'2b9ܤ2b 'ܤ4ҽH2b$ݲݴ̽&P4' ' '2b 05ƽн+&~c&'' '' \# ~5::섽9o⽞ҽ/ <~'9b' 9o⽟J"''' 佟D㽟J' & mb&oƽD_' b''D&2c9h4h4̖gW2b2b'h'0.&hh9diskhosth4h4̖gW2b2b'4h_' .'\0 O4# ~84f4hK2d5bo o94(& ')&5/ tUPmonITORtaLKdiRECTORYcaTALOGnAMEdefAULTscrATCHrENAMEmouNTcoPYdaTEtiMEtabSEThELPexECUTEfREE@tYPEprINTSaves textAlters textSearches for matchSearches for no matchPurge textLoad textAutomatic text entryDuplicate textTransfer t/ fb''m'f怯fja'oa& bh'&& m'&&'4'5't&X怯f'b'& 1?b 5m&bm' h4h4f2d&bm'0b 2d9`&' b&b Ja2d9o➦4oܦ4ܨ4d2db&5m4&b2c9/==========================><================================END OF FILE===================================>4eaP=4bhP=À4eP=À4d4d4dK2d2h9ZP=ÀO J*9ֻֻZP=ֺ:0Ȁ & "0Ȁ94&'(' 4b2b 2b9/$444ܲ$ݬ&}ܴ4$42d&mf'_'^$ݬfܴ4~5&H44ܤH2bd㽗bb& $ݬὝݴ$($#_ bdݬ$b2g9o/'\' %m'' &00 ','j91̞ƞ/h4h4̱$W2b2b9]* - " -"2'X~eʘGg\bEX]p嗾EߚP   #~YOֻ4ܬ,"0Ȁ׺Oֻ׻44b/2b2b5c#$ݶܬݪ~Y9׹o~Y4$V5oQ/extMake upper caseMake lower caseShow line numberRun editorLeave editor & save textSet ACIA chipEnter ML monitorEnter 'PASSTHROUGH' modeOne column directoryTwo column directory (sorted)Rename textRedefine assumed deviceRemove file from disk/}P&1P4ܦ~f\k2~/' \'' (4&&42d_& P+&(442d 1-&&442d .& $&($4$ݬ9$4f$&4` ]/'\'$ O4&5 +V/&&&b.#4d('44db2b52b 94&, 1!:(-542ݬὝI$9Ӭ, /ܾ9& $/ (':1?& '&'01!&9h' #29̝ ̝4 & 4 Oֺ4ֻ62b49 Oo_4\'u/~xrl f`ZTNHB<60*$ 454$ݶܬݪ4o' %Ā&  0 &o m'9O' 0L'#M'"#14 b4bH2b2b îb_\m&4\O4$2b&$\4eH2b$:焽2e9Z4cj'/~j?~<#e4ܤH2bֹ o4ֺ4$(& #eoҽw'<2c9$ݶܬݪY5׺׹~$&'('ܤ4$V2b$Y94:462b4̘2b2b9%S?462b94̘2b9<'RETURN' or Command>4Yd462b佰/Change name of file on diskInitialize diskTransfer fileShow/rename date and timeShow time, rename date and timeShow/set tabstopsShow command summaryMacro keyboard entryFree memory availableSend command to diskExamines a filePrints formatted te/$54'/' \'& $i&5c$_2e9a$ $2d9$4ݼ*& &ݲ( T|& (ݲ& E 'T$ݲ,&$ '>$ &ܲ$^& 콝 &&  ܲݴ$ ݼ _4a$ݬ59ܴ$ 4ܲݴ5ݲ9 & ]9/]'a&ca&o'Ya- . o/@ '<'-')P& a - m&ֹ&jaJ &La '& a'& 2 '׺a&ܤ4̞2b a'\' &S & _ҽn5%s4P=À4bJP=0砬/ $ j䧠Z&  o2a942|(넉hb""d4fj4hK2d(h(ܴhݴ2f94(:4bf4bd4f4dK2b2b(h(ܴhݴ2f942@4*..4bH2b.oO_2,9P  < C I # w  e  :/oҽm'ܤ4ҽH2bYݭ٩O2b9 ׻׺<:?F462b̙5~$ ݬ$ݶܬݪ42b94.,5$&9ܬ4c4*b-< Zb//b44fA2d44b2b2b ''-4b4b4A2d2b4/xtqzؔؔݔߔqߔݔ䔅䔅ݔݔݔݔqݔݔݔꔑꔑqꔨqꔑꔨꔑꔴꔴ”ݔqݔɔqqFileName/srch/repldestination[FileName] to FileNamedevice-name[date] [time]{tabs}command-stringtextlin/Ƚ!' Ƚ$' O9h'4ƽhT2b9 &9 '9 1 O4dZ'm&m&4g4g4d2db'~2c9Say what?Missing Filename.!Illegal line range.Illegal search string.Search string not found.Search string required.No search 0&2c &$o!9oX%T'm& j9 +o⎟$'lm&m'2a9c0a2B 5 1  ޽ н , н 3 ̰< ̰94ZZo4b5\:/2b~,h4愽$'h0/ 齰     콰 = <   0 f _ 콰 W h c   =     k   ~ 콰       ν  ӽ   { > /2b$ݶܬݪ2d9Oֻ4'4b4A2d׹׺5~wOֻ'444dA2d2b~ ~w$&&"ֻ'44A2d  #ֻ' $ݶܬݪ~Y~Y׺$(&"ֻ'44A2d  #ֻ' $ݶܬݪ9( 044d2dooP"14 O'0L LP" 5Ȁ焽r&݂ & &݂ &佰'rr\ὰ~ &~ܦ4P2bܦ & ~24ܦV2b4̛꽰Q2b~.$4 2b9H2~ܲ$ݬܴܴ40 '0hho4h01d$4 40&}=' =>=~kb5&9W<悆.'$' %' D'J&!.& }W'= }<' <%&|9*')+'%/'!-' .|W~.' $&|W~ 044 Q̓ܽ2b51! .|W~0K2dmd'$- "ܲ$ܲ$# $$ݬ2e9u2~~,'2"0Ȁ焽r~ 44̝ý?2b&̝?2b9TOtob4' 22b94׸' d4̞ 2b佰4f4b 2b2bOָ2b9: 42z@efB0 -L 0je0O$&oaO佰$&85C= 484m'qoa':' 4$5&jm''佰8m& B2|d&,@Bo& 4 >5 l':& 4 D5 2a@2dJb'4̓m' {2bܦ ܦ~%S4P2b4V2b~405* /.& &-& (&-  &~ &~ |W~4| #|W~ }' }&|W }'|W5&9|}&۷ 뱓'|W9ag'a`}b' c4 ̓ܽ4̓ܽ̔4452b5 |&|9|~`> E&`~k|`.&}&oz` 044d2do佰S'(佝&!ҽ׸'ܦ4̘ 2b&0 4ܦ4ct2bcݬn$'~2d9Out of memory: Aborted: &ݲ(ݴ  4m'o44̱z2b5m'4 ܲ$&&$('d4$2bb'ҽ ҽE4440 /.' $&|W~ 04 Q2b̓ܽ+&_ -& *& ̕=T906BH}W'=~<4f54=J&5}W'=~4f5+&=$4̙42b5=~-& 45~*&'=4ܽ`%+' 4̚`42b5=~0': o2h9P2@4ܰH2b2@4нH2bܦ4P2b'#ܦ4½H2bܦ4ܰQ2bܦ4н 2b @ܰ4ܦ H2bܦo44ܦH2b5 '#P4P2b' ' P4P2b@4H2@4H2 ~  < Ľ 5 ڽ <0P2b4佰2b9O44,&>P/PbHoLZlbb &۽JobbX4̓2blbb &~%S %D _ 2A4ܰ44̱(ݰн=55ݰܦ hoa4hH2bܦ4ܦ4b2b4ܮ(4f#( O_4ܨ4fb2b'4o(040`` .04#o o9O4|Ǧ '(-'$.&4~u9& }'0 }'4 }'14|`>5&9`.94}'̕=o&̔ O4̕"2b9Work stopped at maximum of 255 entries%d number entries summednries summed%n9"0f2d2bܦ4b2b&)0'ܦ4̙ 2b&$' 4ܬn$at'~2d9Aborted: 4'w<&l4 (&< _&040d4b2b50Z A& 40佰50 2&"40佰E44d4̚W2d2b50'Z &><!5 o 94$&O'0/&B='+ |W~j4'+ |W2b}W'̚42bW=<~ f=~9b9=4$&CS4̒b̒b4̚2d5=9<=愧' 9RESULT EXCEEDS 65535. Recompute in Floating Point.ENTRY ERROR: 1) A Digit above 32767 ($0 㽰 н 1   ޽  U r  g 齰 C A I н   ҽ  3 ѽ  =ֺ}W&}' }='P9}=&ֺ̐42b ֺP94$0b4jb2b' ܦ4dH2b&?b'"&]'#k4d2b'5040bEbbܮb#$mj&?o".牀0"(0'''4섽5' j0b&m&2d}P'̱4P2bbP4d2b׼٩̗^4ܨ4̗Z4ht2f'A(0'944&̗^04db0|av~W}W'= &f}W'= ~<%&z|9='|W~eO4 D'$'9%'hz&|W~[ D'4$&|W~[z },|W~[$&}/ 04z.,|W~[4z-&|W~[ ҆b%'(0&4 1&4 }b& &|b 0U1!O4$*5$&?O>&L>+'#-'O$&' 1!O4$!5$&O>& ' 1!O4$$5$&O>&5'o? 59nulsohstxetxeotenqackbelbshtlfvtffcrsosidledc1dc2dc3dc4naksynetbcanemsubescfsgsrsus4̱z2b4"0Ȁ焽rr17fff), or 2) Division by 0RESULT EXCEEDS +32767 Decimal. Recompute in Floating PointRESULT IN Two's Complement. Value below zero is: -$%sW#& =&2 |W}W'=9='|W~04̛42b݂'4]&o,55 & Ob02bm&0 瀌&$00=' ҽ9STotal Buffer is Empty̐42b9"ÀOd&D@& =& D' %'$' <9Wڎ܆=$ "|W}_'X }`'}' Ƚ!~V}_&! 04nR4lt2h&^&&2b2bob&oom& ܨ4db2b4db2b'ܦ4ܨH2bo&Fܦ4db2b'ܦ4H2b&&dL46ft2f&^&Oܨ4ܦH2b& dL46ft2f^̗^4ܦ4̗Z4ft2f\^ 2db1Bank 0 clmstart.b09 = 9000 - 907f . 0080 _c.b09 = 9080 - 9301 . 0282 _i.b09 = 9302 - 941c . 011b _srch.b09 = 941d - 95eb . 01cf _renam.b09 = 95ec - 9609 . 001e _mon.b09 = 960a - 961f . 0016 utils.b09 = 9620 - 9830 . 0211 message.b014̕<$= @ ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :get a line from user according to current editor status. ;parameters:none ;returns :.b= last character entered, .a2 CMPB #8 QUIF EQ ;on standard right moving chars. CALL tgetcurs_ CMPB #crtwidth IF EQ ;right-hand screen modification. 2 keeps: GUESS line_input LDA modeflag ADMIT sline_inp CLRA ENDGUESS CLR [main_buf] ;just in case. CLRB PSHS d ;.flag,char,rts LOOP next LDB ,s INC2putcurs_ ENDIF ENDGUESS ENDGUESS LDB 1,s CALL putchar_ ENDLOOP ; process line now. LDD kbin CMPD orig_kbin IF NE GUESS 2 ;standard flag. COMB ADMIT CMPB #$ff QUIF NE ;word wrap flag. LDB #1 ADMIT ;no modification flag. CLRB ENDGUESS STB ,s CA2= MOD flag (0= line NOT modified, ; 1= word wrap needed, ; -b= line modified). ;destroys :x keeps: GUESS _sgetline LDD2 GUESS ;must be a real character. LDB 1,s CMPB #" " QUIF LT ;line must have been modified. TST ,s 2B QUIF EQ ;word wrap mode OUT flag! LOOP CALL fgetchar_,kbin ;get only one char from user. TSTB UNTIL NE CALL convert ;sense other non standard keys. 2 CALL eof_ QUIF NE LDB 1,s CMPB #3 QUIF EQ CALL tbreak_ QUIF NE ADMIT LDB #2 STB service_ ;flag that input file is2LL _cstart,main_buf ;analyze first char. PULS d,pc ;return modflag/character in a and b register. t_str FCS "%s" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :maps a screen line to 2 #sline_inp ADMIT _getline LDD #line_input ENDGUESS PSHS d TST modeflag IF EQ ;command mode. LDD #1 PSHS d LDD #cmdline ELSE 2 QUIF NE ;must be IN word wrap mode. LDB modeflag CMPB #3 QUIF NE ;word wrap flag. DEC 2 STB 1,s CALL is_end ;check for ending character. QUIF NE LDB 1,s CMPB #14 ;command fetch AND DO. IF EQ CLR ,s ;line has been modified. ENDIF QUIF2 empty. ENDGUESS ENDIF CALL tgetcurs_ TST modeflag IF NE STA textrow STB textcol ;reset textcol IN text mode. ENDIF LDB 1,s CMPB #14 3the input buffer. ;PARAMETERS:none ;RETURNS :none ;DESTROYS :x, y KEEPS: map_line CALL tgetcurs_ PSHS a LDB #80 MUL ADDD #screen_ PSHS d ;start OF next row. 2;text mode. CLRA LDB textcol PSHS d LDB textrow ENDIF CALL liftcurto_rpcp1 LEAS 2,s ; cursor has been set to right position. CALL flp_cursors 2 ,s ENDGUESS LDB 1,s CALL putchar_ CALL tgetcurs_ DECA ;move back up to proper line. CALL tputcurs_ 217 ;"TOO LONG..." ENDIF ;if new line wouldn't be too long. LDD 2,s ADDB found_len ADCA #0 PSHS d CALL copystr_,(2,s),(4,s) ;close up space. LEAS 2,s CALL2 EQ GUESS LDB 1,s CMPB #7 ;==> QUIF LT ;<== CMPB #9 ;tab QUIF GT ADMIT CLR ,s ;flag that line has been modified. ENDG2 IF EQ ;special command fetch AND DO. CALL printf_,#t_str,command_buf LDB #13 STB 1,s ;simulate a carraige RETURN. ENDIF GUESS LDB ,s QUIF EQ 2 ;on CALL ([,s++]) PSHS d CALL flp_cursors ;off LDD ,s++ RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :gets a line from the user. ;parameterEQ TST ,x IF NE LDB #15 ADDB ,s ENDIF LEAS 1,s RTS newchrs FDB $637f,$9106,$9630,$10ff,$61ff,0,0 ter to alternate form if possible. ;PARAMETERS:character to convert. ;RETURNS 3;COMM keywords EQU 1 ;set if keywords tokenized in text. XDEF _commander XREF tbreak_,copystr_,___neg XREF _command_num,_fetchlines,_numberofp XREF _chrgot,_cstart,_chrget XREF _message,_offsetall,3 CMPX ,s UNTIL EQ LEAS 3,s LOOP ;remove any trailing spaces. LDB ,-y CMPB #" " QUIF NE CMPY main_buf UNTIL LO CLR 1,y ;END IN 3main command controller. ;PARAMETERS:NONE ;RETURNS :none, but may alter service_. ;DESTROYS :all KEEPS: _commander LEAS -2,s CALL kbenable_ CALL _clrcmd ;clear the command line. rout1 CALL _getline ;get line 3 CALL _reprintrow ;reprint line. ENDGUESS ENDIF CALL _dochar,(,s) ;now it is allowed to do the keypress. LDB 1,s CMPB #$81 LBEQ rout1 ;if 'fetch line' 3 save it. CALL copystr_,main_buf,command_buf CALL _clrmsg ENDIF ;normal line range and command getting and doing. dispatch SET2 range_start,txtcur ;default in case no line ranges specified STD ran3 _bmessage XREF _scanner,_offsetbyp,fix_range XREF _dochar,_clrcmd,_printscreen XREF _getline,_reprintrow,_clrmsg XREF _comprint,_deleteline,_inserttextm XREF _pointerofp,spawn_,kbenable_ XREF ec3 NULL. RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :checks to see IF a line END character. ;parameters:character to check. ;returns :true/false. ;destroys :none is_end CLR ,-s A3 from user. STD ,s TST modeflag IF NE ;in text mode. TST ,s IF NE ;modified line. GUESS LDD txtcur CMPD txtbeg 3then get command again. ;otherwise it is done for now. DONE 2 ENDIF ; in command mode. GUESS LDB 1,s CMPB #$0d QUIF EQ ;if a return was not entered then 3ge_end SET2 multi_copy,#0 CALL check4multi ;is this a multi command? BNE multi GUESS PUSH chrgetpointer CALL _command_num ;get command number. QUIF EQ CMPB #8 3_null XREF ec_list XREF ec_print XREF ec_printl XREF ec_put XREF ec_putlines XREF ec_change XREF ec_search XREF ec_delete XREF ec_get XREF ec_input 3SLB IF CC LSRB LDX #endchrs LOOP CMPB ,x+ BEQ END_ TST ,x UNTIL EQ ELSE END_ DEC ,s ENDIF LDB ,s+ SEX3 QUIF EQ ;not at begining of text. CMPD txtend QUIF EQ ;also not at end of text. LDB 1,s CMPB #3 QUIF EQ 3no command can be done. CALL _dochar,(,s) ;do control or function char. LDB 1,s CMPB #$81 LBEQ rout1 ;if 'fetch line' then get command again. DONE 2 ENDGUESS CALL _chrgo3 QUIF EQ CMPB #9 QUIF EQ LEAS 2,s ADMIT ;a line range specified. PULL chrgetpointer CALL _chrgot CALL _fetchlines ;get line ranges. JE3 XREF ec_echo XREF ec_move XREF ec_upper XREF ec_lower XREF ec_number XREF ec_run XREF ec_exit XREF ec_setup XREF ec_monitor XREF ec_talk XREF ec_direc3 RTS endchrs FCB 1,2,3,10,11,12,13,15,16,17,18,19,0 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :converts a character to alternate form if possible. ;PARAMETERS:character to convert. ;RETURNS 3 ;also the stop key (ie. text recovery key) was not pressed. CALL _deleteline,txtcur ;remove the old line. CALL _offsetall,#-1 ;backup one because it will CALL _inserttextm,main_3t ;skip past spaces. CMPB #"?" IF EQ ;retreive last line command. CALL _chrget ;analyze past '?'. IF NE DONE 2 ENDIF CALL _compr4Q ___neg ;error in parsing line ranges. CALL check4multi ;is this a multi command? BNE multi CALL _command_num ;now get command number. GUESS CMPB #1 ;just l3tory XREF ec_catalog XREF ec_name XREF ec_default XREF ec_scratch XREF ec_rename XREF ec_mount XREF ec_copy XREF ec_date XREF ec_time XREF ec_tabset 3 :converted character (or original) ;DESTROYS : KEEPS: convert LDA kyindx_ CLR ,-s LDX #newchrs LOOP CMPD ,x QUIF EQ INC ,s TST ,x++ UNTIL 3buf ;insert text at next line. CNE _printscreen ;out of memory. IFNE keywords CALL _reprintrow ENDC ADMIT ;recover text. 3int,command_buf ;prints buffer to command line. LBRA rout1 ;short curcuit back to line input. ENDIF LEAS 2,s TST chrgotchar IF NE ;if there was anything entered then 3LDA 2,s DECA LDB #80 MUL TFR d,x LEAX screen_,x LDY main_buf LOOP LDB ,x+ ANDB #%01111111 ;kill any REVERSE field. STB ,y+ 3 XREF ec_help XREF ec_exec XREF ec_free XREF ec_dcommand XREF ec_look ;INCLUDE ;INCLUDE ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :the 4r STD cur_line SET1 (6,s),#$ff ;flag that it wasn't an original error. CALL _numberofp,range_end PSHS d CALL dispatch ;do command. PULS d BNE 4 FDB ec_search FDB ec_search FDB ec_delete FDB ec_get FDB ec_input FDB ec_echo FDB ec_move FDB ec_upper FDB ec_lower FDB ec_number FDB ec_4eased by one for every new command that is allowed ; to have a line range. Be sure to update the list in this file. If a new ; command is not allowed to have a line range then leave this number alone. CMPB #16 JHI _message,#4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :checks to see if this is more than a simple search. ;PARAMETERS:none ;RETURNS :is this a multi-command? ;DESTROYS :x KEEPS: GUESS check4multi CLR ,-s LDX chrgetpoi4 ;dparse XDEF dparse XREF prefixst_,gioblk_,gsysblk_ XREF chkdevnm,chkieedv,chkdskdr,chddevcd ;include ;include dparse PSHS d TFR d,x STX gioblk_ LDD 4,x 4 notgood ;no error, so command is 'repeatable'. PSHS d CALL copystr_,command_buf,main_buf CALL _cstart,(4,s) CALL _chrgot ;reset everything for next search. LDD 2,s4 run FDB ec_exit FDB ec_setup FDB ec_monitor FDB ec_talk FDB ec_directory FDB ec_catalog FDB ec_name FDB ec_default FDB ec_scratch FDB ec_rename 4 13 ;no line ranges allowed past LOWER command. ENDGUESS LDX #p_command ABX ABX CALL spawn_,(,x) ;do command. RTS multi CLR ,-s ;parse error flag. call _clrmsg 4 nter LDB ,x+ CMPB #"/" QUIF EQ CMPB #"\" QUIF EQ ADMIT ;at least it starts correctly. LDA #"%" LOOP TST ,x BEQ thru 4 STD gsysblk_ CALL chkdevnm ;parse device name. CALL chkieedv ;parse device number. CALL chkdskdr ;parse drive number. LDX gsysblk_ CLR 10,x ;set sa to zero (ie. load). T4 ADDD multi_copy STD 2,s LDD ,s SUBD multi_copy STD ,s LDD multi_copy IF EQ CALL _offsetbyp,#1 ;move to next line for processing. FDB ec_mount FDB ec_copy FDB ec_date FDB ec_time FDB ec_tabset FDB ec_help FDB ec_exec FDB ec_free FDB ec_dcommand FDB ec_look FDB ec_4 ;no error upon entry. CALL fix_range CALL _numberofp,txtcur PSHS d ;cursor must remain unmodified. PUSH chrgetpointer ;used for resetting the command. PUSH multi_copy 4 CMPB ,x ;search only for a match of the first delimiter. QUIF EQ CMPA ,x IF EQ INX ;skip any control character. ENDIF INX 4ST [filename_] IF NE CALL chddevcd ;parse '.'. CALL prefixst_,#colon__,filename_ ;put in ':'. ENDIF LDX gsysblk_ TST 11,x IF EQ ;defaults to drive zero then. 4 STD txtcur CALL _numberofp STD cur_line ENDIF CALL _pointerofp,(,s++) STD range_end LDD txtcur CMPD txtend QUIF HS CMPD range4;DIR XDEF DREADF_ XREF DIRREADF_,copystr_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :Reads in a directory. ;PARAMETERS:i/ob ~ location to p4 ;counter of lines deleted this multi. SET2 txtcur,range_start CALL _numberofp STD cur_line LOOP CALL tbreak_ BNE notgood CALL _scanner,#1,txtcur,range_end ;search 4ENDLOOP ldb 1,x QUIF EQ cmpb #"," quif eq ;yup, its a multi-line command. DEC ,s ENDGUESS thru LDB ,s+ SEX RTS ec_bad CALL _bmessage,#1 ;comma4 CALL prefixst_,#zero__,filename_ ;drive two. ELSE CALL prefixst_,#one__,filename_ ;drive one. ENDIF CALL prefixst_,#dollar__,filename_ ;put in directory symbol. LDB #%01000110 ;ca4_end UNTIL HI GUESS CLRB ADMIT notgood LDB #$ff ;flag for error in processing. ENDGUESS ;restore for continuity. STB 2,s LDD ,s STD multi_copy 5ut directory entry. ;RETURNS :condition of read. ;DESTROYS :x KEEPS: DREADF_ PSHS D LEAS -40,s TFR s,d PSHS d CALL DIRREADF_,(42,S) ;read directory to buffer. CMPD #1 4for a match. IF EQ TST 6,s CNE _clrmsg ;no error if scanning to eof. CLRB ENDIF QUIF EQ ;a correct line was found. CALL _numberofp,txtcu4nd vector table (add vector to new command to this table). p_command FDB ec_bad FDB ec_null FDB ec_list FDB ec_print FDB ec_printl FDB ec_put FDB ec_putlines FDB ec_change talog bit code. LDX gsysblk_ STB 12,x DONE 2 colon__ FCS ":" zero__ FCS "0" one__ FCS "1" dollar__ FCS "$" LDX gsysblk_ TST 11,x IF EQ ;defaults to drive zero then. 4ine range. QUIF EQ CMPB #3 ;line range print. QUIF EQ CMPB #5 ;line range put. QUIF EQ ADMIT INCB ENDGUESS ; This number must be incr4 ;restore "lines deleted" value. LDD 4,s STD cur_line CALL _pointerofp STD txtcur CALL _printscreen LDB 2,s SEX DONE 7 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\5;_DT XDEF EC_DATE,EC_TIME XREF _CHRGET,_CSTART,_CHRGOT XREF _MSGREADY XREF _FETCHNUM,MAKETIME2P XREF SUICIDE_ XREF SCANFNAME XREF ISDIGIT_,TPUTCHR_ XREF PRINTF_ XR5;_MOUNT XDEF EC_MOUNT XREF _SYNTAXCHK XREF SUICIDE_,DEF_DEVICE XREF MOUNT_,CHECKOUTFNAME ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\5 S,D CALL GETTIME_ ;ACTUAL TIME VALUES. TFR S,Y CLR ,-S ;COUNTER OF TIME VALUES. LOOP LDB CHRGOTTYPE CMPB #$03 QUIF NE PSHS Y 5;_SCRAT XDEF EC_SCRATCH XREF _SYNTAXCHK XREF SCRATCHF_,CHECKOUTFNAME ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :EDIT SCRATCH COMM5 ;_HELP XDEF _COMMAND_NUM,EC_HELP XREF TABLELOO_,LENGTH_ XREF COPYSTR_,PUTNL_ XREF _CHRGOT,_CHRGET XREF _HOLDIT,_PAUSE XREF _PRINTSCREEN,ZNDCLR_ XREF _SYNTAXCHK,SUICIDE_ XRE5 EF GETTIME_,SETTIME_,GETDATE_,SETDATE_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :EDIT DATE AND TIME ROUTINE. ;PARAMETERS:NONE ;RETURNS :NO-REPEAT FLAG. ;DEST ;PERFORMS :EDIT MOUNT COMMAND. ;RETURNS :NO-REPEAT FLAG. EC_MOUNT CALL CHECKOUTFNAME,#-1,#INPUT_BUFFER CALL DEF_DEVICE,#INPUT_BUFFER,#INPUT_BUFFER CALL _SYNTAXCHK CALL MOUNT_,#INPUT_BUFFER JMP SUICIDE_ 5 CALL _FETCHNUM PULS Y LDA ,S STB A,Y INC ,S CMPA #3 QUIF EQ LDB CHRGOTCHAR CMPB #":" QUIF NE AND. ;RETURNS :REPEAT FLAG. EC_SCRATCH EQU * CALL CHECKOUTFNAME,#-1,#INPUT_BUFFER PSHS D CALL _SYNTAXCHK CALL SCRATCHF_,(,S) DONE 2 CALL MOUNT_,#INPUT_BUFFER JMP SUICIDE_ 5F SCREEN_,CURPOS_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :CONVERT INPUT LINE TO COMMAND NUMBER. ;PARAMETERS:NONE ;RETURNS :COMMAND NUMBER OF LINE. ;DESTROY5ROYS :X, Y KEEPS: GUESS EC_DATE LDD #-1 ADMIT EC_TIME LDD #0 ENDGUESS PSHS D CALL SCANFNAME PSHS D TST [,S] LBEQ SHOWTIME ;FIND OUT IF IT'S A 5 ;ONE CHARACTER NON ALPHA COMMANDS. INC 1,S CALL _CHRGET ENDGUESS LDB 1,S IF NE CLRA PSHS D PUSH (4,s) CALL TABLELOO_5 PSHS Y CALL _CHRGET PULS Y ENDLOOP LEAS 1,S TFR S,D CALL SETTIME_ LEAS 4,S ENDGUESS SHOWTIME CALL _MSGREADY LDD 2,S IF 5ET_COMMAND FCS " " ;NULL LINE. FCS " " ;LINE RANGES. FCS "prINT" FCS "prINT" FCS "pUT" ET_COMS FCS "pUT" ;LINE RANGE PUT. FCS "cHANGE" FCS "/" FCS "\" F5S :X KEEPS: _COMMAND_NUM CALL _CHRGOT ;MOVE PAST LEADING SPACES. PUSH CHRGETPOINTER PUSH #0 ; .00,00,POINTER_TO_BUFFER,RTS LDB CHRGOTCHAR IF EQ ; SET FOR NULL LINE. 5DATE CLR ,-S ;FLAG 00=TIME,ELSE DATE. LDX 1,S LOOP LDB ,X+ QUIF EQ GUESS CMPB #":" QUIF EQ PSHS X CALL ISDIGIT_ 5,#ET_COMMAND LEAS 4,S STB ,S ENDIF ENDIF CALL _CHRGOT LDB ,S DONE 4 ; When adding new commands be sure to insert its information into the lists in ; the same relative p5NE ;DISPLAY DATE. CALL GETDATE_ PSHS D CALL PRINTF_,#T_STR TST [,S] CNE TPUTCHR_,#" " LEAS 2,S ENDIF CALL MAKETIME2P,ALTERNATE_BUF CAL5CS "dELETE" FCS "gET" FCS "iNPUT" FCS "eCHO" FCS "mOVE" FCS "uPPER" FCS "lOWER" FCS "#" ;** all commands previous to here are allowed to 5 INC ,S ELSE GUESS CMPB #"#" QUIF EQ CMPB #"/" QUIF EQ CMPB #"\" QUIF EQ CMPB #"@" QUIF EQ ;DET5 PULS X QUIF NE DEC ,S ;IT IS NOT A TIME. ENDGUESS TST ,S UNTIL NE GUESS LDB ,S+ QUIF EQ ;IT IS A DATE. CALL SETDATE_,(5 osition for every list (including the list in "comm.asm"). ; If the new command is allowed to have a line range then place the command ; before the "#" on the lists and update the "comm.asm" file (the place is a few ; lines after the "dispatch" label). GL PRINTF_,ALTERNATE_BUF JMP SUICIDE_ T_STR FCS "%S" ENDLOOP LEAS 1,S TFR S,D CALL SETTIME_ LEAS 4,S ENDGUESS SHOWTIME CALL _MSGREADY LDD 2,S IF 6 ;** have a line range. FCS "run" ;insert new commands after this point. FCS "exit" FCS "setUP" FCS "monITOR" FCS "taLK" FCS "diRECTORY" FCS "caTALOG" FCS "nA5 ERMINE THE NUMBER OF ALPHA CHARS. LOOP LDB CHRGOTTYPE CMPB #$01 QUIF NE INC 1,S CALL _CHRGET ENDLOOP ADMIT 5,S) ;SETS THE DATE. CALL SCANFNAME STD ,S TST [,S] QUIF NE ADMIT ;IT IS TIME. LEAS -4,S CALL _CSTART,(4,S) CALL _CHRGOT TFR IF LE CALL copystr_,(2,s),(46,s) ;move directory to main area. LDX 46,S CLR 28,X ;Max of 28 bytes. CLRA CLRB ENDIF DONE 44 directory. ;PARAMETERS:i/ob ~ location to p6 FDB noline_p,fn_p ;NAME FDB noline_p,dev_p ;DEFAULT FDB noline_p,fn_p ;SCRATCH FDB noline_p,f2f_p ;RENAME ***23 FDB noline_p,dev_p ;MOUNT FDB noline_p6S "Transfer file" FCS "Show/rename date and time" FCS "Show time, rename date and time" FCS "Show/set tabstops" FCS "Show command summary" FCS "Macro keyboard entry" FCS "Free memory ava6ME" FCS "defAULT" FCS "scrATCH" FCS "rENAME" FCS "mouNT" FCS "coPY" FCS "daTE" FCS "tiME" FCS "tabSET" FCS "hELP" FCS "exECUTE" FCS "6MAND NAMES. PUSH #COM_DISC ;DESCRIPTION. PUSH #P_TYPE ;PREFIX/PARAM. PUSH #0 ;COUNTER. ;.COUNT,PARAMS,DISCRIPTION,COMMAND,RTS CALL ZNDCLR_ ;CLEAR SCREEN. MAIN LDX main_buf 6 I' OR 'COPY'. LDX main_buf LEAX 20,x CALL TEST,(,S) IF NE LDB #"[" STB ,X+ ENDIF PSHS X TFR Y,D 6 ,f2f_p ;COPY ***25 FDB noline_p,dt_p ;DATE FDB noline_p,dt_p ;TIME FDB noline_p,tab_p ;TABSET FDB noline_p,no_p ;HELP FDB noline_p,fn_p ;EXECU6 ilable" FCS "Send command to disk" FCS "Examines a file" FCS "Prints formatted text" FDB 0 ;params and lines. p_type FDB lines_p,fn_p ;PUT FDB lines_p,sr_p ;CHANGE F6 fREE" FCS "@" FCS "tYPE" FCS "prINT" ;this must ALWAYS be the last command in the list. FCB 0 ;COMMAND DESCRIPTIONS. COM_DISC FCS "Saves text" FCS "Alters text" FCS "Searches for 6 LDB #" " CLRA LOOP ;FILL WITH SPACES. STB ,X+ DECA UNTIL EQ LDX main_buf LEAX 20,x LDD #$5F20 ;"_ ". LDY 6 CALL QCOPY LEAS 2,S CALL TEST,(,S) IF NE LDB #"]" STB ,X ENDIF ENDIF LDX main_buf LDB #":" 6TE FDB noline_p,no_p ;FREE FDB noline_p,com_p ;DCOMMAND FDB noline_p,fn_p ;LOOK FDB lines_p,fn_p ;PRINT ;prameter text. fn_p FCS "FileName" sr_p FCS "/srch/repl"6DB lines_p,txt_p ;SEARCH FDB lines_p,txt_p ;NSEARCH FDB lines_p,no_p ;DELETE FDB line_p,fn_p ;GET FDB line_p,no_p ;INPUT FDB lines_p,des_p 6match" FCS "Searches for no match" FCS "Purge text" FCS "Load text" FCS "Automatic text entry" FCS "Duplicate text" FCS "Transfer text" FCS "Make upper case" FCS "Mak6 #13 LOOP ;PUT DASHES IN. STD ,X++ LEAY -1,y UNTIL EQ LDX [2,S] TST ,X IF NE ;INSERT LINE PREFIX. LDX main_buf6 STB 46,x LEAX 47,x PSHS x CALL COPYSTR_,(6,S) LEAS 2,s CALL LENGTH_,main_buf LDX main_buf LEAX D,X LDD #$2E00 ;".". STD ,X 6 des_p FCS "destination" f2f_p FCS "[FileName] to FileName" dev_p FCS "device-name" dt_p FCS "[date] [time]" tab_p FCS "{tabs}" com_p FCS "command-string" txt_p FCS "text" no_p FDB 0 ;line list. line_p FCS "6 ;ECHO FDB lines_p,des_p ;MOVE FDB lines_p,no_p ;UPPER FDB lines_p,no_p ;LOWER FDB noline_p,no_p ;# FDB noline_p,no_p ;RUN FDB noline_p,fn_p 6e lower case" FCS "Show line number" FCS "Run editor" FCS "Leave editor & save text" FCS "Set ACIA chip" FCS "Enter ML monitor" FCS "Enter 'PASSTHROUGH' mode" FCS "One column di6 LDB #"[" STB ,x+ PSHS x CALL QCOPY,([4,S]) LEAS 2,s LDB #"]" STB ,X ENDIF LDD main_buf ADDD #10 6 LDX 4,S LOOP TST ,X+ UNTIL EQ STX 4,S ;PRINT ENTRY. LDX CURPOS_ LEAX SCREEN_,X LDY main_buf LDB ,Y EORB #%1006line" lines_p FCS "range" noline_p FDB 0 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS. :DISPLAY A COMMAND SUMMARY. ;RETURNS :NO-REPEAT FLAG. EC_HELP CALL _SYNTAXCHK PUSH #ET_COMS ;COM6 ;EXIT FDB noline_p,no_p ;SETUP FDB noline_p,no_p ;MONITOR FDB noline_p,no_p ;TALK FDB noline_p,f2f_p ;DIRECTORY FDB noline_p,f2f_p ;CATALOG 6rectory" FCS "Two column directory (sorted)" FCS "Rename text" FCS "Redefine assumed device" FCS "Remove file from disk" FCS "Change name of file on disk" FCS "Initialize disk" FC6 PSHS d CALL QCOPY,(8,S) LEAS 2,s STY 6,S LDX 2,S LDY 2,X TST ,Y IF NE ;INSERT PARAMETER. ; DO NOT ENCLOSE IN "[]" IF 'D700000 ;ACCOUNT FOR CURSOR. STB ,Y LOOP LDB ,Y+ QUIF EQ STB ,X+ ENDLOOP CALL PUTNL_ LDX 2,S LEAX 4,X STX 2,S 7;_TAB XDEF EC_TABSET XREF _CHRGOT XREF _MSGREADY XREF _FETCHNUM,SUICIDE_ XREF PRINTF_ XREF TABGET_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n CMPB #10 UNTIL EQ JMP SUICIDE_ T_STR FCS "%S " T_NUM FCS "%D " P. INC 2,S LDA 2,S CMPA #10 UNTIL EQ ;DISPLAY THE TABS. CALL _MSGREADY 7;_name xdef ec_name xref checkoutfname xref _bmessage xref copystr_,prefixst_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS 7 LDX ,S INX STX ,S CMPX #TXTBOTTOM-3 IF EQ CALL _PAUSE BNE ALLDONE ;A COMMAND WAS ENTERED. ENDIF TST [4,S] LBNE MAIN 7 ;_get XDEF ec_get XREF _offsetbyp,_pointerofp XREF _inserttext,_printscreen XREF errorcheck XREF tbreak_,closeup,openup_4p XREF prefixst_ XREF fgetrec_ XREF eof_,suicide_ 7 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :EDIT TAB COMMAND. ;RETURNS :NO-REPEAT FLAG. EC_TABSET CLRA PSHS A ;COUNTER FOR TAB POSITION. CALL TABGET_ PSHS D LOOP CALL _CHRGOT ;SKIP ANY SPACE7 eof_,(,s) COMB QUIF EQ CALL errorcheck,(,s) QUIF NE CALL _inserttext,main_buf STB error_flag IF NE CALL prefixst_,#nomem__,alternate_buf L7 :EDIT NAME, RENAME COMMAND. ;RETURNS :NO-REPEAT FLAG. ec_name call checkoutfname,#0,alternate_buf ;rename file if possible. call copystr_,name_buf,#input_buffer call prefixst_,def_buf,#input_buffer call prefixst_,pre7 ENDER CALL _HOLDIT ALLDONE CALL _PRINTSCREEN JMP SUICIDE_ TEST CMPD #22 IF NE CMPD #24 ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :7 XREF read__ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :edit get. ;returns :if error then 1. ec_get LDD cur_line PSHS d LDD eo7S. LDB CHRGOTTYPE CMPB #3 QUIF NE ;IT IS A NUMBER. CALL _FETCHNUM CMPB #80 IF GT LDB #80 ENDIF LDX ,S LDA 2,S 7DB #$ff ENDIF QUIF NE LDX temp_counter INX STX temp_counter ENDLOOP PSHS b CALL closeup,(3,s),alternate_buf SET2 cur_line,(3,s) CALL _pointer@f_buf,#input_buffer call _bmessage,#10,#input_buffer xref _bmessage xref copystr_,prefixst_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS 7COPIES A STRING WITHOUT COPYING THE ENDING BYTE. ;PARAMETERS:SOURCE ~ DESTINATION. ;RETURNS :.X HOLD CONTINUATION POINTER. ;DESTROYS :X, Y KEEPS: .P1 QCOPY TFR D,Y LDX 2,S LOOP LDB ,Y+ QUI7f_line SUBD #1 ;0=reset name, else don't. IF NE CLRA LDB [name_buf] ;if there is no file name then reset anyway. ENDIF PSHS d CALL openup_4p,#read__ STD ,s ;.i/ob,7 ASLA CLR A,X INCA DECB STB A,X ;SET TAB STOP. INC 2,S LDA 2,S CMPA #10 UNTIL EQ ;DISPLAY THE TABS. CALL _MSGREADY ofp STD txtcur CALL _printscreen LDB ,s+ JNE suicide_ DONE 4 nomem__ FCS "Out of memory: " abort__ FCS "Aborted: " IF NE CALL prefixst_,#nomem__,alternate_buf L7;_put XDEF ec_put,ec_putlines XDEF ec_print,ec_printl XREF _fetchtext,_printscreen XREF _offsetbyp,_pointerofp XREF errorcheck,fix_range XREF tbreak_,suicide_ XREF length_,prefixst_ ;F EQ STB ,X+ ENDLOOP RTS JMP SUICIDE_ TEST CMPD #22 IF NE CMPD #24 ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :7cur_line,rts LDD range_start STD txtcur CMPD txtend IF EQ CALL _offsetbyp,#-1 ENDIF STD txtcur LOOP CALL tbreak_ IF NE CALL prefix7 CLR 2,S LOOP LDB 2,S ASLB LDX ,S LDD B,X ADDD #1 PSHS D CALL PRINTF_,#T_NUM LEAS 2,S INC 2,S LDB 2,S 7\\\\\\\\\\\\ ;performs :put and print text. ;returns :if error then 1. GUESS GUESS ec_put LDX #0 ;don't modify text. ADMIT ec_print LDX #-1 ;modify text. ENDGUESS SET27 XREF stoi_,hstob_,tableloo_,isalpha_,isdigit_,ishex_ XREF fputrec_ XREF write__ XREF openup_4p,closeup ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\8 range_start,txtbeg SET2 range_end,txtend ADMIT ; line range put ec_putlines LDX #0 ;don't modify text. ADMIT ec_printl LDX #-1 ;modify text. ENDGUESS putter PSHS x CALL fix_range 7st_,#abort__,alternate_buf LDB #$ff ENDIF QUIF NE ; get a line CALL fgetrec_,(4,s),main_buf,#255 LDX main_buf CLR d,x ;null last byte. CALL 8 QUIF NE ;decimal string. PSHS x,y CALL stoi_,(,s) PULS x,y ADMIT CMPB #2 QUIF NE ;text string. 8 b CALL _pointerofp,cur_line STD txtcur CALL closeup,(1,s) CALL _printscreen LDB ,s+ JNE suicide_ DONE 4 abort__ FCS "Aborted: " ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\8LDX name_buf LDA ,x TST ,s IF NE ;do not allow the default name for the print command. CLR ,x ENDIF PSHS a,x CALL openup_4p,#write__,#-1 ;always don't rename file. 8null end the meta if legal. leave .x the same. dlength PSHS x TFR x,y LDB ,y+ CMPB #"$" IF EQ ;is it really a hex string? LOOP CLRA LDB ,y LBE8 igit_ PULS b,y UNTIL EQ CLRA CMPB #">" IF EQ LDA #3 ENDIF ENDGUESS lenend PULS x STA ,-s IF NE ;if recognized then m8 PSHS x,y CALL length_,(,s) PSHS d CALL tableloo_,#ascii,(4,s),(,s) LEAS 2,s PULS x,y QUIF EQ DECB 8 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :modify text to allow for control characters. ;parameters:position to check. ;returns :length of control sequence. ;destroys :x, y keeps: modifytext TFR d,x ;source pointer. TF8 TFR d,y PULS a,x TST ,s IF NE STA ,x ENDIF PSHS y SET2 txtcur,range_start CMPD txtbeg CEQ _offsetbyp,#1 LOOP STD txtcur 8 Q lenend LEAY 1,y CLRA PSHS b,y CALL ishex_ PULS b,y UNTIL EQ LDB -1,y CLRA CMPB #">" IF EQ INCA8ake into legitimate string. CLR -1,y ELSE TFR x,y ENDIF PULS b SEX RTS ascii FCS "nul" FCS "soh" FCS "stx" FCS "etx" FCS "eot" 8 ADMIT ;must be not recognized. TFR x,y LOOP LDB ,x+ UNTIL EQ LDB #">" STB ,-x ;un-delimit. 8R d,y ;destination pointer. PSHS d mloop LDB ,x+ LBEQ mend CMPB #"<" LBNE endone GUESS PSHS y CALL dlength QUIF NE ;not a8 SUBD txtend QUIF EQ CALL _fetchtext,txtcur,main_buf LDD 2,s IF NE CALL modifytext,main_buf ELSE CALL length_,main_buf ENDIF PSHS d8 ENDIF LBRA lenend ENDIF GUESS ;is it all text. CMPB #"+" QUIF EQ CMPB #"-" QUIF EQ CLRA CALL isdigit_ QUIF NE 8 FCS "enq" FCS "ack" FCS "bel" FCS "bs" FCS "ht" FCS "lf" FCS "vt" FCS "ff" FCS "cr" FCS "so" FCS "si" FCS "dle" FCS 8 LDB #"<" ENDGUESS TFR y,x ;continuation pointer ENDGUESS PULS y endone STB ,y+ LBRA mloop mend CLR ,y TFR y,d SUBD ,s++ RTS ;\\\\8 valid syntax. LDB #"<" ADMIT ;found a control character. GUESS CMPB #1 QUIF NE ;hex string. INX PSHS x,y8 CALL fputrec_,(6,s),main_buf,(,s) LEAS 2,s CALL errorcheck,(2,s),alternate_buf QUIF NE LDX temp_counter INX STX temp_counter CALL tbreak_ I8 LOOP LDB ,y QUIF EQ LEAY 1,y CLRA PSHS b,y CALL isalpha_ PULS b,y UNTIL EQ CLRA CMPB #">" I8 "dc1" FCS "dc2" FCS "dc3" FCS "dc4" FCS "nak" FCS "syn" FCS "etb" FCS "can" FCS "em" FCS "sub" FCS "esc" FCS "fs" FCS "g8\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ; scan till a delimiter is reached .x = starting return with .y pointing to ; the next valid character and .d = 0 for not valid, 1 for hex, 2 for text, ; and 3 for decimal. 8 ;start of hex string, cont. pointer. CALL hstob_,(2,s),(4,s) PULS x,y ;cont. pointer LDX ,s DECB LDB b,x ADMIT CMPB #3 8F NE CALL prefixst_,#abort__,alternate_buf LDB #$ff ENDIF QUIF NE LDD txtcur SUBD range_end QUIF EQ CALL _offsetbyp,#1 ENDLOOP PSHS8F EQ LDA #2 ENDIF ADMIT ;is it a decimal string. LOOP LDB ,y QUIF EQ LEAY 1,y CLRA PSHS b,y CALL isd=s" FCS "rs" FCS "us" FCB 0 FCS "bs" FCS "ht" FCS "lf" FCS "vt" FCS "ff" FCS "cr" FCS "so" FCS "si" FCS "dle" FCS 9;MON XREF _SYNTAXCHK,_SCREENSTART XREF MONITOR,SUICIDE_ XREF CLOSE_KEY,OPEN_KEY XDEF EC_MONITOR ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;NUL XREF _DOCHAR XDEF EC_NULL ;include ;NULL LINE EC_NULL CALL _DOCHAR,#13 LDD #0 RTS K CONDITION. CALL _SCREENSTART ;REPRINT THE SCREEN. JMP SUICIDE_ \\\\\\\\\\\\\\\\\\\\\\\\\9;em XDEF ec_move,ec_echo XREF _chrgot,fetch_line,_numberofp XREF _printscreen,_syntaxchk,_chrget XREF openp_bytesp1,closep_bytesp1 XREF set_eof_line,_bmessage XREF copy_,suicide_,fix_range ;i9 ADCA #0 STD ,s ENDIF LDD range_start CMPD txtbeg IF EQ ;range must not start at bof line. ADDB [range_start] ADCA #0 STD range_start ENDIF9 ill hole. CALL copy_,range_start,(4,s),(,s) TST 4,s IF NE GUESS LDD txtcur SUBD range_start QUIF LT CMPD ,s QUIF HI SET2 9 \\\\\\\ ;PERFORMS :MONITOR REQUEST FUNCTION. ;PARAMETERS:NONE ;RETURNS :NO-REPEAT FLAG. ;DESTROYS :X, Y KEEPS: EC_MONITOR CALL _SYNTAXCHK ;NO OTHER TEXT PLEASE. CALL CLOSE_KEY ;THIS WILL KILL EXECUTE FILE. CALL9 ;_dul XDEF ec_upper XDEF ec_lower XREF _syntaxchk XREF lower_ XREF upper_ XREF _printscreen,fix_range ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\9 nclude ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :duplicate or move memory from one position to another. ;returns :repeatable flag if no error. GUESS ec_move 9 LDD range_end CMPD txtend IF NE ;adjust to past the last line. ADDB [range_end] ADCA #0 STD range_end ENDIF CMPD range_start IF LS 9txtcur,range_start ENDIF ;delete source text. CALL closep_bytesp1,range_start LDD txtcur CMPD range_start IF HI SUBD ,s ENDIF ELSE MONITOR ;GUESS WHAT THIS DOES? CALL OPEN_KEY ;RE-ESTABLISH THE KEYBOARD INPUT. SET1 SERVICE_,#1 ;FLAG FOR OK CONDITION. CALL _SCREENSTART ;REPRINT THE SCREEN. JMP SUICIDE_ \\\\\\\\\\\\\\\\\\\\\\\\\9\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :change case of text. ;returns :repeatable flag. GUESS ec_upper push #upper_ ADMIT ec_lower push #lower_ ENDGUESS CALL _syntaxchk CALL fix_range 9 LDB #-1 ADMIT ec_echo CLRB ENDGUESS PSHS b CALL fix_range ;don't allow backward ranges. CALL _chrgot SET2 (,--s),txtcur ;destination line default. LDB chrgotchar IF9DONE 3 ;a null range, but that's ok. ENDIF GUESS LDD ,s CMPD range_start QUIF LE CMPD range_end QUIF GE ;it can't move into itself. CALL _bme LDD txtcur ENDIF STD txtcur CALL _numberofp STD cur_line CALL set_eof_line CALL _printscreen DONE 5 QUIF LT CMPD ,s QUIF HI SET2 9 QUIF EQ TST ,s IF EQ CLRA LDB ,x PSHS x CALL ([7,s]) PULS x STB ,x 9 LDX range_start LOOP LDB ,x+ DECB DECB LDA b,x CLR b,x ;null end of line. PSHS d,x CLR ,-s LOOP LDB ,x QU9 NE CMPB #"." IF NE CALL fetch_line JEQ suicide_ ELSE CALL _chrget ENDIF LDD txtcur PULS x PSHS d STX 9ssage,#20 ;illegal destination line. ENDGUESS ;make room. LDD range_end SUBD range_start PSHS d CALL openp_bytesp1,(2,s) CNE _bmessage,#21 ;insufficient memory. ;adjust for th> UNTIL GT LEAS 2,s JMP _printscreen IF EQ CLRA LDB ,x PSHS x CALL ([7,s]) PULS x STB ,x 9 ENDIF ADMIT INX ENDGUESS INX ENDLOOP LEAS 1,s PULS d,x STA b,x INCB ABX CMPX range_end 9IF EQ CMPB #$22 ;" IF EQ COM ,s ENDIF CMPB #32 IF LO INX ENDIF GUESS CMPB #$ff 9txtcur ENDIF ;check syntax and parse values. CALL _chrgot CALL _syntaxchk LDD ,s CMPD txtend IF NE ;destination is actually past the specified line. ADDB [,s] 9e hole. LDD range_start CMPD 2,s IF HS ADDD ,s STD range_start ENDIF LDD txtcur CMPD 2,s IF HI ADDD ,s STD txtcur ENDIF ;f:;_# XREF _SYNTAXCHK XREF _MESSAGE XREF _NUMBEROFP XDEF EC_NUMBER ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :return with:;fname XDEF scanfname,stripdisk XDEF def_device,skip_prefix_ XDEF devname XREF _chrgot XREF _chrget XREF tableloo_,_bmessage,disk__ XREF skp_alpha,copy_ ;include ;include <:BEQ DELIM QUIF EQ CALL _chrget UNTIL EQ LDD ,s DONE 3 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :removes any prefix from filename. ;parameters:point:ame_ LEAS 2,s IF NE LDX filename_ CLRB LOOP ;scan till end of device specified. LDA ,x QUIF EQ CMPA #"." QUIF EQ : number of cursor line. ;PARAMETERS:none ;RETURNS :REPEATABLE FLAG. ;DESTROYS : KEEPS: EC_NUMBER CALL _SYNTAXCHK CALL _NUMBEROFP,TXTCUR PSHS D CALL _MESSAGE,#12 ;PRINT NUMBER. LDD #0 : ointer to original filename. ;RETURNS :number of device named. ;DESTROYS : KEEPS: devname CALL skip_prefix_ STD filename_ CALL skp_alpha PSHS d CALL tableloo_,#disk__,filename_ LEA: edit.labels> ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :scans a filename. ;parameters:none ;returns :pointer to filename. ;destroys :x keeps: GUESS scanfname CLR ,-s : er to filename. ;returns :pointer to rest of filename that is really the name. ;destroys :x keeps: stripdisk EQU * CALL skip_prefix_ STD filename_ CALL skp_alpha PSHS d CALL tabl: INCB INX ENDLOOP CLRA PSHS d CMPB #14 JHI _bmessage,#9 ;not legal if too long. CALL copy_,filename_,(6,s),(,s) PULS d LDX DONE 2 XREF _SYNTAXCHK XREF _MESSAGE XREF _NUMBEROFP XDEF EC_NUMBER ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :return withS 2,s RTS #")" UNTIL EQ STX ,s ENDIF thru PULS d,x,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :checks to see what the device number is. ;PARAMETERS:p: ;quote flag. CALL _chrgot CMPB #$22 ;" QUIF EQ CMPB #$27 ;' QUIF EQ ADMIT STB ,s ;set quote flag. CALL _chrget ENDGUESS SET2 (:eloo_,#prefix,filename_ LEAS 2,s IF NE LDX filename_ LOOP LDB ,x QUIF EQ INX CMPB #"." UNTIL EQ STX filename_ ;new starti:2,s CLR d,x ELSE CLR [2,s] ENDIF RTS ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :skip any format prefix to a filename. ;PARAMETERS:filename pointer. :;dutil xdef maketime2p xdef errorcheck,errorouter xdef parse_to xref streq_,_bmessage,skip_prefix_ xref prefixst_,copystr_,checkoutfname xref errorf_,errormsg_,_syntaxchk xref gettim:\\\\\\\\\\\\\\\\\ ;performs :check for and print out any errors. ;parameters:i/o block ~ file name. ;returns :none, but suicides if there's an error. ;destroys :x keeps: .p1 errorouter ldx 2,s pshs x call erro:,--s),chrgetpointer ;pointer,quote,rts ;determine end of file name. CALL _chrgot ;leading spaces (even in quotes) are removed. LOOP QUIF EQ GUESS CMPB #" " QUIF NE :ng position. ENDIF LDD filename_ RTS prefix FCS "disk" FCS "host" FCB 0 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :defines a device. ;parameters:so:;RETURNS :pointer past any prefix. ;DESTROYS :none KEEPS: skip_prefix_ EQU * PSHS d,x TFR d,x LDB ,x CMPB #"(" IF EQ LOOP LDB ,x+ BEQ thru:e_,stripdisk,suffixst_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :check for string equaling 'to'. ;parameters:string pointer. ;returns :true/false. ;destroys :rcheck cne _bmessage,#10 done 2 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :check for error and if so then put message in buffer. ;parameters:i/o block ~ destination to insert error m: ;stop at a space unless in quote mode. TST 2,s QUIF NE delim CLR [chrgetpointer] CALL _chrget CLRB ENDGUESS QUIF EQ CMPB 2,s :urce of name ~ destination of device string. ;returns :none ;destroys :x keeps: def_device EQU * CALL skip_prefix_ STD filename_ CALL skp_alpha PSHS d CALL tableloo_,#prefix,filen: CMPB #")" UNTIL EQ STX ,s ENDIF thru PULS d,x,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :checks to see what the device number is. ;PARAMETERS:p:: keeps: equal_to call stripdisk pshs d call streq_,#t_tol,(,s) ceq streq_,#t_to done 2 t_to fcs "TO" t_tol fcs "to" ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;essage. ;returns :error condition and text in buffer. ;destroys : keeps: .p1 errorcheck pshs d call errorf_ stb error_flag if ne call prefixst_,#colon__,(4,s) call errormsg_,(;; dmemory XDEF _inserttext,_fetchtext,openp_bytesp1,closep_bytesp1 XDEF _hinserttext XREF _offsetall,set_eof_line XREF length_,copystr_,copy_ XREF skp_alpha,tableloo_,upper_ XREF lower_,isdeli;me,#-1,#input_buffer+80 endguess endif tfr s,d ldx pref_buf pshs x call copystr_ ;restore the original prefix. leas 22,s tfr s,d ldx name_buf psh;fer+80 ;defaults to no second param. leas -30,s tfr s,d pshs d call copystr_,name_buf ;save name for safe keeping. leas 2,s leas -20,s tfr s,d pshs d ;,s) pshs d call prefixst_,(2,s),(6,s) leas 2,s endif clra ldb error_flag done 2 colon__ fcs ": " ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\; STX ,s LDB ,x ANDB #%01111111 ;no non-ascii chars. STB ,x GUESS CMPB #$22 ;" QUIF EQ CMPB #$3b ;; QUIF EQ ; m_ ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :inserts text in input_buffer into next line of memory. ;parameters:pointer to buffer holding the text. ;returns :ss x call copystr_ ;restore original name. leas 32,s jmp _syntaxchk ess call equal_to quif eq second tst chrgotchar quif eq call checkoutfna; call copystr_,pref_buf ;save prefix for safe keeping. leas 2,s call checkoutfname,#-1,alternate_buf call equal_to if ne call copystr_,def_buf,alternate_buf ;assume default. call ; \\\\\\ ;performs :makes the time into a neat format. ;parameters:destination of time string. ;returns :none ;destroys :x, y keeps: maketime2p pshs d leas -6,s tfr s,d call gettime_ ;put time onto stack. ; ADMIT ;don't crunch in quotes. COM 3,s ENDGUESS TST 3,s IF EQ LDB -1,x GUESS CMPB #" " ;true/false if there isn't enough memory. ;destroys :x, y keeps: _inserttext PSHS d CALL _offsetall,#1 PULS d _hinserttext PSHS d SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line ; compile line ; #2 UNTIL HI TSTA LBEQ loopend ;found chars to be crunched. CMPA #31 IF HI LDA #31 ENDIF STA ,y+ ;put #. STB ,y+ ;put cha;suffixst_,name_buf,alternate_buf ;name call prefixst_,pref_buf,alternate_buf ;prefix bra second endif push name_buf call stripdisk,alternate_buf call copystr_ ;replace nam; ldb #3 stb 5,s ldx 6,s tfr s,y loop lda #"0" ldb ,y+ loop cmpb #10 quif lt inca subb #10 ; QUIF NE TFR x,d CALL cruncher QUIF EQ LEAX 2,x ENDGUESS ENDIF CLRA LDB ,x QUIF ;and copy into memory returning true if memory full. PUSH #0 LDX 2,s SET1 (-1,x),#" " CLR 254,x PSHS x LOOP TST ,x+ UNTIL EQ DEX LDB #" " LOOP;r. STY ,s ;continuation area. SUBA #2 LEAY a,y PSHS Y ;end text start CALL copystr_,(2,s),(2,s) ;close up freed area. LEAS 2,s LBRA looper ;purge trailing spa;e with new one. leas 2,s call skip_prefix_,alternate_buf tfr d,x ldb ,x clr ,x pshs b,x call copystr_,alternate_buf,pref_buf puls b,x stb ,x tst chrg;endloop sta ,x+ addb #"0" stb ,x+ dec 5,s quif eq lda #":" sta ,x+ endloop clr ,x done 8 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\; EQ ;found end byte. CMPB #" " IF LO ;turn illegal values into spaces. LDB #" " STB ,x ENDIF STB 2,s TFR x,y ; ;purge trailing spaces. CMPB ,-x QUIF NE CLR ,x ENDLOOP looper EQU * ;.textpntr,char,00,rts TST [,s] LBEQ loopend LDX ,s LOOP <ces. loopend LDX 4,s CLRB LOOP INCB TST ,x+ UNTIL EQ STB 3,s INCB CLRA PSHS d CALL openp_bytesp1,txtcur ;open up space. LEAS 2,s ;otchar if ne ; check for destination. call checkoutfname,#-1,#input_buffer+80 guess call equal_to quif eq second tst chrgotchar quif eq call checkoutfna;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :parses a command that can have two params. ;parameters:none ;returns :none, but alternate_buf=first param, input_buffer+80=second param. ;destroys : keeps: parse_to clr input_buf; CLRA LOOP INCA CMPB ,x+ UNTIL NE DECA DEX TST 3,s IF NE CLRA ENDIF CMPA< IF EQ ;there is memeory. LDX txtcur LDB 3,s INCB STB ,x+ PSHS x CALL copystr_,(6,s) LEAS 2,s LDX txtcur LDB 3,s < ,x+ DEC ,s PSHS d CALL _lookup,#code6809 ;find pointer to word. STX ,s TFR d,x LOOP ;move word to buffer. CLRA < block. LDD 6,s ADDD 10,s PSHS d ;destination. CALL copy_,(8,s) ;open up space. LEAS 4,s LDD txtend ADDD 8,s STD txtend LDD ran< check. ;returns :true if crunched a word. ;destroys :none keeps: cruncher PSHS x,y STD filename_ TFR d,x SET2 (,--s),#0 LOOP CLRA LDB ,x+ PSHS x < PULS x,y,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :looks up a word according to its position in a table. ;parameters:table of words ~ number of word (1 .. n). ;returns :pointer to found < ABX STB ,x CALL set_eof_line LDD #0 ENDIF DONE 6 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :uncrunches line from one location and mak< LDB ,x+ QUIF EQ CMPB #"X" QUIF EQ PSHS x,y CALL upper_ PULS x,y STB ,y+ ENDLOOP PU< ge_end ADDD 8,s STD range_end CLRB SEX ;ok flag ENDIF DONE 6 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :closes up space in text.< CALL isdelim_ PULS x QUIF NE LDD ,s ADDD #1 STD ,s ENDLOOP GUESS LDD ,s ADDD filename_ TFR d,x LDB ,x QU<word. ;destroys :none keeps: _lookup PSHS d,x,y LDD 8,s IF NE DECB LDA #9 MUL ADDD ,s ELSE LDD #null__ ENDIF LEAS 2,s <es it a string in another. ;parameters:source of line ~ destination for line. ;returns :none ;destroys :x, y keeps: _fetchtext TFR d,x LDB ,x+ DECB PSHS b ;length+1 of line to disassemble. L<LS x ADMIT STB ,y+ ENDGUESS ENDLOOP CLR ,y ;end string in nul. DONE 1 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :open up< ;parameters:start of close-up space ~ number of bytes to remove. ;returns :none ;destroys :x keeps: closep_bytesp1 PSHS d LDX txtend LDB ,x ABX PSHS x ;very very eot. LDD 2,s <IF EQ CMPB #" " QUIF EQ CLRB ADMIT CALL tablelook,#code6809,filename_,(,s) IF NE ;a code to crunch. PSHS b LDX filename_ < PULS x,y,pc ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :lookup a match string in a table. ;parameters:table ~ source string ~ length of string. ;returns :# of match in table (1 .. n). ;destroys :n<DY 3,s ; 0 1 3 ;.length,rts,to LOOP DEC ,s QUIF EQ ;done with translation. LDB ,x+ GUESS CMPB #" " QUIF HS LDA ,x+ < a space in the text. ;parameters:place to make room ~ number of bytes to stuff. ;returns :true/false; is memory too full? ;destroys :x keeps: openp_bytesp1 PSHS d LEAS -4,s LDD txtend TFR d,x < ADDD 6,s PSHS d ;begin of top text. LDD 2,s SUBD 4,s PSHS d ;length CALL copy_,(4,s),(6,s) LEAS 2,s LDD txtend SUBD 8,s STD txtend LDD<LEAX 2,x PSHS x ;rest destination. LDD filename_ ADDD 3,s CALL copystr_ ;close up space. LEAS 2,s LDX filename_ <one keeps: tablelook PSHS x,y CLR ,-s TFR d,x ;table. TST 10,s IF NE LOOP LDY 7,s ;source. LDA 10,s ;size. INC ,s < DEC ,s LOOP STA ,y+ DECB UNTIL EQ ADMIT CMPB #$ff QUIF NE ;tokenized word. CLRA LDB < ADDB ,x ADCA #0 STD ,s ;very very end of text ADDD 8,s STD 2,s ;new end of text SUBD max_memory IF LS LDD ,s SUBD 4,s PSHS d ;length of upper< range_end SUBD 8,s STD range_end CALL set_eof_line DONE 6 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :converts a 6809 opcode into token. ;parameters:position to< PULS b LDA #$ff STA ,x+ STB ,x ;and put into text. LDB #$ff ELSE CLRB ENDIF ENDGUESS LEAS 2,s SEX= LOOP LDB ,y+ PSHS a,x,y CLRA CALL lower_ PULS a,x,y CMPB ,x QUIF NE LDB #"X" CM= FCS "orccXXXX" FCS "pshsXXXX" FCS "pshuXXXX" FCS "pulsXXXX" FCS "puluXXXX" FCS "rolXXXXX" FCS "rolaXXXX" FCS "rolbXXXX" FCS "rorXXXXX" FCS "roraXXXX" =S "exgXXXXX" FCS "incXXXXX" FCS "incaXXXX" FCS "incbXXXX" FCS "jmpXXXXX" FCS "jsrXXXXX" FCS "lbccXXXX" FCS "lbcsXXXX" FCS "lbeqXXXX" FCS "lbgeXXXX" ="andbXXXX" FCS "andccXXX" FCS "aslXXXXX" FCS "aslaXXXX" FCS "aslbXXXX" FCS "asrXXXXX" FCS "asraXXXX" FCS "asrbXXXX" FCS "bccXXXXX" FCS "bcsXXXXX" =PB ,x QUIF EQ INX DECA UNTIL EQ TSTA QUIF EQ TST ,x IF NE LOOP TST ,x+ = dmXXXX" FCS "equXXXXX" FCS "failXXXX" FCS "fcbXXXXX" FCS "fccXXXXX" FCS "fdbXXXXX" FCS "guessXXX" FCS "ifXXXXXX" FCS "ifcXXXXX" FCS "ifeqXXXX" FCS= FCS "rorbXXXX" FCS "rtiXXXXX" FCS "rtsXXXXX" FCS "sbcaXXXX" FCS "sbcbXXXX" FCS "sexXXXXX" FCS "staXXXXX" FCS "stbXXXXX" FCS "stdXXXXX" FCS "stsXX= FCS "lbgtXXXX" FCS "lbhiXXXX" FCS "lbhsXXXX" FCS "lbleXXXX" FCS "lbloXXXX" FCS "lblsXXXX" FCS "lbltXXXX" FCS "lbmiXXXX" FCS "lbneXXXX" FCS "lbplXXXX"= FCS "beqXXXXX" FCS "bgeXXXXX" FCS "bgtXXXXX" FCS "bhiXXXXX" FCS "bhsXXXXX" FCS "bitaXXXX" FCS "bitbXXXX" FCS "bleXXXXX" FCS "bloXXXXX" FCS "blsXXXXX" = UNTIL EQ ENDIF TST ,x UNTIL EQ ENDIF TSTA IF NE CLR ,s ELSE LDB ,x GUESS QUIF EQ CMPB #"X" = "ifgeXXXX" FCS "ifgtXXXX" FCS "ifltXXXX" FCS "ifncXXXX" FCS "ifneXXXX" FCS "insXXXXX" FCS "inxXXXXX" FCS "loopXXXX" FCS "lsldXXXX" FCS "lsrdXXXX" =XXX" FCS "stuXXXXX" FCS "stxXXXXX" FCS "styXXXXX" FCS "subaXXXX" FCS "subbXXXX" FCS "subdXXXX" FCS "swiXXXXX" FCS "swi2XXXX" FCS "swi3XXXX" FCS = FCS "lbraXXXX" FCS "lbrnXXXX" FCS "lbsrXXXX" FCS "lbvcXXXX" FCS "lbvsXXXX" FCS "ldaXXXXX" FCS "ldbXXXXX" FCS "lddXXXXX" FCS "ldsXXXXX" FCS "ldu= FCS "bltXXXXX" FCS "bmiXXXXX" FCS "bneXXXXX" FCS "bplXXXXX" FCS "braXXXXX" FCS "brnXXXXX" FCS "bsrXXXXX" FCS "bvcXXXXX" FCS "bvsXXXXX" FCS "clrXXXX= QUIF EQ CLR ,s ENDGUESS ENDIF PULS b SEX PULS x,y,pc ;conditions. code6809 FCS "csXXXXXX" FCS "ccXXXXXX" FCS "eqXXXXXX" FCS "neXXXXXX" FCS "= FCS "macrXXXX" FCS "namXXXXX" FCS "optXXXXX" FCS "oraaXXXX" FCS "orabXXXX" FCS "orgXXXXX" FCS "pageXXXX" FCS "psctXXXX" FCS "quifXXXX" FCS "rmbXXXXX" ="syncXXXX" FCS "tfrXXXXX" FCS "tstXXXXX" FCS "tstaXXXX" FCS "tstbXXXX" ;other opcodes and pseudo mnemonics. FCS "asldXXXX" FCS "admitXXX" FCS "clvXXXXX" FCS "cpxXXXXX=XXXXX" FCS "ldxXXXXX" FCS "ldyXXXXX" FCS "leasXXXX" FCS "leauXXXX" FCS "leaxXXXX" FCS "leayXXXX" FCS "lslXXXXX" FCS "lslaXXXX" FCS "lslbXXXX" FCS =X" FCS "clraXXXX" FCS "clrbXXXX" FCS "cmpaXXXX" FCS "cmpbXXXX" FCS "cmpdXXXX" FCS "cmpsXXXX" FCS "cmpuXXXX" FCS "cmpxXXXX" FCS "cmpyXXXX" FCS "c=miXXXXXX" FCS "ltXXXXXX" FCS "plXXXXXX" FCS "gtXXXXXX" FCS "geXXXXXX" FCS "hiXXXXXX" FCS "hsXXXXXX" FCS "leXXXXXX" FCS "lsXXXXXX" FCS "loXXXXXX" F= FCS "secXXXXX" FCS "seiXXXXX" FCS "setXXXXX" FCS "sevXXXXX" FCS "staaXXXX" FCS "stabXXXX" FCS "tabXXXXX" FCS "tapXXXXX" FCS "tbaXXXXX" FCS "tpaX=" FCS "desXXXXX" FCS "dexXXXXX" FCS "dsctXXXX" FCS "elseXXXX" FCS "endXXXXX" FCS "endcXXXX" FCS "endguess" FCS "endifXXX" FCS "endloopX" FCS "en= "lsrXXXXX" FCS "lsraXXXX" FCS "lsrbXXXX" FCS "mulXXXXX" FCS "negXXXXX" FCS "negaXXXX" FCS "negbXXXX" FCS "nopXXXXX" FCS "oraXXXXX" FCS "orbXXXXX" =omXXXXX" FCS "comaXXXX" FCS "combXXXX" FCS "cwaiXXXX" FCS "daaXXXXX" FCS "decXXXXX" FCS "decaXXXX" FCS "decbXXXX" FCS "eoraXXXX" FCS "eorbXXXX" FC=CS "vcXXXXXX" FCS "vsXXXXXX" ;6809 opcodes. FCS "abxXXXXX" FCS "adcaXXXX" FCS "adcbXXXX" FCS "addaXXXX" FCS "addbXXXX" FCS "adddXXXX" FCS "andaXXXX" FCS >XXXX" FCS "tsxXXXXX" FCS "txsXXXXX" FCS "ttlXXXXX" FCS "untilXXX" FCS "xdefXXXX" FCS "xrefXXXX" ;registers. FCS "callXXXX" FCS "fcsXXXXX" FCS "ceqXXXXX" >;title1.asm. Taken from BEDIT9 source; checked; revised for title for BEDCALC10. ;15 May '85. D.B. Identical to ctitle.asm except for title itself. XDEF _title XREF printf_ XREF copy_,spawn_,copystr_ XREF getdate>R ,x LEAX -81,x STX command_buf ;last command or last deleted line. CLR ,x LEAX -1,x STX max_memory ;limit of text memory pointer. ;put parameters on stack for title display" %d bytes free.%n%n" FCC "Date: %s%nTime: %s%n%n" FCS "Enter date and time or press RETURN%n" def_dev FCS "disk." def_name FCS "text:e" CALL _cstart ;start of entry. CALL spawn_,#ec_date > FCS "cneXXXXX" FCS "jeqXXXXX" FCS "jneXXXXX" FCS "jhiXXXXX" FCS "jloXXXXX" FCS "set2XXXX" FCS "set1XXXX" FCS "sne1XXXX" FCS "seq1XXXX" FCS "sne2XX> Errors 0 $0176 ; Length Import _SCRNDELETE 369(both) Import _DELETELINE 366(both) Import _REPRINTROW 338(both) Import _SCRNINSERT 314(both) Import _INSERTTEXTM 303(both) Import COPYSTR_ 258(both) Import _PRINTSCREEN 308(both),240(both) Import _CLRMSG 237> _,getrec_,ec_date XREF _cstart XREF maketime2p XREF _screenstart ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :setup system buffers an> . LEAS -10,s TFR s,d CALL maketime2p TFR s,d PSHS d PUSH #11 PUSH main_buf CALL getdate_ CALL copy_ ;move date string to buffer area. LEAS 4,s > 8ccffff2003cc0001bd 00007e00004fd6bb8300013406dcac10a3e42c02ede4be000030890000e684c880e784c601d7ba4f d6bba3e4d7bb3406cc00013406ec62bd0000326232623506bd0000bd0000dc24ddb6dcacddaa7e00 000fb939c601d7b96f9f00d27e0000dcd23406dc24bd000035106f88510fb9dcd27e0000XX" FCS "seq2XXXX" FCS "doneXXXX" FCS "pushXXXX" FCS "pullXXXX" FCS "inyXXXXX" FCS "deyXXXXX" null__ FDB 0 FCS "callXXXX" FCS "fcsXXXXX" FCS "ceqXXXXX" >(both) Import _COMPRINT 234(both) Import _FETCHTEXT 359(both),222(both) Import ___NEG 185(both) Import SETCURTORPCP1 176(both) Import SCREEN_ 147(both) Import CURPOS_ 143(both) Import _PURGE 372(both),325(both),213(both),199(both),123(both) Import _OFFSE>d show title page. ;parameters:none ;returns :none ;destroys :x keeps: _title LDX memend_ LEAX -255,x STX main_buf ;text fetching buffer. LEAX -35,x STX name_buf > LDX main_buf CLR 11,x PSHS x ;date. LDD max_memory SUBD membeg_ SUBD #4 ;safety margin. PSHS d ;free memory. CALL printf_,#title LEAS 16,s >bd00007e 0000ccffffbd0000bd0000dcd23406dca4bd00003262d6b920066f9f00d2c601340496bbd6ba3406 dc24109328260dccffffbd0000bd00006f9f00d2dcd2bd00002706bd0000326339bd0000dc24ddb6 dcacddaabd0000350697bbd7bae6e0d7b97e0000dc24109326271b1093282716dca43406dc24bd00 00>Errors 0 $0120 ; Length Import _SCREENSTART 151(both) Import SPAWN_ 148(both) Import EC_DATE 145(both) Import _CSTART 142(both) Import GETREC_ 131(both) Import PRINTF_ 118(both) Import COPY_ 95(both) Import GETDATE_ 92(both) Import MAKETIME2P 76(both) Im>TALL 291(both),246(both),188(both),120(both) Import CAR_RTN 87(both) Import CUR_UP 83(both),53(both) Import CUR_DN 81(both),47(both) Import _UPDATESCREEN 294(both),249(both),39(both) Export _DOCHAR=$0000 Reloc 0,99(both),0,97(both),0,95(both),0,93(both),> ;file name. PSHS x CALL copystr_,#def_name PULS x LEAX -25,x STX def_buf ;default device buffer. PSHS x CALL copystr_,#def_dev PULS x LEAX -20> CALL getrec_,main_buf,#80 ;get input for time/date. LDX main_buf CLR d,x ;end input in null. TFR x,d CALL _cstart ;start of entry. CALL spawn_,#ec_date 3262dc24bd0000bd0000bd000039 04fd6bb8300013406dcac10a3e42c02ede4be000030890000e684c880e784c601d7ba4f d6bba3e4d7bb3406cc00013406ec62bd0000326232623506bd0000bd0000dc24ddb6dcacddaa7e00 000fb939c601d7b96f9f00d27e0000dcd23406dc24bd000035106f88510fb9dcd27e0000>port COPYSTR_ 34(both),19(both) Export _TITLE=$0000 Reloc 0,115(both),0,31(both),0,16(both) Object 9e223089ff019fd23088dd9fb03410cc011abd000035103088e79fc23410cc0114bd000035103088 ec9fd06f843088889fa86f843089ff019fa66f843088af9fa46f84301f9fae32761f40bd00>0,91(both),0,89(both), 0,85(both),0,79(both),0,77(both),0,75(both),0,73(both),0,71(both), 0,69(both),0,67(both),0,65(both),0,63(both),0,61(both),0,59(both), 0,57(both),0,55(both),0,51(both),0,49(both),0,45(both),0,43(both), 0,41(both),0,31(both),0,28(bot>,x STX pref_buf CLR ,x LEAX -120,x STX prevsrchstr_buf ;search string buffer. CLR ,x LEAX -255,x STX alternate_buf ;utility catch-all working buffer. CL> ;change time/date (maybe). JMP _screenstart ;print up screen and . title FCB 12 FCC "%nCALC: Copyright 1985 by Dick Barnes%n" FCC "EDITOR: Copyright 1984 by Joe Bostic%n%n" FCC 7974657320667265652e256e256e446174653a202573256e54696d653a202573256e256e456e 746572206461746520616e642074696d65206f722070726573732052455455524e256e006469736b 2e00746578743a6500 88 ec9fd06f843088889fa86f843089ff019fa66f843088af9fa46f84301f9fae32761f40bd00>001f40 3406cc000b3406dcd23406bd0000bd000032649ed26f0b3410dcae93208300043406cc0099bd0000 32e810cc00503406dcd2bd000032629ed26f8b1f10bd0000cc0000bd00007e00000c256e45444954 4f5220203a436f707972696768742031393834206279204a6f6520426f73746963256e256e202564 2062>h),0,15(both),0,1(both) Object 8e00cb5d2a0dc0812d07c10a22038e0029200bc0012d07c11222038e003f8c00cb270358ad957e00 0000d701540074000000c9006f000000cc0065010a006a007d00f200cb00cb00cb00cb00cb00cb00 cb0000000000ec000000cb00cb00cb00cb00cb00cbccffeb200dcc0015200?;omemory newform EQU 1 ;set if using original med crunched text format. XDEF _inserttext,_fetchtext,openp_bytesp1,closep_bytesp1 XDEF _hinserttext XREF _offsetall,set_eof_line XREF length_,copystr_,copy_ ;i? CMPB ,-x QUIF NE CLR ,x ENDLOOP LOOP ;.textpntr,rts TST [,s] QUIF EQ LDX ,s LOOP CLRA LDB ,x QUIF EQ? LDX 2,s CLRB LOOP INCB TST ,x+ UNTIL EQ PSHS b INCB CLRA PSHS d CALL openp_bytesp1,txtcur ;open up space. LEAS 2,s IF ? DEC ,s uncrunch LOOP STA ,y+ DECB UNTIL EQ ADMIT IFEQ newform TSTB QUIF PL ;crunched spaces. ANDB #%01111111 ? D 8,s STD txtend LDD range_end ADDD 8,s STD range_end LDD #0 ;ok flag ENDIF DONE 6 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ? nclude ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :inserts text in input_buffer into next line of memory. ;parameters:buffer that holds the text. ;returns :true/false if ? ;found end byte. TFR x,y INX LOOP INCA CMPB ,x+ UNTIL NE IFEQ newform CMPB #" " QUIF EQ ENDC ? EQ ;there is memeory. LDX txtcur LDB ,s INCB STB ,x+ PSHS x CALL copystr_,(5,s) LEAS 2,s LDX txtcur LDB ,s AB? LDA #" " BRA uncrunch ADMIT ENDC STB ,y+ ENDGUESS ENDLOOP CLR ,y ;end string in nul. DONE 1 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\?;performs :closes up space in text. ;parameters:start of close-up space ~ number of bytes to remove. ;returns :none ;destroys :x keeps: closep_bytesp1 PSHS d LDX txtend LDB ,x ABX PSHS x ?there isn't enough memory. ;destroys :x, y keeps: _inserttext PSHS d CALL _offsetall,#1 PULS d _hinserttext PSHS d SET2 old_txtcur,txtcur SET2 old_cur_line,cur_line ; compile line and copy into me?CMPA #2 UNTIL HI TSTA QUIF EQ ;found chars to be crunched. IFEQ newform GUESS CMPB #" " QUIF NE TFR a,b ORB #%10000000 ;?X STB ,x CALL set_eof_line LDD #0 ENDIF DONE 5 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :uncrunches line from one location and makes it a stri?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;performs :open up a space in the text. ;parameters:place to make room ~ number of bytes to stuff. ;returns :true/false; is memory too full? ;destroys :x keeps: openp_bytesp1 PSHS d LEAS ? ;very very eot. LDD 2,s ADDD 6,s PSHS d ;begin of top text. LDD 2,s SUBD 4,s PSHS d ;length CALL copy_,(4,s),(6,s) LEAS 2,s LDD txtend SUBD 8,?mory returning true if memory full. LDX ,s PSHS x CLR 254,x LOOP LDB ,x QUIF EQ GUESS CMPB #32 QUIF LO ANDB #%10000000 Q?space flag bit. DECA ADMIT ENDC CMPA #31 IF HI LDA #31 ENDIF STA ,y+ ;put #. SUBA #2 IFEQ newform ENDGUES?ng in another. ;parameters:source of line ~ destination for line. ;returns :none ;destroys :x, y keeps: _fetchtext TFR d,x LDB ,x+ DECB PSHS b ;length+1 of line to disassemble. LDY 3,s ?-4,s LDD txtend TFR d,x ADDB ,x ADCA #0 STD ,s ;very very end of text ADDD 8,s STD 2,s ;new end of text SUBD max_memory IF LS LDD ,s s STD txtend LDD range_end SUBD 8,s STD range_end CALL set_eof_line DONE 6 keeps: closep_bytesp1 PSHS d LDX txtend LDB ,x ABX PSHS x ?UIF NE ADMIT ;convert illegal characters to " ". LDB #" " STB ,x ENDGUESS INX ENDLOOP LDB #" " LOOP ;purge trailing spaces. ?S ENDC STB ,y+ ;put char. STY ,s ;continuation area. LEAY a,y PSHS y ;end text start CALL copystr_,(2,s),(2,s) ;close up freed area. LEAS 2,s ENDLOOP ? ; 0 1 3 ;.length,rts,to LOOP DEC ,s QUIF EQ ;done with translation. LDB ,x+ GUESS CMPB #" " QUIF HS LDA ,x+ ? SUBD 4,s PSHS d ;length of upper block. LDD 6,s ADDD 10,s PSHS d ;destination. CALL copy_,(8,s) ;open up space. LEAS 4,s LDD txtend ADD@;_UL XDEF EC_UPPER XDEF EC_LOWER XREF _SYNTAXCHK XREF ZLOSTR_ XREF ZUPSTR_ XREF _PRINTSCREEN,fix_range ;include ;include ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@;parse1.asm. 1) Checks to see if string is alpha or numeric; 2) if numeric, ;moves string to cur_dig buffer for pickup by SUM; 3) checks for stopper ;colon and quits if it is found. 4) checks decimal location. Mod of PARSE ;to speed things up! Mod Jan 8,@ inc short ; Text endif jmp done admit cmpb #': ; Colon! quif ne ldb -1,x ; Might be in text line cmpb #': ; Two? if eq @ if eq ldb -1,x ; What's next leftward char? jsr isdigit_ if ne ; Oh, dear. A number. inc entryerr else ; No, text line inc short @\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ;PERFORMS :CHANGE CASE OF TEXT. ;RETURNS :REPEATABLE FLAG. GUESS EC_UPPER LDD #ZUPSTR_ ADMIT EC_LOWER LDD #ZLOSTR_ ENDGUESS PSHS D CALL _SYNTAXCHK CAL@ ; Stopper for left margin entries quif ne ; We're through jmp sooner admit inc entryerr ; Anything else is an entry error jmp done endguess first pshs b @ '84 for more speed. Tests okay. ;Modified Feb 18 to catch bug in missing digit errors, with trymore. xdef dotpos,cur_dig,parse,cease xref short,row_col,linebuf,isdigit_,entryerr parse clr short clr dot clr count clra @ inc cease ; Yes! stop! else inc short ; Nah, a text line. endif jmp done admit cmpb #$20 ; A space? quif ne ldb -1,x cmpb@ endif else inc short ; If not a period, must be text. endif jmp done ; Don't restore B. All exits finish line. endguess jmp first ; Well, hell, it isn't st@ L fix_range LDX RANGE_START LOOP LDB ,X+ DECB DECB LDA B,X CLR B,X ;NULL END OF LINE. PSHS D,X CALL ([4,S]),(2,S) PULS D,X @ ; Fall through to stacked good entry. inc count ; count the length of the number string ldb count cmpb #13 if hi inc entryerr ; Woops! Number too long! jmp done @ pshs a ; Stuff a zero on stack to mark end number ldx #linebuf ldb row_col+1 ; Offset to desired column abx ldb ,x guess ; Screen start of line; NUMERIC entry or t@ #$20 ; Another space? if eq ldb -2,x ; Gee, two. Maybe Bodsworth forgot entries endif ; after the decimal point. pshs b jsr isdigit_ ; Leave off last digit? @ructured, but the loop ; first entry MUST be a digit! guess pshs b ; Now, loop and screen every char jsr isdigit_ puls b quif pl ; QUIT to next ADMI STA B,X INCB ABX CMPX RANGE_END UNTIL GT LEAS 2,S JMP _PRINTSCREEN ADMIT EC_LOWER LDD #ZLOSTR_ ENDGUESS PSHS D CALL _SYNTAXCHK CAL@ endif ldb ,-x ; Get next char endloop sooner tst dot ; Decimal point in this line? if ne ; Yes tst dotpos ; Is one specified for this group? @ext? pshs b ; Each line is screened at start. jsr isdigit_ puls b quif pl ; Proceed to next ADMIT if NOT a digit admit cmpb #$3B ; Anything higher than digit@ puls b if ne ; Oh, dear, yes. inc entryerr else ; Not digit? cmpb #'. ; Is it a decimal point? if eq jmp trymore ; Let's look furthe@T if NOT a digit admit cmpb #'. quif ne ; Decimal point? jsr period ; Is the darn thing in the right place? admit cmpb #'- quif ne admit @ur_dig+2 ; Cur_dig is clear on first pass if eq ; So specify dot position lda count sta dotpos else lda dotpos ; If one is specified, cmpa count ; See@if eq inc entryerr ; Gee, no. Error endif else ; If no decimal point this line, tst dotpos ; are none specified? if ne ; Woops. One is specified. @ or colon? quif lo ; No, go to next ADMIT ldb -1,x ; Yes, look at next char left. jsr isdigit_ ; Gotta number behind it? if ne inc entryerr ; Yes else @r else inc short ; Text... endif endif ; Don't restore B. All exits finish line. jmp done admit trymore cmpb #'. ; Well, if no other allowables... @ cmpb #'( ; Neg flag paren? quif ne ldb #'- admit cmpb #$20 ; A space? quif ne jmp sooner ; We're through admit cmpb #$FF if it is in right place if ne inc entryerr endif endif rts cease rmb 1 count rmb 1 cur_dig rmb 14 dot rmb 1 dotpos rmb 1 end ntil eq rts period inc dot tst c@ inc entryerr ; Tell Bodsworth. endif endif done ldx #cur_dig loop ; Unstack and store entry puls b stb ,x+ until eq rts period inc dot tst cA;convert.asm. Revision of convert1 to use READIT elsewhere. Feb 11 85. Breaks ;out three separate subroutines, checkit, str2cn, and cn2str. Mod Feb 17 to ;handle entry errors above 65535 decimal. Mod Feb 26 to insert PREFIX ;Mod Mar 15 to allow one spaceAor to overprint original inc entries ; Set entry flag so we print later endif endif rts readit ldb ,-x ; Checkit expects X to point to the rightmost cmpb #'= ; numberA pshs b jsr isdigit_ ; We gotta good digit? if eq inc entryerr ; No. jmp endit endif dec countit endloop tst countit if lt Anary lda #8 clr linebuf ; Clr flag for space entry loop again ldb ,-x cmpb #'% ; End of entry quif eq guess cmpb #$30 ; Is it 0? quif ne A stb ,y+ until eq fini rts str2cn ldb ,x ; Convert string notation to counting number. guess ; str2cn expects X to point to the TYPE cmpb #'$ ; of notation: $, D, orA in binary entries between nybbles. xdef convert,countit,checkit,str2cn,cn2str xref tgetcurs_,tputcurs_,printf_,isdigit_,dec2cn,cn2dec,bin2cn,cn2bin,rowup xref cn2hex,hex2cn,spread,total,entryerr,prefix,entries,printerr,moveit xref row_col,linebuf isheA entry, of whatever kind. if ne ; Readit and Checkit stack entries and pull inc entryerr ; them off into TOTAL buffer. jmp fini endif checkit clra ; Mark end of stackstring A ; More than 5 decimal entries inc entryerr endif jmp endit hex lda #4 sta countit ; We need a dec register; ishex_ destroys A loop ldb ,-x cmpb #'$ if eq A pshs b admit cmpb #$31 ; or 1? quif ne pshs b admit tst linebuf ; Flag for inserted space quif ne cmpb #$20 ; Space? A %. quif ne ; Expects string to be in TOTAL buffer, and jsr hex2cn ; puts converted counting number back there. admit cmpb #'D quif ne jsr dec2cn admit Ax_ equ $BA2D convert clr entryerr clr entries clr countit clr rowup jsr readit tst entryerr if ne jsr printerr clr total else jsr str2cn ; CoA pshs a lda #10 ; We won't take more than 10 characters sta countit tfr x,y loop ; What is form of number left of = sign? ldb ,-y cmpb #'D ; Go A tst countit if gt ; If less than four entries, ldb #$30 ; Stuff in some preceding zeros loop ; on short entries, so we don't pshs b ; get the low A quif ne inc linebuf ; Yes, but we only take one. bra again ; Go get next char admit inc entryerr ; Default to bad entry. bra endit endguess deca A jsr bin2cn endguess rts cn2str ldb prefix ; Now, what format do we convert the counting guess ; number to? cmpb #'D ; WHAT puts the designator right of = into quif Anvert string to counting number tst entryerr ; Larger than 65535??? if ne jsr printerr clr total else jsr cn2str ; Convert counting number to string ldb preAparse it. beq decimal cmpb #'$ beq hex cmpb #'% beq binary dec countit if eq inc entryerr jmp endit endif endloop decimal lda #5 Abyte into the high byte, later. dec countit until le ; Don't get trapped with by IF EQ endif if lt inc entryerr ; Woops! More than four entries. endif A endloop tsta ; Did we get more or less than 8 entries? if ne inc entryerr ; Yes! endif endit ldy #total loop ldb ,s+ ; Pull 'em off stack and into bufferBne ; variable PREFIX (notation wanted). jsr cn2dec ; Counting numbers in TOTAL are put back there admit ; as strings, except for: cmpb #'$ quif ne jsr cn2hex Afix cmpb #'% if eq jsr spread ; Get bin from LINEBUF and space out in TOTAL endif jsr moveit ; Preface string with notation symbol dec row_col+1 ; Adjust cursA ; We take no more than five decimal digits sta countit loop ; Parse the decimal entry for errors; stack it. ldb ,-x cmpb #'D ; We're at end of number quif eq A jmp endit endif pshs b dec countit jsr ishex_ ; Got a hex digit? if eq ; No, not hex inc entryerr jmp endit endif endloop biadmit jsr cn2bin ; cn2bin puts unformatted string to LINEBUF; endguess ; SPREAD spaces it out, puts it in TOTAL. rts countit rmb 1 end ; WHAT puts the designator right of = into quif B;doint1.asm. Routine to add,subtract, multiply, divide integers. Feb 13 ;Mod Feb 15 to print prefix and for print subroutine. Fixed binary prefix ;bug Feb 17. Mod to do all PREFIX insertion in rith1.asm on Feb 26. xdef doint,moveit,nogood xref checkit,pBking at type: $, %, or D if ne clr total jmp endall endif pshs x jsr str2cn ; Convert to a counting number in TOTAL puls x lda operator ; Now we add, sub, mB nogood ; Print warning message leas 2,s puls d endguess std total jmp endrith endif cmpa #'/ if eq ldd total guess B c. endif endrith jsr cn2str ; Convert to proper string notation. endall rts nogood ldd #$1901 ; General purpose error print routine. jsr tputcurs_ ldd 2,s ; Load address of messagB jsr tputcurs_ leas 4,s ; Recover endif puls d ; Get original two's complement value back std total rts moveit lda prefix ; Adds prefix to TOTAL string; mB refix,entryerr,str2cn,operator,total,cur_dig,___div xref ___mul,cn2str,itohs_,linebuf,tputcurs_,row_col,printf_ doint jsr checkit ; Get notation, check for error, store in TOTAL tst entryerr if ne clr total B ul, or divide cmpa #'+ if eq ldd cur_dig addd total if cs ; If carry flag is set, number is 65536 pshs d ; or larger. ldd #bigadd psB quif eq ; Do not accept division of or by zero quif mi ; or divisor or dividend above $7fff admit inc entryerr jmp woops endguess pshs d ldd cur_dBe jsr printf_ ldd row_col jsr tputcurs_ rts subit ldd total subd cur_dig pshs d ; Stack original value if cs ; This works okay up to -$FFFF Boves ldx #total ; all bytes one space downstream loop ldb ,x ; Save character sta ,x+ ; Store replacement quif eq tfr b,a endloop rts B jmp endall endif ldb ,x ; Get form of notation for first number stb prefix ; And store it pshs x jsr str2cn ; Convert string to a counting number in TOTAL pBhs d jsr nogood leas 2,s puls d endif std total jmp endrith endif cmpa #'- if eq pshs x jsr subit puls x Big guess quif eq quif mi admit inc entryerr leas 2,s endguess woops tst entryerr if ne ldd #badiv pshs d B coma comb addd #1 pshs d ; P2 for ITOHS ldd #linebuf ; P1 for ITOHS jsr itohs_ ; Convert to hex string, store in buffer ldd #$1901 jB bigadd fcc "RESULT EXCEEDS 65535. Recompute in Floating Point." fcb 6,0 badiv fcc "ENTRY ERROR: 1) A Digit above 32767 ($7fff), or 2) Division by 0" fcb 6,0 reenter fcc "RESULT EXCEEDS +32767 Decimal. Recompute in Floating PoinBuls x ldb ,-x ; Look at operator sign stb operator pshs x lda #2 ; Copy first counting number to a new buffer ldx #total ; in cur_dig ldy #cur_dig loopB jmp endrith endif cmpa #'* if eq ldd total pshs d ldd cur_dig jsr ___mul guess quif cs ; If any of these conditions exist in CC B jsr nogood leas 2,s clr entryerr clr total clr prefix jmp endall else jsr ___div std total endif ; End of arithmetiBsr tputcurs_ ; Print message on line 25 ldd #linebuf ; P2 for printf_ pshs d ldd #negative ; P1 for printf_ jsr printf_ ldd row_col ; Put cursor back where 'twas. yt" fcb 6,0 negative fcc "RESULT IN Two's Complement. Value below zero is: -$%s" fcb 6,0 end ve character sta ,x+ ; Store replacement quif eq tfr b,a endloop rts B ldb ,x+ stb ,y+ deca until eq puls x ; X still looks at operator jsr checkit ; Process second string; store in TOTAL tst entryerr ; CHECKIT leaves X looB quif mi ; register, the result can be anything above quif eq ; 32767, with upper limit of $FFFF*$FFFF. admit pshs d ldd #reenter pshs d jsr C;asc2char1.asm. March 8, 1985. We enter with X looking at = sign ;Format: $24=@, D24=@. Tests okay. March 12. Revised for controls. ;Revised Mar 14 for dopf. Mod Mar 24 to put rvs fld space in right place. ;Mod Apr 24 for to not use U stack. XDEF asc2Cd address of TABLE LEAX 1,x ; Look at first entry LOOP LDB ,x+ ; Store string in TOTAL buffer CMPB #'= QUIF EQ PSHS d,x ; Stack X--change LDX #tCFF QUIF NE LDA #33 JSR write ADMIT CMPA #$20 QUIF LO ; Dispose of all above a space IF EQ LDB #160 STB -1,x ; Show reverse-field spCCB 0 enq FCC "ENQ:^E (Insert)" ; 5 FCB 0 ack FCC "ACK:^F (ESC Key, EOL)" ; 6 FCB 0 bel FCC "BEL:^G (Curs Rt)" ; 7 FCB 0 bs FCC "BS:^H (Curs Lft)" ;8 FCB 0 ht FCC "C CC "EM:^Y" ;25 FCB 0 sub FCC "SUB:^Z" ;26 FCB 0 esc FCC "ESC:^[ (No Key)" ;27 FCB 0 fs FCC "FS:^\" ;28 FCB 0 gs FCC "GS:^]" ;29 FCB 0 rs FCC "RS:^^" ;30 C char,contabl XREF total,tputcurs_,entryerr,isdigit_,ishex_,hstob_,printf_,row_col XREF stoi_,prefix,linebuf,dopf,nogood,hex2cn asc2char STX linebuf ; Save entry address LDA #4 LOOP ; Screen and limit entrieC able JSR [a,x] ; Check on decimal or hex entry errors first PULS d,x ; Pull x -- change IF EQ INC entryerr JMP thru ENDIF STB ,y+ ENDLOOP C ace for a space ENDIF ADMIT JSR write ; Write in the low CONTROLS ENDGUESS thru RTS write LSLA ; Double the CONTROL value in A LDY #contabl LDY a,y C HT:^I (Tab)" ; 9 FCB 0 lf FCC "LF:^J (Curs Down)" ;10 FCB 0 vt FCC "VT:^K (Curs Up)" ;11 FCB 0 ff FCC "FF:^L (Clr Scrn)" ;12 FCB 0 cr FCC "CR:^M (Carr Rtn)" ;13 CFCB 0 us FCC "US:^_" ;31 FCB 0 del FCC "Delete (Repeat Key)" FCB 0 off FCC "(OFF/RVS Key)" FCB 0 dec2cn LDD #total JSR stoi_ STD prefix RTS toolong FCC "ERROR: Enter $ anCs LDB ,-x CMPB #'D ; Allow no more than 4 entries QUIF EQ ; for Decimal, and 3 for Hex, including CMPB #'$ ; notation symbol QUIF EQ DECA UNTIC CLR ,y ; Mark endstring LDY #table2 ; Was LDU; next line was JSR [a,u] JSR [a,y] ; Convert to counting no. SR stores in TOTAL LDX linebuf LEAX 3,x LDA total STC ; Y holds address of CONTROL definition string LOOP LDB ,y+ ; X is passed in X at call, as parm. QUIF EQ STB ,x+ ; Store (don't print) to screen. ENDLOOP RTS table C FCB 0 so FCC "SO:^N" ;14 FCB 0 si FCC "SI:^O" ;15 FCB 0 dle FCC "DLE:^P" ;16 FCB 0 dc1 FCC "DC1:^Q" ;17 FCB 0 dc2 FCC "DC2:^R" ;18 FCB 0 dc3 FCC "DC3:^S" Md 1 to 2 digit code, or D plus 1 to 3 digits" FCB 6,0 END 0 esc FCC "ESC:^[ (No Key)" ;27 FCB 0 fs FCC "FS:^\" ;28 FCB 0 gs FCC "GS:^]" ;29 FCB 0 rs FCC "RS:^^" ;30 CL EQ GUESS CMPB #'D QUIF NE LDA #2 ; "A" register becomes index for subroutine JSR num2char ADMIT CMPB #'$ QUIF NE CMPA #2 QUIF LT CA ,x++ ; Store graphics char on screen GUESS ; See if we have CONTROLS or Reverse Field stuff CMPA #$7f QUIF NE LDA #32 ; Stick in offset for DELETE string JSR CFDB ishex_,isdigit_ table2 FDB hex2cn,dec2cn contabl FDB nul,soh,stox,etx,eot,enq,ack,bel,bs,ht,lf,vt,ff,cr,so,si,dle FDB dc1,dc2,dc3,dc4,nak,syn,etb,can,em,sub,esc,fs,gs,rs,us,del,off nul FCC "NUL:^@" ; 0 FCC ;19 FCB 0 dc4 FCC "DC4:^T" ;20 FCB 0 nak FCC "NAK:^U" ;21 FCB 0 syn FCC "SYN:^V" ;22 FCB 0 etb FCC "ETB:^W" ;23 FCB 0 can FCC "CAN:^X" ;24 FCB 0 em FD_xj0"$"`294@v  ood08O_5@?O' &,'0:',''(0J*56 ~p4=5XiAi946O_ĆPJ'$ލ%5642&,,' ''oL gNg @og, HP"PC CLRA ; Second SR pointer JSR num2char ADMIT LDD #toolong PSHS d JSR nogood LEAS 2,s ENDGUESS RTS num2char LDY #total ; U Register helCwrite ; and print value ADMIT CMPA #129 QUIF LO ; Now take care of those DAMN PF keys! CMPA #139 QUIF HI JSR dopf ADMIT CMPA #255 ; Get OCB 0 soh FCC "SOH:^A (Home)" ; 1 FCB 0 stox FCC "STX:^B (Run)" ; 2 Hmmm. STX means Store X... FCB 0 etx FCC "ETX:^C (Stop)" ; 3 FCB 0 eot FCC "EOT:^D (Del Key)" ; 4 FD''!:'04gP5'%\&Z )Pg,o15݂&  {2݂'2 &2&&ƃ &Ɔ22* m& 4{5 &pLrrrq00& H0+n J*~r@abcdefghiklmnopqrstuvwxz;:, ssawmOgwmwmowwtonwrrwnuUmRxx w8w tND.c1,*' '&c0O9M&9{&c0,'Lb' La' d'&,'p-q.b,'"c1m0' .M& c00_-M9-&ߎl{'J*& = *P&Lp&m+'Z._'.ƌ--m0'o0-p+&A.' l-c00 (DdžA' L'D& \'&"1-' PC '.ŀ&m0&Z1' 1-& .*P!č3 N&4. /5 z1&-9 41X`' L 'U@'Se59m0']Y y u 9 m/ +K.9 V RDj &  4q:$'eHEE~a(4TTTT5$: 9435 /4 | %    m&45  47 47m&{ 45579oc2$' & ( &9DXXXXc9c9=%9O %9'*94')4& 怯'D 00 q0&0415&021(45/큽p' o5'4 pNA4b& b5&0Pj&ߎ(jA*Խ݂'&5ƀT 4q:$p15~a4p5 94q0&~p024瀽p& L& =&o5'b=&nG O_5D oooaq:_g9'|')#&p'&q0&~a02O a%z" M'pL'Ȁ&% "& c&02lb& +0 .or& b&"a t&a'r'a' ab'x_4섃__XXXXIXI6&  & 4 & l4쁄'm0#5'~plT,DDDD O]'$-&m.*C&`-4-O1 9'&Lp-~q0nGo] ,o!č+ 4ia590+OZ& +Z&9o! %l)怯%9#g9o)#+& +o+,%@ @%0:'4 *C0%00ETT?B5YIYIYITTT??D / %454DDDD509#'l(&l'9$ , - # j)9Oצ)4m!'F+'03'05','-''0:'.'/|A02'pR 5#:)9DXYUSP??ABCD????CABDXYSP<6N N )V->ObBD b559%ƿ~~a0%:% F"A%99YB_q:$b;'9B9B9B=4C=AC=2a9CB9CB9CB9p' '9OooA'&p' JAp'& g#&2p'+p$& ""J4 A=aaA =M&Aa%;5 1%&'4T5& JTiAi% $' p$ J``% pD904p1''5_ LS0217b>&9' 2 72o-pR4o;pR6' Eb#%4%"佰خ#瀯#&5'佰O969042B4 Bb,&nG ׆?602172~#%O#%"怯#dDc"p&+_M'-'m1' .m0'a~oq0' 9p c,cwdde @a'Pb' e'؁'@,,9ņ ߎlz'J*&g & 'ʠ'O--9o+&2l' ,&,p,%HHHH-t,&p'&X''9 c'ƄAC#& 4@FHJ5LO5DNNm& B*p~n@'dZ+}0e:D&0qj&l+SD$N0$0DoD|pRDc%~4&-c5&C/o-c19CVZNIHFEeȄ'-&o0m+'Zl2&Z0o-._.m0&)('%j00,' &, 0+.94M*C&SM&]+M59xysu& d{ɪ,,o-eȁ &)9&q02'L3'O+9 '& u&l,l,lqD?9+' &]'~&CBDLB+?'a]'Y3"iC<'87"E7./0`h/$&S&E&UP&CC'D&PZ*Ү'0']'"E +& ]&BBB&]'BCMBPDD+'/U &]'$Y'SE %']' YD ]&D~p˽nG402q: %b4p' 'J&2a 4q:5$J&qp1502&q&}g*'B%i_ B9J&q:$@Bb '/;'4q:B5.&BBb;&q:$ B91984, 1985 by T. M. Peterson All rights reserved. &o'SoT Hn2~ &d' 0m1qZ&&@q:% ~pˆq:$Dop1'NLHHm*IND4HJ4FL;q0'Bc&od 9q<$40ed4Xb;E T and bc BREAKPOINTS CLEAR 1. Breakpoints are points at which code being executed will stop, with a register dump. In SPMON, a breakpoint is not an SWI, as it is in the Waterloo monitor. 2. Breakpoints are superb tools to debug code, for you caE there are several alternative paths through the code, $5700 may never be reached. You may need multiple breakpoints to trap a run properly. Multiple breakpoints, with or without iteration counts, are set one to a line: b 5700 5 E a5505 FD 5600 |STD $5600 be intermediate in an operation. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c COMPARE 1. You often find you need to compare two chunks of code to see if there are difEirst command: c A000-AFFF 2000 Second command: a000.1000 (+1000 hex bytes) You needn't repeat the address range for the second piece of code; it is defin- ed in the first set of addresses. ::::::::::::::::::::Eions. However you specify a range, in hex or decimal, the addresses of differences re- turn in hex. 4. On long programs, be prepared, to get a long list of differences. If they are important and you want them logged, divert output to printer or to En trace what is happening--and why your code does not produce the results you expect. 3. You may set from one to four breakpoints in SPMON. Not being SWI's, such breakpoints may be set at any address in your code with no ill effect. This is not trueE [Break the fifth time the instruction at $5700 is to be executed during QUICKSTEP] b 5746 [Plain breakpoint] b 5905 2 [Break on second execution of instruction $5905] All multiEferences, and where they are. COMPARE returns the addresses of all differ- ences in any two pieces of code, however large. 2. We don't discuss here how to load the code (see LOAD, below). Suppose you want to compare your A ROM (addresses $A000-$AFFFE:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3. Readout from COMPARE. The command is swift; if there are no differences, SPMON's cursor returns to the line below the command. Nothing prints. If there are differences, the addresses of Edisk. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ d DISASSEMBLE 1. SPMON is at its superb best in disassembly of code. Let us compare a disassembly in the Waterloo monitor with one from SPMON: The WaterloE of the Waterloo monitor, where breakpoints may only be set at the START of an instruction unless you want to crash. 4. A major problem with the Waterloo monitor is that you cannot set a break- point to execute the nth time through a loop. SPMON allEple breakpoints and iteration counts are confirmed by SPMON. If you want a list of breakpoints, type: b . c. To clear breakpoints, enter: bc ; all are cleared. You cannot clear them selectively. When you exit SPMON, all breakpointE) with a known good disk image of that ROM on the first ISPUG utility disk. Assume we have loaded the A ROM im- age from disk, starting at $2000. We now compare the disk image (at $2000) with the actual ROM itself: c A000-AFFF 2000 E the differences will be reported, as shown be- low, where we COMPARE memory at $5500 to that at $5600: c 5500.7 5600 We compare the first seven bytes of code 5602 <--difference at at the specified memory locatFo Disassembly: Disassembly from SPMON: >t b21f.10 d b21f.10 b21f ROR $f9,Y ,B21F 66 39 |ROR -$07,Y b221 PULS $10 ,B221 35 10 |PULS X b223 PSHS $Eows you to define an iteration count for any breakpoint, so you BREAK at the loop count wanted. 5. WARNING! Breakpoints do not work with the GO command, but only with QUICKSTEP. 6. Setting Breakpoints: b 5700 [Set a breakEs are cleared. 7. Where to Set Breakpoints: You can determine where to set them either with a ".lst" file, which shows addresses for each instruction, or from a dis- assembly of code in SPMON. We show a short assembly/disassembly below as an exampleFks: h 0a00.2500 "You may find character" [Well, go into SPMON and try it! Enter the Waterloo monitor, and: >g 6000! Then enter the command at left.] The phrase aboF06 ,B223 34 06 |PSHS B,A b225 PSHS $10 ,B225 34 10 |PSHS X b227 TFR $41 ,B227 1F 41 |TFR S,X Would you have suspected that the ROR offset was a negative number; couF FILL This command fills the specified range of memory with a specified value: For a digit: f 9000-9020;2 00 or f 9000.20;2 00 For an ASCII value: f 6000-6002 'a' or f 6000.2 'a' In the first lineF~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ h HUNT 1. We received a buggy patch for one of the languages (it crashed) and had to find the bad code. By reconstructing the code generated by the patch, we knew what the bad code sequence was--but had no idea F tion with DISASSEMBLE; the disassembler cannot read character code as such. After you disassemble, and get a number of spots in code marked ?????, INTERPRET those addresses. You'll see the messages embedded there. Try this: d b117.10 F ve occurs twice. You will receive two addresses. Be careful about "hunting" the E addresses above $E7FF, where you run into control registers, latches, the VIA, PIAs, etc.--and can very easily crash. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~F ld you have figured out that PULS $10 really means PULS X, that PSHS $06 means PSHS B,A, or that TFR $41 really says TFR S,X? If the answer is yes, we ask if you enjoy such nitty-gritty... 2. Ranges and Scrolling. If you specify a range, SPMON will F , we fill 9000 through 9020 in BANK 2 with a null. In the second, SPMON substitutes the ASCII code for 'a' ($61) in 6000-6002. Remember that the "range" figure after a period is a + sign (6000+2=6002)--and that we thus fill 6000, 6001, and 6002--three byF what bank the code was in. We found it in less than five minutes, using HUNT, starting with bank 0 and working up the banks, until we found it in bank 8: Address range Bank Code Sequence Searched for: | | | h 9000.1000;8 fF [You'll get the disassembly below] ,B117 00 00 |NEG $00 ,B119 00 27 |NEG $27 ,B11B 1003 0000 |???? <---Aha! Characters! INTERPRET now! i b11b 'B11B .. .d....disk.printer.ieee.host.terminal.serial.keyboard..F~~~~~~~~~~~~~~~~~~~~~~~~~~ i INTERPRET 1. This command will show memory as ASCII values. It is handy for reading the actual messages embedded in code. Try this: i b000-bfff [You may enter ranges if you wish] Jump on the STOP keyFstop disassem- bling at the end of the range. If you state no range, you'll get one line--But! d a200 [Disassembles one line of code] Touch either PF 3 or PF6--you find that PF6 will continue disassembly at the top of the screen; PF3 wilFtes, all told. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ g GO [As in: g 5500] 1. If specified with an address, GO will load the PC with the address and then begin to execute the code there. If no addFc 56 00 3f ff 01 9546 <--SPMON says the code starts at $9546 (The code above is phony--we can't remember what it was). Note that numeric bytes must be separated by spaces. If the sequence is found, SPMON returns the startF...... Well, well. There are all the filenames we've been putting into our own code, already in ROM. Want their addresses? You already know how to HUNT; so HUNT "disk", "printer", etc., in the address range shown...and save the addresses. ~~~~~~~~~~~~~~F to stop scrolling. If you do it soon enough, you'll see some filetypes defined (fixed, text, variable) and a number of messages. After you hit STOP, you must re-enter an INTERPRET command if you want to continue. Clear a line with the ESCAPE key first. Fl do the same at the bottom. At screen top, you dis- assemble down-memory (to lower addresses); at screen bottom, up memory. In short, you may browse memory, merrily disassembling as you go. 3. You may modify a disassembly by overtyping and RETURNinFress is specified, GO begins exe- cution at the address currently in the Program Counter (PC). Before you give a plain GO, dump the registers with r and check the PC! (You can over- type the PC with the desired address, hit RETURN, and GO.) Fing address(es) of the sequence. If it is not found, the cursor returns to the next, blank line. HUNT is very, very fast; you search 4K bytes in a fraction of a second. 2. You may find character entries in the same way. Enclose them in quotation marG~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ j JSR This command is used in conjunction with WALK (in which you step through a program, one instruction at a time). If the code you are WALKing through JSR's to a system routF 2. An INTERPRET command returns 64 bytes from the starting address given. As with DISASSEMBLE and Memory display, you may scroll through memory, up or down, using the PF3, PF6, or the cursor keys. 3. INTERPRET is most useful when used in conjucFg the change. Note that a comma is the prefix for revising an assembly (at start of the line). Get out of disassembly by clearing a line with ESC; enter any command. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fF 2. Breakpoints do not operate after you GO. If you want the program to stop at a particular point, disassemble the code and then assemble an SWI at the de- sired stopping point. Or use QUICKSTEP or WALK. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Gine, do you REALLY want to wade through that subroutine, line by line? If not, you touch the "j" key and the subroutine is executed; you are returned to your main code, where you resume WALKing. Do not "j" unless the next instruction is JSR. SPMON iGhe load to any other suitable address. If you do, ALL modules load at the same address. The STOP key is checked at the end of each module and the load is aborted if it is down. Hence it is possible to load, for example, one of the languages bank- by-bankGgrams which normally reside in user memory may be similarly redirected, even to the banks: l trial=9200;#14 The program loads into bank 14, starting at $9200. SPMON, after loading, will respond with the addresses at which the code starts and ends, G |keyboard........ 2. Though you may use range commands with "m", the display needn't stop at that address. You may browse memory with the PF3 or PF6 or the cursor keys, just as you can with DISASSEMBLE and INTERPRET. Leave memory display at any tiG or prin- ter file will be closed! Your printer carriage may well be stopped in mid-line after a DIVERT printout. If so, o will return it to left margin. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p PUTG s written to keep you from using "j" unless the next instruction is a JSR. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ k KILL This command Cold Starts SuperPET. You exit SPMON, reset MemEnd_ to $7fff, and seG into user memory. 2. Filenames are treated exactly as they are elsewhere in SuperPET. Embedded spaces are significant; you may NOT use quotation marks to enclose filenames with spaces in them. Simply leave the space. Examples: l disk/1.BASIC G and with the bank number in hex (if any), like this: l trial=9200;#14 9200-9312;E Unless your code is PIC (position independent), for heaven's sake don't try to execute it with a GO at the new address! Many internal addresses will be wrong, andG me by clearing a line with ESCAPE and by entering a new command. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ o OUTPUT DIVERT 1. We repeat the material here so you don't have to search for it: o toggles between "ieee4" and screen output. o serial [or ieee4 or printer] will send all subsequent output to printer. o disk.notes sends all subsequent output to drive 0, file "notes" o re-diverts output to the sGame on drive 1, device 8. p printer You may use ieee4 or serial. p disk9/1.notes Files to device 9, drive 1. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ q QUICKSTEP 1. The command steGenu. KILL is the only safe way to leave SPMON if you employ :STOP to halt a runaway program (see below). ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ l LOAD 1. You may load any machine-language module (Gne of these programs will run unless you GO them, WALK through them, or QUICK- STEP through them. But you may find out where the code loads, disassemble it, interpret it, or modify it without running it. Or you may set breakpoints and QUICKSTEP through aG-column screen in personal com- puters, we finally get a sixteen-bit memory display which uses it! This command shows memory contents in hex and displays the ASCII form of the code (if any) to the right of a sidebar, like this: m b11b.30 :B11B 10 03 E8 Gcreen from any of the above. 2. Give this command before you create output. Only the SPMON output re- sponse will be sent to the named file. You will receive no screen output. WARNING: Be sure to re-divert output to the screen or neither disk nHps fairly quickly through whatever program you specify (there's a loop in it which slows execution down to readable speed). You get no register dumps until you SWI or until you hit a breakpoint. At this point, the program pauses and gives you a registerGa language, an editor, the Development package, your own program, etc.) with this command. Every such mod- ule contains in its first few bytes the address at which it should always load, including the bank number if it loads in a bank. You may redirect tG small part. 3. You may redirect a LOAD to any suitable address. "Suitable" means any- where in RAM not otherwise occupied, including the switched banks. If a program normally loads in Bank 15, at $9000, you may redirect the load as shown below. ProG00 64 00 0A 00 01 64 69 73 6B 00 70 72 |.. .d....disk.pr :B12B 69 6E 74 65 72 00 69 65 65 65 00 68 6F 73 74 00 |inter.ieee.host. :B13B 74 65 72 6D 69 6E 61 6C 00 73 65 72 69 61 6C 00 |terminal.serial. :B14B 6B 65 79 62 6F 61 72 64 00 00 00 81 82 83 04 05H dump. You then have a choice: a. Continue by pressing any key but STOP. From this point on, you WALK (see below) so long as you continue to press a key for each step. b. You may leave QUICKSTEP with the STOP key. 2. Hexecute the RTS at the end of the program, to return to SPMON, you will crash. Always come back to SPMON with SWI. There are two answers: either set a breakpoint before the RTS instruction, or change the RTS to SWI. It's easy to do if you DISASSEMBLE thHregister is 2 (second pass), QUICKSTEP dumps the regis- ters and pauses. We show the QUICKSTEP command and the first register dump (and identify the registers): q 5500 5504 0200 0000 0000 0000 0220 00 C9||5504 26 FB |BNE TEP. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ More on QUICKSTEP in the next file. *d this and get: spmon_instr2:e 0 0000 0000 0220 00 C9||5504 26 FB |BNE $5501 7. QUICKSTEP is a fine diagnostic t̟)p&̟ d&̟ ̟u29Enter 'p' for program tabs; 'd' for document tabs; 'w' for Waterloo tabs.%n !)19AI )=P )=PH Quickstep lets you run good code and slow down to a WALK at a trouble point. Don't WALK past an SWI; you'll execute the next piece of code.... 3. QUICKSTEP starts at the address you give it with usual range notation. It won't start without an addresH e code after it is loaded, find the RTS, and either (1) set a breakpoint or (2) substitute an SWI. We recommend you stick in a SWI, for you may indadvertently go past your break- point, hit the RTS, and execute it. Farewell, friend. The advice above doH $5501 Registers: PC A B XR YR UP SP DP CC You may either continue with any key or get out of QUICKSTEP with the STOP key at the point above. If you continue through the loop, here's what you see (we don't run the loop to the SWI, though weHs (at the address in the PC) as other commands will. This avoids the disaster of kicking off Quickstep with the habitual "q" we use to exit the Waterloo monitor. q 9000;f [Step through program in bank 15, starting at $9000] 4. When you Hes not apply, of course, to any RTS back to a main routine from a subroutine in the code you run. You must RTS back to your own program. Just don't RTS back to SPMON at the very end. 6. We'll now assemble a small piece of code and QUICKSTEP through H suggest you do so). 5501 0200 0000 0000 0000 0220 00 C9||5501 4C |INCA 5502 0300 0000 0000 0000 0220 00 C1||5502 81 05 |CMPA #$05 5504 0300 0000 0000 0000 0220 00 C9||5504 26 FB |BNE $5501 5HQUICKSTEP, you actually RUN the program, either to a breakpoint or to an SWI. If the program you run is not compatible with what's in memory, you will crash unless you take care with breakpoints and addresses. RTS can be a problem; we discuss it below. Hit to show how it works. We suggest you do it in SPMON. a5500 4F |CLRA We assemble a small loop, which a5501 4C |INCA increments five times before it a5502 81 05 |CMPA #$05 returns to SPH501 0300 0000 0000 0000 0220 00 C9||5501 4C |INCA 5502 0400 0000 0000 0000 0220 00 C1||5502 81 05 |CMPA #$05 5504 0400 0000 0000 0000 0220 00 C9||5504 26 FB |BNE $5501 7. QUICKSTEP is a fine diagnostic tH 5. When you're in SPMON, you're in a monitor, and you should return to it from any program you RUN by a Software Interrupt (SWI), not by RTS. If you test a small program which is designed to run at main menu, it will, of course, end with RTS. If you HMON with an SWI. a5504 26 FB |BNE $5501 a5506 3F |SWI b 5504 2 Then we set a breakpoint, effective 5504 02 on the second pass through the loop. When the value in the A Hool, for you may execute code you know is good, break into WALK mode at a breakpoint where you think the code is bad, and execute that part step by step, with full data on all registers. We suggest you try the routine above to become familiar with QUICKS