Mercurial > hg > Members > kono > nitros9-code
changeset 458:aac20055f8ad
Changes for shellplus source provided by Curtis Boyle
author | boisy |
---|---|
date | Thu, 26 Sep 2002 13:14:35 +0000 |
parents | 1fa3b4191290 |
children | 3e3f1f79ba00 |
files | defs/os9defs level1/cmds/shellplus.asm level2/cmds/makefile level2/cmds/shell_22a.asm makefile |
diffstat | 5 files changed, 3629 insertions(+), 875 deletions(-) [+] |
line wrap: on
line diff
--- a/defs/os9defs Mon Sep 23 12:16:22 2002 +0000 +++ b/defs/os9defs Thu Sep 26 13:14:35 2002 +0000 @@ -683,6 +683,7 @@ Drivr equ $E0 Physical Device Driver FlMgr equ $D0 File Manager Systm equ $C0 System Module +ShellSub equ $50 Shell+ shell sub module Data equ $40 Data Module Multi equ $30 Multi-Module Sbrtn equ $20 Subroutine Module
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/cmds/shellplus.asm Thu Sep 26 13:14:35 2002 +0000 @@ -0,0 +1,3613 @@ +* Shellplus 2.2a - modified by L. Curtis Boyle from original 2.2 disassembly + + nam Shell + ttl program module + +* Disassembled 93/04/15 14:58:18 by Disasm v1.6 (C) 1988 by RML +* Signals: Signals 2 & 3 are assigned new keys to handle forward/backward +* command history. Signal $B (11) is the signal sent out on a key being ready +* for normal command processing + ifp1 + use defsfile + endc + +tylg set Prgrm+Objct +atrv set ReEnt+rev +rev set $02 + mod eom,name,tylg,atrv,start,size + +u0000 rmb 1 Path # for standard input +u0001 rmb 1 Path # for standard output +u0002 rmb 1 Path # for standard error +u0003 rmb 1 # of 256 byte pages of data mem for frked module +u0004 rmb 2 Temp ptr (current parse ptr, mem module ptr,etc) +u0006 rmb 2 Size of current group +u0008 rmb 2 Pointer to start of current group (past '(') +u000A rmb 2 +u000C rmb 1 Current char. being processed in command parser +u000D rmb 1 # of command groups [ '()' groupings ] +u000E rmb 1 unprocessed signal # (0=none waiting) +u000F rmb 1 ??? Flag of some sort +u0010 rmb 2 ??? (ptr to some module name) +u0012 rmb 1 Current working DIR path # +u0013 rmb 1 Flag to kill parent process (1=Kill parent) +u0014 rmb 1 Flag: If set, a result must not be 0 ??? +u0015 rmb 1 +u0016 rmb 1 +u0017 rmb 1 +u0018 rmb 1 Immortal shell (0=NO) +* A clearing routine only does u0000 to u0018 +u0019 rmb 1 +u001A rmb 2 +u001C rmb 1 Shell logging on flag (0=OFF) +u001D rmb 1 Shell prompting (0=ON) +u001E rmb 1 Echo input (0=OFF) +u001F rmb 1 Variable expansion (0=ON) +u0020 rmb 1 Kill shell on error (0=OFF) +u0021 rmb 1 Process # to set priority on +u0022 rmb 1 Priority to set (0=don't change) (ours or fork) +u0023 rmb 2 +u0025 rmb 2 End of data mem ptr (top of stack) +u0027 rmb 1 +u0028 rmb 1 +u0029 rmb 1 +u002A rmb 2 +u002C rmb 2 +u002E rmb 1 +u002F rmb 1 +u0030 rmb 1 +u0031 rmb 1 +u0032 rmb 2 +u0034 rmb 3 +u0037 rmb 1 Flag: 0=Data dir .PWD invalid, 1=valid +u0038 rmb 1 Flag: 0=Exec dir .PXD invalid, 1=valid +u0039 rmb 1 +u003A rmb 1 +u003B rmb 2 +u003D rmb 1 +u003E rmb 2 +u0040 rmb 2 Ptr to start of filename (vs. pathname) ('/') +* Shell prompt flag +u0042 rmb 1 Current working dir path already done flag +u0043 rmb 1 +u0044 rmb 1 +u0045 rmb 1 ??? <>0 means looking for GOTO label? +u0046 rmb 1 Flag: 1=GOTO label found? +u0047 rmb 1 Error code from ReadLn or signal +u0048 rmb 2 Ptr to 1st char after redirection symbols +u004A rmb 2 Ptr to text message +u004C rmb 2 Size of text message +u004E rmb 1 +u004F rmb 1 0=no pathname in parm line, else IS pathname +u0050 rmb 2 +u0052 rmb 2 Current expanded buffer size (max=2048) +u0054 rmb 2 Ptr to current char in wildcard filename we are +* checking +u0056 rmb 2 Ptr to current pos in expanded buffer +u0058 rmb 2 Pointer to end of GOTO label name +u005A rmb 2 User ID # from F$ID call +u005C rmb 1 +u005D rmb 1 +u005E rmb 1 Device type: 0=SCF (keyboard),1=RBF (Scriptfile) +u005F rmb 1 +u0060 rmb 1 Data module linked flag: 1= Yes +u0061 rmb 2 Ptr to data module name +u0063 rmb 2 Ptr to intercept routines data mem +u0065 rmb 2 Execution address of linked module +u0067 rmb 2 Start address of module +u0069 rmb 2 +u006B rmb 1 Flag: 0=No module to unlink, <>0 module to unlink +u006C rmb 1 +u006D rmb 1 Start of device name buffer (start with '/') +u006E rmb 71 Actual device name +u00B5 rmb 20 Start of another device name buffer ('/') +u00C9 rmb 13 +u00D6 rmb 13 Standard module header info (M$ID-M$Mem) +u00E3 rmb 5 Module name string (reserves 64 chars) +u00E8 rmb 3 +u00EB rmb 4 +u00EF rmb 10 Temp buffer (many uses) +u00F9 rmb 6 +u00FF rmb 37 Place to point SP when CHAINing +u0124 rmb 81 Temporary buffer (used for several things) +u0175 rmb 119 Part of temp buffer for ReadLn (200 chars total) +u01EC rmb 2 Least sig. 2 digits of process # (ASCII format) +u01EE rmb 1 +u01EF rmb 2 Holding area for 2 digit ASCII conversions +* Shell prompt parsing flags +u01F1 rmb 1 Process ID # already done flag +u01F2 rmb 1 Standard output device name already done flag +u01F3 rmb 1 Quoting on flag in shell prompt string parsing +u01F4 rmb 1 Date already done flag +u01F5 rmb 1 Time already done flag +u01F6 rmb 1 Date OR time already done flag +u01F7 rmb 2 Size of expanded shell prompt +u01F9 rmb 25 Current shell prompt string +u0212 rmb 1 Lead in Line feed for expanded shell prompt +u0213 rmb 199 Expanded shell prompt +u02DA rmb 6 Date/time packet +u02E0 rmb 8 Date string +u02E8 rmb 1 Space separating date & time (for shell init) +u02E9 rmb 9 Time string (and CR) +u02F2 rmb 131 +u0375 rmb 131 +u03F8 rmb 29 +u0415 rmb 2 +u0417 rmb 1 +u0418 rmb 400 Intercept routines memory area (not used) +u05A8 rmb 810 Shell variables (user?) +u08D2 rmb 810 Shell variables (shell sub?) +u0BFC rmb 80 +u0C4C rmb 81 Copy of GOTO label name +u0C9D rmb 32 DIR Entry buffer +u0CBD rmb 32 Shell logging filename (append mode '+') +u0CDD rmb 400 PATH=Buffer (each entry CR terminated) +u0E6D rmb 2048 Fully expanded filenames buffer (for wildcards) +* Actually,this next block appears to be generic buffers for various functions +u166D rmb 80 Process descriptor copies go here (512 bytes) +u16BD rmb 1 +u16BE rmb 80 +u170E rmb 238 +u17FC rmb 10 +u1806 rmb 2 ??? Ptr to end of shell history buffers +u1808 rmb 2 Ptr to where next history entry will go +u180A rmb 2 Ptr to start of shell history buffers +u180C rmb 1 # of lines in history buffer (1-(u180C)) +u180D rmb 1 Current line # in history buffer +u180E rmb 1 Original keyboard terminate char +u180F rmb 1 Original keyboard interrupt char +u1810 rmb 1 +u1811 rmb 1 Original end of line NUL count +u1812 rmb 1 Flag to indicate if we have to restore PD.OPT +u1813 rmb 2 +u1815 rmb 808 Shell history copies start here +u1B3D rmb 963 Local stack space, etc. +size equ . +name equ * +L000D fcs /Shell/ + fcb $16 +L0013 fcb Prgrm+PCode + fcs 'PascalS' + fcb Sbrtn+CblCode + fcs 'RunC' + fcb Sbrtn+ICode +L0021 fcs 'RunB' + fcb $00,$00,$00,$00,$00,$00,$00,$00,$00 +L002E fcb C$LF + fcc 'Shell+ v2.2a ' +L003C fcb $00 +L003D fcc '{@|#}$: ' +L0055 fcc '+++START+++' + fcb $0D +L0061 fcc '+++END+++' + fcb $0D +* Intercept routine +L006B stb <u000E Save signal code & return + rti + +start leas -5,s Make 5 byte buffer on stack + pshs y,x,d Save Top/bottom of param area, and size of area + leax >u1815,u Pointer to start of history buffer area + stx >u1808,u Save ptr to where next history entry goes + stx >u180A,u Save ptr to start of history buffers + leax >$0328,x Setup up another pointer (end of history area?) + stx >u1806,u Save it + clr >u1812,u Clear flag that we have to restore PD.OPT + clr >u180D,u Current line # of history buffer=0 + clr >u180C,u # lines in history buffer=0 + ldx 2,s Get back top of data area ptr + ldb #$FF 255 bytes to clear + lbsr L0412 Go clear direct page + sts <u0025 Save current stack ptr + stu <u0027 Save Data mem ptr (0) + leax >u0418,u Point to intercept routines memory area + stx <u0063 Save a copy of it + leax <L006B,pc Point to intercept routine + os9 F$Icpt Setup the intercept routine + lbsr L16A6 Get user #, and make 2 digit ASCII ver. @ 1EC + lbsr L1674 Make shell logging pathname @ CBD + leax <L003D,pc Point to default shell prompt string + lbsr L0A14 Go create shell prompt string & prompt itself + leax >u05A8,u Point to start of shell variables + ldd #C$CR*256+20 Carriage return (blank entries) & all 20 of them +L009C sta ,x Mark shell variable as blank + leax <81,x Point to next entry (81 bytes/entry) + decb Do until all 20 are done (user & shell sub) + bne L009C + sta >u0CDD,u Init 1st 2 entries of PATH= buffer to CR's + sta >u0CDD+1,u + puls x,d Get parameter ptr & parameter size + std <u0006 Save size of parameter area + beq L00BF If no parameters, skip ahead + lbsr L041B Pre-Parse parameters passed to this shell + lbcs L01FA Error, go handle it + tst <u000C Any char being processed in parser? + lbne L01F9 Yes, skip ahead +L00BF lbsr L0225 Release any keyboard/mouse signals & get PD.OPT + inc <u006C ??? Set flag + lds ,s++ Since parameters parsed, point SP to top of mem + sts <u0025 Save end of data mem ptr (top of stack) + stu <u0027 Save start of data mem ptr +L00CC leax >L002E,pc Point to Shellplus v2.2 message + tst <u001D Shell prompting turned on? + bne L00EA No, skip ahead + ldy #$000E Length of message + lda #$01 Standard out + os9 I$Write Write it + lbcs L0200 If error writing, terminate Shellplus + bsr L00FB Go create date & time strings + lbsr L021B Write out date & time + lbcs L0200 If error writing, terminate Shellplus +L00EA clra + sta <u005C + leax >L0055,pc Point to '+++START+++' for shell logging + lbsr L07E7 Go deal with logging if necessary + tst <u001D Shell prompting turn on? + bne L0120 No, skip ahead + bra L010D Yes, do something else first + +L00FB clr >u01F6,u Clear date or time done flag + lbsr L0B3B Create current date & time strings + lda #C$SPAC Put in a space to separate date & time + sta >u02E8,u + leax >u02E0,u Point to start of date buffer + rts + +* Shell just booted goes here +L010D lbsr L09F7 Update expanded shell prompt if needed + leax >u0212,u Point to expanded shell prompt + ldy >u01F7,u Get size of expanded shell prompt +L0119 tst <u001D Shell prompting on? + bne L0120 No, continue on + lbsr L021F Print shell prompt to standard error +* Shell already booted goes here +L0120 clra + leax >u0124,u Point to an input line of some sort + tst <u006B Any module linked? + beq L015B No, continue on + ldy <u0065 Yes, get Execution address of linked module + cmpy <u0069 ??? + lbhs L01F0 + ldb #200 LDW #200/PSHS X/TFM Y+,X+ + pshs x Copy temporary buffer to [<u0065] +L0137 lda ,y+ + sta ,x+ + decb + beq L014E Whole buffer copied, skip ahead + cmpy <u0069 But don't go past here + bhs L0147 + cmpa #C$CR Also, stop on carriage return + bne L0137 +L0147 sty <u0065 Save new start address + puls x Restore ptr to u0124 + bra L01B9 Skip ahead + +L014E lda ,y+ + cmpy <u0069 + bhs L0147 + cmpa #C$CR + bne L014E + bra L0147 + +L015B tst <u005E We reading from script file? + bne L017F Yes, skip ahead + ldd #SS.Relea Std input path/release keyboard+mouse signals + os9 I$SetStt Release any keyboard signals + lbsr L18DB Go modify signals 2&3 to use up/down arrows, +* set up to re-enable Kybd signals +L016A clr <u000E Clear out last signal received + os9 I$SetStt Re-set up SS.SSig +* NOTE: This BRA L0177 is required for type-ahead to work + bra L0177 Go check for history-related signals + +* DOESN'T SEEM TO GET BACK TO HERE WHEN ABORT BUG APPEARS +L0171 ldx #$0000 Sleep until signal is received + os9 F$Sleep +L0177 lbra L191C Go check for history signals (PD.QUT & PD.INT) +* Signal received is not PD.QUT or PD.INT goes here +L017B cmpb #$0B Key pressed signal? + bne L0171 No, ignore signal & go to sleep again +* Keyboard input received signal goes here +L017F leax >u0124,u Point to temp buffer to hold line + clra Std Input + ldy #200 Maximum 200 char. input + lbra L193E Go read the rest of line as ReadLn + +* Comes here after line or signal received & processed +* NOTE: IF LINE RECEIVED, PD.QUT & PD.INT ARE BACK TO NORMAL VALUES +L018B bcc L01B9 If no errors, skip ahead + cmpb #E$EOF <ESC> key in ReadLn? + beq L01F0 Yes, skip ahead + +L0191 lds <u0025 Get top of stack ptr + ldu <u0027 Get back ptr to DP + stb <u0047 Save error code + tst <u0046 GOTO label active? + bne L01A4 Yes, go print error message + tst <u0018 Is this shell immortal? + bne L01A4 Yes, go print error message + tst <u0020 Kill shell on error? + bne L01FA Yes, go do that + +L01A4 os9 F$PErr Print the error message + tst <u0046 GOTO label active? + lbeq L010D No, go print shell prompt/process next line + clr <u0046 Clear GOTO label flag + leax >u0C4C,u Point to copy of GOTO label name + lbsr L0FD0 Go process GOTO line + lbra L010D Go print shell prompt/process next line + +* No error received on line +L01B9 cmpy #$0001 Just 1 char read (just a CR)? + bhi L01CE No, go parse parameters + lbsr L09F7 Go update date/time & expanded shell prompt + leax >u0213,u Point to expanded shell prompt + ldy >u01F7,u Get size of expanded shell prompt + lbra L0119 Go print shell prompt & get next line from user + +* No errors-got input line, and there is something in it +L01CE lbsr L041B Go parse parameters? + pshs cc Save flags + tst <u0045 + bne L01D9 + clr <u0047 Clear error/signal code from ReadLn +L01D9 puls cc Restore flags + lbcc L010D If no error from parse, do prompts & read again + tstb If a 0 error, do prompts & read again + lbeq L010D + tst <u0045 ??? Do we care about errors? + bne L0191 No, go handle error + stb <u0047 Save error/signal code + bra L0191 Go handle error + +L01EC fcc 'eof' + fcb $0d + +* <ESC> received +L01F0 tst <u001D Shell prompting on? +L01F2 bne L01F9 No, skip printing 'eof' to screen + leax <L01EC,pc Point to 'eof' string + bsr L021B Write it out to std error +L01F9 clrb No error flag +* Possible shell error - Process +L01FA lda <u0018 Is this shell immortal? + lbne L0BDA Yes, go close or dupe paths +* Shell not immortal, exit routine in here +L0200 pshs u,b,cc Preserve regs + tst <u006B Shellsub module to unlink? + beq L020B No, skip ahead + ldu <u0067 Yes, get ptr to module + os9 F$UnLink Unlink it +L020B puls u,b,cc Restore U, error # & flags +* EX with no module name (or non-existant one) go here +L020D pshs b,cc Save error # & flags + leax >L0061,pc Point to '+++END+++' string + lbsr L07E7 Close log file if one is open, restore ID # + puls b,cc Restore error # & flags + os9 F$Exit Terminate shellplus + +L021B ldy #80 Write up to 80 chars or CR +L021F lda #$02 Std error path + os9 I$WritLn Write message out & return + rts + +L0225 pshs y,x,d Preserve regs + ldd #SS.Relea Std In & Release keyboard & mouse signals + os9 I$SetStt + bcc L0233 No error, continue + lda #$01 Couldn't release keyboard/mouse signals flag + bra L0241 + +L0233 leax >u0124,u Point to buffer for current path options + clra + clrb CHANGE TO CLRB + os9 I$GetStt Get std input path options + lda >u0124,u Get Device type (0 (SCF) usually) + +L0241 sta <u005E Save device type (1=SS.Relea failed) + puls pc,y,x,d Restore regs & return + +* R= command (redirect specific paths) +L0245 lda ,x Get char from input line + cmpa #'< Is it input path? + beq L0251 Yes, skip ahead + cmpa #'> Is it an output/error path? + lbne L0BCF No, print 'WHAT?' +L0251 pshs x Preserve ptr to 1st redirection symbol + leay >L03CF,pc Point to modifier symbol table + lbsr L092A Go to command line parser + lbcs L0BCF Error, print 'WHAT?' + ldd ,y Get table offset + jsr d,y Call appropriate subroutine + stx <u0048 Save ptr to source after redirection symbols + puls x Restore ptr to redirection symbols + lbcs L0B96 If error in subroutine, close paths & return + +L026A lda ,x+ Get 1st char again + cmpa #'< Input path? + beq L026A Yes, skip to next + cmpa #'> Output or Error path? + beq L026A Yes, skip to next + cmpa #'- Overwrite old file? + beq L026A Yes, skip to next + cmpa #'+ Append to old file? + beq L026A Yes, skip to next + leax -1,x Point to non-redirect char + bsr L02A3 Make name buffer, release signals,parse modifiers + clrb Start path # 0 +L0281 pshs b Save on stack + lda b,u Get special path # + beq L028A None, skip ahead + os9 I$Close Close the path +L028A puls b Get path # back + clr b,u Clear out entry + incb Next path # + cmpb #$03 Done the 3 standard paths yet? + blo L0281 No, keep doing until all done + ldx <u0048 Get ptr to redirected dev/file name & return + rts +* Z= command (immortal shell setting, but kill parent process) +L0296 inc <u0013 Flag we want to kill parent +* I= command (immortal shell setting) +L0298 lbsr L0CD2 + lbcs L0B96 + bsr L02A3 + bra L02D4 + +* Create device name buffer @ u006D, Write NUL to std out, parse special +* chars: # @ @+hibit $ ( ), Release any keyboard/mouse signals +L02A3 pshs x Prsrve ptr to file/dev name we're redirecting to + ldb #SS.DevNm Get device name call code + leax <u006D,u Point to buffer for path names + lda #'/ Preload '/' for device names + sta ,x+ + clra Standard input path + os9 I$GetStt Get the current device name + puls x Get back ptr to file/dev name for redirection + lbcs L0B96 Error on GetStt, shut down paths & exit + ldy #$0001 One char to write + pshs x Prsrve ptr to file/dev name we're redirecting to + leax >L003C,pc Point to a NUL + lda #1 Std out + os9 I$Write Write the NUL out + puls x Restore Devname ptr + lbcs L0B96 Error on Write, shut down paths & exit + lbsr L0A04 Do normal parsing - includes #,@,$e0,$,(,) + lbsr L0225 Release signals + rts + +L02D4 inc <u0018 Set 'immortal shell' flag + inc <u0019 ??? (flag used by L0B96 routine) + lbsr L0B96 + clr <u0019 + tst <u0013 Do we want to kill the parent process? + beq L02FC + os9 F$ID Get our process ID # into A + pshs x Preserve X + leax >u166D,u Point to process descriptor buffer + os9 F$GPrDsc Get our process descriptor + lda P$PID,x Get our parents process # + puls x Restore X + beq L02A3 If parent's process # is 0 (system), skip back + clrb S$Kill signal code + os9 F$Send Send it to parent + lbcs L0191 If error sending signal, go to error routine +L02FC clrb No error + stb <u0013 Clear 'kill parent' flag + rts + +* Command list +L0300 fdb L0B87-L0300 $0887 + fcs '*' +L0303 fdb L12D1-L0303 $0fce + fcs 'W' +L0306 fdb L09BD-L0306 $06b7 + fcs 'CHD' +L030B fdb L09B5-L030B $06aa + fcs 'CHX' +L0310 fdb L09BD-L0310 $06ad + fcs 'CD' +L0314 fdb L09B5-L0314 $06a1 + fcs 'CX' +L0318 fdb L0987-L0318 $066f + fcs 'EX' +L031C fdb L16DD-L031C $13c1 + fcs 'KILL' +L0322 fdb L09EF-L0322 $06cd + fcs 'X' +L0325 fdb L09F3-L0325 $06ce + fcs '-X' +L0329 fdb L0A14-L0329 $06eb + fcs 'P=' +L032D fdb L09D7-L032D $06aa + fcs 'P' +L0330 fdb L09DA-L0330 $06aa + fcs '-P' +L0334 fdb L09DF-L0334 $06ab + fcs 'T' +L0337 fdb L09E3-L0337 $06ac + fcs '-T' +L033B fdb L170D-L033B $13d2 + fcs 'SETPR' +L0342 fdb L0298-L0342 $ff56 + fcs 'I=' +L0346 fdb L0245-L0346 $feff + fcs 'R=' +L034A fdb L0296-L034A $ff4c + fcs 'Z=' +L034E fdb L0927-L034E $05d9 + fcs ';' +L0351 fdb L176B-L0351 $141a + fcs '.PWD' +L0357 fdb L177D-L0357 $1426 + fcs '.PXD' +L035D fdb L1029-L035D $0ccc + fcs 'M=' +L0361 fdb L105A-L0361 $0cf9 + fcs 'VAR.' +L0367 fdb L09E7-L0367 $0680 + fcs 'V' +L036A fdb L09EA-L036A $0680 + fcs '-V' +L036E fdb L1209-L036E $0e9b + fcs 'PATH=' +L0375 fdb L11CF-L0375 $0e5a + fcs 'PAUSE' +L037C fdb L1126-L037C $0daa + fcs 'INC.' +L0382 fdb L1131-L0382 $0daf + fcs 'DEC.' +L0388 fdb L0D62-L0388 $09da + fcs 'IF' +L038C fdb L0E0B-L038C $0a7f + fcs 'THEN' +L0392 fdb L0F8C-L0392 $0bfa + fcs 'ELSE' +L0398 fdb L0E0B-L0398 $0a73 + fcs 'FI' +L039C fdb L0E0B-L039C $0a6f + fcs 'ENDIF' +L03A3 fdb L0F3F-L03A3 $0b9c + fcs 'CLRIF' +L03AA fdb L0FD0-L03AA $0c26 +L03AC fcs 'GOTO' +L03B0 fdb L0F93-L03B0 $0be3 + fcs 'ONERR' +L03B7 fdb L09CF-L03B7 $0618 + fcs 'L' +L03BA fdb L09D3-L03BA $0619 + fcs '-L' +L03BE fdb L0969-L03BE $05ab + fcs 'S.T.A.R.T.U.P' + fdb $0000 +L03CF fdb L1634-L03CF $1265 + fcs '!' +L03D2 fdb L1634-L03D2 $1262 + fcs '|' +L03D5 fdb L12A0-L03D5 $0ecb + fcs ';' +L03D8 fdb L12C3-L03D8 $0eeb + fcs '&' +L03DB fdb L1299-L03DB $0ebe + fcb $8d CR +L03DE fdb L0CCE-L03DE $08f0 + fcs '<>>>' +L03E4 fdb L0CE5-L03E4 $0901 + fcs '<>>' +L03E9 fdb L0CD7-L03E9 $08ee + fcs '<>' +L03ED fdb L0CF3-L03ED $0906 + fcs '>>>' +L03F2 fdb L0C01-L03F2 $080f + fcs '>>' +L03F6 fdb L0BFA-L03F6 $0804 + fcs '<' +L03F9 fdb L0C08-L03F9 $080f + fcs '>' +L03FC fdb L1277-L03FC $0e7b + fcs '#' +L03FF fdb L1265-L03FF $0e66 + fcs '^' + fdb $0000 End of table marker + +L0404 fcb $0d + fcc '()' + fcb $ff +L0408 fcb $0d + fcc '!#&;<>^|' + fcb $ff + +* Subroutine: Clears B bytes of memory to NUL's starting @ U +L0412 pshs u Clear memory +L0414 clr ,u+ + decb +L0417 bne L0414 +L0419 puls pc,u + +* Pre-Parse parameters passed to this shell. Will copy from parm area to +* buffer area at u0166D, checking for raw mode access allowability if needed +* Will also +* Entry: X=ptr to parm area +L041B ldb #$18 # of bytes to clear in DP +L041D bsr L0412 Go clear from <u0000 to <u0018 (immortal off) + tst <u006C ??? (If shell is initing, it's 0) + lbeq L04CE Shell just initializing, skip ahead + leay >u17FC,u Point to end of buffer marker + pshs y Save ptr on stack + leay >u166D,u Point to buffer for process descriptor +L042F bsr L0486 Copy next char (check for '@', possibly eat) + cmpa #C$CR CR? + beq L04A8 Yes, force CR into ,y & process line from start + cmpy ,s At end of buffer? + beq L04A8 Yes, force CR, process line from start + tst <u001F Variable expansion on? + bne L042F No, check next char + cmpa #'% Is it a '%' (shell variable)? + bne L042F No, do next character + leay -1,y Back up destination ptr to where '%' is + pshs x Save current position in parms + lda ,x Get 1st char of shell variable nam + cmpa #'* Shell variable for last error code received? + beq L049D Yes,replace shell var with contents of shell var + leax >u05A8,u Point to user shell variable contents table + cmpa #'% 2nd '%'= shellsub variable + bne L0460 No, just user, go process + puls x Get back parm ptr + leax 1,x Skip over 2nd '%' + lda ,x Get shellsub variable # + pshs x Save parm ptr + leax >u08D2,u Point to shellsub variable contents table +* Entry: A=ASCII 0-9 for either shell or shellsub variable # +L0460 cmpa #'9 ASCII numeric? + bhi L0470 No, skip ahead + cmpa #'0 + blo L0470 + suba #$30 Yes, bump down to binary equivalent + ldb #81 Point to proper variable entry within var table + mul + leax d,x + incb ??? Used in TSTB below +L0470 bsr L0486 Copy char from var table to pre-parse buffer + cmpy 2,s Hit end of pre-parse buffer? + beq L04A6 Yes, force CR at end of it, do full parse + cmpa #C$CR End of variable? + bne L0470 No, keep copying characters + leay -1,y Knock ptr back one (to where CR is) + puls x Get current parm ptr back + tstb ??? flag to skip a byte in parm or not + beq L042F Don't skip +L0482 leax 1,x Skip to next byte in parm line + bra L042F Continue pre-parse + +* Copy char from parm area to command line buffer - if '@', eat if user is +* not super-user (#0) +* Entry: X=ptr to current pos. in original parm buffer +* Y=ptr to current pos. in new, pre-parsed buffer +L0486 lda ,x+ Get char from parms + cmpa #'@ Raw mode request? + bne L049A Skip ahead if not (SHOULD BE BNE) +L048C pshs y,a Preserve regs + os9 F$ID Get user ID # + cmpy #$0000 Is it 0 (superuser)? (should be leay ,y) + puls y,a Restore regs + beq L049A Yes, allow char thru + rts Otherwise eat it + +L049A sta ,y+ Save char & return + rts + +* Shell variable '%* (for last error code) requested +* Put contents of shell var. into pre-parsed command line buffer +L049D puls x Get back parm ptr + lbsr L168A Put error code into preparse buffer + leay 3,y Skip over error code space we just added + bra L0482 Skip over shell varname, continue preparse + +L04A6 leas 2,s Eat stack +L04A8 lda #C$CR Force CR as last char in buffer + sta ,y + puls y + leax >u166D,u Point to start of pre-parse buffer again +L04B2 bra L04CE Start real parse + +L04B4 fcb C$LF + fcc 'Expanded line too long' + fcb C$CR +L04CC fcc '.' +L04CD fcb C$CR + +* Parse command line buffer - already pre-parsed (user 0 RAW mode checks & +* shell/shellsub variable expansion is already done) +* Entry: X=Ptr to pre-parsed command line buffer +L04CE lda ,x Get 1st char from parameter area + cmpa #'* Is it a comment? + beq L04DE Yes, skip ahead + cmpa #': Is it a wildcard on/off? + bne L04DA No, skip ahead + leax 1,x Bump ptr past it +L04DA cmpa #': Is it a wildcard off? +* FOLLOWING LINE: BEQ means wildcarding default off, BNE = on + beq L04F0 No, go process wildcarding +* No wildcard processing +L04DE leay >u0E6D,u Point Y to expanded buffer + lbsr L1320 Copy param area to buffer area until 1st CR + leax >u0E6D,u Point X to expanded (wildcard) buffer + ldy #$0800 Max. size of expanded buffer (2048 bytes) + lbra L079B Process line without wildcards + +* Wild carding processor +* Entry: X=ptr to current position in pre-parsed parm line +* 1st, set up error msg for if buffer gets full +L04F0 leay >L04B4,pc Point to 'Expanded line too long' + sty <u004A Save it + ldy #$0018 Get size of text + sty <u004C Save it too + leay >L04CD,pc Point to CR + sty <u0048 Save ptr + sts <u0050 Save stack ptr + leay >u0E6D,u Point to fully expanded buffer (2k max) + sty <u0056 Save it + clra + clrb + sta <u0012 No current working DIR path + sta <u004F Flag no pathname in parm area + std <u0052 Expanded buffer size=0 bytes + bra L0520 Enter main loop for wildcards + +L051D lbsr L06FB Special shell chars handling +L0520 lbsr L0746 Check for special chars (wildcard or shell) + bcc L051D Special shell char process +* Wildcard char found + pshs x Save current pre-parsed parm ptr + bsr L0549 Check from that point for '/' or special char + ldx ,s Get previous parm ptr back + bcc L0557 No '/' found, open current dir '.' +* Found '/' (part of path) - keep looking for last '/' for filename (not +* pathname) portion +L052D bsr L0549 Check for special char or '/' again + bcc L0535 No '/', skip ahead + stx <u0040 Save latest ptr to '/' in parm line found so far + bra L052D See if any more sub-paths + +* Found one or more '/' path dividers in current parm line. +* Entry: <u0040 - contains the last '/' found +L0535 inc <u004F Flag that their IS a pathname from parm line +L0538 ldx <u0040 Get last level of path ptr + puls y Get original parm ptr + sty <u0040 Save it + pshs x Save filename ptr on stack + lda #C$SPAC Save space over '/' after pathname + sta -1,x (before filename) + tfr y,x Move original parm ptr to X + bra L055E Open dir path + +* Parse from current position in pre-parsed parm line until shell special +* char, or '/' found (path) +* Entry: X=ptr to current pos in pre-parsed parm line +* Exit: Carry clear if special shell char found +* Carry set if '/' found +* X=ptr to found char+1 +L0549 clrb + lda ,x+ Get next char + lbsr L05D3 See if shell special char + beq L0556 Yes, return + cmpa #'/ No, is it a slash (path start)? + bne L0549 No, Keep checking for / or special char + comb +L0556 rts + +* No '/' found in parm line at all +L0557 clr <u004F Flag no pathname from parm line + leax >L04CC,pc Point to '.' +* Entry: X=ptr to pathname to directory +* 0-1,s = Ptr to filename spec we are looking for in this directory +L055E lda #DIR.+READ. Open directory in READ mode + os9 I$Open + lbcs L0776 Error, skip ahead + sta <u0012 Save current DIR path + puls x Get back ptr to filename (not pathname) + lbsr L0746 Check for special shell char or wildcard + lbcc L06E3 Special shell char found, ?????? +L0572 lda ,x+ Get next char from filename + cmpa #$0D End of user specified filename (CR)? + lbeq L0789 Yes, close DIR and proceed + cmpa #', Comma? + beq L0572 Yes, skip it + cmpa #C$SPAC Space? + beq L0572 Yes, skip it + leax -1,x Other char, point to it. + stx <u0054 Save ptr to it + lda <u0012 Get DIR path # + pshs u Preserve u + ldx #$0000 Skip '.' and '..' dir entries + ldu #$0040 + os9 I$Seek + lbcs L0776 Error, skip ahead + puls u Restore u +L0599 leax >u0C9D,u Point to dir entry buffer + pshs x Save ptr + lda <u0012 Get Current dir path # + ldy #$0020 Read 1 file entry + os9 I$Read + lbcs L06BD Error, skip ahead + puls y Restore pointer to dir filename buffer + lda ,y Get 1st char of entry + tsta Is it a deleted file? + beq L0599 Yes, skip it + ldx <u0054 Get ptr to current char in expanded filename bfr + bsr L05EF Check wildcard spec against this filename + bcs L0599 No match, skip to next file in DIR + tst <u004F Was a pathname specified? + beq L05CA No, skip ahead + ldx <u0040 Yes,get ptr to end of pathname/start of filename + lbsr L06FB Check for wildcard stuff there + ldx <u0056 Get current pos in expanded buffer + lda #'/ Save '/' there (to separate path & filename) + sta -1,x +L05CA leax >u0C9D,u Point to start of matched DIR entry filename + lbsr L06FB Copy filename over, handling quoted chars, etc. + bra L0599 On to next DIR entry + +* Check if shell 'special' char. (except wildcards & shell var) +* non-wildcard char in current byte of pre-parsed parm buffer +* Entry: X=ptr to next char in parms buffer +* A=current char in parms buffer +* Exit: BEQ if shell special char found, BNE if just regular char +* A=char we were checking +L05D3 pshs x Save parms buffer ptr + cmpa #'( Group start char? + beq L05ED Yes, skip ahead + cmpa #') Group end char? + beq L05ED Yes, skip ahead + cmpa #C$SPAC Space? + beq L05ED Yes, skip ahead + cmpa #', Comma? + beq L05ED Yes, skip ahead + leax >L0408,pc Table of other special chars +L05E9 cmpa ,x+ Found match or end of table? + bhi L05E9 No, keep checking (or fall through if not found) +L05ED puls pc,x Exit with BEQ/BNE flag set + +* IF wildcards were detected in preparsing, filename compares happen here +* Entry: X=ptr to current char in user's pre-parse parm line +* Y=ptr to start of current DIR entry filename +* Exit: Carry set if no match +* Carry clear if match +L05EF ldd ,x+ Get 2 chars (NOTE: PTR UP BY ONLY 1!) +L05F1 cmpa #'* 1st char a * (multi-char wildcard)? + beq L064C Yes, go handle it + cmpa #'? Question mark (single char wildcard)? + beq L0638 Yes, go handle it + cmpa #'[ Start of ranged wildcard? + lbeq L068B Yes, go handle it + bsr L05D3 Not wildcard, check for special shell chars + beq L062B It is a special shell char, skip ahead + bsr L0631 Just regular char, force uppercase + pshs a Save char + bsr L062D Force uppercase on DIR filename char + eora ,s+ Same char as last parm char? + bne L062B No, exit with carry set +L060D lda ,y+ Re-get char from DIR filename + bpl L05EF Not on last char yet, check next char from parm + ldd ,x At end of DIR filename, grab 2 chars from parm + bsr L05D3 Check 1st char against special shell chars + beq L0621 Found one, skip ahead + cmpa #'* Multi-char wildcard char? + bne L062B No, no match, exit with carry set + tfr b,a 1st char from parm is '*', check 2nd char for + bsr L05D3 special shell chars + bne L062B None found, no match, exit with carry set +L0621 lda -1,y Special char, get last char from DIR filename +L0623 anda #$7F Strip 'end of filename' bit flag + ldb #C$SPAC Space char + std -1,y Save 'fixed' last char & space + clrb Flag match + rts + +L062B comb Flag no match + rts + +* Force char to uppercase +L062D lda ,y Get char + anda #$7F Strip hi-bit +L0631 cmpa #'A Need to force uppercase? + blo L0637 No, exit + anda #$DF Yes, force to uppercase +L0637 rts + +* '?' single char wildcard found +L0638 cmpb #'* Is next char a multi-char wildcard? + beq L060D Yes, process as if just '*' + cmpb #', 2nd char '-' or greater? + bhi L060D Yes, process normally + lda ,y+ Get next char from DIR filename + bpl L062B Not end of filename, Flag no match + bra L0623 Save hibit stripped char & space, flag match + +L0646 lda ,y+ Get next char from DIR filename + bpl L0646 Hunt for end of DIR filename + bra L0623 Found it, fix hibit and add space to DIR entry + +* '*' multi-char wildcard found +L064C lda ,x+ Get next char after '*' from parm buffer + bsr L05D3 Check for shell special char + beq L0646 Found one, check if end of DIR filename + cmpa #'? Single char wildcard next? + beq L067F Yes, Process + cmpa #'[ Start of Ranged wildcard next? + beq L067F Yes, process + bsr L0631 Force char to uppercase + pshs a Save it +L065E bsr L062D Get next char from DIR filename, force uppercase + eora ,s+ Same char? + beq L066E Yes, possible resync after '*' +L0664 leas -1,s Make room on stack + lda ,y+ Re-get un-modified char from DIR filename + bpl L065E Not end of filename, try next char + leas 1,s Found end of filename, eat temp stack + bra L062B Flag no match +* Above loop @ L0664/L065E uses sneaky stack stuff + +* Found possible resync char match after '*' +L066E leas -1,s Make room on stack + pshs y,x Preserve both DIR & parm ptrs + bsr L060D Attempt normal matching using this resync + puls y,x Restore ptrs + leas 1,s Eat temp stack + bcs L0664 No, resync did not work, look for next resync + rts worked, exit with carry clear + +L067B lda ,y+ Get next char in DIR + bmi L062B Last char, flag no match +* '?' found after '*' in parm buffer +L067F pshs y,x Preserve both DIR and parm buffer ptrs + ldd -1,x Get previous & current parm chars + lbsr L05F1 Do normal sub-parsing from here + puls y,x Restore ptrs + bcs L067B No match, go to next char in DIR and attemp resync + rts Matched, exit with match + +* Ranged wildcard here +* Entry: X=ptr to 1st char in parm buffer AFTER '[' +L068B ldd ,x+ Get 1st 2 chars of range sub-string from parm bfr + bsr L0631 Force uppercase on 1st char + exg b,a Force uppercase on 2nd char + bsr L0631 + exg b,a + cmpa #'] Is 1st char a close range check char? + beq L062B Yes, flag no match for '[]' + cmpa #'- Range separator char? + beq L06A7 Yes, need to get end of range +* Special case for [x] - acts as if just normal char (no range or wildcard) + sta <u00EF No, save start of range char + bsr L062D Get char from DIR filename, force uppercase + eora <u00EF Match only range char? + beq L06B4 Yes, skip to next char now +* Special case for [xyz] - one of these chars must match + bra L068B No, see if more single chars to try matching + +* Actual range - need to get end of range char +* Entry: B=high char of range +* <u00EF - current char (within range) we are checking against +L06A7 inc <u00EF Bump up start char's ascii value + cmpb <u00EF Hit end of range yet? + beq L068B Yes, try next char + lbsr L062D Force char in A to uppercase + eora <u00EF equal to current range check char? + bne L06A7 No, try next char in range +L06B4 ldd ,x+ Get next 2 chars from pathname + cmpa #'] End of range? + bne L06B4 No, check next char + lbra L060D End of range specifier, process normally + +* Error reading from current DIR +L06BD cmpb #E$EOF End of file error? + lbne L0776 No, fatal error, leave + ldx <u0054 Get ptr to current char in wildcard filename + lda -1,x Get last char processed + bsr L0714 Add it to new expanded buffer +L06C9 lda ,x+ Get next char, inc ptr + stx <u0054 Save updated pointer + cmpa #C$CR CR? + lbeq L0789 Yes, append CR to expanded buffer, we are done + lbsr L05D3 See if special shell char + bne L06C9 Just regular char, go to next one + pshs x Save current ptr to wildcard filename + ldx <u0056 Get current ptr in expanded buffer + sta -1,x Save that char overtop last char written + puls x Get wildcard ptr back + bra L06EA Close dir path, go back into loop + +* If special shell char found right after OPEN of DIR path +* Entry: X=ptr to filename (not pathname) - but with special char +L06E3 bsr L06FB Process special shell char copying + bsr L072F Close DIR path + lbra L051D More processing + +L06EA bsr L072F Close DIR path + lbra L0520 Go back to main wildcard processing loop + +* This chunk (6EF-6F9) is for copying '\x' when x is NOT a wildcard char +L06EF lda ,x+ Get quoted char + bsr L0739 Check if it is [, * or ? + beq L06F9 Yes, add that char to expanded buffer by itself + leax -2,x No, bump ptr back to '\' + lda ,x+ Get '\' char +L06F9 bsr L0714 Append that to output buffer +* Special shell chars found goes here +* This part copies filename from [,x] to expanded buffer, handling quoted +* wildcard chars, and ending on CR or special shell char +L06FB lda ,x+ Get char + cmpa #'\ Backslash (for quoted char)? + beq L06EF Yes, go get quoted char + cmpa #C$CR Is it the end of the filename? + beq L0789 Yes, append CR to expanded line, we are done + bsr L073D Is it '?' or '*' + beq L0714 Yes, add that char to expanded buffer + lbsr L05D3 Check if shell special char + beq L0714 Yes, add to expanded buffer, return from there + bsr L0714 No, add to expanded buffer, stay in this loop + bra L06FB + +* Add char to expanded line buffer +* Entry: A=char to append to expanded line buffer +* <u0056=Current position in expanded line buffer +* <u0052=Current size of expanded line buffer +* Exit: <u0056 & <u0052 updated +L0714 pshs x,a Preserve regs + ldx <u0056 Get current pos in expanded buffer + sta ,x+ Save char + stx <u0056 Save updated expanded buffer ptr + ldd <u0052 Get expanded buffer size + addd #$0001 Increase by 1 + cmpd #2048 Is it full yet? + bhi L0773 Yes, exit with expanded line too long error + std <u0052 No, save new size + puls pc,x,a Restore regs & return + +* Close DIR path +L072F lda <u0012 Get DIR path # + beq L0738 If none, exit + os9 I$Close Close the path + clr <u0012 Clear DIR path # to none +L0738 rts + +* Wildcard checks +* Entry: A=char to check +* Exit: BEQ if any of the 3 wildcard chars, or BNE if not +L0739 cmpa #'[ Range wildcard? + beq L0745 +L073D cmpa #'? Single char wildcard? + beq L0745 + cmpa #'* Multi-char wildcard? + beq L0745 +L0745 rts + +* Parse for next wildcard or special shell char in pre-parsed parm line +* Entry: X=current pos in pre-parse parm line +* Exit: X=Same as entry +* IF WILDCARD CHAR FOUND: +* B=# chars to next wildcard/special char +* A=special char found +* Carry bit set +* IF SPECIAL SHELL CHAR FOUND +* B=0 +* Carry bit clear +* A=special char found: CR ( ) , space ! # & ; < > ^ | +L0746 pshs x Save current parm ptr + bra L0752 Parse for wildcard or special shell chars + +L074A lda ,x+ Get char from parms + bsr L0739 Do wildcard char check + beq L0752 If wildcard char, skip over it & continue + leax -1,x not wildcard char, bump back to char after \ +L0752 lda ,x+ Get char from parms + cmpa #'\ Wildcard quote char (do not expand next)? + beq L074A Yes, handle it + lbsr L05D3 No, check for other special shell chars + beq L0770 Found one, skip ahead + bsr L0739 Check for wildcard char + bne L0752 None, skip to next char +* One of the 3 wildcard chars found, process + pshs a Save char + tfr x,d Move parm ptr to D + subd 1,s Calc distance since last wildcard/special char + subd #$0001 -1 + puls a B=distance between wild/special chars + orcc #Carry Set Carry Flag + puls pc,x Exit with original parm ptr in X + +* Exit with B=0, Carry clear and A=special char found (which ends current +* 'chunk' being checked... can included CR) +L0770 clrb Clear carry, exit + puls pc,x + +* Expanded buffer full error +L0773 comb + ldb #E$BufSiz +L0776 pshs b,cc Preserve error code + bsr L072F Close DIR path (if we had one) + ldx <u004A Print text message (usually error msg) + ldy <u004C + lda #$02 + os9 I$WritLn + puls b,cc + lbra L0191 Exit with error + +L0789 lda #C$CR Append CR to expanded filenames buffer + bsr L0714 + ldy <u0052 Get expanded buffer size + leax >u0E6D,u Point to start of expanded buffer + bsr L072F Close DIR path + lds <u0050 Get back original stack ptr +* At this point, expanded buffer is complete and ready to go (either through +* wildcard routine, or by simply copying the original parm buffer from user) + +* Main entry point for non-wildcard filename search/match +* Entry: X=Ptr to start of expanded buffer +L079B tst <u001E Echo required? + beq L07A2 No, skip ahead + lbsr L021F Print out user entered parm line to std err +L07A2 tst <u0043 2=FALSE,0=TRUE, 1=??? (check current IF status, + beq L07B0 if any. If TRUE flag set, skip ahead) + lbsr L0F69 Do checks for IF type statements + tsta Find match? + lbpl L0F1D Yes, process IF type statement +L07AE clrb No error & return + rts + +* If current IF type statement has result TRUE +L07B0 tst <u0045 ??? (Are we looking for a label for GOTO?) + beq L07E3 No, skip ahead + lda ,x+ Get char from buffer + cmpa #'* Comment line? + bne L07AE No, exit without error + lbsr L091F Yes, get ptr to first non-space char into X + leay >u0124,u Point to temp buffer + lbsr L100B Copy label from X to Y + lda ,x Get 1st char of label + cmpa #'\ '*\'? (Which means cancel impending GOTO) + beq L07DB Yes, cancel GOTO + leax >u0BFC,u No, point to 80 byte buffer (GOTO label holder?) + clra default char to check against=NUL +L07CF cmpa #C$CR End of label? + beq L07DB Yes, cancel GOTO search + lda ,x+ Get next char from buffer + cmpa ,y+ Is it the label we are looking for? + beq L07CF Keep checking till done + bra L07AE No match, clear carry & return + +* Cancelling GOTO search +L07DB clr <u0045 Flag we are NOT looking for label for GOTO + clrb + leas 2,s Eat stack + lbra L010D Reprint shell prompt, process from scratch + +L07E3 bsr L07E7 + bra L083A + +L07E7 pshs x + tst <u006C + beq L0832 + tst <u005C + bne L07F5 + tst <u001C + beq L0832 +L07F5 lda ,x + cmpa #'* + beq L0832 + ldy #$0000 Force temporarily to super-user + os9 F$SUser + leax >u0CBD,u + ldd #$0203 + lbsr L0C79 + bcs L0832 + lbsr L00FB + lda #$20 + sta <$11,x + ldy #$0012 + lda <u0012 + os9 I$Write + bcs L082D + ldx ,s + ldy #$0800 + lda <u0012 + os9 I$WritLn +L082D lda <u0012 + os9 I$Close +L0832 ldy <u005A Get original user # back + os9 F$SUser Change user # to original + puls pc,x + +* Parse input line +* Entry : X=Ptr to current char in line buffer +L083A clra + sta <u0022 Flag we don't change priority for forked process + sta <u0003 Clear out # pages of data mem for forked process + sta <u000E Clear out signal code + leay >L0300,pc Point to main command list + lbsr L08D1 Parse keywords from list + bcs L08A0 Keyword found but generated error, done line + cmpa #C$CR Is 1st non-keyword char a carriage return? + beq L08A0 Yes, done line + sta <u000C Save non-keyword char + cmpa #'( Is it a 'start command group' char? + bne L087B No, try next + leay >L000D,pc Point to 'Shell' + sty <u0004 Save pointer to program to fork? + leax 1,x Bump ptr past '(' + stx <u0008 Save updated ptr +L0860 inc <u000D Bump up # of command groups +L0862 leay >L0404,pc Point to command group symbols to parse + lbsr L08E9 Hunt down EOL, or '(' or ')' (skip quoted text) + cmpa #'( Another group start? + beq L0860 Yes, bump up # of command groups & continue + cmpa #') Group end? + bne L0898 No, skip ahead (to print WHAT?) + dec <u000D Bump down # of command groups + bne L0862 Still more groups, continue parsing for them + lda #C$CR Append CR at end of command line + sta -1,x + bra L087F Check for modifiers + +L087B bsr L08A3 Check for valid path, do '<>', '#', '^' if needed + bcs L08A0 No valid path found, skip ahead +* Found valid pathname +L087F leay >L0408,pc Point to modifiers table + bsr L08E9 Go parse for them + tfr x,d Move ')' ptr to D for SUB + subd <u0008 Calculate size from 1st '(' to ')' + std <u0006 Save size of group (could also be pathname-modifier) + leax -1,x + leay >L03CF,pc Point to modifier branch table + bsr L08D1 Go execute modifier routine + bcs L08A0 If error in modifier routine, exit + ldy <u0004 Get ptr to first char we started at +L0898 lbne L0BCF Not proper, print 'WHAT?' + cmpa #C$CR Last char a carriage return? + bne L083A No, start parsing again at current position +L08A0 lbra L0B96 Done processing line, continue + +* Entry: X=Ptr to text to check for valid device name (including '.' & '..') +* Exit: Carry set if not a valid device name +* Carry clear if there was +* <u0004 = Ptr to first char where we started at +* <u0008 = Ptr to end of redirection/mem size/priority setting chars (if found) +L08A3 stx <u0004 Save ptr to current char in input line + bsr L08B6 Check for valid device name + bcs L08B5 None found, return +* Found valid device name +L08A9 bsr L08B6 Eat rest of valid pathlist + bcc L08A9 Keep going until we are done pathlist + leay >L03DE,pc Point to Command list starting at '<>>>' + bsr L08D1 Call any redirection, mem size or priority routines + stx <u0008 Save ptr to where we are now (end of current set) +L08B5 rts + +L08B6 os9 F$PrsNam Valid OS9 device name? + bcc L08C7 Yes, point X to it & return + lda ,x+ Not valid, get first char + cmpa #'. Is it a period? + bne L08CB No, bad path name + cmpa ,x+ Is it a double period? + beq L08C9 Yes, leave src ptr pointing to name after '..' + leay -1,x If single, bump ptr to name after '.' +L08C7 leax ,y Point X to pathname in source +L08C9 clra No error & return + rts + +L08CB comb Error flag + leax -1,x Bump source ptr back + ldb #E$BPNam Bad Path Name error & return + rts +* Entry: Y=ptr to command list (L0300) +L08D1 bsr L0907 Go find 1st non-space char + pshs y Save command list ptr + bsr L092A Parse for keyword or special char + bcs L08E2 If no keyword found, skip ahead + ldd ,y Keyword found, get offset + jsr d,y Go execute routine for command found + puls y Restore command list ptr + bcc L08D1 No error, continue parsing for keywords + rts Subroutine had error, return with it +L08E2 clra No error + lda ,x Get character (not in command list) + puls pc,y Restore command list ptr & return + +* Start searching at beginning of current command list +* For looking for single character modifiers +L08E7 puls y +L08E9 pshs y Preserve command list ptr + lda ,x+ Get next char from command line +L08ED tst ,y Check current char in command list + bmi L08E7 If done list, start over at beginning + cmpa #'" Is it quotes? + bne L0901 No, skip ahead +L08F5 lda ,x+ Get next char from command line + cmpa #C$CR EOL? + beq L0905 Yes, exit with A being CR + cmpa #'" Is it another set of quotes? + bne L08F5 No, keep looking for it (or EOL) + lda ,x+ Get char after 2nd quotes +L0901 cmpa ,y+ Is it the current command char we are checking? + bne L08ED No, try next +L0905 puls pc,y Yes, exit with A containing it + +* Entry: Y=ptr to command list +L0907 pshs x Preserve X + lda ,x+ Get char from line entered by user + cmpa #C$SPAC Is it a space? + beq L091D Yes, skip ahead + cmpa #', Is it a comma? + beq L091D Yes, skip ahead + leax >L0408,pc Point to single character modifiers +L0917 cmpa ,x+ Found a match? + bhi L0917 No, try next until list is done + puls pc,x Found it, restore X to point to it & return + +L091D leas 2,s Eat X off the stack +L091F lda #C$SPAC Get space character +L0921 cmpa ,x+ Keep searching until non-space char is found + beq L0921 + leax -1,x Point to 1st non-space char +* ; (1st pass) comes here +L0927 andcc #$FE No carry & return + rts +* Command line parser +L092A pshs y,x Preserve command table ptr & input line ptr + leay 2,y Skip first offset +L092E ldx ,s Get input line ptr +L0930 lda ,x+ Get char from input line + lbsr L0F0C Convert char to uppercase if lowercases + eora ,y+ Check for a match + lsla + bne L0951 No match, skip to next keyword in table + bcc L0930 Keep checking until end of keyword (high bit set) + lda -$01,y Get command table char again + cmpa #'|+$80 '|' (with high bit set)? + beq L094E Yes, exit with carry clear + cmpa #'^+$80 '^' (with high bit set)? + beq L094E Yes, exit with carry clear + cmpa #'A+$80 Any of the other special modifiers with high bit? + blo L094E Yes, exit with carry clear + bsr L0907 Eat spaces until first non-space char + bcs L0951 If special char (!|#,etc.), skip ahead +L094E clra + puls pc,y,d + +L0951 leay -1,y Bump search ptr back +L0953 lda ,y+ Get char again + bpl L0953 Keep getting them until end of keyword + sty 2,s Save ptr to next offset on stack + ldd ,y++ Get offset + bne L092E If not at end of table, keep searching + comb End of table, command not found error + puls pc,y,x + +L0961 fcc 'startup' + fcb C$CR + +* Create child shell to run 'startup' file +L0969 pshs u,y,x Preserve regs + leax L000D,pc Point to 'shell' (module name) + leau L0961,pc Point to 'startup' (parameter for 'shell') + ldy #$0008 Size of 'startup<CR>' + ldd #$111F Program+Objct / 7.5K data area + os9 F$Fork Fork a shell to run the startup file + bcs L0983 Couldn't fork, exit + os9 F$Wait Wait until 'startup' is done +L0983 puls u,y,x Restore regs + clrb No error & return + rts + +* EX command +L0987 lbsr L08A3 Go check for valid device name (module) + bcs L09AB If none, exit + clra Std in path + bsr L09B0 Go close it + bsr L09AF Go close Std out + bsr L09AF Go close Std Err + lbsr L0B87 Go find the end of the input line + leax 1,x Bump ptr to 1 past CR + tfr x,d Move ptr to D + subd <u0008 Calculate size of current command group + std <u0006 Save it + lbsr L130A Point to module to chain&get its parm size, etc. + leas >u00FF,u Point stack to end of DP + os9 F$Chain Chain to the new program + lbra L01FA Couldn't, go here +L09AB clrb No error + lbra L020D Close logging file (if any) and exit ShellPlus + +L09AF inca Inc path # +L09B0 pshs a Save path # + lbra L0BBC close path if it is open +* CHX & CX commands +L09B5 clr <u0038 + lda #DIR.+EXEC. + os9 I$ChgDir + rts +* CHD & CD commands +L09BD lda #DIR.+READ. (bug fix, originally opened in UPDATE) + os9 I$ChgDir Change the directory + bcs L09CE Error, exit with it + clr <u0037 Flag .pwd entry as invalid + tst <u0042 WAS ,U + beq L09CE + bsr L0A04 Go update shell expanded prompt if needed +L09CE rts +* L command - Logging ON +L09CF lda #$01 + bra L09D4 +* -L command - Logging OFF +L09D3 clra +L09D4 sta <u001C + rts +* P command - Prompting ON +L09D7 clra + bra L09DC +* -P command - Prompting OFF +L09DA lda #$01 +L09DC sta <u001D + rts +* T command - Echo input ON +L09DF lda #$01 + bra L09E4 +* -T command - Echo input OFF +L09E3 clra +L09E4 sta <u001E + rts +* V command - Turn variable expansion ON +L09E7 clra + bra L09EC +* -V command - Turn variable expansion OFF +L09EA lda #$01 +L09EC sta <u001F + rts +* X command - Kill Shell when error occurs ON +L09EF lda #$01 + bra L09F4 +* -X command - Kill Shell when error occurs OFF +L09F3 clra +L09F4 sta <u0020 + rts + +L09F7 tst >u01F4,u Date already done? + bne L0A04 Yes, skip ahead + tst >u01F5,u Time already done? + bne L0A04 Yes, skip ahead + rts If neither, we don't need to change prompt? +L0A04 pshs y,x Preserve regs + bra L0A64 Go update shell expanded prompt if needed + +* Make shell prompt string the default one +L0A08 puls y Restore Y + pshs x Preserve X + leax >L003D,pc Point to default prompt string + bsr L0A14 Put that into working shell prompt string + puls pc,x Restore X & return + +* P= (prompt set) command +* Make shell prompt string (default or user-specified) +* Entry: X=ptr to source of new shell prompt string +L0A14 pshs y Preserve Y + leay >u01F9,u Point to working prompt text buffer + ldd #C$LF*256+22 Line feed & max count for prompt string+1 + sta ,y+ Save LF as first char + bsr L0A25 Go copy prompt string (& parse quotes) + bra L0A5E Go see if we need to override with default + +L0A25 clr >u01F3,u Clear quotes in progress flag +L0A29 lda ,x+ Get char from default shell prompt + cmpa #'" Is it a quotes? + bne L0A3F No, skip ahead + leax 1,x Yes, bump ptr up 2 past quotes + tst >u01F3,u We processing quotes already? + bne L0A59 Yes, we are done then + inc >u01F3,u Set processing quotes flag + leax -1,x Set ptr back to char just after quotes + bra L0A29 Check next char + +L0A3F cmpa #C$CR Carriage return? + beq L0A59 Yes, we are done then + cmpa #C$SPAC Space? + beq L0A4B Yes, skip ahead + cmpa #'; Semi-colon? + bne L0A51 No, skip ahead +* Semi-colon or space found +L0A4B tst >u01F3,u We quoting at the moment? + beq L0A59 No, we are done +L0A51 tstb Char count down to 0? + beq L0A29 Yes, continue parsing (but eating them) + decb Dec max char counter + sta ,y+ Save literal char into current copy + bra L0A29 continue parsing + +L0A59 clr ,y Append NUL to indicate end of string + leax -1,x Bump source ptr back to last char & return + rts + +L0A5E cmpb #22 Did the user do a no-length prompt? + beq L0A08 Yes, go override with default prompt + pshs x Preserve ptr to last char of source prompt + +* Create expanded shell prompt from shell prompt string +L0A64 leay >u01F9,u Point to shell prompt string + leax >u0212,u Point to expanded prompt buffer + pshs x Preserve it a moment + clr >u01F2,u Output device name done already = OFF + clr >u01F1,u Process ID # done already = OFF + clr >u01F4,u Date done already = OFF + clr >u01F5,u Time done already = OFF + clr >u01F6,u Date OR time already done once = OFF + clr >u0042,u Current working dir name done already = OFF +L0A86 lda ,y+ Get char from shell prompt string + lbeq L0B29 If end of string, exit + cmpa #'# Process ID # wanted? + bne L0AA2 No, try next +* Process ID # + tst >u01F1,u Done it already? + bne L0A86 Yes, skip doing it again + inc >u01F1,u No, flag it as being done now + ldd >u01EC,u Get process # (01-99) + std ,x++ Save in expanded prompt buffer + bra L0A86 Continue parsing +L0AA2 cmpa #'@ Standard output path device name wanted? + beq L0AAA Yes, go do it + cmpa #$E0 High bit version? + bne L0AC7 No, try next +* Standard output path device name +L0AAA tst >u01F2,u Done it already? + bne L0A86 Yes, skip doing it again + ldd #$01*256+SS.DevNm Standard out/get device name + os9 I$GetStt Get the device name + bcs L0A86 Error, skip doing device name + inc >u01F2,u Flag it as being done now +L0ABD lda ,x+ Get char from device name + bpl L0ABD Keep looking until last char (high bit set) + anda #$7F Mask out high bit + sta -1,x Save the normal char + bra L0A86 Continue parsing +L0AC7 cmpa #'$ Current working directory wanted? + bne L0AF2 No, check next +* Current working directory + tst <u0042 Done it already? (WAS ,U) + bne L0A86 Yes, skip doing it again + inc <u0042 Flag it as being done now (WAS ,U) + lda #$01 + sta <u003D + lbsr L176D Go figure out current working directory + tstb + bne L0AF2 + pshs y Save prompt string ptr + ldy <u002A Get pointer to current working directory +* Copy string: Y=source string ptr, X=prompt buffer ptr +L0AE4 lda ,y+ Get char + sta ,x+ Save as part of shell prompt text + cmpa #C$CR Was it the end? + bne L0AE4 No, keep copying + leax -1,x Bump ptr back CR + puls y Restore source string ptr + bra L0A86 Continue parsing + +L0AF2 cmpa #'( Current Date wanted? + bne L0B0A No, check next +* Current date + tst >u01F4,u Done it already? + bne L0A86 Yes, skip doing it again + inc >u01F4,u Flag as being done now + bsr L0B3B Go get date & time + pshs y Save shell prompt string ptr + leay >u02E0,u Point to date text + bra L0AE4 Copy into expanded prompt +L0B0A cmpa #') Current Time wanted? + bne L0B24 No, just store the raw ASCII char +* Current time + tst >u01F5,u Done Time already? + lbne L0A86 Yes, skip doing it again + inc >u01F5,u Flag as being done now + bsr L0B3B Go get date & time + pshs y Save shell prompt string ptr + leay >u02E9,u Point to time text + bra L0AE4 Copy into expanded prompt + +L0B24 sta ,x+ Save raw character + lbra L0A86 Continue parsing + +L0B29 sta ,x Save NUL to mark end of prompt + tfr x,d Move End of prompt ptr to D for subtract + subd ,s++ Subtract start of prompt ptr + std >u01F7,u Save size of expanded shell prompt + puls pc,y,x Restore regs & return + +* Separator table for date & time strings +L0B35 fcc '//' + fcb $0d + fcc '::' + fcb $0d + +* Get current date (2E0-2E8) & time (2E9-2EF) +L0B3B pshs y,x Preserve shell prompt string & shell prompt ptrs + tst >u01F6,u Have we already been here before? + bne L0B75 Yes, both date & time strings already done + inc >u01F6,u Flag we have been here now + leax >u02DA,u Point to date/time packet buffer + os9 F$Time Get the date/time packet + leay >u02E0,u Point to where date string goes + clrb Offset into separator table to first '/' +L0B54 lda ,x+ Get byte from time packet + bsr L0B77 Convert to ASCII + pshs b Preserve offset into separator table + ldd >u01EF,u Get ASCII version of byte + std ,y++ Save into date/string buffers + puls b Restore offset into separator table + pshs y Preserve date/string buffer ptr + leay >L0B35,pc Point to separator's table + lda b,y Get current separator + puls y Restore date/string buffer ptr + sta ,y+ Save separator into date/string buffer + incb Point to next separator + cmpb #6 On last one? + bne L0B54 No, continue converting +L0B75 puls pc,y,x Restore prompt & buffer ptrs & return + +L0B77 pshs y,x,d Preserve regs + leay >L0B80,pc Point to routine to copy ASCII digits + lbra L16B9 Go convert byte to ASCII equivalent + +L0B80 ldd $04,s Copy 2 digit ASCII # to 1EF + std >u01EF,u + rts + +* Searches for CR in string pointed to by X +* '*' Comment lines come here +L0B87 lda #C$CR We want to find the CR +L0B89 cmpa ,x+ Found it yet? + bne L0B89 No, keep looking + cmpa ,-x Set up flags & return + rts + +L0B90 pshs d,cc Preserve regs + lda #$01 Only do std in & out (not error) + bra L0B9A + +* Any errors from any of the L0300 subroutines go here +* If child process had error/status code it goes here (u005D cleared,B=Status +* code) +L0B96 pshs d,cc Preserve error code, flags & A + lda #$02 # of paths to do +L0B9A sta <u001A Save it + clra Start at path 0 +L0B9D bsr L0BA8 Go close (possibly dupe) paths + inca Next path # + cmpa <u001A Done up to last one yet? + bls L0B9D No, do next one +* POSSIBLY COULD BE PULS PC,D,CC + ror ,s+ Eat CC but shift Carry bit into Carry + puls pc,d Restore error code & A & return + +L0BA8 pshs a Save path # + tst <u0019 + bmi L0BC4 If high bit set, close path + bne L0BBC If 0<u0019<128, get changed path # & close + tst a,u Check 'real' path # from DP + beq L0BC7 If 0, return + os9 I$Close Otherwise, close current path # + lda a,u Get 'real' path # + os9 I$Dup Dupe it + +* Close path # on stack, if it is open +L0BBC ldb ,s Get path # from stack + lda b,u Get real path # from DP + beq L0BC7 If none, exit + clr b,u Clear out path # +L0BC4 os9 I$Close Close the path +L0BC7 puls pc,a Exit + +L0BC9 fcc 'WHAT?' + fcb C$CR + +L0BCF bsr L0B96 Close 3 std paths (possibly dupe) + leax <L0BC9,pc Point to 'WHAT?' + lbsr L021B Write it out std err + clrb + coma + rts + +L0BDA inc <u0019 ??? + bsr L0B96 Do path closings (possibly dupings) + lda #$FF Set flag to just close raw paths + sta <u0019 + bsr L0B90 Go close std in & std err + leax <u006D,u Point to device name buffer + lbsr L0CDB + lbcs L0200 + lda #$02 + bsr L0BA8 + lbsr L0CFF + clr <u0019 + lbra L00CC +* < processing +L0BFA ldd #$0001 + orb <u000F + bra L0C1A +* >> processing +L0C01 ldd #$020D + stb -$02,x + bra L0C0A +* > processing +L0C08 lda #$01 +L0C0A ldb #$02 + bra L0C1A +* if from z= or i=, A=0, B=3 +L0C0E tst a,u Test duped path? + bne L0BCF There is one, print 'WHAT' & close paths & return + pshs d Save path # & B + tst <u0019 + bmi L0C34 + bra L0C24 + +L0C1A tst a,u + bne L0BCF + pshs d + ldb #$0D + stb -$01,x + +L0C24 os9 I$Dup Create duplicate of the standard path + lbcs L0CBE Couldn't create dupe, + ldb ,s + sta b,u + lda ,s + os9 I$Close + +L0C34 lda 1,s Get B + bmi L0C40 + ldb ,s + lbsr L0D05 + tsta + bpl L0C47 +L0C40 anda #$0F + os9 I$Dup + bra L0CBE +L0C47 ldb #$0B + bita #$02 + bne L0C7B + pshs a + ldd ,x + andb #$5F + cmpd #$2F57 Is it '/W' + puls a + bne L0C74 + ora #$02 + os9 I$Open + bcs L0CBE + pshs x + leax >L003C,pc + ldy #$0001 + clra + os9 I$Write + puls x + bra L0CBE +L0C74 os9 I$Open + bra L0CBE +L0C79 pshs d +L0C7B stb <u004E + ldb ,x + cmpb #$2B + bne L0C96 + leax $01,x + os9 I$Open + bcs L0CB1 + pshs u,x + ldb #SS.Size + os9 I$GetStt + os9 I$Seek + bra L0CA8 +L0C96 cmpb #'- + bne L0CB9 + leax 1,x + os9 I$Open + bcs L0CB1 Error opening + pshs u,x + ldx #$0000 + tfr x,u +L0CA8 ldb #SS.Size Init size of file to 0 bytes + os9 I$SetStt + puls u,x + bra L0CBE +L0CB1 cmpb #E$PNNF Error 216 (path name not found)? + beq L0CB9 Yes, create the file + orcc #$01 Otherwise, set error flag + bra L0CBE +L0CB9 ldb <u004E Get file attributes + os9 I$Create + +L0CBE sta <u0012 Save path # (or one we tried to duplicate?) + stb 1,s Save possible error code? + lda #$00 DO NOT CHANGE-NEED TO PRESERVE CARRY + sta <u000F + puls pc,d Restore regs & return +L0CC8 ldd #$0003 Std in & ??? + lbra L0C0E +* <>>> processing +L0CCE lda #C$CR + sta -$04,x +* i= & z= both come here right off the bat +L0CD2 bsr L0CDB + bcc L0CFF +L0CD6 rts +* <> processing +L0CD7 lda #C$CR + sta -$02,x + +L0CDB bsr L0CC8 + bcs L0CD6 + ldd #$0180 + lbra L0C0E +* <>> processing +L0CE5 lda #C$CR + sta -$03,x + bsr L0CC8 + bcs L0CD6 + ldd #$0280 + lbra L0C0E +* >>> processing +L0CF3 lda #C$CR + sta -$03,x + ldd #$0102 + lbsr L0C0E + bcs L0CD6 +L0CFF ldd #$0281 + lbra L0C0E +L0D05 pshs x,d + ldd ,x++ + cmpd #$2F30 + bcs L0D2F + cmpd #$2F32 + bhi L0D2F + pshs x,d + lbsr L0907 + puls x,d + bcs L0D2F + andb #$03 + cmpb 1,s + bne L0D31 + ldb b,u +L0D26 orb #$80 + stb ,s + puls d + leas 2,s + rts +L0D2F puls pc,x,d + +L0D31 tst $01,s + bne L0D26 + pshs x + tfr b,a + leax >u00B5,u Point to buffer for device name + ldb #'/ Put a slash in it + stb ,x+ + ldb #SS.DevNm Get the device name + os9 I$GetStt + bcs L0D4F Error, skip ahead + leax -1,x Reset ptr to include '/' + lda #UPDAT. + os9 I$Open +L0D4F puls x Restore ptr to beginning (including '/') + leas 6,s Eat stack + lbra L0CBE + +L0D56 fcc 'TRUE ' +L0D5B fcb $0d +L0D5C fcc 'FALSE' + fcb $0d + +L0D62 lda ,x+ + cmpa #'[ + bne L0D6B + lbsr L0E15 +L0D6B cmpa #'- + lbne L0E3E + ldb ,x+ + lbsr L0E15 + leax -$01,x + tfr b,a + lbsr L0F0C Convert char to uppercase if lower + cmpa #'Y + bne L0DBB +L0D81 pshs x Preserve X + leax >u0124,u Point to buffer + ldy #$0001 Read 1 byte from error path??? + lda #$02 + os9 I$Read + lbcs L0F17 + lda ,x Get the character read + puls x + lbsr L0F0C Convert char to uppercase if lower + cmpa #'Y Unless char is Y or N, re-read it + beq L0DA3 + cmpa #'N + bne L0D81 +L0DA3 pshs a Preserve char on stack + leax >L0D5B,pc Point to a Carriage return + lda #$02 Print it to std out + ldy #$0001 + os9 I$WritLn + puls a Restore char + clrb + cmpa #'Y + beq L0DF8 Print 'true' if it is a Y + bra L0DEE Print 'false' if it is a N + +L0DBB clrb + cmpa #'F + beq L0DE0 + cmpa #'E + bne L0DC8 + orb #%00000100 + bra L0DE0 + +L0DC8 cmpa #'R + bne L0DD0 + orb #%00000001 + bra L0DE0 + +L0DD0 cmpa #'W + bne L0DD8 + orb #%00000010 + bra L0DE0 + +L0DD8 cmpa #'D + lbne L0F17 + orb #%10000000 +L0DE0 tfr b,a + os9 I$Open + bcs L0DEE + os9 I$Close + bra L0DF8 + +L0DEE lda #$02 + sta <u0043 + leax >L0D5C,pc Point to 'FALSE' + bra L0DFE + +L0DF8 clr <u0043 + leax >L0D56,pc Point to 'TRUE' +L0DFE tst <u001E Command echo on? + beq L0E0B No, skip ahead + ldy #$0006 Print result of IF to std error + lda #$02 + os9 I$WritLn +L0E0B leax >u0124,u + lda #C$CR + sta ,x + clrb + rts + +L0E15 lda ,x+ + cmpa #C$SPAC + beq L0E15 + rts + +L0E1C cmpa #$3D + bne L0E26 + lda <u005F + ora #$01 + bra L0E38 + +L0E26 cmpa #'< + bne L0E30 + lda <u005F + ora #$02 + bra L0E38 + +L0E30 cmpa #'> + bne L0E3C +* X command - Kill Shell when error occurs ON + lda <u005F + ora #$04 +L0E38 sta <u005F + clra + rts + +L0E3C coma + rts + +L0E3E cmpa #'+ + bne L0E46 + inc <u0015 + bra L0E48 + +L0E46 leax -1,x +L0E48 clr <u005F + pshs u + leau >u0124,u + ldb #180 Clear out 180 bytes @ u0124 + lbsr L0412 + puls u + leay >u0124,u + ldb #81 +L0E5D lda ,x+ Copy buffer up to CR or 81 chars + lbsr L0F0C Convert char to uppercase if lower + sta ,y+ + cmpa #C$CR + lbeq L0F17 + bsr L0E1C + bcc L0E74 + decb + bne L0E5D + lbra L0F17 + +L0E74 negb + addb #81 + stb <u0016 + clra + sta -$01,y + lda ,x + bsr L0E1C + bcs L0E84 + leax $01,x +L0E84 leay >u0175,u + ldb #81 +L0E8A lda ,x+ + bsr L0F0C Convert char to uppercase if lower + sta ,y+ + cmpa #$0D + beq L0E99 + decb + bne L0E8A + bra L0F17 + +L0E99 negb + addb #$51 + stb <u0017 + clra + sta -$01,y + tst <u0015 + beq L0EE0 + leax >u166D,u + ldd #$30b4 Store 180 ASCII 0's into buffer +L0EAD sta ,x+ + decb + bne L0EAD + leax >u0124,u + ldb <u0016 + leax b,x + leay >u16BD,u + bsr L0ED8 + leax >u0175,u + ldb <u0017 + leax b,x + leay >u170E,u + bsr L0ED8 + leax >u166D,u + leay >u16BE,u + bra L0EE8 + +L0ED8 lda ,-x + sta ,-y + decb + bne L0ED8 + rts + +L0EE0 leax >u0124,u + leay >u0175,u +L0EE8 ldb #80 +L0EEA lda ,x+ + cmpa ,y+ + blo L0EFB + bhi L0F01 + decb + bne L0EEA + lda <u005F + bita #$01 + bra L0F05 + +L0EFB lda <u005F + bita #$02 + bra L0F05 + +L0F01 lda <u005F + bita #$04 +L0F05 lbne L0DF8 + lbra L0DEE + +* Convert char to uppercase if it is a letter +L0F0C cmpa #'a Lower case letter? + blo L0F16 No, return + cmpa #'z Check high range + bhi L0F16 No, return + suba #$20 Yes, convert to uppercase +L0F16 rts + +L0F17 comb + ldb #$01 + lbra L0191 + +L0F1D cmpa #$03 + beq L0F3F + cmpa #$02 + bne L0F2B + dec <u0044 + blt L0F3F + bra L0F43 + +L0F2B cmpa #$01 + bne L0F3B + lda <u0043 + cmpa #$02 + bne L0F43 + tst <u0044 + beq L0F3F + bra L0F43 + +L0F3B inc <u0044 + bra L0F43 + +L0F3F clr <u0043 + clr <u0044 +L0F43 clrb + rts + +* Table: 7 bytes/entry: +* 1st 5 bytes is name, high bit set & NUL padded +* Byte 6 is # bytes actually used +L0F45 fcs 'IF' + fcb 0,0,0,2,0 + fcs 'ELSE' + fcb 0,4,1 + fcs 'ENDIF' + fcb 5,2 + fcs 'FI' + fcb 0,0,0,2,2 + fcs 'CLRIF' + fcb 5,3 + fcb $ff + +L0F69 leay <L0F45,pc Point to conditionals table +L0F6D ldb 5,y Get actual length of string we are checking + os9 F$CmpNam Compare with string pointed to by X + bcs L0F80 If they don't match, skip ahead + lda 6,y Get conditional token(?) number + ldb b,x Get char past end of matching string + cmpb #C$CR Is it a CR? + beq L0F8B Yes, return + cmpb #C$SPAC Is it a space? + beq L0F8B Yes, return +L0F80 leay 7,y Point to next command in table + lda ,y Get 1st char from this entry + cmpa #$FF End of table marker? + beq L0F8B Yes, return +* NOTE: THIS INCA SEEMS TO BE USELESS, AS F$CMPNAM DOESN'T USE A + inca No, ??? + bra L0F6D Process this one + +L0F8C lda #$01 + sta <u0043 + lbra L0E0B + +L0F93 lbsr L0907 Go find 1st non-space char or single char modifier + bne L0F9B + clr <u0046 +L0F8B rts + +L0F9B leay >L03AC,pc Point to 'GOTO' + ldb #4 4 chars to compare + os9 F$CmpNam Does it match? + lbcs L0BCF No, print 'WHAT?' + leax 4,x Yes, skip X past 'GOTO' + lbsr L091F Go find 1st non-space char past 'GOTO' + leay >u0C4C,u Point to some sort of buffer + lda ,x Get char from GOTO label + cmpa #'+ Is label after current pos. in script file? + bne L0FBB No, skip ahead + sta ,y+ Save '+' in buffer + leax 1,x Bump up source ptr past '+' +L0FBB bsr L100B Go copy label name into buffer + inc <u0046 Set flag that a GOTO was found +L0FBF lda ,x+ Get 1st char from user's label again + leay >L0408,pc Point to single char modifiers table +L0FC5 cmpa ,y+ Illegal modifier char in label name? + bhi L0FC5 Not yet, check other modifiers + blo L0FBF This char ok, check rest of label name + leax -1,x Point to last char (terminator) of label name + stx <u0058 Save it & return + rts + +L0FD0 lda ,x + cmpa #'+ + bne L0FDA + leax 1,x + bra L0FFB +L0FDA tst <u006B + beq L0FEA + ldy <u0067 + ldd $09,y + leay d,y + sty <u0065 + bra L0FFB +L0FEA pshs u,x + clra + ldx #$0000 Seek to beginning + tfr x,u + os9 I$Seek + puls u,x + lbcs L0191 +L0FFB lbsr L091F + leay >u0BFC,u + bsr L100B + lda #C$CR + sta ,x + inc <u0045 + rts + +* Copy label from X to buffer @ Y, terminate at 1st illegal char with CR +* Exit: X=ptr to start of label name from user's buffer +* Y=ptr to start of buffer entry copy of label name +L100B pshs y,x Preserve buffer & source ptrs + ldb #79 (78 bytes to check) +L100F decb Dec # chars left to check + beq L1022 If done max, skip ahead + lda ,x+ Get char for label + sta ,y+ Save in buffer + cmpa #'A Is it a letter or higher? + bhs L100F Yes, continue copying + cmpa #'0 Is it lower than a #? + blo L1022 Yes, not allowed, force end of label name + cmpa #'9 Is it a #? + bls L100F Yes, that is fine +L1022 lda #C$CR All others illegal, force CR in buffer copy + sta -1,y Save it + clrb No error + puls pc,y,x Restore regs & return + +* M= command (???) +L1029 ldb #C$CR + stb -$01,x + tst <u006B + bne L1057 + tst <u006C + bne L1057 + lda #Data Data module type + pshs u,y,x + os9 F$Link + bcs L1055 + stu <u0067 Save start address of module + sty <u0065 Save execution address of module + ldd 2,u + addd <u0067 + subd #$0003 + std <u0069 + inc <u006B + puls u,y,x + leax -$01,x + lbra L0907 + +L1055 puls u,y,x +L1057 lbra L0BCF + +* VAR. command +L105A leay >u05A8,u + lda ,x+ + cmpa #'? + beq L10C9 + cmpa #'= + beq L1096 + cmpa #C$SPAC + beq L1085 + cmpa #'; + beq L1085 + cmpa #'9 + bhi L1085 + cmpa #'0 + bcs L1085 + suba #$30 + ldb #$51 Multiply by 81 (size of each VAR entry) + mul + leay d,y + lda ,x+ + cmpa #'= + beq L1096 +L1085 leax -$01,x + pshs x + tfr y,x + ldy #$0051 + lda #$02 + os9 I$ReadLn + puls pc,x + +L1096 ldb #80 + lbsr L0A25 + lda #C$CR + sta ,y + rts + +L10A0 fcb C$LF + fcc 'User Variables :' + fcb C$CR + +L10B2 fcb C$LF + fcc 'Shell Sub Variables :' + fcb C$CR + +L10C9 pshs x + clrb + leax >L10A0,pc + bsr L10DF + leay >u08D2,u + clrb + leax >L10B2,pc + bsr L10DF + puls pc,x + +L10DF pshs y,b + lbsr L021B + puls y,b +L10E6 pshs y,b + lda #$51 + mul + leay d,y + leax >u0124,u + ldd #'V*256+'A + std ,x++ + ldd #'R*256+'. + std ,x++ + lda ,s +L10FD adda #$30 + ldb #'= + std ,x++ +L1103 lda ,y+ + sta ,x+ + cmpa #C$CR + bne L1103 + leax >u0124,u + ldy #$0057 + lda #$01 + os9 I$WritLn + puls y,b + bcs L1122 + incb + cmpb #C$LF + bcs L10E6 + rts + +L1122 puls y + puls pc,x + +* INC. command (increment shell variable by 1) +L1126 bsr L1144 + lbcs L0191 + addd #$0001 + bra L113A + +* DEC. command (decrement shell variable by 1) +L1131 bsr L1144 + lbcs L0191 + subd #$0001 +L113A bsr L11A7 + lda #$0D + sta $05,y + ldx <u0048 + clrb + rts + +L1144 inc <u0014 + leay >u05A8,u + lda ,x+ + stx <u0048 + cmpa #'0 + bcs L1161 + cmpa #'9 + bhi L1161 + suba #$30 + ldb #81 + mul + leay d,y + tfr y,x + bra L1166 + +L1161 leas 2,s + lbra L0BCF + +L1166 pshs y + leas -$05,s + tfr s,y + clr $03,y + clr $04,y +L1170 clr $02,y + lda ,x+ + suba #$30 + cmpa #$09 + bhi L1195 + pshs a + lda #10 + ldb $03,y + mul + std ,y + lda $04,y + ldb #10 + mul + addd $01,y + std $01,y + clra + puls b + addd $01,y + std $03,y + bra L1170 + +L1195 ldd 3,y + leas 5,s + puls pc,y + +* 2 byte ASCII conversion table +L119B fdb 10000 + fdb 1000 + fdb 100 + fdb 10 + fdb 1 + fdb 0 + +L11A7 pshs y,x,d + pshs b + leax >L119B,pc +L11AF pshs d + ldb #'/ + stb 2,s + puls d +L11B7 inc ,s + subd ,x + bcc L11B7 + addd ,x++ + pshs d + ldb $02,s + stb ,y+ + lda $01,x + puls d + bne L11AF + puls b + puls pc,y,x,d + +* PAUSE command - may display text message, and then waits for key press or +* mouse button +L11CF ldy #394 Write up to 394 chars of pause string + lda #$02 To standard error + os9 I$WritLn + lbcs L0191 + tfr y,d Tfr # chars written to D + leax d,x Point X to next char after ones written + leax -1,x Point to last char written + pshs x Save ptr + ldd #$02*256+SS.SSig Std Err/Send signal when key pressed + ldx #$000A Signal $A is the one to send + os9 I$SetStt + lbcs L0191 Error, use main shell error handler + ldb #SS.MsSig Send signal on mouse button press + os9 I$SetStt + lbcs L0191 + ldx #$0000 Go to sleep until one of the 2 is received + os9 F$Sleep + ldb #SS.Relea Signal gotten, release all signals + os9 I$SetStt + clrb No error & return + puls pc,x + +* Parse PATH=, add paths to PATH buffer list +L1209 pshs x Preserve ptr to string after 'PATH=' + lda ,x Get 1st char + cmpa #'? User requesting current paths? + beq L1245 Yes, go do that + pshs u Preserve U + leau >u0CDD,u Point to PATH= buffer +L1217 lda ,x+ Get char from user-requested path + cmpa #C$SPAC Space? + beq L1217 Yes, eat spaces until 1st real char found + sta ,u+ No, save char +L121F leay >L0408,pc Point to command modifier list +L1223 cmpa ,y+ Match char? + bhi L1223 No, our char is higher, check next modifier + beq L1237 Found match, skip ahead + lda ,x+ No modifier found, get next char + sta ,u+ Save in PATH buffer + cmpa #C$SPAC Was it a space? + bne L121F No, check this char vs. modifier list + lda #C$CR Yes, change to CR + sta -1,u Save CR instead (terminate 1 path entry) + bra L1217 Do whole list + +* NOTE: ANY modifier (not just CR, but ! # & ; < > ^ |) stops PATH=parsing +L1237 leax -1,x Bump ptr back to last char from user + stx 2,s Save ptr on stack over original X + lda #C$CR Get CR + sta -1,u Save CR as current path end + sta ,u And 1 extra for parse routines + puls u Get U back + puls pc,x Restore new X & return + +L1245 leax >u0CDD,u Point to start of PATH=buffer +L1249 ldy #400 Write up to 400 chars to standard out + lda #$01 + os9 I$WritLn Print text of one path + lbcs L0191 Error, go process shell error + tfr y,d Tfr # bytes written to D + leax d,x Offset X to end of what was printed + lda ,x Get char from there + cmpa #C$CR CR (end of path list)? + bne L1249 No, go write next path out + puls x Restore ptr to next set of PATH= + leax 1,x Bump ptr up by 1 & return + rts + +* ^ (set priority on the fly) command +L1265 ldb #C$CR Plop a CR onto the end + stb -$01,x + ldb <u0022 Any priority already set? + lbne L0BCF Yes, print 'WHAT?' + lbsr L16EB Go calculate binary priority into B + stb <u0022 Save priority to fork module with + lbra L0907 Continue processing for modifiers + +* # (set data memory size) command +L1277 ldb #C$CR + stb -1,x + ldb <u0003 Already have a data mem size set? + lbne L0BCF Yes, print 'WHAT?' + lbsr L16EB + eora #'K + anda #$DF Force uppercase + bne L1294 No 'K', just save # of 256 byte pages + leax 1,x + lda #4 Multiply # of K by 4 to get # pages + mul + tsta + lbne L0BCF Ended up too big, print 'WHAT?' +L1294 stb <u0003 Save data mem size to use + lbra L0907 Continue processing command line + +* Carriage return processing +L1299 leax -1,x + lbsr L145D + bra L12A3 + +* ; (separator) command (also called by others) +L12A0 lbsr L1459 +L12A3 bcs L12BA + lbsr L0B96 Go do the path stuff + tst <u005D Is there a module that is unlinking? + bne L12AE Yes + bsr L12D2 Go wait for child process to die (A=process #) + +L12AE bcs L12BA If child exited with status/signal code,skip + lbsr L0907 Go parse for modifiers + cmpa #C$CR Was the next non-space/comma char a CR? + bne L12B9 No, skip ahead + leas 4,s Yes, eat stack +L12B9 clrb No error + +* Child process had a signal/status code +L12BA pshs cc Preserve error status + clr <u005D ??? + puls cc Restore carry + lbra L0B96 ??? Go close some paths & return? + +* & (background operation) command +L12C3 lbsr L1459 + bcs L12BA + bsr L12BA + ldb #$26 + lbsr L16B3 + bra L12AE + +* W command - Wait for a child to die +L12D1 clra Clear process ID # +* Entered here if commands are separated with ';' (or '()' groups) +L12D2 pshs a Save ID # of process? +L12D4 os9 F$Wait Wait for child to die or until signal received + tst <u000E Signal received (which would be in SHELL)? + beq L12EC No, child was exited (or got signal), go process +* Shell was interrupted by signal while Waiting + ldb <u000E Get signal that we received + cmpb #S$Abort Was it a PD.QUT (<CTRL>-<E>) (quit 'W'aiting?) + bne L1304 No, skip ahead + lda ,s Get process # + beq L1304 None, exit + os9 F$Send Send the signal to the child as well + clr ,s Clear process # + bra L12D4 Go Wait again (until child dies) + +* Child F$Exited or was aborted - eat should go here +* Entry: A=ID # of deceased child +* B=Exit (error) code from child +L12EC lbcs L1308 If F$Wait exited with error, return with it + cmpa ,s Same process # as one we were waiting for? + beq L1304 Yes, exit + tst ,s No, was there a specific process # we wanted? + beq L12F9 No, skip ahead +* Child died, but not the one we were waiting for + tstb Was there an error status? + beq L12D4 No, ignore dead child and wait for one we wanted +* Child died with error on exit +L12F9 pshs b Preserve child's exit status code + bsr L12BA ??? Go close & re-dupe paths? + ldb #'- Get a '-' (for a '-003' process finished msg) + lbsr L16B3 Print that out + puls b Get back exit status code + +L1304 tstb is there an Error/signal code? + beq L1308 No, exit + cmpb #S$Intrpt Yes, is it a keyboard interrupt signal? + beq eatchar Yes, eat the key + cmpb #S$Abort Keyboard abort signal? + bne errexit No, exit with unknown error/signal code + +* At this point, child died from signal 2 or 3 (CTRL-C or CTRL-E). The corres- +* ponding key is also sitting in this devices PD.BUF as the 1st char. We musts +* 1) Disable keyboard signal & eat the key from the buffer +* 2) Exit from here with Carry set & signal (2 or 3) in B +eatchar pshs b,x,y Preserve signal code & regs used + ldd #SS.Ready Std in, check for data ready on device + os9 I$GetStt Check it + bcs NotSCF No chars waiting on device, exit with signal + lda <u0018 Is the shell immortal? + beq NotSCF No, don't try to eat the char +eat clra Standard in path + leas -$20,s Make 32 byte buffer for OPT's + leax ,s Point X to it + clrb SS.Opt call + os9 I$GetStt Get current path options + lda ,x Get device type + beq Eatkey SCF (not script file) so go eat key +NoChar leas $20,s Eat temp buffer + bra NotSCF Exit with signal code (script file got signal) + +* Have to eat key: Shut echo off 1st +Eatkey clr 4,x PD.EKO flag off + os9 I$SetStt Shut echo off + ldd #SS.Relea Std In, Release keyboard/mouse signals + os9 I$SetStt Shut signals off so we don't get stuck + leax ,-s Make 1 byte buffer on stack + ldy #1 1 byte to read + os9 I$Read Eat the char + leas 1,s eat buffer + ldd #SS.SSig Std In, send signal on key ready + ldx #$B Signal to send + os9 I$SetStt Turn keyboard signal on again + leax ,s Point to temp buffer again + inc 4,x PD.EKO flag on + clra Std In + clrb Set Options + os9 I$SetStt Turn echo back on + leas $20,s Deallocate temp buffer + ldb u180D,u Get current history line # + cmpb #1 First one? + bhi Previous No, B=previous one + ldb u180C,u Was on first, so get last + incb Adjust for dec +Previous decb Point to previous one + lbsr L19D3 Go get ptr to history + lda ,y Get 1st char from previous line in history + sta ,x Save char there + ldd #SS.Fill Fill keyboard buffer call to Std In + ldy #$8001 1 char long, don't append CR + os9 I$SetStt Stick that key into the keyboard buffer +NotSCF puls b,x,y Restore regs (and exit status byte in B) +errexit coma Yes, set carry & exit +L1308 puls pc,a + +* If data area <4.25K, force up to 7.5K +* Exit: A=Type/language +* X=Current source line parsing ptr (module name to chain) +* Y=Size of parameter area +* U=Ptr to parameter area +* B=Size of data area +L130A lda #Prgrm+Objct Module type/language + ldb <u0003 Get # pages of data mem needed for forked module + cmpb #$11 Is it at least 17? + bhs L1316 Yes, skip ahead + ldb #$1F Otherwise, force to 7.5K minimum + stb <u0003 Save it +L1316 andcc #$FE Clear carry + ldx <u0004 Get mem module ptr + ldy <u0006 Get size of current command group + ldu <u0008 Get ptr to start of current command group + rts + +* Copy string from X to Y until CR is hit +L1320 lda ,x+ Get char + sta ,y+ Save it + cmpa #C$CR Carriage return? + bne L1320 No, keep copying + rts Done, return + +* Attempt load in module to execute (it's not in memory) +* Entry: X=Ptr to module name +L1329 lda #EXEC. 1st, attempt to get it from current Exec DIR + os9 I$Open Attempt to open it + bcc L1362 Found it, continue +* Possible search thru PATH= settings + inc <u000F ??? Set flag to indicate using PATH= + leax >u0CDD,u Point to start of PATH= list +L1336 clrb + lda ,x Get 1st char from next PATH= line + cmpa #C$CR End of list? + lbeq L1564 Yes, ??? + leay >u0124,u No, point to temp buffer + bsr L1320 Copy path to temp buffer until CR + pshs x Preserve ptr to next possible path + lda #'/ Add slash since we want file from this path + sta -1,y Save at end of path in temp buffer + ldx <u0004 Get ptr to module/script name we are looking for + bsr L1320 Copy it into temp buffer up to CR + leax >u0124,u Point to start of full path list + lda #READ. Attempt to open file + os9 I$Open + puls x Restore ptr to next possible path + bcs L1336 Didn't find file there, try next path + leax >u0124,u Point to full pathlist again + stx <u0004 Replace ptr to module with full pathlist ptr +L1362 leax >u00D6,u Point to buffer to hold beginning of file + ldy #77 77 bytes to read + os9 I$Read Read it in + bcc L1373 No error, skip ahead + cmpb #E$EOF Just EOF error? + bne L13CE No, something more serious, skip ahead +L1373 tst <u000F + bne L137B + ldb #$04 + stb <u000F +L137B pshs a Save path # a sec + ldd M$ID,x Get possible module header bytes + cmpd #M$ID12 Legit module header? + puls a Restore path # + beq L1396 OS9 module, skip ahead +* Not module...possible shell script? + os9 I$Close Not OS9 module, close file + clrb + dec <u000F Dec flag + lbeq L1564 If 0, skip ahead + inc <u000F If not, inc & skip ahead + lbra L1564 + +* Seems to be OS9 module +L1396 clr <u000F Clear flag + ldy M$Name,x Get offset to module name + leax >u00E3,u Point X to offset $E in module + cmpy #$000D Does the name start at offset $D? + beq L13C0 Yes, skip ahead + pshs u Preserve U + tfr y,u Move name offset to U + ldx #$0000 MSW of file pos=0 + os9 I$Seek Go seek to that spot in file + puls u Restore U + bcs L13CE Error seeking, go handle + ldy #64 Go read up to 64 char filename + leax >u00E3,u Point to spot to hold filename + os9 I$Read Read it in + bcs L13CE Error reading, go handle +L13C0 pshs a Save path # + os9 F$PrsNam Parse module name + puls a Restore path # + bcs L13CE + cmpb #$40 + bhi L1422 + clrb +L13CE pshs b,cc Preserve error status + os9 I$Close Close file + puls b,cc Restore error status + lbcs L162B If error, exit with it (S/B L162C) + leax >u00D6,u Point to buffer holding 77 bytes of file + lda $06,x + ldy $0B,x + cmpa #$40 + bne L1407 + bsr L13EF + lbcs L162B + lbra L14AF +L13EF leax >u00E3,u + os9 F$NMLink + bcc L1400 + ldx <u0004 + os9 F$NMLoad + bcc L1400 + rts +L1400 leax >u00E3,u + stx <u0004 + rts +L1407 cmpa #$51 + bne L1413 + bsr L13EF + lbcs L162B + bra L1427 +L1413 cmpa #$11 + lbne L14D7 + leax >u00E3,u + stx <u0010 + lbra L15D7 +L1422 lbsr L08CB + bra L13CE + +* Call a shellsub module +L1427 clra Type/language byte to wildcard:any will match + ldx <u0004 Get ptr to module name + pshs u Preserve U + os9 F$Link Attempt to link it in + puls u Restore U + lbcs L162B If we couldn't link, Exit with error + ldx <u0004 Get ptr to module name again + os9 F$UnLoad Unlink it + lbcs L162B If we couldn't unlink exit with error + ldx <u0008 Get ptr to current group (param ptr for shellsub) + ldd <u0006 Get size of param area for shellsub + leau >u08D2,u Point to shellsub variable area + jsr ,y Execute shellsub module + pshs b,a,cc Preserve error status & A + clra + clrb + std <u0010 ? (originally pointing to E3 if type $11 module) + ldx <u0004 Get shellsub module ptr + os9 F$UnLoad Unlink it + std <u0004 Clear shellsub module ptr + inc <u005D Set flag that we should wait for module to exit? + puls pc,u,y,x,d,cc restore regs & return + +L1459 lda #C$CR + sta -1,x +L145D clr <u0060 + pshs u,y,x + ldx <u0004 Get ptr to name + ldd ,x Get 2 chars of name + andb #$5F Force 2nd one to uppercase + cmpd #$2F57 Is it a /W? + bne L1473 No, check for shellsub + comb Yes, exit with bad mode error + ldb #E$BMode + lbra L162B + +L1473 clra Wildcard NMLink + os9 F$NMLink Link to module + lbcs L1329 Error, do something + cmpa #ShellSub+Objct ShellSub module? + beq L1427 Yes, go set up for it + ldx <u0004 Get ptr to name back + os9 F$UnLoad Drop the link count back down + pshs y Save data area size + ldx <u0004 Get ptr to module name again + leay >L000D,pc Point to 'Shell' + ldb #$05 Size of 'Shell' + os9 F$CmpNam Is the module requested Shell? + puls y Restore data area size + bcs L14A3 Not shell, skip ahead + ldb 5,x Get char right after 'shell' + cmpb #C$CR Is 'shell' the only thing on the line? + lbeq L158D Yes, skip ahead + cmpb #C$SPAC Is it a space? + lbeq L158D Yes, skip ahead +* Not Shell or Shellsub module +L14A3 cmpa #Prgrm+Objct ML program? + lbeq L15D7 Yes, skip ahead + cmpa #Data Is it a data module? + bne L14D7 No, skip ahead + inc <u0060 Set flag - data module +L14AF inc <u0060 Bump it up + ldx <u0004 Get ptr to module name + os9 F$PrsNam Parse the name + ldy <u0063 Get ptr to Intercept routines data mem ($418) + leay $0A,y Bump up to $422 + sty <u0008 Save ptr to start of current group + sty <u0061 ??? Ptr to data modules name? + ldx #60 Max size of group + stx <u0006 Save it + ldx <u0004 Get ptr to module name +L14C8 lda ,x+ Copy it to buffer @ $422 + sta ,y+ + decb + bne L14C8 + lda #C$CR Append a CR to it + sta ,y+ + clrb + lbra L1564 +* Not 6809 object code or data module either +L14D7 sty <u000A Save data area size + leax >L0013,pc Point to alternate languages table +L14DE tst ,x Is this entry active? + lbeq L1629 No, exit with non-existing module error + cmpa ,x+ Same module type as we want? + beq L14EE Yes, skip ahead +L14E8 tst ,x+ No, eat module name + bpl L14E8 + bra L14DE Try next module +* Found run-time language match +L14EE ldd <u0008 Get ptr to start of current command group + subd <u0004 Calculate size of whole group + addd <u0006 Don't include size of current group + std <u0006 Save remainder size + ldd <u0004 Get ptr to start of sub-module + std <u0008 Save it + pshs y,x Preserve data area size & primary module ptr + leax >L0021,pc Point to 'RUNB' + cmpx ,s Is that the run-time module we want? + bne L1546 No, skip ahead +* RUNB needed - have to () & quote/commas between params + ldx <u0008 Yes, get sub-module ptr? + leay >u0418,u Point to before sub-module + bsr L154B Copy buffer up to next param (or end of line) + beq L1535 If it was end of line, add CR & continue + ldd ,x Get 2 param chars + cmpd #$2822 Is it '("' (RUNB variables ahead?) + beq L1546 Yes, skip ahead (we won't have to add them) + lda #C$SPAC No, add ' ("' + sta ,y+ + ldd #$2822 + std ,y++ +L151F bsr L154B Copy buffer up to next param (or end of line) + beq L152E If end of line, add '")' (close params) + ldd #$222C Add '","' (Basic09 param separators + std ,y++ + lda #$22 2nd quote of above + sta ,y+ + bra L151F Keep doing for all parameters + +L152E ldd #$2229 Add '")' to end parameter list + std ,y++ + lda #C$CR Add CR +L1535 sta ,y+ + tfr y,d Move end of param ptr to D + leay >u0418,u Point to start of param + sty <u0008 Save as start ptr + subd <u0008 Calculate param size + std <u0006 Save it +L1546 puls y,x Restore data area size & primary module ptr + lbra L15D5 + +* Copy from X to Y until either a CR or a space char is hit +* If it finds a space, it will eat them until the next non-space char is found +L154B lda ,x+ Get char + cmpa #C$SPAC Is it a space? +* Was L155B + beq L1559 yes, skip ahead + cmpa #C$CR Is it the end of the line? + beq L155F Yes, bump ptr back to CR & exit + sta ,y+ Save the char + bra L154B Keep doing it + +L1559 lda ,x+ Get char +L155B cmpa #C$SPAC Is it another space? + beq L1559 Yes, keep eating spaces +L155F leax -$01,x Bump ptr back to either non-space or CR + cmpa #C$CR Is it a CR? & return + rts + +* THIS CMPB / LBEQ SEEMS TO BE USELESS, AS B IS ALWAYS CLEAR COMING INTO THIS +* ROUTINE +L1564 cmpb #E$BMode + lbeq L162B + ldx <u0006 Get size of current group + leax 5,x Bump it up by 5??? + stx <u0006 Save new size + tst <u0060 Data module linked? + bne L1592 Yes, skip ahead + ldx <u0004 Get module name ptr + ldu 4,s + lbsr L0BFA Set up paths + lbcs L162B If error, exit with it + bra L1592 Start up shell with '-P X PATH=(current)' + +* L1581 is for sub-shells (?), L1586 for normal shells +L1581 fcc '-P X ' Prompting off/exit on error +L1586 fcc 'PATH= ' For inheriting parent shell's paths + fcb C$CR + +L158D leax <L1586,pc Point to 'path=' + bra L1595 Skip ahead + +L1592 leax <L1581,pc Point to '-p x ' +L1595 leay >u166D,u Point to about-to-be merged buffer + lbsr L1320 Copy up until CR + leay -1,y Point to CR + leax >u0CDD,u Point to copy of current path= +* Copy all paths to buffer, changing <CR> separated ones with Spaces +L15A2 lda ,x Get char + cmpa #C$CR CR? + beq L15B1 Yes, don't copy this buffer + lbsr L1320 Copy up until CR + lda #C$SPAC Replace CR with Space + sta -1,y + bra L15A2 Continue copying CR marked blocks until done +L15B1 lda #'; Replace final CR with ; (command separator) + sta -1,y + tst <u0060 + beq L15BE + ldd #'M*256+'= If flag set, append 'M=' + std ,y++ +L15BE ldx <u0008 Get ptr to start of current group + lbsr L1320 Copy up until CR + leax >u166D,u Point to merged buffer again + stx <u0008 Make it the new current group start + tfr y,d Move end buffer ptr to D + pshs x Push merged buffer ptr for SUBD + subd ,s++ Calculate size of merged buffer + std <u0006 Save merged buffer size + leax >L000D,pc Point to 'shell' + +L15D5 stx <u0004 Save ptr to module name to fork +L15D7 ldx <u0004 Get ptr to module name to fork + lda #Prgrm+Objct + os9 F$NMLink Get memory requirement stuff from it + bcc L15E5 Got it, continue + os9 F$NMLoad Couldn't get, try loading it + bcs L162B Still couldn't get, can't fork +L15E5 tst <u0003 Memory size specified? + bne L15F2 Yes, skip ahead + tfr y,d No, tfr modules mem size to D + addd <u000A ??? Add to something + addd #$00FF Round up to nearest page + sta <u0003 Save # of pages need for data mem +L15F2 clr ,-s Clear byte on stack to store original priority + ldb <u0022 Get priority we want to set new program at + beq DnePrior 0=Use inherited priority, skip ahead + leax >u166D,u Point to place to hold Process descriptor + os9 F$ID Get our process # + os9 F$GPrDsc Get our process descriptor + ldb P$Prior,x Get our priority + stb ,s Save it + ldb <u0022 Get priority for new process + os9 F$SPrior Set our priority so child will inherit it +DnePrior lbsr L130A Go setup Fork entry registers + os9 F$Fork Create the new process + pshs d,cc Preserve error (if any) & new process # + ldb 3,s Get original priority back + beq L1609 Priority didn't change, ignore it + os9 F$ID Get our process # into A + os9 F$SPrior Reset our priority back to normal +L1609 lda #Prgrm+Objct Std 6809 module + ldx <u0010 Get ptr to some other module name (?) + bne L1611 There is one, unlink it instead + ldx <u0004 Get ptr to command name +L1611 os9 F$UnLoad Bump link count down back to normal? + clra + clrb + std <u0010 Zero out other module name ptr + std <u0004 Clear out ptr to main command name + lda <u0060 Check if data module needs to be unlinked too + cmpa #$01 Just 1 link to it? + bne L1627 No, skip ahead + lda #Data Data module + ldx <u0061 Get ptr to name of data module + os9 F$UnLoad Bump link count down back to normal +L1627 puls cc,d Get back F$FORK error/process # + leas 1,s Eat priority byte + puls pc,u,y,x Restore regs & return + +L1629 ldb #E$NEMod Non-existing module error +L162B coma + puls pc,u,y,x + +L162E fcc '/pipe' + fcb C$CR + +L1634 pshs x + leax <L162E,pc Point to '/pipe' + ldd #$0103 + lbsr L0C0E + puls x + bcs L169E + lbsr L1459 + bcs L169E + lda ,u + bne L1653 + os9 I$Dup + bcs L169E + sta ,u +L1653 clra + os9 I$Close + lda #$01 + os9 I$Dup + lda #$01 + lbsr L0BA8 + lda #$02 + lbra L0BA8 + +* Filename for shell log-append mode because of leading '+' +L1666 fcc '+/dd/log/uxxx' + fcb $0d + +* Make shell logging filename @ u0CBD,u +L1674 leax <L1666,pc Point to log name string (append mode) + leay >u0CBD,u Point to buffer to hold shell log name + lbsr L1320 Copy name to buffer + leay -4,y Point to where 1st digit will go + lda <u005A+1 Get LSB of user #? + pshs y,x,d Preserve regs + leay <L1693,pc Point to routine + bra L16B9 Go convert digits & append to logname + +L168A lda <u0047 + pshs y,x,d + leay <L1693,pc + bra L16B9 + +L1693 ldy $0B,s Get ptr to where shell log # goes + ldd $03,s Get 1st 2 digits of # + std ,y++ Save in shell log pathname + lda $05,s Get last digit + sta ,y Save it too +L169E rts + +L169F ldd 4,s Get last 2 digits of process # (ASCII) + std >u01EC,u Save it & return + rts + +L16A6 pshs y,x,d Preserve End of parm ctr & others + os9 F$ID Get user's ID # + sty <u005A Save it + leay <L169F,pc Point to routine + bra L16B9 + +* Set up to write out process # when forked? +L16B3 pshs y,x,d + leay >L021B,pc + +* Entry: A=Process ID # +* Exit: L01EC=2 lower digits of process # in ASCII format + +L16B9 pshs y,x,b Preserve regs + leax 1,s Point X to X value on stack + ldb #$2F Init B to start @ '0' in loop +L16BF incb Bump ASCII # up + suba #100 Start with 100's digit + bhs L16BF More left, keep going + stb ,x+ Save digit + ldb #$3A Init so loop starts @ ASCII '9' +L16C8 decb Bump ASCII # down + adda #10 Do 10's digit + bhs L16C8 Still more, keep going + stb ,x+ Save 10's digit + adda #$30 Bump 1's digit up to ASCII equivalent + ldb #$0D Add carriage return + std ,x Save overtop Y on the stack + leax ,s Point X to B on stack + jsr ,y + leas 5,s Eat stack + puls pc,y,x,d Restore other regs & return + +* KILL command +L16DD bsr L16EB Go get process # to kill + cmpb #2 Trying to kill the system process or 1st shell? + bls L170A Yes, print 'WHAT?' & ignore it + tfr b,a Move process # to proper reg +L16E5 clrb S$Kill signal + os9 F$Send Send it to the process & return + rts + +* Set priority - subroutine to calculate binary version of # +* (used for both process # & priority values) +L16EB clrb Initialize # for loop +L16EC lda ,x+ This loop will calculate the binary version + suba #$30 Of the ASCII # pointed to by X + cmpa #9 + bhi L16FD + pshs a + lda #10 + mul + addb ,s+ + bcc L16EC Keep going until overflows past 255 +L16FD lda ,-x Get last char done + bcs L1708 If #>255, eat RTS & exit with error + tst <u0014 If flag is set, return + bne L169E + tstb Otherwise, check if # is 0 + bne L169E No, return +L1708 leas 2,s Yes, eat RTS address & exit with error +L170A lbra L0BCF Print 'WHAT?' +* SETPR routine +L170D bsr L16EB Go calculate process # + stb <u0021 Save it + lbsr L0907 Find next field (after commas/spaces) + bsr L16EB Go calculate priority (into B) + lda <u0021 Get process # + os9 F$SPrior Set it's priority & return + rts + +L171C fcc 'pwd: bad name in path' + fcb C$CR +L1732 fcc '.......................................' +L1759 fcc '.' + fcb C$CR +L175B fcc 'pwd: read error' + fcb C$CR + +L176B clr <u003D +L176D pshs y,x + leay >u02F2,u + lda #$81 + tst <u0037 + beq L178F + ldx <u0039 + bra L17F7 +* .PXD command +L177D clr <u003D + pshs y,x + leay >u0375,u + lda #$85 + tst <u0038 + beq L178F + ldx <u003B + bra L17F7 +L178F sta <u0029 + sty <u003E +L1794 leax >$0080,y + lda #$0D + sta ,x + stx <u002A + leax <L1759,pc + stx <u0040 + bsr L1801 + lbsr L183C +L17A9 ldd <u002C + std <u0032 + lda <u002E + sta <u0034 + bsr L1828 + beq L17D3 + lda <u0012 + os9 I$Close + lbcs L188C + ldx <u0040 + leax -$01,x + stx <u0040 + bsr L1801 + bsr L183C + bsr L1817 + leax >u03F8,u + lbsr L1859 + bra L17A9 +L17D3 lda <u0012 + ldb #SS.DevNm + leax >u00B5,u + os9 I$GetStt Get device name + bsr L1859 +L17E0 lda <u0012 + os9 I$Close + ldx <u002A + lda <u0029 + bita #$04 + bne L17F3 + inc <u0037 + stx <u0039 + bra L17F7 +L17F3 inc <u0038 + stx <u003B +L17F7 ldy #$0083 + lda #$01 + clrb + lbra L18A0 +L1801 lda <u0029 + os9 I$Open + sta <u0012 + rts +L1809 lda <u0012 + leax >u03F8,u + ldy #$0020 + os9 I$Read + rts +L1817 bsr L1809 + bcs L1896 + leax >u0415,u + leay >u0032,u + bsr L1830 + bne L1817 + rts +L1828 leax >u002C,u + leay >u002F,u +L1830 ldd ,x++ + cmpd ,y++ + bne L183B + lda ,x + cmpa ,y +L183B rts +L183C bsr L1809 + ldd >u0415,u + std <u002F + lda >u0417,u + sta <u0031 + bsr L1809 + ldd >u0415,u + std <u002C + lda >u0417,u + sta <u002E + rts +L1859 os9 F$PrsNam + bcs L1890 + ldx <u002A + pshs b + incb + clra + std <u0032 + tfr x,d + subd <u0032 + cmpd <u003E + bls L1881 + puls b +L1871 lda ,-y + anda #$7F + sta ,-x + decb + bne L1871 + lda #$2F + sta ,-x + stx <u002A + rts + +L1881 lda #'* + sta ,-x + stx <u002A + leas 3,s + lbra L17E0 + +L188C pshs b,cc + bra L18AB + +L1890 leax >L171C,pc + bra L189A + +L1896 leax >L175B,pc +L189A leas $02,s + ldd #$02FF +L18A0 stx <u002A + pshs b,cc + tst <u003D + bne L18AB + os9 I$WritLn +L18AB puls b,cc + puls y,x,pc + +L18DB leax >u0124,u Point to PD.OPT work copy area + clrb Change to CLRB + os9 I$GetStt Get current PD.OPT settings + tst ,x Check device type + bne L1914 If not SCF, don't bother changing stuff + inc >u1812,u Set flag that we are changing key defs + ldd <$10,x Get PD.INT & PD.QUT chars (<CTRL>-<C> & <E>) + sta >u180F,u Save copy of PD.INT + stb >u180E,u Save copy of PD.QUT + ldd #$0A0C Reload with up & down arrows + std <$10,x Save 'em + lda $06,x Get PD.NUL count (normally 0) + sta >u1811,u Save copy + lda #$05 Replace with 5 + sta $06,x + clra + clrb Reset path options to new settings + os9 I$SetStt Do SS.OPT Setstat + +* Non-SCF devices go here (ex. a script file would be RBF) +L1914 ldb #SS.SSig Send signal on data ready + ldx #$000B Signal code to send is $B + rts Do SetStt, clear <E signal copy, and go to L191C + +* X still is $B from L1914 +* Called when F$Sleep @ L0171 is interrupted by keyboard/mouse signal +L191C ldb <u000E Get Signal code + clr <u000E Clear memory copy of signal code + cmpb #S$Abort Keyboard abort signal (<CTRL>-<E>)? + bne L1928 No, check next + bsr L1932 Write CR out if no history yet + bra L1967 Go backwards in history + +L1928 cmpb #S$Intrpt Keyboard interrupt signal (<CTRL>-<C>)? + lbne L017B No check for $B signal (ignore rest) + bsr L1932 Write CR out if no history yet + bra L1991 Go forwards in history + +* Keyboard abort or Keyboard interrupt signal +L1932 tst >u180D,u Any history entries yet? + bne L193D Yes, exit + bsr L1959 Otherwise, put CR into the buffer + os9 I$WritLn Write it out to standard out +L193D rts + +L193E os9 I$ReadLn Read in line + bcc L194E No error, skip ahead +* NOTE: WHEN THE ABORT A SUB-FORKED PROGRAM BUG OCCURS, THE ABOVE READLN +* EXITS WITH CARRY SET & B=0 (ERROR 0) + cmpb #$02 Go backward in history buffer signal? + beq L1967 Yes, go process + cmpb #$03 Go forward in history buffer signal? + beq L1991 Yes, go process + lbra L1AAA Go to parse routine with unknown error in B +L194E cmpy #$0001 Just 1 char. read? + lbeq L1AA3 Yes, go do normal parsing (no error) + lbra L1A37 Otherwise, change chars <$0D to spaces + +* Change A to be standard output??? +L1959 lda #C$CR Carriage return + leax >u0124,u ??? Point to a buffer + sta ,x Save CR there + clra Prepare to write the CR out to standard input + ldy #$0001 + rts +* PD.QUT (redefined to be go back 1 in history buffer) +L1967 tst >u180C,u Any lines in history buffer? + bne L1972 Yes, go move between them + bsr L1959 Otherwise, put CR into buffer + lbra L1AA3 Go to normal command parse routine (no error) + +L1972 ldb >u180D,u Get 'current' history buffer entry # + cmpb #$01 On the first one? + bls L1987 Yes, go wrap to end + cmpb >u180C,u Somehow point past last one? + bhi L1987 Yes, bump back to last one + decb Bump to previous one + stb >u180D,u Save it as 'current' history entry # + bra L19B3 + +L1987 ldb >u180C,u Get highest history entry # + stb >u180D,u Make it the current + bra L19B3 + +* PD.INT (redefined to be go forward 1 in history buffer) +L1991 tst >u180C,u Any lines in history buffer? + bne L199C Yes, go move between them + bsr L1959 Otherwise, put CR into buffer + lbra L1AA3 Go to normal command parse routine (no error) + +L199C ldb >u180D,u Get current history entry # + cmpb >u180C,u Higher or same as last one? + bhs L19AD Yes, wrap to beginning + incb Bump to next one + stb >u180D,u Save it as 'current' history entry # + bra L19B3 + +L19AD ldb #$01 Set history entry # to 1st one + stb >u180D,u Save as 'current' entry # +L19B3 bsr L19D3 Go get ptr to history entry buffer we want + sty >u1813,u Save 'current' history buffer ptr + leax >u0213,u Point to expanded shell prompt + ldy >u01F7,u Get size of expanded shell prompt + lda #$02 Std Err + os9 I$WritLn Write out shell prompt + bsr L19EA Go Pre-load Read buffer with history entry + bcc L1A0E No error, continue + lbra L1AAA Normal parse with error + +* Find history entry # we want +* Entry: B=history entry # (1-xx) +* Exit: Y=Ptr to history buffer entry we wanted +L19D3 ldy >u180A,u Get ptr to start of history buffers +L19D8 decb Bump down counter to find entry we want + beq L19E9 Found it, skip ahead +L19DB tst ,y+ Wrong one, search for end of one we are checking + beq L19E4 Found it, skip ahead + lbsr L1A97 Wrap buffer ptr if we hit end of all history + bra L19DB Keep searching for end of current entry + +L19E4 lbsr L1A97 Wrap buffer ptr if we hit end of all history + bra L19D8 Go into next entry in history buffers + +L19E9 rts Found it, leave + +L19EA leax >u0124,u Point to temp buffer + ldy >u1813,u Get ptr to current history buffer + clrb Set counter to 0 (size of buffer) +L19F4 lda ,y+ Get char from history buffer + beq L1A00 Found end, continue + sta ,x+ Put it in temp buffer + incb Bump up size counter + lbsr L1A97 Wrap buffer ptr if we hit end of all history + bra L19F4 Continue copying into temp buffer +L1A00 clra D=Size of history buffer + decb + tfr d,y Move to proper register + leax >u0124,u Point to buffer history copy + ldb #SS.Fill Fill it with current selected history command + os9 I$SetStt + rts + +* Successfull SS.Fill of history buffer goes here +L1A0E lda #$01 Write copy of history buffer to std out + os9 I$Write + leax >u0124,u Point to current history buffer again + tfr y,d Transfer # bytes written to D + lda #C$BSP Backspace char +L1A1B sta ,x+ Fill buffer with backspaces + decb + bne L1A1B + leax >u0124,u Write them to reset cursor to start of line + lda #$01 + os9 I$Write + ldd #SS.Relea Eat keyboard signal (SS.Fill cleared it out of + os9 I$SetStt the read buffer already) + ldb #SS.SSig Setup for re-enabling it + ldx #$000B Signal Code to send on keypress=$B + lbra L016A Go re-enable signal send on keyboard/mouse input + +* Put new entry into history buffers, adjusting # used, etc.) +* Entry: Y=# bytes read in ReadLn <>1 +L1A37 pshs y Preserve # bytes read + tfr y,d Move to D reg + ldy >u1808,u Get ptr to where next history entry will go + leax >u0124,u Point to line entered by user +L1A44 lda ,x+ Get char + cmpa #C$CR Control char <$0d? + bhs L1A4C No, save the character + lda #C$SPAC Replace with space char if it is +L1A4C sta ,y+ Save char into history buffer + bsr L1A97 Wrap to beginning if we hit end + cmpy >u180A,u Point to entry #1? + bne L1A59 No, continue + bsr L1A7B Yes, make new #1 entry & drop # of entries +L1A59 decb Drop # bytes left in new entry + bne L1A44 Not done, continue + clr ,y+ mark end with NUL + bsr L1A97 Wrap to beginning if at end + cmpy >u180A,u Pointing to entry #1? + bne L1A69 No, skip ahead + bsr L1A7B Yes, make new #1 entry & drop # of entries +L1A69 inc >u180C,u Increase # of entries + sty >u1808,u Save ptr to where next history entry will go + puls y Restore # bytes read + clra Point to temp buffer again + leax >u0124,u + bra L1AA3 Normal parse, no error + +* Reset ptr to new 1st entry in history buffer +L1A7B pshs y Preserve current location in history buffer + ldy >u180A,u Point to start of 1st entry +L1A82 tst ,y+ End of current entry? + beq L1A8A Yes, skip ahead + bsr L1A97 No, wrap if we need to + bra L1A82 Keep going until we find end +L1A8A bsr L1A97 Wrap if we need to + dec >u180C,u Dec # lines in history buffer + sty >u180A,u Save new 'start of history' ptr + puls pc,y Restore current location & return +* If we are at end of history buffers, wrap to beginning (raw, has nothing to +* do with entry #'s) +L1A97 cmpy >u1806,u Are we at end of buffer for history entries? + bne L1AA2 No, continue on + leay >u1815,u Yes, reset to beginning of history buffers +L1AA2 rts + +L1AA3 bsr L1AB1 Reset std paths to normal <CTRL>-<E>/<C> settings + andcc #$FE No error + lbra L018B Normal command processing + +L1AAA bsr L1AB1 Reset std paths to normal <CTRL>-<E>/<C> settings + orcc #$01 Error + lbra L018B Normal command processing + +* Reset all 3 standard paths' NUL counts/Keyboard Interrupt/Terminate settings +L1AB1 pshs x,d Preserve regs + tst >u1812,u Check flag + beq L1AD6 If 0 skip ahead + leas <-$20,s Make 32 byte buffer on stack + leax ,s Point X to buffer + clrb CHANGE TO CLRB + clra Standard input path + bsr L1AD8 Restore NUL counts, Keyboard Intrpt/Terminate + lda #$01 Do same for Standard output path + bsr L1AD8 + lda #$02 Do same for Standard Error path + bsr L1AD8 + leas <$20,s Eat stack buffer + clr >u1812,u Reset PD.OPT flags to 0 + clr >u180D,u +L1AD6 puls pc,x,d Restore regs & return + +* Restore path options to preserved Keyboard terminate/interrupt & end of +* line NUL counts +L1AD8 pshs a Preserve path # + os9 I$GetStt Get current PD.OPT settings + lda >u180E,u Get copy of Keyboard terminate char + sta <PD.QUT-$20,x Save into buffered copy + lda >u180F,u Get copy of Keyboard interrupt char + sta <PD.INT-$20,x Save into buffered copy + lda >u1811,u Get copy of end of line NUL count + sta $6,x Save into buffered copy + puls a Get path # back + os9 I$SetStt Reset path options with restored values & return + rts + + emod +eom equ * + end +
--- a/level2/cmds/makefile Mon Sep 23 12:16:22 2002 +0000 +++ b/level2/cmds/makefile Thu Sep 26 13:14:35 2002 +0000 @@ -6,11 +6,11 @@ deiniz del deldir dir display dsave dump echo edit error exbin format \ free grfdrv help ident iniz link list load login makdir mdir \ merge mfree modpatch montype os9gen procs pwd pxd rename save \ - setime shell_21 shell_22a sleep tee tmode tsmon unlink \ + setime shell_21 shellplus sleep tee tmode tsmon unlink \ verify wcreate xmode SUBS = gfx2 gfx inkey syscall -SHELLMODS = shell_22a deiniz display echo iniz link load save unlink +SHELLMODS = shellplus deiniz display echo iniz link load save unlink UTILPAK1 = attr build copy date del deldir dir list makdir mdir \ merge mfree procs pwd pxd rename sleep tee tmode
--- a/level2/cmds/shell_22a.asm Mon Sep 23 12:16:22 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,873 +0,0 @@ - -L0000 fcb $87,$CD,$1B,$3C,$00,$0D,$11,$82 .M.<.... -L0008 fcb $0C,$00,$6E,$1F,$00,$53,$68,$65 ..n..She -L0010 fcb $6C,$EC,$16,$13,$50,$61,$73,$63 ll..Pasc -L0018 fcb $61,$6C,$D3,$25,$52,$75,$6E,$C3 alS%RunC -L0020 fcb $22,$52,$75,$6E,$C2,$00,$00,$00 "RunB... -L0028 fcb $00,$00,$00,$00,$00,$00,$0A,$53 .......S -L0030 fcb $68,$65,$6C,$6C,$2B,$20,$76,$32 hell+ v2 -L0038 fcb $2E,$32,$61,$20,$00,$7B,$40,$7C .2a .{@| -L0040 fcb $23,$7D,$24,$3A,$20,$20,$20,$20 #}$: -L0048 fcb $20,$20,$20,$20,$20,$20,$20,$20 -L0050 fcb $20,$20,$20,$20,$20,$2B,$2B,$2B +++ -L0058 fcb $53,$54,$41,$52,$54,$2B,$2B,$2B START+++ -L0060 fcb $0D,$2B,$2B,$2B,$45,$4E,$44,$2B .+++END+ -L0068 fcb $2B,$2B,$0D,$D7,$0E,$3B,$32,$7B ++.W.;2{ -L0070 fcb $34,$36,$30,$C9,$18,$15,$AF,$C9 460I../I -L0078 fcb $18,$08,$AF,$C9,$18,$0A,$30,$89 ../I..0. -L0080 fcb $03,$28,$AF,$C9,$18,$06,$6F,$C9 .(/I..oI -L0088 fcb $18,$12,$6F,$C9,$18,$0D,$6F,$C9 ..oI..oI -L0090 fcb $18,$0C,$AE,$62,$C6,$FF,$17,$03 ...bF... -L0098 fcb $94,$10,$DF,$25,$DF,$27,$30,$C9 .._%_'0I -L00A0 fcb $04,$18,$9F,$63,$30,$8C,$C4,$10 ...c0.D. -L00A8 fcb $3F,$09,$17,$16,$7A,$17,$16,$46 ?...z..F -L00B0 fcb $30,$8C,$8A,$17,$09,$63,$30,$C9 0....c0I -L00B8 fcb $05,$A8,$CC,$0D,$14,$A7,$84,$30 .(L..'.0 -L00C0 fcb $88,$51,$5A,$26,$F8,$A7,$C9,$0C .QZ&x'I. -L00C8 fcb $DD,$A7,$C9,$0C,$DE,$35,$16,$DD ]'I.^5.] -L00D0 fcb $06,$27,$0D,$17,$03,$60,$10,$25 .'...`.% -L00D8 fcb $01,$3D,$0D,$0C,$10,$26,$01,$36 .=...&.6 -L00E0 fcb $17,$01,$5F,$0C,$6C,$10,$EE,$E1 .._.l.na -L00E8 fcb $10,$DF,$25,$DF,$27,$30,$8D,$FF ._%_'0.. -L00F0 fcb $3D,$0D,$1D,$26,$16,$10,$8E,$00 =..&.... -L00F8 fcb $0E,$86,$01,$10,$3F,$8A,$10,$25 ....?..% -L0100 fcb $01,$1B,$8D,$17,$17,$01,$31,$10 ......1. -L0108 fcb $25,$01,$12,$4F,$97,$5C,$30,$8D %..O.\0. -L0110 fcb $FF,$43,$17,$06,$DC,$0D,$1D,$26 .C..\..& -L0118 fcb $27,$20,$12,$6F,$C9,$01,$F6,$17 ' .oI.v. -L0120 fcb $0A,$17,$86,$20,$A7,$C9,$02,$E8 ... 'I.h -L0128 fcb $30,$C9,$02,$E0,$39,$17,$08,$CC 0I.`9..L -L0130 fcb $30,$C9,$02,$12,$10,$AE,$C9,$01 0I....I. -L0138 fcb $F7,$0D,$1D,$26,$03,$17,$00,$FC w..&.... -L0140 fcb $4F,$30,$C9,$01,$24,$0D,$6B,$27 O0I.$.k' -L0148 fcb $32,$10,$9E,$65,$10,$9C,$69,$10 2..e..i. -L0150 fcb $24,$00,$BA,$C6,$C8,$34,$10,$A6 $.:FH4.& -L0158 fcb $A0,$A7,$80,$5A,$27,$10,$10,$9C '.Z'... -L0160 fcb $69,$24,$04,$81,$0D,$26,$F0,$10 i$...&p. -L0168 fcb $9F,$65,$35,$10,$20,$68,$A6,$A0 .e5. h& -L0170 fcb $10,$9C,$69,$24,$F2,$81,$0D,$26 ..i$r..& -L0178 fcb $F5,$20,$EC,$0D,$5E,$26,$1D,$CC u l.^&.L -L0180 fcb $00,$1B,$10,$3F,$8E,$17,$17,$A5 ...?...% -L0188 fcb $0F,$0E,$10,$3F,$8E,$20,$06,$8E ...?. .. -L0190 fcb $00,$00,$10,$3F,$0A,$16,$17,$CB ...?...K -L0198 fcb $C1,$0B,$26,$F3,$30,$C9,$01,$24 A.&s0I.$ -L01A0 fcb $4F,$10,$8E,$00,$C8,$16,$17,$DD O...H..] -L01A8 fcb $24,$2C,$C1,$D3,$27,$5F,$10,$DE $,AS'_.^ -L01B0 fcb $25,$DE,$27,$D7,$47,$0D,$46,$26 %^'WG.F& -L01B8 fcb $08,$0D,$18,$26,$04,$0D,$20,$26 ...&.. & -L01C0 fcb $56,$10,$3F,$0F,$0D,$46,$10,$27 V.?..F.' -L01C8 fcb $FF,$63,$0F,$46,$30,$C9,$0C,$4C .c.F0I.L -L01D0 fcb $17,$0D,$F3,$16,$FF,$57,$10,$8C ..s..W.. -L01D8 fcb $00,$01,$22,$0F,$17,$08,$1D,$30 .."....0 -L01E0 fcb $C9,$02,$13,$10,$AE,$C9,$01,$F7 I....I.w -L01E8 fcb $16,$FF,$4E,$17,$02,$48,$34,$01 ..N..H4. -L01F0 fcb $0D,$45,$26,$02,$0F,$47,$35,$01 .E&..G5. -L01F8 fcb $10,$24,$FF,$31,$5D,$10,$27,$FF .$.1].'. -L0200 fcb $2C,$0D,$45,$26,$A9,$D7,$47,$20 ,.E&)WG -L0208 fcb $A5,$65,$6F,$66,$0D,$0D,$1D,$26 %eof...& -L0210 fcb $05,$30,$8C,$F5,$8D,$22,$5F,$96 .0.u."_. -L0218 fcb $18,$10,$26,$09,$B8,$34,$45,$0D ..&.84E. -L0220 fcb $6B,$27,$05,$DE,$67,$10,$3F,$02 k'.^g.?. -L0228 fcb $35,$45,$34,$05,$30,$8D,$FE,$31 5E4.0..1 -L0230 fcb $17,$05,$BE,$35,$05,$10,$3F,$06 ..>5..?. -L0238 fcb $10,$8E,$00,$50,$86,$02,$10,$3F ...P...? -L0240 fcb $8C,$39,$34,$36,$CC,$00,$1B,$10 .946L... -L0248 fcb $3F,$8E,$24,$04,$86,$01,$20,$0D ?.$... . -L0250 fcb $30,$C9,$01,$24,$4F,$5F,$10,$3F 0I.$O_.? -L0258 fcb $8D,$A6,$C9,$01,$24,$97,$5E,$35 .&I.$.^5 -L0260 fcb $B6,$A6,$84,$81,$3C,$27,$06,$81 6&..<'.. -L0268 fcb $3E,$10,$26,$09,$5D,$34,$10,$31 >.&.]4.1 -L0270 fcb $8D,$01,$77,$17,$06,$BC,$10,$25 ..w..<.% -L0278 fcb $09,$50,$EC,$A4,$AD,$AB,$9F,$48 .Pl$-+.H -L0280 fcb $35,$10,$10,$25,$09,$0B,$A6,$80 5..%..&. -L0288 fcb $81,$3C,$27,$FA,$81,$3E,$27,$F6 .<'z.>'v -L0290 fcb $81,$2D,$27,$F2,$81,$2B,$27,$EE .-'r.+'n -L0298 fcb $30,$1F,$8D,$23,$5F,$34,$04,$A6 0..#_4.& -L02A0 fcb $C5,$27,$03,$10,$3F,$8F,$35,$04 E'..?.5. -L02A8 fcb $6F,$C5,$5C,$C1,$03,$25,$EE,$9E oE\A.%n. -L02B0 fcb $48,$39,$0C,$13,$17,$0A,$16,$10 H9...... -L02B8 fcb $25,$08,$D6,$8D,$02,$20,$31,$34 %.V.. 14 -L02C0 fcb $10,$C6,$0E,$30,$C8,$6D,$86,$2F .F.0Hm./ -L02C8 fcb $A7,$80,$4F,$10,$3F,$8D,$35,$10 '.O.?.5. -L02D0 fcb $10,$25,$08,$BD,$10,$8E,$00,$01 .%.=.... -L02D8 fcb $34,$10,$30,$8D,$FD,$5E,$86,$01 4.0..^.. -L02E0 fcb $10,$3F,$8A,$35,$10,$10,$25,$08 .?.5..%. -L02E8 fcb $A8,$17,$07,$1D,$17,$FF,$53,$39 (.....S9 -L02F0 fcb $0C,$18,$0C,$19,$17,$08,$9A,$0F ........ -L02F8 fcb $19,$0D,$13,$27,$1A,$10,$3F,$0C ...'..?. -L0300 fcb $34,$10,$30,$C9,$16,$6D,$10,$3F 4.0I.m.? -L0308 fcb $18,$A6,$01,$35,$10,$27,$B0,$5F .&.5.'0_ -L0310 fcb $10,$3F,$08,$10,$25,$FE,$97,$5F .?..%.._ -L0318 fcb $D7,$13,$39,$08,$67,$AA,$0F,$A8 W.9.g*.( -L0320 fcb $D7,$06,$A3,$43,$48,$C4,$06,$96 W.#CHD.. -L0328 fcb $43,$48,$D8,$06,$99,$43,$C4,$06 CHX..CD. -L0330 fcb $8D,$43,$D8,$06,$5B,$45,$D8,$14 .CX.[EX. -L0338 fcb $27,$4B,$49,$4C,$CC,$06,$B7,$D8 'KILL.7X -L0340 fcb $06,$B8,$2D,$D8,$06,$D5,$50,$BD .8-X.UP= -L0348 fcb $06,$94,$D0,$06,$94,$2D,$D0,$06 ..P..-P. -L0350 fcb $95,$D4,$06,$96,$2D,$D4,$14,$37 .T..-T.7 -L0358 fcb $53,$45,$54,$50,$D2,$FF,$57,$49 SETPR.WI -L0360 fcb $BD,$FF,$00,$52,$BD,$FF,$4D,$5A =..R=.MZ -L0368 fcb $BD,$05,$C6,$BB,$14,$7F,$2E,$50 =.F;..P -L0370 fcb $57,$C4,$14,$8B,$2E,$50,$58,$C4 WD...PXD -L0378 fcb $0C,$A7,$4D,$BD,$0C,$D4,$56,$41 .'M=.TVA -L0380 fcb $52,$AE,$06,$6A,$D6,$06,$6A,$2D R..jV.j- -L0388 fcb $D6,$0E,$75,$50,$41,$54,$48,$BD V.uPATH= -L0390 fcb $0E,$35,$50,$41,$55,$53,$C5,$0D .5PAUSE. -L0398 fcb $85,$49,$4E,$43,$AE,$0D,$8A,$44 .INC...D -L03A0 fcb $45,$43,$AE,$09,$BA,$49,$C6,$0A EC..:IF. -L03A8 fcb $5D,$54,$48,$45,$CE,$0B,$D5,$45 ]THEN.UE -L03B0 fcb $4C,$53,$C5,$0A,$51,$46,$C9,$0A LSE.QFI. -L03B8 fcb $4D,$45,$4E,$44,$49,$C6,$0B,$79 MENDIF.y -L03C0 fcb $43,$4C,$52,$49,$C6,$0C,$01,$47 CLRIF..G -L03C8 fcb $4F,$54,$CF,$0B,$BE,$4F,$4E,$45 OTO.>ONE -L03D0 fcb $52,$D2,$06,$02,$CC,$06,$03,$2D RR..L..- -L03D8 fcb $CC,$05,$98,$53,$2E,$54,$2E,$41 L..S.T.A -L03E0 fcb $2E,$52,$2E,$54,$2E,$55,$2E,$D0 .R.T.U.P -L03E8 fcb $00,$00,$12,$CC,$A1,$12,$C9,$FC ...L!.I. -L03F0 fcb $0E,$A5,$BB,$0E,$C5,$A6,$0E,$98 .%;.E&.. -L03F8 fcb $8D,$08,$D0,$3C,$3E,$3E,$BE,$08 ..P<>>>. -L0400 fcb $E1,$3C,$3E,$BE,$08,$CE,$3C,$BE a<>>.N<> -L0408 fcb $08,$E6,$3E,$3E,$BE,$07,$EF,$3E .f>>>.o> -L0410 fcb $BE,$07,$E4,$BC,$07,$EF,$BE,$0E >.d<.o>. -L0418 fcb $55,$A3,$0E,$40,$DE,$00,$00,$0D U#.@^... -L0420 fcb $28,$29,$FF,$0D,$21,$23,$26,$3B ()..!#&; -L0428 fcb $3C,$3E,$5E,$7C,$FF,$34,$40,$6F <>^|.4@o -L0430 fcb $C0,$5A,$26,$FB,$35,$C0,$C6,$18 @Z&.5@F. -L0438 fcb $8D,$F3,$0D,$6C,$10,$27,$00,$A9 .s.l.'.) -L0440 fcb $31,$C9,$17,$FC,$34,$20,$31,$C9 1I..4 1I -L0448 fcb $16,$6D,$8D,$55,$81,$0D,$27,$73 .m.U..'s -L0450 fcb $10,$AC,$E4,$27,$6E,$0D,$1F,$26 .,d'n..& -L0458 fcb $F1,$81,$25,$26,$ED,$31,$3F,$34 q.%&m1?4 -L0460 fcb $10,$A6,$84,$81,$2A,$27,$51,$30 .&..*'Q0 -L0468 fcb $C9,$05,$A8,$81,$25,$26,$0C,$35 I.(.%&.5 -L0470 fcb $10,$30,$01,$A6,$84,$34,$10,$30 .0.&.4.0 -L0478 fcb $C9,$08,$D2,$81,$39,$22,$0C,$81 I.R.9".. -L0480 fcb $30,$25,$08,$80,$30,$C6,$51,$3D 0%..0FQ= -L0488 fcb $30,$8B,$5C,$8D,$14,$10,$AC,$62 0.\...,b -L0490 fcb $27,$2F,$81,$0D,$26,$F5,$31,$3F '/..&u1? -L0498 fcb $35,$10,$5D,$27,$AD,$30,$01,$20 5.]'-0. -L04A0 fcb $A9,$A6,$80,$81,$40,$26,$0E,$34 )&..@&.4 -L04A8 fcb $22,$10,$3F,$0C,$10,$8C,$00,$00 ".?..... -L04B0 fcb $35,$22,$27,$01,$39,$A7,$A0,$39 5"'.9' 9 -L04B8 fcb $35,$10,$17,$12,$4E,$31,$23,$20 5...N1# -L04C0 fcb $DC,$32,$62,$86,$0D,$A7,$A4,$35 \2b..'$5 -L04C8 fcb $20,$30,$C9,$16,$6D,$20,$1A,$0A 0I.m .. -L04D0 fcb $45,$78,$70,$61,$6E,$64,$65,$64 Expanded -L04D8 fcb $20,$6C,$69,$6E,$65,$20,$74,$6F line to -L04E0 fcb $6F,$20,$6C,$6F,$6E,$67,$0D,$2E o long.. -L04E8 fcb $0D,$A6,$84,$81,$2A,$27,$0A,$81 .&..*'.. -L04F0 fcb $3A,$26,$02,$30,$01,$81,$3A,$27 :&.0..:' -L04F8 fcb $12,$31,$C9,$0E,$6D,$17,$0E,$8C .1I.m... -L0500 fcb $30,$C9,$0E,$6D,$10,$8E,$08,$00 0I.m.... -L0508 fcb $16,$02,$9A,$31,$8D,$FF,$C0,$10 ...1..@. -L0510 fcb $9F,$4A,$10,$8E,$00,$18,$10,$9F .J...... -L0518 fcb $4C,$31,$8D,$FF,$CB,$10,$9F,$48 L1..K..H -L0520 fcb $10,$DF,$50,$31,$C9,$0E,$6D,$10 ._P1I.m. -L0528 fcb $9F,$56,$4F,$5F,$97,$12,$97,$4F .VO_...O -L0530 fcb $DD,$52,$20,$03,$17,$01,$D6,$17 ]R ...V. -L0538 fcb $02,$18,$24,$F8,$34,$10,$8D,$1F ..$x4... -L0540 fcb $AE,$E4,$24,$29,$8D,$19,$24,$04 .d$)..$. -L0548 fcb $9F,$40,$20,$F8,$0C,$4F,$9E,$40 .@ x.O.@ -L0550 fcb $35,$20,$10,$9F,$40,$34,$10,$86 5 ..@4.. -L0558 fcb $20,$A7,$1F,$1F,$21,$20,$14,$5F '..! ._ -L0560 fcb $A6,$80,$17,$00,$81,$27,$05,$81 &....'.. -L0568 fcb $2F,$26,$F4,$53,$39,$0F,$4F,$30 /&tS9.O0 -L0570 fcb $8D,$FF,$74,$86,$81,$10,$3F,$84 ..t...?. -L0578 fcb $10,$25,$02,$06,$97,$12,$35,$10 .%....5. -L0580 fcb $17,$01,$CF,$10,$24,$01,$6E,$A6 ..O.$.n& -L0588 fcb $80,$81,$0D,$10,$27,$02,$06,$81 ....'... -L0590 fcb $2C,$27,$F4,$81,$20,$27,$F0,$30 ,'t. 'p0 -L0598 fcb $1F,$9F,$54,$96,$12,$34,$40,$8E ..T..4@. -L05A0 fcb $00,$00,$CE,$00,$40,$10,$3F,$88 ..N.@.?. -L05A8 fcb $10,$25,$01,$D6,$35,$40,$30,$C9 .%.V5@0I -L05B0 fcb $0C,$9D,$34,$10,$96,$12,$10,$8E ..4..... -L05B8 fcb $00,$20,$10,$3F,$89,$10,$25,$01 . .?..%. -L05C0 fcb $0F,$35,$20,$A6,$A4,$4D,$27,$E6 .5 &$M'f -L05C8 fcb $9E,$54,$8D,$36,$25,$E0,$0D,$4F .T.6%`.O -L05D0 fcb $27,$0B,$9E,$40,$17,$01,$36,$9E '..@..6. -L05D8 fcb $56,$86,$2F,$A7,$1F,$30,$C9,$0C V./'.0I. -L05E0 fcb $9D,$17,$01,$29,$20,$C8,$34,$10 ...) H4. -L05E8 fcb $81,$28,$27,$14,$81,$29,$27,$10 .('..)'. -L05F0 fcb $81,$20,$27,$0C,$81,$2C,$27,$08 . '..,'. -L05F8 fcb $30,$8D,$FE,$27,$A1,$80,$22,$FC 0..'!.". -L0600 fcb $35,$90,$EC,$80,$81,$2A,$27,$57 5.l..*'W -L0608 fcb $81,$3F,$27,$3F,$81,$5B,$10,$27 .?'?.[.' -L0610 fcb $00,$8C,$8D,$D2,$27,$28,$8D,$2C ...R'(., -L0618 fcb $34,$02,$8D,$24,$A8,$E0,$26,$1E 4..$(`&. -L0620 fcb $A6,$A0,$2A,$DE,$EC,$84,$8D,$BE & *^l..> -L0628 fcb $27,$0A,$81,$2A,$26,$10,$1F,$98 '..*&... -L0630 fcb $8D,$B4,$26,$0A,$A6,$3F,$84,$7F .4&.&?. -L0638 fcb $C6,$20,$ED,$3F,$5F,$39,$53,$39 F m?_9S9 -L0640 fcb $A6,$A4,$84,$7F,$81,$41,$25,$02 &$..A%. -L0648 fcb $84,$DF,$39,$C1,$2A,$27,$D1,$C1 ._9A*'QA -L0650 fcb $2C,$22,$CD,$A6,$A0,$2A,$E7,$20 ,"M& *g -L0658 fcb $DD,$A6,$A0,$2A,$FC,$20,$D7,$A6 ]& *. W& -L0660 fcb $80,$8D,$83,$27,$F4,$81,$3F,$27 ...'t.?' -L0668 fcb $29,$81,$5B,$27,$25,$8D,$D5,$34 ).['%.U4 -L0670 fcb $02,$8D,$CD,$A8,$E0,$27,$0A,$32 ..M(`'.2 -L0678 fcb $7F,$A6,$A0,$2A,$F4,$32,$61,$20 & *t2a -L0680 fcb $BD,$32,$7F,$34,$30,$8D,$99,$35 =240..5 -L0688 fcb $30,$32,$61,$25,$EA,$39,$A6,$A0 02a%j9& -L0690 fcb $2B,$AC,$34,$30,$EC,$1F,$17,$FF +,40l... -L0698 fcb $6B,$35,$30,$25,$F1,$39,$EC,$80 k50%q9l. -L06A0 fcb $8D,$A2,$1E,$98,$8D,$9E,$1E,$98 ."...... -L06A8 fcb $81,$5D,$27,$92,$81,$2D,$27,$0A .]'..-'. -L06B0 fcb $97,$EF,$8D,$8C,$98,$EF,$27,$0F .o...o'. -L06B8 fcb $20,$E4,$0C,$EF,$D1,$EF,$27,$DE d.oQo'^ -L06C0 fcb $17,$FF,$7D,$98,$EF,$26,$F3,$EC ..}.o&sl -L06C8 fcb $80,$81,$5D,$26,$FA,$16,$FF,$50 ..]&z..P -L06D0 fcb $C1,$D3,$10,$26,$00,$AC,$9E,$54 AS.&.,.T -L06D8 fcb $A6,$1F,$8D,$48,$A6,$80,$9F,$54 &..H&..T -L06E0 fcb $81,$0D,$10,$27,$00,$AF,$17,$FE ...'./.. -L06E8 fcb $FD,$26,$F1,$34,$10,$9E,$56,$A7 .&q4..V' -L06F0 fcb $1F,$35,$10,$20,$07,$8D,$16,$8D .5. .... -L06F8 fcb $42,$16,$FE,$38,$8D,$3D,$16,$FE B..8.=.. -L0700 fcb $36,$A6,$80,$8D,$40,$27,$04,$30 6&..@'.0 -L0708 fcb $1E,$A6,$80,$8D,$17,$A6,$80,$81 .&...&.. -L0710 fcb $5C,$27,$EE,$81,$0D,$27,$7E,$8D \'n..'~. -L0718 fcb $30,$27,$09,$17,$FE,$C8,$27,$04 0'...H'. -L0720 fcb $8D,$02,$20,$E9,$34,$12,$9E,$56 .. i4..V -L0728 fcb $A7,$80,$9F,$56,$DC,$52,$C3,$00 '..V\RC. -L0730 fcb $01,$10,$83,$08,$00,$22,$48,$DD ....."H] -L0738 fcb $52,$35,$92,$96,$12,$27,$05,$10 R5...'.. -L0740 fcb $3F,$8F,$0F,$12,$39,$81,$5B,$27 ?...9.[' -L0748 fcb $08,$81,$3F,$27,$04,$81,$2A,$27 ..?'..*' -L0750 fcb $00,$39,$34,$10,$20,$08,$A6,$80 .94. .&. -L0758 fcb $8D,$EB,$27,$02,$30,$1F,$A6,$80 .k'.0.&. -L0760 fcb $81,$5C,$27,$F2,$17,$FE,$7F,$27 .\'r..' -L0768 fcb $13,$8D,$DA,$26,$F1,$34,$02,$1F ..Z&q4.. -L0770 fcb $10,$A3,$61,$83,$00,$01,$35,$02 .#a...5. -L0778 fcb $1A,$01,$35,$90,$5F,$35,$90,$53 ..5._5.S -L0780 fcb $C6,$BF,$34,$05,$8D,$B5,$9E,$4A F?4..5.J -L0788 fcb $10,$9E,$4C,$86,$02,$10,$3F,$8C ..L...?. -L0790 fcb $35,$05,$16,$FA,$19,$86,$0D,$8D 5..z.... -L0798 fcb $8B,$10,$9E,$52,$30,$C9,$0E,$6D ...R0I.m -L07A0 fcb $8D,$99,$10,$DE,$50,$0D,$1E,$27 ...^P..' -L07A8 fcb $03,$17,$FA,$90,$0D,$43,$27,$0A ..z..C'. -L07B0 fcb $17,$07,$AE,$4D,$10,$2A,$07,$5D ...M.*.] -L07B8 fcb $5F,$39,$0D,$45,$27,$2F,$A6,$80 _9.E'/&. -L07C0 fcb $81,$2A,$26,$F4,$17,$01,$60,$31 .*&t..`1 -L07C8 fcb $C9,$01,$24,$17,$08,$33,$A6,$84 I.$..3&. -L07D0 fcb $81,$5C,$27,$11,$30,$C9,$0B,$FC .\'.0I.. -L07D8 fcb $4F,$81,$0D,$27,$08,$A6,$80,$A1 O..'.&.! -L07E0 fcb $A0,$27,$F6,$20,$D3,$0F,$45,$5F 'v S.E_ -L07E8 fcb $32,$62,$16,$F9,$40,$8D,$02,$20 2b.y@.. -L07F0 fcb $52,$34,$10,$0D,$6C,$27,$44,$0D R4..l'D. -L07F8 fcb $5C,$26,$04,$0D,$1C,$27,$3C,$A6 \&...'<& -L0800 fcb $84,$81,$2A,$27,$36,$10,$8E,$00 ..*'6... -L0808 fcb $00,$10,$3F,$1C,$30,$C9,$0C,$BD ..?.0I.= -L0810 fcb $CC,$02,$03,$17,$04,$5E,$25,$23 L....^%# -L0818 fcb $17,$F9,$00,$86,$20,$A7,$88,$11 .y.. '.. -L0820 fcb $10,$8E,$00,$12,$96,$12,$10,$3F .......? -L0828 fcb $8A,$25,$0B,$AE,$E4,$10,$8E,$08 .%..d... -L0830 fcb $00,$96,$12,$10,$3F,$8C,$96,$12 ....?... -L0838 fcb $10,$3F,$8F,$10,$9E,$5A,$10,$3F .?...Z.? -L0840 fcb $1C,$35,$90,$4F,$97,$22,$97,$03 .5.O.".. -L0848 fcb $97,$0E,$31,$8D,$FA,$CD,$17,$00 ..1.zM.. -L0850 fcb $88,$25,$55,$81,$0D,$27,$51,$97 .%U..'Q. -L0858 fcb $0C,$81,$28,$26,$26,$31,$8D,$F7 ..(&&1.w -L0860 fcb $AC,$10,$9F,$04,$30,$01,$9F,$08 ,...0... -L0868 fcb $0C,$0D,$31,$8D,$FB,$B1,$17,$00 ..1..1.. -L0870 fcb $80,$81,$28,$27,$F3,$81,$29,$26 ..('s.)& -L0878 fcb $27,$0A,$0D,$26,$ED,$86,$0D,$A7 '..&m..' -L0880 fcb $1F,$20,$04,$8D,$26,$25,$21,$31 . ..&%!1 -L0888 fcb $8D,$FB,$98,$8D,$64,$1F,$10,$93 ....d... -L0890 fcb $08,$DD,$06,$30,$1F,$31,$8D,$FB .].0.1.. -L0898 fcb $51,$8D,$3E,$25,$0B,$10,$9E,$04 Q.>%.... -L08A0 fcb $10,$26,$03,$26,$81,$0D,$26,$9B .&.&..&. -L08A8 fcb $16,$02,$E6,$9F,$04,$8D,$0F,$25 ..f....% -L08B0 fcb $0C,$8D,$0B,$24,$FC,$31,$8D,$FB ...$.1.. -L08B8 fcb $40,$8D,$1E,$9F,$08,$39,$10,$3F @....9.? -L08C0 fcb $10,$24,$0C,$A6,$80,$81,$2E,$26 .$.&...& -L08C8 fcb $0A,$A1,$80,$27,$04,$31,$1F,$30 .!.'.1.0 -L08D0 fcb $A4,$4F,$39,$53,$30,$1F,$C6,$D7 $O9S0.FW -L08D8 fcb $39,$8D,$34,$34,$20,$8D,$53,$25 9.44 .S% -L08E0 fcb $09,$EC,$A4,$AD,$AB,$35,$20,$24 .l$-+5 $ -L08E8 fcb $F0,$39,$4F,$A6,$84,$35,$A0,$35 p9O&.5 5 -L08F0 fcb $20,$34,$20,$A6,$80,$6D,$A4,$2B 4 &.m$+ -L08F8 fcb $F6,$81,$22,$26,$0C,$A6,$80,$81 v."&.&.. -L0900 fcb $0D,$27,$0A,$81,$22,$26,$F6,$A6 .'.."&v& -L0908 fcb $80,$A1,$A0,$26,$E8,$35,$A0,$34 .! &h5 4 -L0910 fcb $10,$A6,$80,$81,$20,$27,$0E,$81 .&.. '.. -L0918 fcb $2C,$27,$0A,$30,$8D,$FB,$04,$A1 ,'.0...! -L0920 fcb $80,$22,$FC,$35,$90,$32,$62,$86 .".5.2b. -L0928 fcb $20,$A1,$80,$27,$FC,$30,$1F,$1C !.'.0.. -L0930 fcb $FE,$39,$34,$30,$31,$22,$AE,$E4 .9401".d -L0938 fcb $A6,$80,$17,$05,$C7,$A8,$A0,$48 &...G( H -L0940 fcb $26,$17,$24,$F4,$A6,$3F,$81,$FC &.$t&?.. -L0948 fcb $27,$0C,$81,$DE,$27,$08,$81,$C1 '..^'..A -L0950 fcb $25,$04,$8D,$BB,$25,$03,$4F,$35 %..;%.O5 -L0958 fcb $A6,$31,$3F,$A6,$A0,$2A,$FC,$10 &1?& *.. -L0960 fcb $AF,$62,$EC,$A1,$26,$D0,$53,$35 /bl!&PS5 -L0968 fcb $B0,$73,$74,$61,$72,$74,$75,$70 0startup -L0970 fcb $0D,$34,$70,$30,$8D,$F6,$96,$33 .4p0.v.3 -L0978 fcb $8D,$FF,$EE,$10,$8E,$00,$08,$CC ..n....L -L0980 fcb $11,$1F,$10,$3F,$03,$25,$03,$10 ...?.%.. -L0988 fcb $3F,$04,$35,$70,$5F,$39,$17,$FF ?.5p_9.. -L0990 fcb $1A,$25,$1F,$4F,$8D,$21,$8D,$1E .%.O.!.. -L0998 fcb $8D,$1C,$17,$01,$E5,$30,$01,$1F ....e0.. -L09A0 fcb $10,$93,$08,$DD,$06,$17,$09,$CE ...]...N -L09A8 fcb $32,$C9,$00,$FF,$10,$3F,$05,$16 2I...?.. -L09B0 fcb $F8,$65,$5F,$16,$F8,$74,$4C,$34 xe_.xtL4 -L09B8 fcb $02,$16,$01,$FB,$0F,$38,$86,$84 .....8.. -L09C0 fcb $10,$3F,$86,$39,$86,$81,$10,$3F .?.9...? -L09C8 fcb $86,$25,$08,$0F,$37,$0D,$42,$27 .%..7.B' -L09D0 fcb $02,$8D,$36,$39,$86,$01,$20,$01 ..69.. . -L09D8 fcb $4F,$97,$1C,$39,$4F,$20,$02,$86 O..9O .. -L09E0 fcb $01,$97,$1D,$39,$86,$01,$20,$01 ...9.. . -L09E8 fcb $4F,$97,$1E,$39,$4F,$20,$02,$86 O..9O .. -L09F0 fcb $01,$97,$1F,$39,$86,$01,$20,$01 ...9.. . -L09F8 fcb $4F,$97,$20,$39,$6D,$C9,$01,$F4 O. 9mI.t -L0A00 fcb $26,$07,$6D,$C9,$01,$F5,$26,$01 &.mI.u&. -L0A08 fcb $39,$34,$30,$20,$5A,$35,$20,$34 940 Z5 4 -L0A10 fcb $10,$30,$8D,$F6,$28,$8D,$02,$35 .0.v(..5 -L0A18 fcb $90,$34,$20,$31,$C9,$01,$F9,$CC .4 1I.yL -L0A20 fcb $0A,$16,$A7,$A0,$8D,$02,$20,$39 ..' .. 9 -L0A28 fcb $6F,$C9,$01,$F3,$A6,$80,$81,$22 oI.s&.." -L0A30 fcb $26,$10,$30,$01,$6D,$C9,$01,$F3 &.0.mI.s -L0A38 fcb $26,$22,$6C,$C9,$01,$F3,$30,$1F &"lI.s0. -L0A40 fcb $20,$EA,$81,$0D,$27,$16,$81,$20 j..'.. -L0A48 fcb $27,$04,$81,$3B,$26,$06,$6D,$C9 '..;&.mI -L0A50 fcb $01,$F3,$27,$08,$5D,$27,$D5,$5A .s'.]'UZ -L0A58 fcb $A7,$A0,$20,$D0,$6F,$A4,$30,$1F ' Po$0. -L0A60 fcb $39,$C1,$16,$27,$A8,$34,$10,$31 9A.'(4.1 -L0A68 fcb $C9,$01,$F9,$30,$C9,$02,$12,$34 I.y0I..4 -L0A70 fcb $10,$6F,$C9,$01,$F2,$6F,$C9,$01 .oI.roI. -L0A78 fcb $F1,$6F,$C9,$01,$F4,$6F,$C9,$01 qoI.toI. -L0A80 fcb $F5,$6F,$C9,$01,$F6,$6F,$C9,$00 uoI.voI. -L0A88 fcb $42,$A6,$A0,$10,$27,$00,$98,$81 B& .'... -L0A90 fcb $23,$26,$12,$6D,$C9,$01,$F1,$26 #&.mI.q& -L0A98 fcb $F0,$6C,$C9,$01,$F1,$EC,$C9,$01 plI.qlI. -L0AA0 fcb $EC,$ED,$81,$20,$E4,$81,$40,$27 lm. d.@' -L0AA8 fcb $04,$81,$E0,$26,$1C,$6D,$C9,$01 ..`&.mI. -L0AB0 fcb $F2,$26,$D6,$CC,$01,$0E,$10,$3F r&VL...? -L0AB8 fcb $8D,$25,$CE,$6C,$C9,$01,$F2,$A6 .%NlI.r& -L0AC0 fcb $80,$2A,$FC,$84,$7F,$A7,$1F,$20 .*..'. -L0AC8 fcb $C0,$81,$24,$26,$23,$0D,$42,$26 @.$&#.B& -L0AD0 fcb $B8,$0C,$42,$86,$01,$97,$3D,$17 8.B...=. -L0AD8 fcb $0D,$13,$5D,$26,$13,$34,$20,$10 ..]&.4 . -L0AE0 fcb $9E,$2A,$A6,$A0,$A7,$80,$81,$0D .*& '... -L0AE8 fcb $26,$F8,$30,$1F,$35,$20,$20,$99 &x0.5 . -L0AF0 fcb $81,$28,$26,$14,$6D,$C9,$01,$F4 .(&.mI.t -L0AF8 fcb $26,$8F,$6C,$C9,$01,$F4,$8D,$39 &.lI.t.9 -L0B00 fcb $34,$20,$31,$C9,$02,$E0,$20,$DA 4 1I.` Z -L0B08 fcb $81,$29,$26,$16,$6D,$C9,$01,$F5 .)&.mI.u -L0B10 fcb $10,$26,$FF,$75,$6C,$C9,$01,$F5 .&.ulI.u -L0B18 fcb $8D,$1F,$34,$20,$31,$C9,$02,$E9 ..4 1I.i -L0B20 fcb $20,$C0,$A7,$80,$16,$FF,$62,$A7 @'...b' -L0B28 fcb $84,$1F,$10,$A3,$E1,$ED,$C9,$01 ...#amI. -L0B30 fcb $F7,$35,$B0,$2F,$2F,$0D,$3A,$3A w50//.:: -L0B38 fcb $0D,$34,$30,$6D,$C9,$01,$F6,$26 .40mI.v& -L0B40 fcb $2F,$6C,$C9,$01,$F6,$30,$C9,$02 /lI.v0I. -L0B48 fcb $DA,$10,$3F,$15,$31,$C9,$02,$E0 Z.?.1I.` -L0B50 fcb $5F,$A6,$80,$8D,$1D,$34,$04,$EC _&...4.l -L0B58 fcb $C9,$01,$EF,$ED,$A1,$35,$04,$34 I.om!5.4 -L0B60 fcb $20,$31,$8D,$FF,$CE,$A6,$A5,$35 1..N&%5 -L0B68 fcb $20,$A7,$A0,$5C,$C1,$06,$26,$E1 ' \A.&a -L0B70 fcb $35,$B0,$34,$36,$31,$8D,$00,$03 50461... -L0B78 fcb $16,$0B,$BF,$EC,$64,$ED,$C9,$01 ..?ldmI. -L0B80 fcb $EF,$39,$86,$0D,$A1,$80,$26,$FC o9..!.&. -L0B88 fcb $A1,$82,$39,$34,$07,$86,$01,$20 !.94... -L0B90 fcb $04,$34,$07,$86,$02,$97,$1A,$4F .4.....O -L0B98 fcb $8D,$09,$4C,$91,$1A,$23,$F9,$66 ..L..#yf -L0BA0 fcb $E0,$35,$86,$34,$02,$0D,$19,$2B `5.4...+ -L0BA8 fcb $16,$26,$0C,$6D,$C6,$27,$13,$10 .&.mF'.. -L0BB0 fcb $3F,$8F,$A6,$C6,$10,$3F,$82,$E6 ?.&F.?.f -L0BB8 fcb $E4,$A6,$C5,$27,$05,$6F,$C5,$10 d&E'.oE. -L0BC0 fcb $3F,$8F,$35,$82,$57,$48,$41,$54 ?.5.WHAT -L0BC8 fcb $3F,$0D,$8D,$C5,$30,$8C,$F5,$17 ?..E0.u. -L0BD0 fcb $F6,$66,$5F,$43,$39,$0C,$19,$8D vf_C9... -L0BD8 fcb $B8,$86,$FF,$97,$19,$8D,$AC,$30 8.....,0 -L0BE0 fcb $C8,$6D,$17,$00,$F1,$10,$25,$F6 Hm..q.%v -L0BE8 fcb $34,$86,$02,$8D,$B6,$17,$01,$0A 4...6... -L0BF0 fcb $0F,$19,$16,$F4,$F8,$CC,$00,$01 ...txL.. -L0BF8 fcb $DA,$0F,$20,$19,$CC,$02,$0D,$E7 Z. .L..g -L0C00 fcb $1E,$20,$02,$86,$01,$C6,$02,$20 . ...F. -L0C08 fcb $0C,$6D,$C6,$26,$BD,$34,$06,$0D .mF&=4.. -L0C10 fcb $19,$2B,$1C,$20,$0A,$6D,$C6,$26 .+. .mF& -L0C18 fcb $B1,$34,$06,$C6,$0D,$E7,$1F,$10 14.F.g.. -L0C20 fcb $3F,$82,$10,$25,$00,$93,$E6,$E4 ?..%..fd -L0C28 fcb $A7,$C5,$A6,$E4,$10,$3F,$8F,$A6 'E&d.?.& -L0C30 fcb $61,$2B,$08,$E6,$E4,$17,$00,$C8 a+.fd..H -L0C38 fcb $4D,$2A,$07,$84,$0F,$10,$3F,$82 M*....?. -L0C40 fcb $20,$77,$C6,$0B,$85,$02,$26,$2E wF...&. -L0C48 fcb $34,$02,$EC,$84,$C4,$5F,$10,$83 4.l.D_.. -L0C50 fcb $2F,$57,$35,$02,$26,$19,$8A,$02 /W5.&... -L0C58 fcb $10,$3F,$84,$25,$5C,$34,$10,$30 .?.%\4.0 -L0C60 fcb $8D,$F3,$D9,$10,$8E,$00,$01,$4F .sY....O -L0C68 fcb $10,$3F,$8A,$35,$10,$20,$4A,$10 .?.5. J. -L0C70 fcb $3F,$84,$20,$45,$34,$06,$D7,$4E ?. E4.WN -L0C78 fcb $E6,$84,$C1,$2B,$26,$13,$30,$01 f.A+&.0. -L0C80 fcb $10,$3F,$84,$25,$27,$34,$50,$C6 .?.%'4PF -L0C88 fcb $02,$10,$3F,$8D,$10,$3F,$88,$20 ..?..?. -L0C90 fcb $12,$C1,$2D,$26,$1F,$30,$01,$10 .A-&.0.. -L0C98 fcb $3F,$84,$25,$10,$34,$50,$8E,$00 ?.%.4P.. -L0CA0 fcb $00,$1F,$13,$C6,$02,$10,$3F,$8E ...F..?. -L0CA8 fcb $35,$50,$20,$0D,$C1,$D8,$27,$04 5P .AX'. -L0CB0 fcb $1A,$01,$20,$05,$D6,$4E,$10,$3F .. .VN.? -L0CB8 fcb $83,$97,$12,$E7,$61,$86,$00,$97 ...ga... -L0CC0 fcb $0F,$35,$86,$CC,$00,$03,$16,$FF .5.L.... -L0CC8 fcb $40,$86,$0D,$A7,$1C,$8D,$07,$24 @..'...$ -L0CD0 fcb $29,$39,$86,$0D,$A7,$1E,$8D,$EB )9..'..k -L0CD8 fcb $25,$F7,$CC,$01,$80,$16,$FF,$29 %wL....) -L0CE0 fcb $86,$0D,$A7,$1D,$8D,$DD,$25,$E9 ..'..]%i -L0CE8 fcb $CC,$02,$80,$16,$FF,$1B,$86,$0D L....... -L0CF0 fcb $A7,$1D,$CC,$01,$02,$17,$FF,$11 '.L..... -L0CF8 fcb $25,$D7,$CC,$02,$81,$16,$FF,$09 %WL..... -L0D00 fcb $34,$16,$EC,$81,$10,$83,$2F,$30 4.l.../0 -L0D08 fcb $25,$20,$10,$83,$2F,$32,$22,$1A % ../2". -L0D10 fcb $34,$16,$17,$FB,$FA,$35,$16,$25 4...z5.% -L0D18 fcb $11,$C4,$03,$E1,$61,$26,$0D,$E6 .D.aa&.f -L0D20 fcb $C5,$CA,$80,$E7,$E4,$35,$06,$32 EJ.gd5.2 -L0D28 fcb $62,$39,$35,$96,$6D,$61,$26,$F1 b95.ma&q -L0D30 fcb $34,$10,$1F,$98,$30,$C9,$00,$B5 4...0I.5 -L0D38 fcb $C6,$2F,$E7,$80,$C6,$0E,$10,$3F F/g.F..? -L0D40 fcb $8D,$25,$07,$30,$1F,$86,$03,$10 .%.0.... -L0D48 fcb $3F,$84,$35,$10,$32,$66,$16,$FF ?.5.2f.. -L0D50 fcb $68,$54,$52,$55,$45,$20,$0D,$46 hTRUE .F -L0D58 fcb $41,$4C,$53,$45,$0D,$A6,$80,$81 ALSE.&.. -L0D60 fcb $5B,$26,$03,$17,$00,$A8,$81,$2D [&...(.- -L0D68 fcb $10,$26,$00,$CB,$E6,$80,$17,$00 .&.Kf... -L0D70 fcb $9D,$30,$1F,$1F,$98,$17,$01,$8C .0...... -L0D78 fcb $81,$59,$26,$3A,$34,$10,$30,$C9 .Y&:4.0I -L0D80 fcb $01,$24,$10,$8E,$00,$01,$86,$02 .$...... -L0D88 fcb $10,$3F,$89,$10,$25,$01,$80,$A6 .?..%..& -L0D90 fcb $84,$35,$10,$17,$01,$6E,$81,$59 .5...n.Y -L0D98 fcb $27,$04,$81,$4E,$26,$DE,$34,$02 '..N&^4. -L0DA0 fcb $30,$8D,$FF,$B2,$86,$02,$10,$8E 0..2.... -L0DA8 fcb $00,$01,$10,$3F,$8C,$35,$02,$5F ...?.5._ -L0DB0 fcb $81,$59,$27,$3D,$20,$31,$5F,$81 .Y'= 1_. -L0DB8 fcb $46,$27,$20,$81,$45,$26,$04,$CA F' .E&.J -L0DC0 fcb $04,$20,$18,$81,$52,$26,$04,$CA . ..R&.J -L0DC8 fcb $01,$20,$10,$81,$57,$26,$04,$CA . ..W&.J -L0DD0 fcb $02,$20,$08,$81,$44,$10,$26,$01 . ..D.&. -L0DD8 fcb $36,$CA,$80,$1F,$98,$10,$3F,$84 6J....?. -L0DE0 fcb $25,$05,$10,$3F,$8F,$20,$0A,$86 %..?. .. -L0DE8 fcb $02,$97,$43,$30,$8D,$FF,$68,$20 ..C0..h -L0DF0 fcb $06,$0F,$43,$30,$8D,$FF,$5A,$0D ..C0..Z. -L0DF8 fcb $1E,$27,$09,$10,$8E,$00,$06,$86 .'...... -L0E00 fcb $02,$10,$3F,$8C,$30,$C9,$01,$24 ..?.0I.$ -L0E08 fcb $86,$0D,$A7,$84,$5F,$39,$A6,$80 ..'._9&. -L0E10 fcb $81,$20,$27,$FA,$39,$81,$3D,$26 . 'z9.=& -L0E18 fcb $06,$96,$5F,$8A,$01,$20,$12,$81 .._.. .. -L0E20 fcb $3C,$26,$06,$96,$5F,$8A,$02,$20 <&.._.. -L0E28 fcb $08,$81,$3E,$26,$08,$96,$5F,$8A ..>&.._. -L0E30 fcb $04,$97,$5F,$4F,$39,$43,$39,$81 .._O9C9. -L0E38 fcb $2B,$26,$04,$0C,$15,$20,$02,$30 +&... .0 -L0E40 fcb $1F,$0F,$5F,$34,$40,$33,$C9,$01 .._4@3I. -L0E48 fcb $24,$C6,$B4,$17,$F5,$DF,$35,$40 $F4.u_5@ -L0E50 fcb $31,$C9,$01,$24,$C6,$51,$A6,$80 1I.$FQ&. -L0E58 fcb $17,$00,$A9,$A7,$A0,$81,$0D,$10 ..)' ... -L0E60 fcb $27,$00,$AC,$8D,$B0,$24,$06,$5A '.,.0$.Z -L0E68 fcb $26,$EC,$16,$00,$A2,$50,$CB,$51 &l.."PKQ -L0E70 fcb $D7,$16,$4F,$A7,$3F,$A6,$84,$8D W.O'?&.. -L0E78 fcb $9C,$25,$02,$30,$01,$31,$C9,$01 .%.0.1I. -L0E80 fcb $75,$C6,$51,$A6,$80,$8D,$7D,$A7 uFQ&..}' -L0E88 fcb $A0,$81,$0D,$27,$05,$5A,$26,$F3 ..'.Z&s -L0E90 fcb $20,$7D,$50,$CB,$51,$D7,$17,$4F }PKQW.O -L0E98 fcb $A7,$3F,$0D,$15,$27,$3A,$30,$C9 '?..':0I -L0EA0 fcb $16,$6D,$CC,$30,$B4,$A7,$80,$5A .mL04'.Z -L0EA8 fcb $26,$FB,$30,$C9,$01,$24,$D6,$16 &.0I.$V. -L0EB0 fcb $30,$85,$31,$C9,$16,$BD,$8D,$18 0.1I.=.. -L0EB8 fcb $30,$C9,$01,$75,$D6,$17,$30,$85 0I.uV.0. -L0EC0 fcb $31,$C9,$17,$0E,$8D,$0A,$30,$C9 1I....0I -L0EC8 fcb $16,$6D,$31,$C9,$16,$BE,$20,$10 .m1I.> . -L0ED0 fcb $A6,$82,$A7,$A2,$5A,$26,$F9,$39 &.'"Z&y9 -L0ED8 fcb $30,$C9,$01,$24,$31,$C9,$01,$75 0I.$1I.u -L0EE0 fcb $C6,$50,$A6,$80,$A1,$A0,$25,$0B FP&.! %. -L0EE8 fcb $22,$0F,$5A,$26,$F5,$96,$5F,$85 ".Z&u._. -L0EF0 fcb $01,$20,$0A,$96,$5F,$85,$02,$20 . .._.. -L0EF8 fcb $04,$96,$5F,$85,$04,$10,$26,$FE .._...&. -L0F00 fcb $F0,$16,$FE,$E3,$81,$61,$25,$06 p..c.a%. -L0F08 fcb $81,$7A,$22,$02,$80,$20,$39,$53 .z".. 9S -L0F10 fcb $C6,$01,$16,$F2,$99,$81,$03,$27 F..r...' -L0F18 fcb $1E,$81,$02,$26,$06,$0A,$44,$2D ...&..D- -L0F20 fcb $16,$20,$18,$81,$01,$26,$0C,$96 . ...&.. -L0F28 fcb $43,$81,$02,$26,$0E,$0D,$44,$27 C..&..D' -L0F30 fcb $06,$20,$08,$0C,$44,$20,$04,$0F . ..D .. -L0F38 fcb $43,$0F,$44,$5F,$39,$49,$C6,$00 C.D_9IF. -L0F40 fcb $00,$00,$02,$00,$45,$4C,$53,$C5 ....ELSE -L0F48 fcb $00,$04,$01,$45,$4E,$44,$49,$C6 ...ENDIF -L0F50 fcb $05,$02,$46,$C9,$00,$00,$00,$02 ..FI.... -L0F58 fcb $02,$43,$4C,$52,$49,$C6,$05,$03 .CLRIF.. -L0F60 fcb $FF,$31,$8C,$D9,$E6,$25,$10,$3F .1.Yf%.? -L0F68 fcb $11,$25,$0C,$A6,$26,$E6,$85,$C1 .%.&&f.A -L0F70 fcb $0D,$27,$1D,$C1,$20,$27,$19,$31 .'.A '.1 -L0F78 fcb $27,$A6,$A4,$81,$FF,$27,$11,$4C '&$..'.L -L0F80 fcb $20,$E2,$86,$01,$97,$43,$16,$FE b...C.. -L0F88 fcb $7B,$17,$F9,$83,$26,$03,$0F,$46 {.y.&..F -L0F90 fcb $39,$31,$8D,$F4,$32,$C6,$04,$10 91.t2F.. -L0F98 fcb $3F,$11,$10,$25,$FC,$2C,$30,$04 ?..%.,0. -L0FA0 fcb $17,$F9,$84,$31,$C9,$0C,$4C,$A6 .y.1I.L& -L0FA8 fcb $84,$81,$2B,$26,$04,$A7,$A0,$30 ..+&.' 0 -L0FB0 fcb $01,$8D,$4E,$0C,$46,$A6,$80,$31 ..N.F&.1 -L0FB8 fcb $8D,$F4,$68,$A1,$A0,$22,$FC,$25 .th! ".% -L0FC0 fcb $F4,$30,$1F,$9F,$58,$39,$A6,$84 t0..X9&. -L0FC8 fcb $81,$2B,$26,$04,$30,$01,$20,$21 .+&.0. ! -L0FD0 fcb $0D,$6B,$27,$0C,$10,$9E,$67,$EC .k'...gl -L0FD8 fcb $29,$31,$AB,$10,$9F,$65,$20,$11 )1+..e . -L0FE0 fcb $34,$50,$4F,$8E,$00,$00,$1F,$13 4PO..... -L0FE8 fcb $10,$3F,$88,$35,$50,$10,$25,$F1 .?.5P.%q -L0FF0 fcb $BD,$17,$F9,$33,$31,$C9,$0B,$FC =.y31I.. -L0FF8 fcb $8D,$07,$86,$0D,$A7,$84,$0C,$45 ....'..E -L1000 fcb $39,$34,$30,$C6,$4F,$5A,$27,$10 940FOZ'. -L1008 fcb $A6,$80,$A7,$A0,$81,$41,$24,$F5 &.' .A$u -L1010 fcb $81,$30,$25,$04,$81,$39,$23,$ED .0%..9#m -L1018 fcb $86,$0D,$A7,$3F,$5F,$35,$B0,$C6 ..'?_50F -L1020 fcb $0D,$E7,$1F,$0D,$6B,$26,$26,$0D .g..k&&. -L1028 fcb $6C,$26,$22,$86,$40,$34,$70,$10 l&".@4p. -L1030 fcb $3F,$00,$25,$17,$DF,$67,$10,$9F ?.%._g.. -L1038 fcb $65,$EC,$42,$D3,$67,$83,$00,$03 elBSg... -L1040 fcb $DD,$69,$0C,$6B,$35,$70,$30,$1F ]i.k5p0. -L1048 fcb $16,$F8,$C4,$35,$70,$16,$FB,$7A .xD5p..z -L1050 fcb $31,$C9,$05,$A8,$A6,$80,$81,$3F 1I.(&..? -L1058 fcb $27,$65,$81,$3D,$27,$2E,$81,$20 'e.='.. -L1060 fcb $27,$19,$81,$3B,$27,$15,$81,$39 '..;'..9 -L1068 fcb $22,$11,$81,$30,$25,$0D,$80,$30 "..0%..0 -L1070 fcb $C6,$51,$3D,$31,$AB,$A6,$80,$81 FQ=1+&.. -L1078 fcb $3D,$27,$11,$30,$1F,$34,$10,$1F ='.0.4.. -L1080 fcb $21,$10,$8E,$00,$51,$86,$02,$10 !...Q... -L1088 fcb $3F,$8B,$35,$90,$C6,$50,$17,$F9 ?.5.FP.y -L1090 fcb $97,$86,$0D,$A7,$A4,$39,$0A,$55 ...'$9.U -L1098 fcb $73,$65,$72,$20,$56,$61,$72,$69 ser Vari -L10A0 fcb $61,$62,$6C,$65,$73,$20,$3A,$0D ables :. -L10A8 fcb $0A,$53,$68,$65,$6C,$6C,$20,$53 .Shell S -L10B0 fcb $75,$62,$20,$56,$61,$72,$69,$61 ub Varia -L10B8 fcb $62,$6C,$65,$73,$20,$3A,$0D,$34 bles :.4 -L10C0 fcb $10,$5F,$30,$8D,$FF,$D0,$8D,$0D ._0..P.. -L10C8 fcb $31,$C9,$08,$D2,$5F,$30,$8D,$FF 1I.R_0.. -L10D0 fcb $D7,$8D,$02,$35,$90,$34,$24,$17 W..5.4$. -L10D8 fcb $F1,$5E,$35,$24,$34,$24,$86,$51 q^5$4$.Q -L10E0 fcb $3D,$31,$AB,$30,$C9,$01,$24,$CC =1+0I.$L -L10E8 fcb $56,$41,$ED,$81,$CC,$52,$2E,$ED VAm.LR.m -L10F0 fcb $81,$A6,$E4,$8B,$30,$C6,$3D,$ED .&d.0F=m -L10F8 fcb $81,$A6,$A0,$A7,$80,$81,$0D,$26 .& '...& -L1100 fcb $F8,$30,$C9,$01,$24,$10,$8E,$00 x0I.$... -L1108 fcb $57,$86,$01,$10,$3F,$8C,$35,$24 W...?.5$ -L1110 fcb $25,$06,$5C,$C1,$0A,$25,$C5,$39 %.\A.%E9 -L1118 fcb $35,$20,$35,$90,$8D,$1C,$10,$25 5 5....% -L1120 fcb $F0,$8C,$C3,$00,$01,$20,$09,$8D p.C.. .. -L1128 fcb $11,$10,$25,$F0,$81,$83,$00,$01 ..%p.... -L1130 fcb $8D,$6B,$86,$0D,$A7,$25,$9E,$48 .k..'%.H -L1138 fcb $5F,$39,$0C,$14,$31,$C9,$05,$A8 _9..1I.( -L1140 fcb $A6,$80,$9F,$48,$81,$30,$25,$0F &..H.0%. -L1148 fcb $81,$39,$22,$0B,$80,$30,$C6,$51 .9"..0FQ -L1150 fcb $3D,$31,$AB,$1F,$21,$20,$05,$32 =1+.! .2 -L1158 fcb $62,$16,$FA,$6E,$34,$20,$32,$7B b.zn4 2{ -L1160 fcb $1F,$42,$6F,$23,$6F,$24,$6F,$22 .Bo#o$o" -L1168 fcb $A6,$80,$80,$30,$81,$09,$22,$1B &..0..". -L1170 fcb $34,$02,$86,$0A,$E6,$23,$3D,$ED 4...f#=m -L1178 fcb $A4,$A6,$24,$C6,$0A,$3D,$E3,$21 $&$F.=c! -L1180 fcb $ED,$21,$4F,$35,$04,$E3,$21,$ED m!O5.c!m -L1188 fcb $23,$20,$DB,$EC,$23,$32,$65,$35 # [l#2e5 -L1190 fcb $A0,$27,$10,$03,$E8,$00,$64,$00 '..h.d. -L1198 fcb $0A,$00,$01,$00,$00,$34,$36,$34 .....464 -L11A0 fcb $04,$30,$8D,$FF,$EC,$34,$06,$C6 .0..l4.F -L11A8 fcb $2F,$E7,$62,$35,$06,$6C,$E4,$A3 /gb5.ld# -L11B0 fcb $84,$24,$FA,$E3,$81,$34,$06,$E6 .$zc.4.f -L11B8 fcb $62,$E7,$A0,$A6,$01,$35,$06,$26 bg &.5.& -L11C0 fcb $E4,$35,$04,$35,$B6,$10,$8E,$01 d5.56... -L11C8 fcb $8A,$86,$02,$10,$3F,$8C,$10,$25 ....?..% -L11D0 fcb $EF,$DC,$1F,$20,$30,$8B,$30,$1F o\. 0.0. -L11D8 fcb $34,$10,$CC,$02,$1A,$8E,$00,$0A 4.L..... -L11E0 fcb $10,$3F,$8E,$10,$25,$EF,$C7,$C6 .?..%oGF -L11E8 fcb $8A,$10,$3F,$8E,$10,$25,$EF,$BE ..?..%o> -L11F0 fcb $8E,$00,$00,$10,$3F,$0A,$C6,$1B ....?.F. -L11F8 fcb $10,$3F,$8E,$5F,$35,$90,$34,$10 .?._5.4. -L1200 fcb $A6,$84,$81,$3F,$27,$34,$34,$40 &..?'44@ -L1208 fcb $33,$C9,$0C,$DD,$A6,$80,$81,$20 3I.]&.. -L1210 fcb $27,$FA,$A7,$C0,$31,$8D,$F2,$0B 'z'@1.r. -L1218 fcb $A1,$A0,$22,$FC,$27,$0E,$A6,$80 ! ".'.&. -L1220 fcb $A7,$C0,$81,$20,$26,$EE,$86,$0D '@. &n.. -L1228 fcb $A7,$5F,$20,$E0,$30,$1F,$AF,$62 '_ `0./b -L1230 fcb $86,$0D,$A7,$5F,$A7,$C4,$35,$40 ..'_'D5@ -L1238 fcb $35,$90,$30,$C9,$0C,$DD,$10,$8E 5.0I.].. -L1240 fcb $01,$90,$86,$01,$10,$3F,$8C,$10 .....?.. -L1248 fcb $25,$EF,$63,$1F,$20,$30,$8B,$A6 %oc. 0.& -L1250 fcb $84,$81,$0D,$26,$E9,$35,$10,$30 ...&i5.0 -L1258 fcb $01,$39,$C6,$0D,$E7,$1F,$D6,$22 .9F.g.V" -L1260 fcb $10,$26,$F9,$66,$17,$05,$04,$D7 .&yf...W -L1268 fcb $22,$16,$F6,$A3,$C6,$0D,$E7,$1F ".v#F.g. -L1270 fcb $D6,$03,$10,$26,$F9,$54,$17,$04 V..&yT.. -L1278 fcb $F2,$88,$4B,$84,$DF,$26,$0A,$30 r.K._&.0 -L1280 fcb $01,$86,$04,$3D,$4D,$10,$26,$F9 ...=M.&y -L1288 fcb $41,$D7,$03,$16,$F6,$81,$30,$1F AW..v.0. -L1290 fcb $17,$02,$36,$20,$03,$17,$02,$2D ..6 ...- -L1298 fcb $25,$15,$17,$F8,$F4,$0D,$5D,$26 %..xt.]& -L12A0 fcb $02,$8D,$24,$25,$0A,$17,$F6,$67 ..$%..vg -L12A8 fcb $81,$0D,$26,$02,$32,$64,$5F,$34 ..&.2d_4 -L12B0 fcb $01,$0F,$5D,$35,$01,$16,$F8,$D9 ..]5..xY -L12B8 fcb $17,$02,$0A,$25,$F2,$8D,$F0,$C6 ...%r.pF -L12C0 fcb $26,$17,$04,$70,$20,$DD,$4F,$34 &..p ]O4 -L12C8 fcb $02,$10,$3F,$04,$0D,$0E,$27,$11 ..?...'. -L12D0 fcb $D6,$0E,$C1,$02,$26,$25,$A6,$E4 V.A.&%&d -L12D8 fcb $27,$21,$10,$3F,$08,$6F,$E4,$20 '!.?.od -L12E0 fcb $E8,$10,$25,$00,$8F,$A1,$E4,$27 h.%..!d' -L12E8 fcb $12,$6D,$E4,$27,$03,$5D,$27,$D9 .md'.]'Y -L12F0 fcb $34,$04,$8D,$BB,$C6,$2D,$17,$04 4..;F-.. -L12F8 fcb $3B,$35,$04,$5D,$27,$76,$C1,$03 ;5.]'vA. -L1300 fcb $27,$04,$C1,$02,$26,$6D,$34,$34 '.A.&m44 -L1308 fcb $CC,$00,$01,$10,$3F,$8D,$25,$61 L...?.%a -L1310 fcb $96,$18,$27,$5D,$4F,$32,$E8,$E0 ..']O2h` -L1318 fcb $30,$E4,$5F,$10,$3F,$8D,$A6,$84 0d_.?.&. -L1320 fcb $27,$05,$32,$E8,$20,$20,$4A,$6F '.2h Jo -L1328 fcb $04,$10,$3F,$8E,$CC,$00,$1B,$10 ..?.L... -L1330 fcb $3F,$8E,$30,$E2,$10,$8E,$00,$01 ?.0b.... -L1338 fcb $10,$3F,$89,$32,$61,$CC,$00,$1A .?.2aL.. -L1340 fcb $8E,$00,$0B,$10,$3F,$8E,$30,$E4 ....?.0d -L1348 fcb $6C,$04,$4F,$5F,$10,$3F,$8E,$32 l.O_.?.2 -L1350 fcb $E8,$20,$E6,$C9,$18,$0D,$C1,$01 h fI..A. -L1358 fcb $22,$05,$E6,$C9,$18,$0C,$5C,$5A ".fI..\Z -L1360 fcb $17,$06,$B3,$A6,$A4,$A7,$84,$CC ..3&$'.L -L1368 fcb $00,$A0,$10,$8E,$80,$01,$10,$3F . .....? -L1370 fcb $8E,$35,$34,$43,$35,$82,$86,$11 .54C5... -L1378 fcb $D6,$03,$C1,$11,$24,$04,$C6,$1F V.A.$.F. -L1380 fcb $D7,$03,$1C,$FE,$9E,$04,$10,$9E W....... -L1388 fcb $06,$DE,$08,$39,$A6,$80,$A7,$A0 .^.9&.' -L1390 fcb $81,$0D,$26,$F8,$39,$86,$04,$10 ..&x9... -L1398 fcb $3F,$84,$24,$32,$0C,$0F,$30,$C9 ?.$2..0I -L13A0 fcb $0C,$DD,$5F,$A6,$84,$81,$0D,$10 .]_&.... -L13A8 fcb $27,$02,$23,$31,$C9,$01,$24,$8D '.#1I.$. -L13B0 fcb $DB,$34,$10,$86,$2F,$A7,$3F,$9E [4../'?. -L13B8 fcb $04,$8D,$D1,$30,$C9,$01,$24,$86 ..Q0I.$. -L13C0 fcb $01,$10,$3F,$84,$35,$10,$25,$DA ..?.5.%Z -L13C8 fcb $30,$C9,$01,$24,$9F,$04,$30,$C9 0I.$..0I -L13D0 fcb $00,$D6,$10,$8E,$00,$4D,$10,$3F .V...M.? -L13D8 fcb $89,$24,$04,$C1,$D3,$26,$5B,$0D .$.AS&[. -L13E0 fcb $0F,$26,$04,$C6,$04,$D7,$0F,$34 .&.F.W.4 -L13E8 fcb $02,$EC,$84,$10,$83,$87,$CD,$35 .l....M5 -L13F0 fcb $02,$27,$0F,$10,$3F,$8F,$5F,$0A .'..?._. -L13F8 fcb $0F,$10,$27,$01,$D1,$0C,$0F,$16 ..'.Q... -L1400 fcb $01,$CC,$0F,$0F,$10,$AE,$04,$30 .L.....0 -L1408 fcb $C9,$00,$E3,$10,$8C,$00,$0D,$27 I.c....' -L1410 fcb $1B,$34,$40,$1F,$23,$8E,$00,$00 .4@.#... -L1418 fcb $10,$3F,$88,$35,$40,$25,$1B,$10 .?.5@%.. -L1420 fcb $8E,$00,$40,$30,$C9,$00,$E3,$10 ..@0I.c. -L1428 fcb $3F,$89,$25,$0E,$34,$02,$10,$3F ?.%.4..? -L1430 fcb $10,$35,$02,$25,$05,$C1,$40,$22 .5.%.A@" -L1438 fcb $55,$5F,$34,$05,$10,$3F,$8F,$35 U_4..?.5 -L1440 fcb $05,$10,$25,$02,$68,$30,$C9,$00 ..%.h0I. -L1448 fcb $D6,$A6,$06,$10,$AE,$0B,$81,$40 V&.....@ -L1450 fcb $26,$21,$8D,$07,$10,$25,$02,$55 &!...%.U -L1458 fcb $16,$00,$C0,$30,$C9,$00,$E3,$10 ..@0I.c. -L1460 fcb $3F,$21,$24,$08,$9E,$04,$10,$3F ?!$....? -L1468 fcb $22,$24,$01,$39,$30,$C9,$00,$E3 "$.90I.c -L1470 fcb $9F,$04,$39,$81,$51,$26,$08,$8D ..9.Q&.. -L1478 fcb $E2,$10,$25,$02,$30,$20,$14,$81 b.%.0 .. -L1480 fcb $11,$10,$26,$00,$BE,$30,$C9,$00 ..&.>0I. -L1488 fcb $E3,$9F,$10,$16,$01,$B3,$17,$F4 c....3.t -L1490 fcb $42,$20,$A7,$4F,$9E,$04,$34,$40 B 'O..4@ -L1498 fcb $10,$3F,$00,$35,$40,$10,$25,$02 .?.5@.%. -L14A0 fcb $0C,$9E,$04,$10,$3F,$1D,$10,$25 ....?..% -L14A8 fcb $02,$03,$9E,$08,$DC,$06,$33,$C9 ....\.3I -L14B0 fcb $08,$D2,$AD,$A4,$34,$07,$4F,$5F .R-$4.O_ -L14B8 fcb $DD,$10,$9E,$04,$10,$3F,$1D,$DD ]....?.] -L14C0 fcb $04,$0C,$5D,$35,$F7,$86,$0D,$A7 ..]5w..' -L14C8 fcb $1F,$0F,$60,$34,$70,$9E,$04,$EC ..`4p..l -L14D0 fcb $84,$C4,$5F,$10,$83,$2F,$57,$26 .D_../W& -L14D8 fcb $06,$53,$C6,$CB,$16,$01,$CE,$4F .SFK..NO -L14E0 fcb $10,$3F,$21,$10,$25,$FE,$AE,$81 .?!.%... -L14E8 fcb $51,$27,$A8,$9E,$04,$10,$3F,$1D Q'(...?. -L14F0 fcb $34,$20,$9E,$04,$31,$8D,$EB,$15 4 ..1.k. -L14F8 fcb $C6,$05,$10,$3F,$11,$35,$20,$25 F..?.5 % -L1500 fcb $0E,$E6,$05,$C1,$0D,$10,$27,$00 .f.A..'. -L1508 fcb $EE,$C1,$20,$10,$27,$00,$E8,$81 nA .'.h. -L1510 fcb $11,$10,$27,$01,$2C,$81,$40,$26 ..'.,.@& -L1518 fcb $2A,$0C,$60,$0C,$60,$9E,$04,$10 *.`.`... -L1520 fcb $3F,$10,$10,$9E,$63,$31,$2A,$10 ?...c1*. -L1528 fcb $9F,$08,$10,$9F,$61,$8E,$00,$3C ....a..< -L1530 fcb $9F,$06,$9E,$04,$A6,$80,$A7,$A0 ....&.' -L1538 fcb $5A,$26,$F9,$86,$0D,$A7,$A0,$5F Z&y..' _ -L1540 fcb $16,$00,$8B,$10,$9F,$0A,$30,$8D ......0. -L1548 fcb $EA,$C9,$6D,$84,$10,$27,$01,$5B jIm..'.[ -L1550 fcb $A1,$80,$27,$06,$6D,$80,$2A,$FC !.'.m.*. -L1558 fcb $20,$F0,$DC,$08,$93,$04,$D3,$06 p\...S. -L1560 fcb $DD,$06,$DC,$04,$DD,$08,$34,$30 ].\.].40 -L1568 fcb $30,$8D,$EA,$B5,$AC,$E4,$26,$40 0.j5,d&@ -L1570 fcb $9E,$08,$31,$C9,$04,$18,$8D,$3D ..1I...= -L1578 fcb $27,$27,$EC,$84,$10,$83,$28,$22 ''l...(" -L1580 fcb $27,$2E,$86,$20,$A7,$A0,$CC,$28 '.. ' L( -L1588 fcb $22,$ED,$A1,$8D,$28,$27,$0B,$CC "m!.('.L -L1590 fcb $22,$2C,$ED,$A1,$86,$22,$A7,$A0 ",m!."' -L1598 fcb $20,$F1,$CC,$22,$29,$ED,$A1,$86 qL")m!. -L15A0 fcb $0D,$A7,$A0,$1F,$20,$31,$C9,$04 .' . 1I. -L15A8 fcb $18,$10,$9F,$08,$93,$08,$DD,$06 ......]. -L15B0 fcb $35,$30,$16,$00,$8A,$A6,$80,$81 50...&.. -L15B8 fcb $20,$27,$08,$81,$0D,$27,$0A,$A7 '...'.' -L15C0 fcb $A0,$20,$F2,$A6,$80,$81,$20,$27 r&.. ' -L15C8 fcb $FA,$30,$1F,$81,$0D,$39,$C1,$CB z0...9AK -L15D0 fcb $10,$27,$00,$D9,$9E,$06,$30,$05 .'.Y..0. -L15D8 fcb $9F,$06,$0D,$60,$26,$1E,$9E,$04 ...`&... -L15E0 fcb $EE,$64,$17,$F6,$10,$10,$25,$00 nd.v..%. -L15E8 fcb $C4,$20,$11,$2D,$50,$20,$58,$20 D .-P X -L15F0 fcb $50,$41,$54,$48,$3D,$20,$0D,$30 PATH= .0 -L15F8 fcb $8C,$F6,$20,$03,$30,$8C,$EC,$31 .v .0.l1 -L1600 fcb $C9,$16,$6D,$17,$FD,$86,$31,$3F I.m...1? -L1608 fcb $30,$C9,$0C,$DD,$A6,$84,$81,$0D 0I.]&... -L1610 fcb $27,$09,$17,$FD,$77,$86,$20,$A7 '...w. ' -L1618 fcb $3F,$20,$F1,$86,$3B,$A7,$3F,$0D ? q.;'?. -L1620 fcb $60,$27,$05,$CC,$4D,$3D,$ED,$A1 `'.LM=m! -L1628 fcb $9E,$08,$17,$FD,$5F,$30,$C9,$16 ...._0I. -L1630 fcb $6D,$9F,$08,$1F,$20,$34,$10,$A3 m... 4.# -L1638 fcb $E1,$DD,$06,$30,$8D,$E9,$CE,$9F a].0.iN. -L1640 fcb $04,$9E,$04,$86,$11,$10,$3F,$21 ......?! -L1648 fcb $24,$05,$10,$3F,$22,$25,$5E,$0D $..?"%^. -L1650 fcb $03,$26,$09,$1F,$20,$D3,$0A,$C3 .&.. S.C -L1658 fcb $00,$FF,$97,$03,$6F,$E2,$D6,$22 ....obV" -L1660 fcb $27,$13,$30,$C9,$16,$6D,$10,$3F '.0I.m.? -L1668 fcb $0C,$10,$3F,$18,$E6,$0A,$E7,$E4 ..?.f.gd -L1670 fcb $D6,$22,$10,$3F,$0D,$17,$FC,$FE V".?.... -L1678 fcb $10,$3F,$03,$34,$07,$E6,$63,$27 .?.4.fc' -L1680 fcb $06,$10,$3F,$0C,$10,$3F,$0D,$86 ..?..?.. -L1688 fcb $11,$9E,$10,$26,$02,$9E,$04,$10 ...&.... -L1690 fcb $3F,$1D,$4F,$5F,$DD,$10,$DD,$04 ?.O_].]. -L1698 fcb $96,$60,$81,$01,$26,$07,$86,$40 .`..&..@ -L16A0 fcb $9E,$61,$10,$3F,$1D,$35,$07,$32 .a.?.5.2 -L16A8 fcb $61,$35,$F0,$C6,$EA,$43,$35,$F0 a5pFjC5p -L16B0 fcb $2F,$70,$69,$70,$65,$0D,$34,$10 /pipe.4. -L16B8 fcb $30,$8C,$F5,$CC,$01,$03,$17,$F5 0.uL...u -L16C0 fcb $48,$35,$10,$25,$5A,$17,$FD,$FD H5.%Z... -L16C8 fcb $25,$55,$A6,$C4,$26,$07,$10,$3F %U&D&..? -L16D0 fcb $82,$25,$4C,$A7,$C4,$4F,$10,$3F .%L'DO.? -L16D8 fcb $8F,$86,$01,$10,$3F,$82,$86,$01 ....?... -L16E0 fcb $17,$F4,$C0,$86,$02,$16,$F4,$BB .t@...t; -L16E8 fcb $2B,$2F,$64,$64,$2F,$6C,$6F,$67 +/dd/log -L16F0 fcb $2F,$75,$78,$78,$78,$0D,$30,$8C /uxxx.0. -L16F8 fcb $EF,$31,$C9,$0C,$BD,$17,$FC,$8C o1I.=... -L1700 fcb $31,$3C,$96,$5B,$34,$36,$31,$8C 1<.[461. -L1708 fcb $0B,$20,$2F,$96,$47,$34,$36,$31 . /.G461 -L1710 fcb $8C,$02,$20,$26,$10,$AE,$6B,$EC .. &..kl -L1718 fcb $63,$ED,$A1,$A6,$65,$A7,$A4,$39 cm!&e'$9 -L1720 fcb $EC,$64,$ED,$C9,$01,$EC,$39,$34 ldmI.l94 -L1728 fcb $36,$10,$3F,$0C,$10,$9F,$5A,$31 6.?...Z1 -L1730 fcb $8C,$EE,$20,$06,$34,$36,$31,$8D .n .461. -L1738 fcb $EA,$FE,$34,$34,$30,$61,$C6,$2F j.440aF/ -L1740 fcb $5C,$80,$64,$24,$FB,$E7,$80,$C6 \.d$.g.F -L1748 fcb $3A,$5A,$8B,$0A,$24,$FB,$E7,$80 :Z..$.g. -L1750 fcb $8B,$30,$C6,$0D,$ED,$84,$30,$E4 .0F.m.0d -L1758 fcb $AD,$A4,$32,$65,$35,$B6,$8D,$0B -$2e56.. -L1760 fcb $C1,$02,$23,$26,$1F,$98,$5F,$10 A.#&.._. -L1768 fcb $3F,$08,$39,$5F,$A6,$80,$80,$30 ?.9_&..0 -L1770 fcb $81,$09,$22,$09,$34,$02,$86,$0A ..".4... -L1778 fcb $3D,$EB,$E0,$24,$EF,$A6,$82,$25 =k`$o&.% -L1780 fcb $07,$0D,$14,$26,$9A,$5D,$26,$97 ...&.]&. -L1788 fcb $32,$62,$16,$F4,$3D,$8D,$DC,$D7 2b.t=.\W -L1790 fcb $21,$17,$F1,$7B,$8D,$D5,$96,$21 !.q{.U.! -L1798 fcb $10,$3F,$0D,$39,$70,$77,$64,$3A .?.9pwd: -L17A0 fcb $20,$62,$61,$64,$20,$6E,$61,$6D bad nam -L17A8 fcb $65,$20,$69,$6E,$20,$70,$61,$74 e in pat -L17B0 fcb $68,$0D,$2E,$2E,$2E,$2E,$2E,$2E h....... -L17B8 fcb $2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E ........ -L17C0 fcb $2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E ........ -L17C8 fcb $2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E ........ -L17D0 fcb $2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E ........ -L17D8 fcb $2E,$2E,$0D,$70,$77,$64,$3A,$20 ...pwd: -L17E0 fcb $72,$65,$61,$64,$20,$65,$72,$72 read err -L17E8 fcb $6F,$72,$0D,$0F,$3D,$34,$30,$31 or..=401 -L17F0 fcb $C9,$02,$F2,$86,$81,$0D,$37,$27 I.r...7' -L17F8 fcb $16,$9E,$39,$20,$79,$0F,$3D,$34 ..9 y.=4 -L1800 fcb $30,$31,$C9,$03,$75,$86,$85,$0D 01I.u... -L1808 fcb $38,$27,$04,$9E,$3B,$20,$67,$97 8'..; g. -L1810 fcb $29,$10,$9F,$3E,$30,$A9,$00,$80 )..>0).. -L1818 fcb $86,$0D,$A7,$84,$9F,$2A,$30,$8C ..'..*0. -L1820 fcb $B8,$9F,$40,$8D,$5B,$17,$00,$93 8.@.[... -L1828 fcb $DC,$2C,$DD,$32,$96,$2E,$97,$34 \,]2...4 -L1830 fcb $8D,$75,$27,$1E,$96,$12,$10,$3F .u'....? -L1838 fcb $8F,$10,$25,$00,$CE,$9E,$40,$30 ..%.N.@0 -L1840 fcb $1F,$9F,$40,$8D,$3B,$8D,$74,$8D ..@.;.t. -L1848 fcb $4D,$30,$C9,$03,$F8,$17,$00,$88 M0I.x... -L1850 fcb $20,$D6,$96,$12,$C6,$0E,$30,$C9 V..F.0I -L1858 fcb $00,$B5,$10,$3F,$8D,$8D,$79,$96 .5.?..y. -L1860 fcb $12,$10,$3F,$8F,$9E,$2A,$96,$29 ..?..*.) -L1868 fcb $85,$04,$26,$06,$0C,$37,$9F,$39 ..&..7.9 -L1870 fcb $20,$04,$0C,$38,$9F,$3B,$10,$8E ..8.;.. -L1878 fcb $00,$83,$86,$01,$5F,$16,$00,$9E ...._... -L1880 fcb $96,$29,$10,$3F,$84,$97,$12,$39 .).?...9 -L1888 fcb $96,$12,$30,$C9,$03,$F8,$10,$8E ..0I.x.. -L1890 fcb $00,$20,$10,$3F,$89,$39,$8D,$F0 . .?.9.p -L1898 fcb $25,$7B,$30,$C9,$04,$15,$31,$C9 %{0I..1I -L18A0 fcb $00,$32,$8D,$0B,$26,$F0,$39,$30 .2..&p90 -L18A8 fcb $C9,$00,$2C,$31,$C9,$00,$2F,$EC I.,1I./l -L18B0 fcb $81,$10,$A3,$A1,$26,$04,$A6,$84 ..#!&.&. -L18B8 fcb $A1,$A4,$39,$8D,$CB,$EC,$C9,$04 !$9.KlI. -L18C0 fcb $15,$DD,$2F,$A6,$C9,$04,$17,$97 .]/&I... -L18C8 fcb $31,$8D,$BD,$EC,$C9,$04,$15,$DD 1.=lI..] -L18D0 fcb $2C,$A6,$C9,$04,$17,$97,$2E,$39 ,&I....9 -L18D8 fcb $10,$3F,$10,$25,$32,$9E,$2A,$34 .?.%2.*4 -L18E0 fcb $04,$5C,$4F,$DD,$32,$1F,$10,$93 .\O]2... -L18E8 fcb $32,$10,$93,$3E,$23,$12,$35,$04 2..>#.5. -L18F0 fcb $A6,$A2,$84,$7F,$A7,$82,$5A,$26 &".'.Z& -L18F8 fcb $F7,$86,$2F,$A7,$82,$9F,$2A,$39 w./'..*9 -L1900 fcb $86,$2A,$A7,$82,$9F,$2A,$32,$63 .*'..*2c -L1908 fcb $16,$FF,$54,$34,$05,$20,$1A,$30 ..T4. .0 -L1910 fcb $8D,$FE,$89,$20,$04,$30,$8D,$FE ... .0.. -L1918 fcb $C2,$32,$62,$CC,$02,$FF,$9F,$2A B2bL...* -L1920 fcb $34,$05,$0D,$3D,$26,$03,$10,$3F 4..=&..? -L1928 fcb $8C,$35,$05,$35,$B0,$30,$C9,$01 .5.500I. -L1930 fcb $24,$5F,$10,$3F,$8D,$6D,$84,$26 $_.?.m.& -L1938 fcb $24,$6C,$C9,$18,$12,$EC,$88,$10 $lI..l.. -L1940 fcb $A7,$C9,$18,$0F,$E7,$C9,$18,$0E 'I..gI.. -L1948 fcb $CC,$0A,$0C,$ED,$88,$10,$A6,$06 L..m..&. -L1950 fcb $A7,$C9,$18,$11,$86,$05,$A7,$06 'I....'. -L1958 fcb $4F,$5F,$10,$3F,$8E,$C6,$1A,$8E O_.?.F.. -L1960 fcb $00,$0B,$39,$D6,$0E,$0F,$0E,$C1 ..9V...A -L1968 fcb $02,$26,$04,$8D,$0C,$20,$3F,$C1 .&... ?A -L1970 fcb $03,$10,$26,$E8,$23,$8D,$02,$20 ..&h#.. -L1978 fcb $5F,$6D,$C9,$18,$0D,$26,$05,$8D _mI..&.. -L1980 fcb $1F,$10,$3F,$8C,$39,$10,$3F,$8B ..?.9.?. -L1988 fcb $24,$0B,$C1,$02,$27,$20,$C1,$03 $.A.' A. -L1990 fcb $27,$46,$16,$01,$58,$10,$8C,$00 'F..X... -L1998 fcb $01,$10,$27,$01,$49,$16,$00,$DA ..'.I..Z -L19A0 fcb $86,$0D,$30,$C9,$01,$24,$A7,$84 ..0I.$'. -L19A8 fcb $4F,$10,$8E,$00,$01,$39,$6D,$C9 O....9mI -L19B0 fcb $18,$0C,$26,$05,$8D,$EA,$16,$01 ..&..j.. -L19B8 fcb $2D,$E6,$C9,$18,$0D,$C1,$01,$23 -fI..A.# -L19C0 fcb $0D,$E1,$C9,$18,$0C,$22,$07,$5A .aI..".Z -L19C8 fcb $E7,$C9,$18,$0D,$20,$2C,$E6,$C9 gI.. ,fI -L19D0 fcb $18,$0C,$E7,$C9,$18,$0D,$20,$22 ..gI.. " -L19D8 fcb $6D,$C9,$18,$0C,$26,$05,$8D,$C0 mI..&..@ -L19E0 fcb $16,$01,$03,$E6,$C9,$18,$0D,$E1 ...fI..a -L19E8 fcb $C9,$18,$0C,$24,$07,$5C,$E7,$C9 I..$.\gI -L19F0 fcb $18,$0D,$20,$06,$C6,$01,$E7,$C9 .. .F.gI -L19F8 fcb $18,$0D,$8D,$1A,$10,$AF,$C9,$18 ...../I. -L1A00 fcb $13,$30,$C9,$02,$13,$10,$AE,$C9 .0I....I -L1A08 fcb $01,$F7,$86,$02,$10,$3F,$8C,$8D .w...?.. -L1A10 fcb $1C,$24,$3E,$16,$00,$D7,$10,$AE .$>..W.. -L1A18 fcb $C9,$18,$0A,$5A,$27,$0E,$6D,$A0 I..Z'.m -L1A20 fcb $27,$05,$17,$00,$B5,$20,$F7,$17 '...5 w. -L1A28 fcb $00,$B0,$20,$EF,$39,$30,$C9,$01 .0 o90I. -L1A30 fcb $24,$10,$AE,$C9,$18,$13,$5F,$A6 $..I.._& -L1A38 fcb $A0,$27,$08,$A7,$80,$5C,$17,$00 '.'.\.. -L1A40 fcb $99,$20,$F4,$4F,$5A,$1F,$02,$30 . tOZ..0 -L1A48 fcb $C9,$01,$24,$C6,$A0,$10,$3F,$8E I.$F .?. -L1A50 fcb $39,$86,$01,$10,$3F,$8A,$30,$C9 9...?.0I -L1A58 fcb $01,$24,$1F,$20,$86,$08,$A7,$80 .$. ..'. -L1A60 fcb $5A,$26,$FB,$30,$C9,$01,$24,$86 Z&.0I.$. -L1A68 fcb $01,$10,$3F,$8A,$CC,$00,$1B,$10 ..?.L... -L1A70 fcb $3F,$8E,$C6,$1A,$8E,$00,$0B,$16 ?.F..... -L1A78 fcb $E7,$0E,$34,$20,$1F,$20,$10,$AE g.4 . .. -L1A80 fcb $C9,$18,$08,$30,$C9,$01,$24,$A6 I..0I.$& -L1A88 fcb $80,$81,$0D,$24,$02,$86,$20,$A7 ...$.. ' -L1A90 fcb $A0,$8D,$47,$10,$AC,$C9,$18,$0A .G.,I.. -L1A98 fcb $26,$02,$8D,$22,$5A,$26,$E8,$6F &.."Z&ho -L1AA0 fcb $A0,$8D,$37,$10,$AC,$C9,$18,$0A .7.,I.. -L1AA8 fcb $26,$02,$8D,$12,$6C,$C9,$18,$0C &...lI.. -L1AB0 fcb $10,$AF,$C9,$18,$08,$35,$20,$4F ./I..5 O -L1AB8 fcb $30,$C9,$01,$24,$20,$28,$34,$20 0I.$ (4 -L1AC0 fcb $10,$AE,$C9,$18,$0A,$6D,$A0,$27 ..I..m ' -L1AC8 fcb $04,$8D,$0F,$20,$F8,$8D,$0B,$6A ... x..j -L1AD0 fcb $C9,$18,$0C,$10,$AF,$C9,$18,$0A I.../I.. -L1AD8 fcb $35,$A0,$10,$AC,$C9,$18,$06,$26 5 .,I..& -L1AE0 fcb $04,$31,$C9,$18,$15,$39,$8D,$0C .1I..9.. -L1AE8 fcb $1C,$FE,$16,$E6,$BB,$8D,$05,$1A ...f;... -L1AF0 fcb $01,$16,$E6,$B4,$34,$16,$6D,$C9 ..f44.mI -L1AF8 fcb $18,$12,$27,$1C,$32,$E8,$E0,$30 ..'.2h`0 -L1B00 fcb $E4,$5F,$4F,$8D,$15,$86,$01,$8D d_O..... -L1B08 fcb $11,$86,$02,$8D,$0D,$32,$E8,$20 .....2h -L1B10 fcb $6F,$C9,$18,$12,$6F,$C9,$18,$0D oI..oI.. -L1B18 fcb $35,$96,$34,$02,$10,$3F,$8D,$A6 5.4..?.& -L1B20 fcb $C9,$18,$0E,$A7,$88,$11,$A6,$C9 I..'..&I -L1B28 fcb $18,$0F,$A7,$88,$10,$A6,$C9,$18 ..'..&I. -L1B30 fcb $11,$A7,$06,$35,$02,$10,$3F,$8E .'.5..?. -L1B38 fcb $39,$F7,$43,$6F 9wCo
--- a/makefile Mon Sep 23 12:16:22 2002 +0000 +++ b/makefile Thu Sep 26 13:14:35 2002 +0000 @@ -17,4 +17,17 @@ -$(CD) $(LEVEL2); make clean -$(CD) $(NLEVEL2); make clean +# Make DSK images +dsk: + -$(CD) $(LEVEL1); make dsk + -$(CD) $(LEVEL2); make dsk + -$(CD) $(NLEVEL2); make dsk +# -$(CD) $(3RDPARTY); make clean +# Clean DSK images +dskclean: + -$(CD) $(LEVEL1); make dskclean + -$(CD) $(LEVEL2); make dskclean + -$(CD) $(NLEVEL2); make dskclean +# -$(CD) $(3RDPARTY); make clean +