diff --git a/.Docs/LIBCRYPT.md b/.Docs/LIBCRYPT.md new file mode 100644 index 00000000..4dfa8a0f --- /dev/null +++ b/.Docs/LIBCRYPT.md @@ -0,0 +1,35 @@ +*** Auto generated by docgen.cmd *** + +# MD5 ++ Return MD5 Hash for input String + +## In : + + PUSHW = PTR to Src String + + PUSHW = PTR to Dst MessageDigest Buffer + +## Out : + + CC + +# MD5Init + +## In : + +## Out : + + A = hMem To S.MD5 + +# MD5Update (Append "$80" & Padding & original size) + +## In: +* PUSHW DATA LEN +* PUSHW DATA PTR +* PUSHB MD5 Context hMem + +## Out : + +# MD5Finalize + +## In : + + PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0 + + PUSHB = hMem To S.MD5 + +## Out: diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index d3036873..81dcfa6c 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index c38a7c45..569aa9c7 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index bea9b21f..f15f6084 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/.Tools/docgen.cmd b/.Tools/docgen.cmd index 2b0046f5..47fed748 100644 --- a/.Tools/docgen.cmd +++ b/.Tools/docgen.cmd @@ -30,6 +30,11 @@ set SRCDIR=%~dp0..\LIB set FILTER=LIBBLKDEV.S*.txt Call :SCAN +set DOCFILE=%~dp0..\.Docs\LIBCRYPT.md +set SRCDIR=%~dp0..\LIB +set FILTER=LIBCRYPT.S*.txt +Call :SCAN + echo. echo All done : !c! Files scanned. echo. diff --git a/BIN/MD5.S.txt b/BIN/MD5.S.txt new file mode 100644 index 00000000..d4eb19d9 --- /dev/null +++ b/BIN/MD5.S.txt @@ -0,0 +1,172 @@ +NEW +PREFIX /A2OSX.BUILD +AUTO 4,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF /A2OSX.BUILD/BIN/MD5 +*-------------------------------------- + .INB /A2OSX.BUILD/INC/MACROS.I + .INB /A2OSX.BUILD/INC/A2OSX.I + .INB /A2OSX.BUILD/INC/LIBCRYPT.I +*-------------------------------------- +ZPPtr1 .EQ ZPBIN +ZPPtr2 .EQ ZPBIN+2 +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #4 ZP + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.LIBCRYPT .DA LIBCRYPT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.INIT .DA MSG.INIT +L.MSG.OK .DA MSG.OK +L.MSG.ERR .DA MSG.ERR + .DA 0 +*-------------------------------------- +CS.INIT ldy #S.PS.ARGC + lda (pPs),y + beq .99 + +.1 >INC.G ArgIndex + + >SYSCALL GetArg.A + bcs .7 + + >STYA ZPPtr1 + + lda (ZPPtr1) + cmp #'-' + bne .4 + + ldy #1 + lda (ZPPtr1),y + beq .99 + + ldx OptionList + +.2 cmp OptionList,x + beq .3 + dex + bne .2 + +.99 >LDYA L.MSG.USAGE + >SYSCALL PrintF.YA + lda #K.E.SYN + sec + rts + +.3 ldy OptionVars-1,x + lda #$80 + sta (pData),y + bra .1 + +.4 >LDA.G hFullPath + bne .99 + +.7 >LDA.G bText + +.8 >LDYA L.LIBCRYPT + >SYSCALL LoadLib.YA + sta hLIBCRYPT + +* lda (pPs) +* ora #S.PS.F.EVENT Now accept events +* sta (pPs) + + clc + rts +*-------------------------------------- +CS.RUN + + + + >LDYA L.MSG.OK + >SYSCALL PrintF.YA + lda #0 + sec + rts + +.9 pha + >PUSHA + >LDYA L.MSG.ERR + >SYSCALL PrintF.YA + pla + sec + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT >LDA.G hDataBuf + beq .1 + >SYSCALL FreeMem.A + +.1 lda hLIBCRYPT + beq .8 + + >SYSCALL UnloadLib.A + +.8 clc + rts +*-------------------------------------- +A2CharAX pha + lsr + lsr + lsr + lsr + and #$0F + ora #$30 + cmp #'9'+1 + bcc .1 + adc #6 +.1 tax + pla + and #$0F + ora #$30 + cmp #'9'+1 + bcc .8 + adc #6 +.8 rts +*-------------------------------------- +CS.END +*-------------------------------------- +OptionList >PSTR "Dd" +OptionVars .DA #bText,#bText +*-------------------------------------- +MSG.USAGE .AZ "Usage : MD5 [ -d input_text | infile… ] \r\n" +MSG.OK .AZ "[OK]\r\n" +MSG.ERR .AZ "[%h]\r\n" +MSG.INIT .AZ "Computing %s ..." +*-------------------------------------- +LIBCRYPT .AZ "libcrypt.o" +hLIBCRYPT .BS 1 +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +ArgIndex .BS 1 +bText .BS 1 +hFullPath .BS 1 +hDataBuf .BS 1 +hMD5CtxBuf .BS 1 +DS.END .ED +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/BIN/MD5.S +ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 18bc72b7..d9d30060 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -431,7 +431,7 @@ S.EVT.W2 .EQ 6 S.EVT .EQ 8 *-------------------------------------- S.TIME.CENTURY .EQ 0 19,20,21.... -S.TIME.YEAR .EQ 1 0.99 +S.TIME.YEAR .EQ 1 0..99 S.TIME.MONTH .EQ 2 1..12 S.TIME.DAY .EQ 3 1..31 S.TIME.HOUR .EQ 4 0..23 diff --git a/INC/LIBCRYPT.I.txt b/INC/LIBCRYPT.I.txt index f30e6477..09a0ff64 100644 --- a/INC/LIBCRYPT.I.txt +++ b/INC/LIBCRYPT.I.txt @@ -6,10 +6,10 @@ AUTO 6 .LIST OFF .OP 65C02 *-------------------------------------- -LIBCRYPT.MD5PStrA .EQ 4 +LIBCRYPT.MD5 .EQ 4 LIBCRYPT.MD5Init .EQ 6 LIBCRYPT.MD5Update .EQ 8 -LIBCRYPT.MD5FinalizeA .EQ 10 +LIBCRYPT.MD5Finalize .EQ 10 *-------------------------------------- * S.MD5 STRUCT *-------------------------------------- diff --git a/LIB/LIBCRYPT.S.txt b/LIB/LIBCRYPT.S.txt index e84f0845..c589bc29 100644 --- a/LIB/LIBCRYPT.S.txt +++ b/LIB/LIBCRYPT.S.txt @@ -10,13 +10,11 @@ AUTO 4,1 .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/LIBCRYPT.I *-------------------------------------- -ZPTmpPtr1 .EQ ZPLIB -ZPTmpPtr2 .EQ ZPLIB+2 -ZPTmpPtr3 .EQ ZPLIB+4 -ZPTmpPtr4 .EQ ZPLIB+6 -ZPDataPtr .EQ ZPLIB+8 -ZPDataLen .EQ ZPLIB+10 -ZPChunkLen .EQ ZPLIB+12 +ZPCtxPtr .EQ ZPLIB +ZPDataPtr .EQ ZPLIB+2 +ZPDataLen .EQ ZPLIB+4 +ZPChunkLen .EQ ZPLIB+6 +ZPHashPtr .EQ ZPLIB+8 *-------------------------------------- * DWORD Macros : Do NOT disturb carry with cpx, cpy... *-------------------------------------- @@ -103,88 +101,90 @@ CS.START cld *-------------------------------------- .1 .DA LIB.LOAD .DA LIB.UNLOAD - .DA MD5PStrA + .DA MD5 .DA MD5Init .DA MD5Update - .DA MD5FinalizeA + .DA MD5Finalize .DA 0 *-------------------------------------- LIB.LOAD LIB.UNLOAD clc rts -*-------------------------------------- -* MD5PStrA -* in : -* A = hMem To PSTR -* out : -* A = hMem To MessageDigest -*-------------------------------------- -MD5PStrA >SYSCALL GetMemPtr.A - >STYA ZPTmpPtr3 1 and 2 used by other MD5 functions - ldy #0 - lda (ZPTmpPtr3),y get PStr len - sta ZPTmpPtr4 ZPTmpPtr4 = str len - stz ZPTmpPtr4+1 0,PSTR len <= 255 - inc ZPTmpPtr3 - bne .1 - inc ZPTmpPtr3+1 Make DATA skip PSTR Len Byte +*/-------------------------------------- +* # MD5 +* Return MD5 Hash for input String +* ## In : +* PUSHW = PTR to Src String +* PUSHW = PTR to Dst MessageDigest Buffer +* ## Out : +* CC +*\-------------------------------------- +MD5 >PULLW ZPHashPtr + >PULLYA + >STYA ZPDataPtr + + >SYSCALL StrLen.YA + >STYA ZPDataLen + .1 jsr MD5Init bcs .9 + pha save MD5 Context hMem - >PUSHW ZPTmpPtr4 Push LEN - >PUSHW ZPTmpPtr3 Push DATA + + jsr MD5Update.I + jsr MD5Finalize + pla - pha - >PUSHA Push MD5 Context - jsr MD5Update - pla get back MD5 Context - pha - jsr MD5FinalizeA - plx get back MD5 Context hMem - pha save MessageDigest hMem - txa - >SYSCALL FreeMem.A Free MD5 Context - pla get back MessageDigest hMem + >SYSCALL FreeMem.A Free MD5 Context + clc .9 rts -*-------------------------------------- -* MD5Init -* In : -* Out : +*/-------------------------------------- +* # MD5Init +* ## In : +* ## Out : * A = hMem To S.MD5 -*-------------------------------------- +*\-------------------------------------- MD5Init >LDYAI S.MD5.SIZE >SYSCALL GetMem.YA bcs .9 - >STYA ZPTmpPtr1 + + >STYA ZPCtxPtr + ldy #0 + .1 lda MD5.ABCDINIT,y - sta (ZPTmpPtr1),y + sta (ZPCtxPtr),y iny cpy #16 bne .1 + lda #0 -.2 sta (ZPTmpPtr1),y + +.2 sta (ZPCtxPtr),y iny cpy #S.MD5.SIZE Includes S.MD5.FINALIZED Flag bne .2 + txa clc .9 rts -*-------------------------------------- -* MD5Update (Append "$80" & Padding & original size) -* In: -* PULLB MD5 Context hMem -* PULLW DATA PTR -* PULLW DATA LEN -*-------------------------------------- +*/-------------------------------------- +* # MD5Update (Append "$80" & Padding & original size) +* ## In: +* PUSHW DATA LEN +* PUSHW DATA PTR +* PUSHB MD5 Context hMem +* ## Out : +*\-------------------------------------- MD5Update >PULLA get MD5 Context >SYSCALL GetMemPtr.A - >STYA ZPTmpPtr1 get MD5 Context + >STYA ZPCtxPtr get MD5 Context >PULLW ZPDataPtr get DATA >PULLW ZPDataLen get LEN - ldy #S.MD5.FINALIZED - lda (ZPTmpPtr1),y + +MD5Update.I ldy #S.MD5.FINALIZED + lda (ZPCtxPtr),y beq .1 sec rts @@ -218,7 +218,7 @@ MD5Update >PULLA get MD5 Context bra .52 .53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended lda #$80 - sta (ZPTmpPtr1),y + sta (ZPCtxPtr),y lda ZPChunkLen cmp #56 Enough room for BITCOUNT ? bcs .58 no @@ -238,53 +238,58 @@ MD5Update >PULLA get MD5 Context bcc .82 inc ZPDataPtr+1 .82 bra .1 -*-------------------------------------- -* MD5FinalizeA -* In : -* A = hMem To S.MD5 -* Out: -* A = MessageDigest (PSTR, 16 Bytes, 32 Chars) -*-------------------------------------- -MD5FinalizeA >SYSCALL GetMemPtr.A - >STYA ZPTmpPtr1 get MD5 Context - ldy #S.MD5.FINALIZED - lda (ZPTmpPtr1),y +*/-------------------------------------- +* # MD5Finalize +* ## In : +* PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0 +* PUSHB = hMem To S.MD5 +* ## Out: +*\-------------------------------------- +MD5Finalize >PULLA + >SYSCALL GetMemPtr.A + >STYA ZPCtxPtr get MD5 Context + + >PULLW ZPHashPtr + +MD5Finalize.I ldy #S.MD5.FINALIZED + + lda (ZPCtxPtr),y bne .11 + jsr MD5ExtraChunk -.11 >LDYAI 33 Len + 32 Digits - >SYSCALL GetMem.YA - bcs .9 - >STYA ZPTmpPtr2 - phx save hMem for return - lda #32 - sta (ZPTmpPtr2) - inc ZPTmpPtr2 - bne .10 - inc ZPTmpPtr2+1 -.10 ldy #S.MD5.ABCD0 -.1 lda (ZPTmpPtr1),y + +.11 ldy #S.MD5.ABCD0 + +.1 lda (ZPCtxPtr),y lsr lsr lsr lsr tax lda MD5.DIGITS,x - sta (ZPTmpPtr2) - inc ZPTmpPtr2 + sta (ZPHashPtr) + inc ZPHashPtr bne .2 - inc ZPTmpPtr2+1 -.2 lda (ZPTmpPtr1),y + + inc ZPHashPtr+1 + +.2 lda (ZPCtxPtr),y and #$0F tax lda MD5.DIGITS,x - sta (ZPTmpPtr2) - inc ZPTmpPtr2 + sta (ZPHashPtr) + inc ZPHashPtr bne .3 - inc ZPTmpPtr2+1 + + inc ZPHashPtr+1 + .3 iny cpy #S.MD5.ABCD0+16 bne .1 - pla get back hMem + + lda #0 + sta (ZPHashPtr) + clc .9 rts *-------------------------------------- @@ -292,12 +297,12 @@ MD5FinalizeA >SYSCALL GetMemPtr.A *-------------------------------------- * MD5AppendBitCount * In : -* ZPTmpPtr1 = MD5 Context +* ZPCtxPtr = MD5 Context *-------------------------------------- MD5AppendBitCount ldx #56 ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT -.1 lda (ZPTmpPtr1),y +.1 lda (ZPCtxPtr),y sta MD5.BUFFER64,x inx iny @@ -305,13 +310,13 @@ MD5AppendBitCount bne .1 ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized lda #$80 - sta (ZPTmpPtr1),y + sta (ZPCtxPtr),y rts *-------------------------------------- * MD5UpdateBitCount * In : * CL = Size (in bytes) to add to MD5 context -* ZPTmpPtr1 = MD5 Context +* ZPCtxPtr = MD5 Context *-------------------------------------- MD5UpdateBitCount stz ZPChunkLen+1 @@ -324,17 +329,17 @@ MD5UpdateBitCount rol ZPChunkLen+1 clc ldy #S.MD5.BITCOUNT - adc (ZPTmpPtr1),y - sta (ZPTmpPtr1),y + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y iny lda ZPChunkLen+1 - adc (ZPTmpPtr1),y - sta (ZPTmpPtr1),y + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y bcc .8 .1 iny - lda (ZPTmpPtr1),y + lda (ZPCtxPtr),y inc - sta (ZPTmpPtr1),y + sta (ZPCtxPtr),y bne .8 cpy #7 bne .1 @@ -342,18 +347,18 @@ MD5UpdateBitCount *-------------------------------------- * MD5ExtraChunk * In : -* ZPTmpPtr1 = MD5 Context +* ZPCtxPtr = MD5 Context *-------------------------------------- MD5ExtraChunk ldy #S.MD5.FINALIZED lda #$80 - sta (ZPTmpPtr1),y Mark MD5 Context as "finalized" + sta (ZPCtxPtr),y Mark MD5 Context as "finalized" ldx #0 ldy #S.MD5.EXTRABIT Extra Bit already appended ? - lda (ZPTmpPtr1),y + lda (ZPCtxPtr),y bne .1 lda #$80 sta MD5.BUFFER64 Add extra bit to buffer - sta (ZPTmpPtr1),y Mark Extrabit added + sta (ZPCtxPtr),y Mark Extrabit added inx .1 stz MD5.BUFFER64,x pad with "0"... inx @@ -364,13 +369,13 @@ MD5ExtraChunk ldy #S.MD5.FINALIZED *-------------------------------------- * MD5UpdateABCD0 * In: -* ZPTmpPtr1 = MD5 Context +* ZPCtxPtr = MD5 Context *-------------------------------------- MD5UpdateABCD0 ldy #0 .1 clc ADC32 A+A0->A0, B, C, D.... .2 lda MD5.ABCD,y - adc (ZPTmpPtr1),y - sta (ZPTmpPtr1),y + adc (ZPCtxPtr),y + sta (ZPCtxPtr),y iny tya and #3 @@ -381,13 +386,13 @@ MD5UpdateABCD0 ldy #0 *-------------------------------------- * MD5Transform * In: -* ZPTmpPtr1 = MD5 Context +* ZPCtxPtr = MD5 Context * 512 Bits Padded chunk in MD5.BUFFER64 * Out: * Updated MD5.ABCD *-------------------------------------- MD5Transform ldy #15 init ABCD Chunk with Context ABCD0 -.1 lda (ZPTmpPtr1),y +.1 lda (ZPCtxPtr),y sta MD5.ABCD,y dey bpl .1 @@ -466,18 +471,6 @@ MD5.NEXTi >MOV32 MD5.D,MD5.DTemp jmp MD5.0015 *-------------------------------------- CS.END -MD5.ABCD -MD5.A .BS 4 Chunk Level,A,B,C,D -MD5.B .BS 4 -MD5.C .BS 4 -MD5.D .BS 4 -MD5.DTemp .BS 4 -MD5.F .BS 4 -MD5.F1 .BS 4 -MD5.F2 .BS 4 -MD5.i .BS 1 -MD5.BUFFER64 .BS 64 -*-------------------------------------- MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210 *-------------------------------------- MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22 @@ -509,6 +502,18 @@ MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1 *-------------------------------------- MD5.DIGITS .AS "0123456789ABCDEF" *-------------------------------------- +MD5.ABCD +MD5.A .BS 4 Chunk Level,A,B,C,D +MD5.B .BS 4 +MD5.C .BS 4 +MD5.D .BS 4 +MD5.DTemp .BS 4 +MD5.F .BS 4 +MD5.F1 .BS 4 +MD5.F2 .BS 4 +MD5.i .BS 1 +MD5.BUFFER64 .BS 64 +*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBCRYPT.S ASM diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index f29235f5..5c1964af 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -9,13 +9,13 @@ AUTO 4,1 * X = hMem to Expanded String (C-String) * Y,A = PTR to Expanded String *\-------------------------------------- -K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... +K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... .1 >STYA ZPPtr2 - stz ENV.BufLen init Expanded String len=0 - stz ENV.bFound No var found yet + stz ENV.BufLen init Expanded String len=0 + stz ENV.bFound No var found yet - stz ENV.bNoExp Reset no expand flag + stz ENV.bNoExp Reset no expand flag ldy #0 @@ -32,7 +32,7 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... lda ENV.bNoExp eor #$ff - sta ENV.bNoExp toggle flag + sta ENV.bNoExp toggle flag bra .11 .21 bit ENV.bNoExp @@ -44,20 +44,20 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... stx ENV.BufLen bra .11 -.23 ldx ENV.bInVar already in a var? +.23 ldx ENV.bInVar already in a var? bne .3 yes... cmp #'$' no, found one ? bne .22 no, store... - sta ENV.bFound Toggle flag + sta ENV.bFound Toggle flag sta ENV.bInVar bra .11 skip this char .3 cmp #'{' we are in var, "{" after "$"? bne .31 - ldx ENV.VarLen No char in var yet ? + ldx ENV.VarLen No char in var yet ? beq .11 normal, "${" syntax is ok,skip bne .5 not allowed char in varname, end of var @@ -65,7 +65,7 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... .31 cmp #'}' end of var? beq .50 - jsr ENV.IsVarChar + jsr MEM.IsIDValid _,.,a-z,A-Z,0-9 ? bcc .32 yes, add to varname ldx ENV.VarLen @@ -95,13 +95,13 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... ply restore index in string... .52 jmp .10 reset start flag and continue -.8 ldx ENV.VarLen end of STR,are we in a var? +.8 ldx ENV.VarLen end of STR,are we in a var? beq .80 no...exit... stz ENV.VarName,x - jsr ENV.GetValue yes, expand and add to STR + jsr ENV.GetValue yes, expand and add to STR -.80 lda ENV.hStr working from our temp string ? +.80 lda ENV.hStr working from our temp string ? beq .81 no... jsr K.FreeMem.A yes, discard.... @@ -122,27 +122,6 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... .9 rts *-------------------------------------- -ENV.IsVarChar cmp #'_' - beq .8 - - cmp #'0' - bcc .9 - cmp #'9'+1 - bcc .8 - - cmp #'A' - bcc .9 - cmp #'Z'+1 - -* bcc .8 - rts - -.8 clc - rts - -.9 sec - rts -*-------------------------------------- ENV.GetValue jsr ENV.ExpandSysVar bcc .9 @@ -327,11 +306,11 @@ K.GetEnv.YA >STYA ZPPtr1 *\-------------------------------------- K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name K.UnsetEnv.I jsr ENV.FindVarP1 - bcs .8 not found, quit + bcs K.UnsetEnv.I.8 not found, quit jsr ENV.DelVarP3 Ptr3 -> ENVNAME -.8 clc +K.UnsetEnv.I.8 clc rts *-------------------------------------- * PRIVATE @@ -350,21 +329,17 @@ ENV.ExpandSysVar bne .9 lda ENV.VarName - cmp #'0'-1 $0...$9 ?? - bcc .1 - cmp #'9'+1 + jsr MEM.IsDigit $0...$9 ?? bcs .1 + and #$0F jsr K.GetArg.A - bcs .8 Arg# is undefined, do not append anything + bcs K.UnsetEnv.I.8 Arg# is undefined, do not append anything >STYA ZPPtr3 jmp ENV.AddP3ToBuf -.8 clc - rts - .1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 .2 cmp ENV.SysVars,x diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 768579ad..08f0f8a3 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -561,34 +561,36 @@ K.SListFree.A MEM.GetKeyCharY sta CLRREADAUX lda (ZPSListKeyPtr),y sta SETREADAUX - beq .9 + beq MEM.IsDigit.9 - cmp #'.' - beq .8 +MEM.IsIDValid cmp #'.' + beq MEM.IsDigit.8 cmp #'_' - beq .8 + beq MEM.IsDigit.8 - cmp #'0' - bcc .9 - cmp #'9'+1 - bcc .8 - - cmp #'A' - bcc .9 - cmp #'Z'+1 - bcc .8 - +MEM.IsDigitOrL cmp #'z'+1 + bcs MEM.IsDigit.RTS cmp #'a' - bcc .9 - cmp #'z'+1 - bcs .9 + bcs MEM.IsDigit.8 -.8 clc +MEM.IsDigitOrUC cmp #'Z'+1 + bcs MEM.IsDigit.RTS + cmp #'A' + bcs MEM.IsDigit.8 + +MEM.IsDigit cmp #'9'+1 + bcs MEM.IsDigit.RTS + cmp #'0' + bcs MEM.IsDigit.8 + +MEM.IsDigit.9 sec + +MEM.IsDigit.RTS rts + +MEM.IsDigit.8 clc rts -.9 sec - rts *-------------------------------------- MEM.SetKeyCharY sta CLRWRITEAUX sta (ZPSListKeyPtr),y diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index a4554abe..ca3249dc 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -666,7 +666,7 @@ K.SScanF jsr PullP1P2P3 * stz ASCBUF .20 lda (ZPPtr1) - jsr STDIO.IsDigit + jsr MEM.IsDigit bcs .21 phx * inc ASCBUF @@ -802,7 +802,7 @@ K.PrintF.YA >STYA ZPPtr1 sta PADCHAR no, this is the first 0, so make it PADCHAR bra .2 -.4 jsr STDIO.IsDigit +.4 jsr MEM.IsDigit bcs .99 .5 and #$0F we have a digit @@ -1090,15 +1090,6 @@ STDIO.IOERR lda #MLI.E.IO sec rts *-------------------------------------- -STDIO.IsDigit cmp #'0' - bcc .1 - cmp #'9'+1 - rts -.1 sec - rts -*-------------------------------------- -STDIO.AT10 -*-------------------------------------- PADLEN .BS 1 PADCHAR .BS 1 *-------------------------------------- diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index e6650280..04f36f63 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -129,7 +129,7 @@ STDLIB.Dec2Hex jsr STDLIB.32.Clear lda (ZPPtr2),y beq .8 - jsr STDIO.IsDigit + jsr MEM.IsDigit bcs .8 phy Save Y, pointing to next char