; ; File generated by cc65 v 2.11.0 ; .fopt compiler,"cc65 v 2.11.0" .setcpu "6502" .smart on .autoimport on .case on .debuginfo on .importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2 .macpack longbranch .dbg file, "_scanf.c", 26692, 1108373665 .dbg file, "../../include/stddef.h", 2974, 1061022172 .dbg file, "../../include/stdarg.h", 2817, 1102777145 .dbg file, "../../include/stdbool.h", 2042, 1054641808 .dbg file, "../../include/stdio.h", 5945, 1113916546 .dbg file, "../../include/string.h", 4676, 1116364269 .dbg file, "../../include/setjmp.h", 2713, 964292583 .dbg file, "../../include/limits.h", 2978, 1039954353 .dbg file, "../../include/errno.h", 3647, 1060696125 .dbg file, "../../include/ctype.h", 7770, 1087856507 .dbg file, "./_scanf.h", 963, 1108372799 .import _memset .import __setjmp .import _longjmp .import __ctype .import _isspace .import _isxdigit .import _tolower .export __scanf .import __seterrno .segment "RODATA" _Bits: .byte $01 .byte $02 .byte $04 .byte $08 .byte $10 .byte $20 .byte $40 .byte $80 .segment "BSS" _format: .res 2,$00 _D_: .res 2,$00 _ap: .res 2,$00 _JumpBuf: .res 5,$00 _F: .res 1,$00 _CharCount: .res 2,$00 _C: .res 2,$00 _Width: .res 2,$00 _IntVal: .res 4,$00 _Assignments: .res 2,$00 _IntBytes: .res 1,$00 _Converted: .res 1,$00 _Positive: .res 1,$00 _NoAssign: .res 1,$00 _Invert: .res 1,$00 _CharSet: .res 32,$00 ; --------------------------------------------------------------- ; int __fastcall__ _scanf (const struct scanfdata*, const unsigned char*, unsigned char*) ; --------------------------------------------------------------- .segment "CODE" .proc __scanf .segment "BSS" L0115: .res 1,$00 L0116: .res 1,$00 L0117: .res 1,$00 .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 487 jsr pushax ; ; register char* S; ; .dbg line, "_scanf.c", 488 lda regbank+4 ldx regbank+5 jsr pushax ; ; D_ = D; ; .dbg line, "_scanf.c", 497 ldy #$07 jsr ldaxysp sta _D_ stx _D_+1 ; ; format = format_; ; .dbg line, "_scanf.c", 498 ldy #$05 jsr ldaxysp sta _format stx _format+1 ; ; ap = ap_; ; .dbg line, "_scanf.c", 499 ldy #$03 jsr ldaxysp sta _ap stx _ap+1 ; ; Converted = false; ; .dbg line, "_scanf.c", 502 lda #$00 sta _Converted ; ; Assignments = 0; ; .dbg line, "_scanf.c", 503 sta _Assignments sta _Assignments+1 ; ; CharCount = 0; ; .dbg line, "_scanf.c", 504 sta _CharCount sta _CharCount+1 ; ; if ((unsigned char) setjmp (JumpBuf) == RC_OK) { ; .dbg line, "_scanf.c", 509 lda #<(_JumpBuf) ldx #>(_JumpBuf) jsr __setjmp cmp #$00 jne L0124 ; ; ReadChar (); ; .dbg line, "_scanf.c", 513 L0127: jsr _ReadChar ; ; while (GetFormat ()) { ; .dbg line, "_scanf.c", 516 L0129: jsr _GetFormat tax jeq L0296 ; ; if (F != '%') { ; .dbg line, "_scanf.c", 519 lda _F cmp #$25 beq L012C ; ; if ((bool) isspace ((int) F)) { ; .dbg line, "_scanf.c", 522 ldx #$00 lda _F jsr _isspace tax beq L012E ; ; SkipWhite (); ; .dbg line, "_scanf.c", 528 jsr _SkipWhite ; ; continue; ; .dbg line, "_scanf.c", 529 jmp L0129 ; ; if (C != (int) F) { ; .dbg line, "_scanf.c", 536 L012E: lda _C ldx _C+1 jsr pushax ldx #$00 lda _F jsr tosicmp beq L0127 ; ; goto NoConv; ; .dbg line, "_scanf.c", 541 jmp L0124 ; ; if (GetFormat () == '%') { ; .dbg line, "_scanf.c", 551 L012C: jsr _GetFormat cmp #$25 ; ; goto Percent; ; .dbg line, "_scanf.c", 552 beq L012E ; ; NoAssign = (F == '*'); ; .dbg line, "_scanf.c", 556 lda _F cmp #$2A jsr booleq sta _NoAssign ; ; if (NoAssign) { ; .dbg line, "_scanf.c", 557 lda _NoAssign beq L013C ; ; GetFormat (); ; .dbg line, "_scanf.c", 558 jsr _GetFormat ; ; Width = UINT_MAX; ; .dbg line, "_scanf.c", 562 L013C: lda #$FF sta _Width sta _Width+1 ; ; HaveWidth = (bool) isdigit (F); ; .dbg line, "_scanf.c", 563 ldy _F lda __ctype,y and #$04 sta L0115 ; ; if (HaveWidth) { ; .dbg line, "_scanf.c", 564 lda L0115 beq L0150 ; ; Width = 0; ; .dbg line, "_scanf.c", 565 lda #$00 sta _Width sta _Width+1 ; ; Width = Width * 10 + (F & 0x0F); ; .dbg line, "_scanf.c", 568 L014F: lda _Width ldx _Width+1 jsr mulax10 sta sreg stx sreg+1 lda _F and #$0F clc adc sreg ldx sreg+1 bcc L029F inx L029F: sta _Width stx _Width+1 ; ; } while ((bool) isdigit (GetFormat ())); ; .dbg line, "_scanf.c", 569 jsr _GetFormat tay lda __ctype,y and #$04 tax bne L014F ; ; if (Width == 0) { ; .dbg line, "_scanf.c", 571 L0150: lda _Width ora _Width+1 bne L015E ; ; _seterrno (EINVAL); ; .dbg line, "_scanf.c", 577 lda #$07 jsr __seterrno ; ; return Assignments; ; .dbg line, "_scanf.c", 580 jmp L02A8 ; ; Width = ~Width; ; .dbg line, "_scanf.c", 586 L015E: lda _Width ldx _Width+1 jsr complax sta _Width stx _Width+1 ; ; IntBytes = sizeof(int) - 1; ; .dbg line, "_scanf.c", 589 lda #$01 sta _IntBytes ; ; switch (F) { ; .dbg line, "_scanf.c", 590 lda _F ; ; } ; .dbg line, "_scanf.c", 615 cmp #$48 beq L016F cmp #$4A beq L017E cmp #$4C beq L0178 cmp #$54 beq L0182 cmp #$5A beq L0182 cmp #$CC beq L0182 jmp L016D ; ; if (*format == 'h') { ; .dbg line, "_scanf.c", 592 L016F: lda _format ldx _format+1 ldy #$00 sta ptr1 stx ptr1+1 lda (ptr1),y cmp #$48 bne L0182 ; ; IntBytes = sizeof(char) - 1; ; .dbg line, "_scanf.c", 593 tya sta _IntBytes ; ; ++format; ; .dbg line, "_scanf.c", 594 inc _format bne L0182 inc _format+1 ; ; break; ; .dbg line, "_scanf.c", 597 jmp L0182 ; ; if (*format == 'l') { ; .dbg line, "_scanf.c", 600 L0178: lda _format ldx _format+1 ldy #$00 sta ptr1 stx ptr1+1 lda (ptr1),y cmp #$4C bne L017E ; ; ++format; ; .dbg line, "_scanf.c", 602 inc _format bne L017E inc _format+1 ; ; IntBytes = sizeof(long) - 1; ; .dbg line, "_scanf.c", 606 L017E: lda #$03 sta _IntBytes ; ; GetFormat (); ; .dbg line, "_scanf.c", 614 L0182: jsr _GetFormat ; ; switch (F) { ; .dbg line, "_scanf.c", 618 L016D: lda _F ; ; } ; .dbg line, "_scanf.c", 844 cmp #$41 jeq L0275 cmp #$43 jeq L01C4 cmp #$44 beq L018C cmp #$45 jeq L0275 cmp #$46 jeq L0275 cmp #$47 jeq L0275 cmp #$49 beq L0192 cmp #$4E jeq L0264 cmp #$4F beq L0196 cmp #$50 jeq L024A cmp #$53 beq L01A0 cmp #$55 beq L018C cmp #$58 beq L019A cmp #$5B jeq L01E9 cmp #$C1 jeq L0275 cmp #$C3 jeq L0275 cmp #$C5 jeq L0275 cmp #$C6 jeq L0275 cmp #$C7 jeq L0275 cmp #$D3 jeq L0275 cmp #$D8 beq L019A jmp L028E ; ; ScanInt (10); ; .dbg line, "_scanf.c", 625 L018C: lda #$0A jsr _ScanInt ; ; break; ; .dbg line, "_scanf.c", 626 jmp L0129 ; ; ScanInt (0); ; .dbg line, "_scanf.c", 630 L0192: lda #$00 jsr _ScanInt ; ; break; ; .dbg line, "_scanf.c", 631 jmp L0129 ; ; ScanInt (8); ; .dbg line, "_scanf.c", 635 L0196: lda #$08 jsr _ScanInt ; ; break; ; .dbg line, "_scanf.c", 636 jmp L0129 ; ; ScanInt (16); ; .dbg line, "_scanf.c", 641 L019A: lda #$10 jsr _ScanInt ; ; break; ; .dbg line, "_scanf.c", 642 jmp L0129 ; ; SkipWhite (); ; .dbg line, "_scanf.c", 646 L01A0: jsr _SkipWhite ; ; CheckEnd (); /* Is it an input failure? */ ; .dbg line, "_scanf.c", 647 jsr _CheckEnd ; ; Converted = true; /* No, conversion will succeed */ ; .dbg line, "_scanf.c", 648 lda #$01 sta _Converted ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 649 lda _NoAssign bne L01A5 ; ; S = va_arg (ap, char*); ; .dbg line, "_scanf.c", 650 sec lda _ap sbc #$02 sta _ap bcs L01AE dec _ap+1 L01AE: ldx _ap+1 ldy #$01 jsr ldaxidx sta regbank+4 stx regbank+4+1 ; ; while (C != EOF ; .dbg line, "_scanf.c", 652 L01A5: lda _C+1 ; ; && (bool) isspace (C) == false ; .dbg line, "_scanf.c", 653 cmp #$FF bne L02A2 ; ; while (C != EOF ; .dbg line, "_scanf.c", 652 lda _C ; ; && (bool) isspace (C) == false ; .dbg line, "_scanf.c", 653 cmp #$FF beq L01B0 L02A2: lda _C ldx _C+1 jsr _isspace ; ; && ++Width) { ; .dbg line, "_scanf.c", 654 cmp #$00 bne L01B0 inc _Width bne L01B5 inc _Width+1 L01B5: lda _Width ora _Width+1 beq L01B0 ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 655 lda _NoAssign bne L01B7 ; ; *S++ = C; ; .dbg line, "_scanf.c", 656 lda regbank+4 ldx regbank+4+1 sta regsave stx regsave+1 clc adc #$01 bcc L01BA inx L01BA: sta regbank+4 stx regbank+4+1 lda regsave ldx regsave+1 sta sreg stx sreg+1 lda _C ldy #$00 sta (sreg),y ; ; ReadChar (); ; .dbg line, "_scanf.c", 658 L01B7: jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 659 jmp L01A5 ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 661 L01B0: lda _NoAssign jne L0129 ; ; *S = '\0'; ; .dbg line, "_scanf.c", 662 tay sta (regbank+4),y ; ; ++Assignments; ; .dbg line, "_scanf.c", 663 inc _Assignments jne L0129 inc _Assignments+1 ; ; break; ; .dbg line, "_scanf.c", 665 jmp L0129 ; ; if (HaveWidth == false) { ; .dbg line, "_scanf.c", 669 L01C4: lda L0115 bne L01C5 ; ; Width = ~1u; ; .dbg line, "_scanf.c", 671 ldx #$FF lda #$FE sta _Width stx _Width+1 ; ; CheckEnd (); /* Is it an input failure? */ ; .dbg line, "_scanf.c", 673 L01C5: jsr _CheckEnd ; ; Converted = true; /* No, at least 1 char. available */ ; .dbg line, "_scanf.c", 674 lda #$01 sta _Converted ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 675 lda _NoAssign bne L01CC ; ; S = va_arg (ap, char*); ; .dbg line, "_scanf.c", 676 sec lda _ap sbc #$02 sta _ap bcs L01D5 dec _ap+1 L01D5: ldx _ap+1 ldy #$01 jsr ldaxidx sta regbank+4 stx regbank+4+1 ; ; while (++Width) { ; .dbg line, "_scanf.c", 681 L01D6: inc _Width bne L01D9 inc _Width+1 L01D9: lda _Width ora _Width+1 beq L01D7 ; ; CheckEnd (); /* Is it a matching failure? */ ; .dbg line, "_scanf.c", 682 jsr _CheckEnd ; ; *S++ = C; ; .dbg line, "_scanf.c", 683 lda regbank+4 ldx regbank+4+1 sta regsave stx regsave+1 clc adc #$01 bcc L01DC inx L01DC: sta regbank+4 stx regbank+4+1 lda regsave ldx regsave+1 sta sreg stx sreg+1 lda _C ldy #$00 sta (sreg),y ; ; ReadChar (); ; .dbg line, "_scanf.c", 684 jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 685 jmp L01D6 ; ; ++Assignments; ; .dbg line, "_scanf.c", 686 L01D7: inc _Assignments jne L0129 inc _Assignments+1 ; ; } else { ; .dbg line, "_scanf.c", 687 jmp L0129 ; ; while (++Width) { ; .dbg line, "_scanf.c", 689 L01CC: inc _Width bne L01E5 inc _Width+1 L01E5: lda _Width ora _Width+1 jeq L0129 ; ; CheckEnd (); /* Is it a matching failure? */ ; .dbg line, "_scanf.c", 690 jsr _CheckEnd ; ; ReadChar (); ; .dbg line, "_scanf.c", 691 jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 692 jmp L01CC ; ; memset (CharSet, 0, sizeof (CharSet)); ; .dbg line, "_scanf.c", 699 L01E9: ldy #$1F lda #$00 L01EF: sta _CharSet,y dey bpl L01EF ; ; Invert = (GetFormat () == '^'); ; .dbg line, "_scanf.c", 701 jsr _GetFormat cmp #$5E jsr booleq sta _Invert ; ; if (Invert) { ; .dbg line, "_scanf.c", 702 lda _Invert beq L01F3 ; ; GetFormat (); ; .dbg line, "_scanf.c", 703 jsr _GetFormat ; ; if (F == ']') { ; .dbg line, "_scanf.c", 705 L01F3: lda _F cmp #$5D bne L01F6 ; ; AddCharToSet (F); ; .dbg line, "_scanf.c", 709 L02A5: lda _F jsr _AddCharToSet ; ; GetFormat (); ; .dbg line, "_scanf.c", 710 L02A1: jsr _GetFormat ; ; while (F != '\0' && F != ']') { ; .dbg line, "_scanf.c", 713 L01F6: lda _F beq L01FC lda _F cmp #$5D beq L01FC ; ; if (*format == '-') { /* Look ahead at next char. */ ; .dbg line, "_scanf.c", 714 lda _format ldx _format+1 ldy #$00 sta ptr1 stx ptr1+1 lda (ptr1),y cmp #$2D bne L02A5 ; ; Start = F; ; .dbg line, "_scanf.c", 716 lda _F sta L0117 ; ; ++format; ; .dbg line, "_scanf.c", 717 inc _format bne L0205 inc _format+1 ; ; switch (GetFormat ()) { ; .dbg line, "_scanf.c", 718 L0205: jsr _GetFormat ; ; } ; .dbg line, "_scanf.c", 738 cmp #$00 beq L020A cmp #$5D bne L0211 ; ; AddCharToSet (Start); ; .dbg line, "_scanf.c", 722 L020A: lda L0117 jsr _AddCharToSet ; ; AddCharToSet ('-'); ; .dbg line, "_scanf.c", 723 lda #$2D jsr _AddCharToSet ; ; break; ; .dbg line, "_scanf.c", 724 jmp L01F6 ; ; AddCharToSet (Start); ; .dbg line, "_scanf.c", 730 L0211: lda L0117 jsr _AddCharToSet ; ; if (Start == F) { ; .dbg line, "_scanf.c", 731 ldx #$00 lda L0117 jsr pushax lda _F jsr tosicmp ; ; break; ; .dbg line, "_scanf.c", 732 beq L02A1 ; ; ++Start; ; .dbg line, "_scanf.c", 734 inc L0117 ; ; } ; .dbg line, "_scanf.c", 735 jmp L0211 ; ; if (F == '\0') { ; .dbg line, "_scanf.c", 748 L01FC: lda _F bne L021F ; ; --format; ; .dbg line, "_scanf.c", 749 sec lda _format sbc #$01 sta _format bcs L021F dec _format+1 ; ; if (Invert) { ; .dbg line, "_scanf.c", 753 L021F: lda _Invert beq L0223 ; ; InvertCharSet (); ; .dbg line, "_scanf.c", 754 jsr _InvertCharSet ; ; Match = false; ; .dbg line, "_scanf.c", 761 L0223: lda #$00 sta L0116 ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 762 lda _NoAssign bne L0228 ; ; S = va_arg (ap, char*); ; .dbg line, "_scanf.c", 763 sec lda _ap sbc #$02 sta _ap bcs L0231 dec _ap+1 L0231: ldx _ap+1 ldy #$01 jsr ldaxidx sta regbank+4 stx regbank+4+1 ; ; while (IsCharInSet () && ++Width) { ; .dbg line, "_scanf.c", 765 L0228: jsr _IsCharInSet tax beq L0233 inc _Width bne L0236 inc _Width+1 L0236: lda _Width ora _Width+1 beq L0233 ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 766 lda _NoAssign bne L0238 ; ; *S++ = C; ; .dbg line, "_scanf.c", 767 lda regbank+4 ldx regbank+4+1 sta regsave stx regsave+1 clc adc #$01 bcc L023B inx L023B: sta regbank+4 stx regbank+4+1 lda regsave ldx regsave+1 sta sreg stx sreg+1 lda _C ldy #$00 sta (sreg),y ; ; Match = Converted = true; ; .dbg line, "_scanf.c", 769 L0238: lda #$01 sta _Converted sta L0116 ; ; ReadChar (); ; .dbg line, "_scanf.c", 770 jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 771 jmp L0228 ; ; if (Match == false) { ; .dbg line, "_scanf.c", 773 L0233: lda L0116 ; ; goto NoConv; ; .dbg line, "_scanf.c", 774 jeq L0124 ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 776 lda _NoAssign jne L0129 ; ; *S = '\0'; ; .dbg line, "_scanf.c", 777 tay sta (regbank+4),y ; ; ++Assignments; ; .dbg line, "_scanf.c", 778 inc _Assignments jne L0129 inc _Assignments+1 ; ; break; ; .dbg line, "_scanf.c", 780 jmp L0129 ; ; SkipWhite (); ; .dbg line, "_scanf.c", 788 L024A: jsr _SkipWhite ; ; if (CHAR (C) != '0') { ; .dbg line, "_scanf.c", 789 lda _C cmp #$30 ; ; goto NoConv; ; .dbg line, "_scanf.c", 790 jne L0124 ; ; Converted = true; ; .dbg line, "_scanf.c", 792 lda #$01 sta _Converted ; ; ReadChar (); ; .dbg line, "_scanf.c", 793 jsr _ReadChar ; ; switch (CHAR (C)) { ; .dbg line, "_scanf.c", 794 lda _C ; ; } ; .dbg line, "_scanf.c", 800 cmp #$58 beq L0259 cmp #$D8 bne L0124 ; ; ReadChar (); ; .dbg line, "_scanf.c", 801 L0259: jsr _ReadChar ; ; ReadInt (16); ; .dbg line, "_scanf.c", 802 lda #$10 jsr _ReadInt ; ; AssignInt (); ; .dbg line, "_scanf.c", 803 jsr _AssignInt ; ; break; ; .dbg line, "_scanf.c", 804 jmp L0129 ; ; IntVal = (long) (CharCount - (C == EOF ? 0u : 1u)); ; .dbg line, "_scanf.c", 810 L0264: lda _CharCount ldx _CharCount+1 jsr pushax lda _C+1 cmp #$FF bne L026A lda _C cmp #$FF bne L026A ldx #$00 txa jmp L026C L026A: ldx #$00 lda #$01 L026C: jsr tossubax ldy #$00 sta _IntVal stx _IntVal+1 sty _IntVal+2 sty _IntVal+3 ; ; AssignInt (); ; .dbg line, "_scanf.c", 811 jsr _AssignInt ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 813 lda _NoAssign jne L0129 ; ; --Assignments; ; .dbg line, "_scanf.c", 814 sec lda _Assignments sbc #$01 sta _Assignments jcs L0129 dec _Assignments+1 ; ; break; ; .dbg line, "_scanf.c", 816 jmp L0129 ; ; _seterrno (ENOSYS); ; .dbg line, "_scanf.c", 833 L0275: lda #$0D jsr __seterrno ; ; return Assignments; ; .dbg line, "_scanf.c", 836 jmp L02A8 ; ; _seterrno (EINVAL); ; .dbg line, "_scanf.c", 840 L028E: lda #$07 jsr __seterrno ; ; return Assignments; ; .dbg line, "_scanf.c", 843 jmp L02A8 ; ; if (C == EOF && Converted == false) { ; .dbg line, "_scanf.c", 854 L0124: lda _C+1 cmp #$FF bne L0296 lda _C cmp #$FF bne L0296 lda _Converted bne L0296 ; ; Assignments = EOF; /* Special case: error */ ; .dbg line, "_scanf.c", 855 L02A8: lda #$FF sta _Assignments sta _Assignments+1 ; ; PushBack (); ; .dbg line, "_scanf.c", 860 L0296: jsr _PushBack ; ; return Assignments; ; .dbg line, "_scanf.c", 863 lda _Assignments ldx _Assignments+1 ; ; } ; .dbg line, "_scanf.c", 864 pha ldy #$00 lda (sp),y sta regbank+4 iny lda (sp),y sta regbank+5 pla jmp incsp8 .dbg line .endproc ; --------------------------------------------------------------- ; unsigned int __near__ FindBit (void) ; --------------------------------------------------------------- .segment "CODE" .proc _FindBit: near .segment "CODE" ; ; asm ("pha"); ; .dbg line, "_scanf.c", 109 pha ; ; asm ("lsr a"); /* Divide by CHAR_BIT */ ; .dbg line, "_scanf.c", 110 lsr a ; ; asm ("lsr a"); ; .dbg line, "_scanf.c", 111 lsr a ; ; asm ("lsr a"); ; .dbg line, "_scanf.c", 112 lsr a ; ; asm ("tax"); /* Byte's offset */ ; .dbg line, "_scanf.c", 113 tax ; ; asm ("pla"); ; .dbg line, "_scanf.c", 114 pla ; ; asm ("and #%b", CHAR_BIT-1); ; .dbg line, "_scanf.c", 115 and #$07 ; ; asm ("tay"); /* Bit's offset */ ; .dbg line, "_scanf.c", 116 tay ; ; asm ("lda %v,y", Bits); ; .dbg line, "_scanf.c", 117 lda _Bits,y ; ; return (unsigned) __AX__; ; .dbg line, "_scanf.c", 118 jmp L000F ; ; } ; .dbg line, "_scanf.c", 119 L000F: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __fastcall__ AddCharToSet (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _AddCharToSet .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 126 jsr pusha ; ; FindBit(); ; .dbg line, "_scanf.c", 127 jsr _FindBit ; ; asm ("ora %v,x", CharSet); ; .dbg line, "_scanf.c", 128 ora _CharSet,x ; ; asm ("sta %v,x", CharSet); ; .dbg line, "_scanf.c", 129 sta _CharSet,x ; ; } ; .dbg line, "_scanf.c", 130 jmp incsp1 .dbg line .endproc ; --------------------------------------------------------------- ; unsigned char __near__ IsCharInSet (void) ; --------------------------------------------------------------- .segment "CODE" .proc _IsCharInSet: near .segment "CODE" ; ; asm ("lda #$00"); ; .dbg line, "_scanf.c", 140 lda #$00 ; ; asm ("ldx %v+1", C); ; .dbg line, "_scanf.c", 141 ldx _C+1 ; ; asm ("bne L1"); /* EOF never is in the set */ ; .dbg line, "_scanf.c", 142 bne L1 ; ; asm ("lda %v", C); ; .dbg line, "_scanf.c", 143 lda _C ; ; FindBit(); ; .dbg line, "_scanf.c", 144 jsr _FindBit ; ; asm ("and %v,x", CharSet); ; .dbg line, "_scanf.c", 145 and _CharSet,x ; ; asm ("ldx #$00"); ; .dbg line, "_scanf.c", 147 L1: ldx #$00 ; ; return (unsigned char) __AX__; ; .dbg line, "_scanf.c", 148 jmp L001F ; ; } ; .dbg line, "_scanf.c", 149 L001F: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ InvertCharSet (void) ; --------------------------------------------------------------- .segment "CODE" .proc _InvertCharSet: near .segment "CODE" ; ; asm ("ldy #%b", sizeof (CharSet) - 1); ; .dbg line, "_scanf.c", 158 ldy #$1F ; ; asm ("lda %v,y", CharSet); ; .dbg line, "_scanf.c", 160 L1: lda _CharSet,y ; ; asm ("eor #$FF"); ; .dbg line, "_scanf.c", 161 eor #$FF ; ; asm ("sta %v,y", CharSet); ; .dbg line, "_scanf.c", 162 sta _CharSet,y ; ; asm ("dey"); ; .dbg line, "_scanf.c", 163 dey ; ; asm ("bpl L1"); ; .dbg line, "_scanf.c", 164 bpl L1 ; ; } ; .dbg line, "_scanf.c", 165 rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ PushBack (void) ; --------------------------------------------------------------- .segment "CODE" .proc _PushBack: near .segment "CODE" ; ; asm ("ldx %v+1", C); ; .dbg line, "_scanf.c", 180 ldx _C+1 ; ; asm ("bne %g", Done); ; .dbg line, "_scanf.c", 181 bne L0036 ; ; asm ("lda %v", C); ; .dbg line, "_scanf.c", 182 lda _C ; ; asm ("jsr pushax"); ; .dbg line, "_scanf.c", 185 jsr pushax ; ; (const struct scanfdata*) __AX__ = D_; ; .dbg line, "_scanf.c", 188 lda _D_ ldx _D_+1 ; ; asm ("sta ptr1"); ; .dbg line, "_scanf.c", 189 sta ptr1 ; ; asm ("stx ptr1+1"); ; .dbg line, "_scanf.c", 190 stx ptr1+1 ; ; asm ("ldy #%b", offsetof (struct scanfdata, unget)); ; .dbg line, "_scanf.c", 193 ldy #$02 ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 194 lda (ptr1),y ; ; asm ("sta jmpvec+1"); ; .dbg line, "_scanf.c", 195 sta jmpvec+1 ; ; asm ("iny"); ; .dbg line, "_scanf.c", 196 iny ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 197 lda (ptr1),y ; ; asm ("sta jmpvec+2"); ; .dbg line, "_scanf.c", 198 sta jmpvec+2 ; ; asm ("ldy #%b", offsetof (struct scanfdata, data) + 1); ; .dbg line, "_scanf.c", 201 ldy #$05 ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 202 lda (ptr1),y ; ; asm ("tax"); ; .dbg line, "_scanf.c", 203 tax ; ; asm ("dey"); ; .dbg line, "_scanf.c", 204 dey ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 205 lda (ptr1),y ; ; asm ("jsr jmpvec"); ; .dbg line, "_scanf.c", 208 jsr jmpvec ; ; asm ("lda %v", CharCount); ; .dbg line, "_scanf.c", 211 lda _CharCount ; ; asm ("bne %g", Yank); ; .dbg line, "_scanf.c", 212 bne L0051 ; ; asm ("dec %v+1", CharCount); ; .dbg line, "_scanf.c", 213 dec _CharCount+1 ; ; asm ("dec %v", CharCount); ; .dbg line, "_scanf.c", 215 L0051: dec _CharCount ; ; } ; .dbg line, "_scanf.c", 218 L0036: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ ReadChar (void) ; --------------------------------------------------------------- .segment "CODE" .proc _ReadChar: near .segment "CODE" ; ; asm ("lda %v", D_); ; .dbg line, "_scanf.c", 226 lda _D_ ; ; asm ("ldx %v+1", D_); ; .dbg line, "_scanf.c", 227 ldx _D_+1 ; ; asm ("sta ptr1"); ; .dbg line, "_scanf.c", 228 sta ptr1 ; ; asm ("stx ptr1+1"); ; .dbg line, "_scanf.c", 229 stx ptr1+1 ; ; asm ("ldy #%b", offsetof (struct scanfdata, get)); ; .dbg line, "_scanf.c", 232 ldy #$00 ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 233 lda (ptr1),y ; ; asm ("sta jmpvec+1"); ; .dbg line, "_scanf.c", 234 sta jmpvec+1 ; ; asm ("iny"); ; .dbg line, "_scanf.c", 235 iny ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 236 lda (ptr1),y ; ; asm ("sta jmpvec+2"); ; .dbg line, "_scanf.c", 237 sta jmpvec+2 ; ; asm ("ldy #%b", offsetof (struct scanfdata, data) + 1); ; .dbg line, "_scanf.c", 240 ldy #$05 ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 241 lda (ptr1),y ; ; asm ("tax"); ; .dbg line, "_scanf.c", 242 tax ; ; asm ("dey"); ; .dbg line, "_scanf.c", 243 dey ; ; asm ("lda (ptr1),y"); ; .dbg line, "_scanf.c", 244 lda (ptr1),y ; ; asm ("jsr jmpvec"); ; .dbg line, "_scanf.c", 247 jsr jmpvec ; ; asm ("sta %v", C); ; .dbg line, "_scanf.c", 250 sta _C ; ; asm ("stx %v+1", C); ; .dbg line, "_scanf.c", 251 stx _C+1 ; ; asm ("inx"); ; .dbg line, "_scanf.c", 256 inx ; ; asm ("beq %g", Done); ; .dbg line, "_scanf.c", 257 beq L006F ; ; asm ("inc %v", CharCount); ; .dbg line, "_scanf.c", 260 inc _CharCount ; ; asm ("bne %g", Done); ; .dbg line, "_scanf.c", 261 bne L006F ; ; asm ("inc %v+1", CharCount); ; .dbg line, "_scanf.c", 262 inc _CharCount+1 ; ; } ; .dbg line, "_scanf.c", 265 L006F: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __fastcall__ Error (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _Error .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 273 jsr pusha ; ; asm ("pha"); ; .dbg line, "_scanf.c", 274 pha ; ; (char*) __AX__ = JumpBuf; ; .dbg line, "_scanf.c", 275 lda #<(_JumpBuf) ldx #>(_JumpBuf) ; ; asm ("jsr pushax"); ; .dbg line, "_scanf.c", 276 jsr pushax ; ; asm ("pla"); ; .dbg line, "_scanf.c", 277 pla ; ; asm ("ldx #>0"); ; .dbg line, "_scanf.c", 278 ldx #>0 ; ; asm ("jmp %v", longjmp); ; .dbg line, "_scanf.c", 279 jmp _longjmp ; ; } ; .dbg line, "_scanf.c", 280 jsr incsp1 rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ CheckEnd (void) ; --------------------------------------------------------------- .segment "CODE" .proc _CheckEnd: near .segment "CODE" ; ; asm ("ldx %v+1", C); ; .dbg line, "_scanf.c", 290 ldx _C+1 ; ; asm ("beq %g", Done); ; .dbg line, "_scanf.c", 291 beq L007E ; ; Error (RC_EOF); ; .dbg line, "_scanf.c", 293 lda #$02 jmp _Error ; ; } ; .dbg line, "_scanf.c", 295 L007E: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ SkipWhite (void) ; --------------------------------------------------------------- .segment "CODE" .proc _SkipWhite: near .segment "CODE" ; ; while ((bool) isspace (C)) { ; .dbg line, "_scanf.c", 302 L0082: lda _C ldx _C+1 jsr _isspace tax beq L0083 ; ; ReadChar (); ; .dbg line, "_scanf.c", 303 jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 304 jmp L0082 ; ; } ; .dbg line, "_scanf.c", 305 L0083: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ ReadSign (void) ; --------------------------------------------------------------- .segment "CODE" .proc _ReadSign: near .segment "CODE" ; ; asm ("lda %v", C); ; .dbg line, "_scanf.c", 319 lda _C ; ; asm ("cmp #'-'"); ; .dbg line, "_scanf.c", 320 cmp #'-' ; ; asm ("bne %g", NotNeg); ; .dbg line, "_scanf.c", 321 bne L008B ; ; asm ("sta %v", Converted); ; .dbg line, "_scanf.c", 324 sta _Converted ; ; asm ("jsr %v", ReadChar); ; .dbg line, "_scanf.c", 325 jsr _ReadChar ; ; asm ("lda #$00"); /* Flag as negative */ ; .dbg line, "_scanf.c", 326 lda #$00 ; ; asm ("beq %g", Store); ; .dbg line, "_scanf.c", 327 beq L0090 ; ; asm ("cmp #'+'"); ; .dbg line, "_scanf.c", 331 L008B: cmp #'+' ; ; asm ("bne %g", Pos); ; .dbg line, "_scanf.c", 332 bne L0093 ; ; asm ("sta %v", Converted); ; .dbg line, "_scanf.c", 333 sta _Converted ; ; asm ("jsr %v", ReadChar); /* Skip the + sign */ ; .dbg line, "_scanf.c", 334 jsr _ReadChar ; ; asm ("lda #$01"); /* Flag as positive */ ; .dbg line, "_scanf.c", 336 L0093: lda #$01 ; ; asm ("sta %v", Positive); ; .dbg line, "_scanf.c", 338 L0090: sta _Positive ; ; } ; .dbg line, "_scanf.c", 339 rts .dbg line .endproc ; --------------------------------------------------------------- ; unsigned char __fastcall__ HexVal (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _HexVal .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 347 jsr pusha ; ; return (bool) isdigit (C) ? ; .dbg line, "_scanf.c", 348 ldy #$00 lda (sp),y tay lda __ctype,y and #$04 ; ; C - '0' : ; .dbg line, "_scanf.c", 349 beq L00A2 ldy #$00 ldx #$00 lda (sp),y sec sbc #$30 jcs incsp1 dex ; ; (char) tolower ((int) C) - ('a' - 10); ; .dbg line, "_scanf.c", 350 jmp incsp1 L00A2: tay tax lda (sp),y jsr _tolower sec sbc #$37 jcs incsp1 dex jmp incsp1 .dbg line .endproc ; --------------------------------------------------------------- ; void __fastcall__ ReadInt (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _ReadInt .segment "BSS" L00AC: .res 1,$00 L00AD: .res 1,$00 .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 357 jsr pusha ; ; unsigned char Val, CharCount = 0; ; .dbg line, "_scanf.c", 358 lda #$00 sta L00AD ; ; IntVal = 0L; ; .dbg line, "_scanf.c", 361 sta _IntVal sta _IntVal+1 sta _IntVal+2 sta _IntVal+3 ; ; while ((bool) isxdigit (C) && ++Width != 0 ; .dbg line, "_scanf.c", 362 L00B1: lda _C ldx _C+1 jsr _isxdigit tax beq L00B2 inc _Width bne L00B6 inc _Width+1 L00B6: lda _Width ora _Width+1 ; ; && (Val = HexVal ((char) C)) < Base) { ; .dbg line, "_scanf.c", 363 beq L00B2 lda _C jsr _HexVal sta L00AC jsr pushax ldy #$02 ldx #$00 lda (sp),y jsr tosicmp bcs L00B2 ; ; ++CharCount; ; .dbg line, "_scanf.c", 364 inc L00AD ; ; IntVal = IntVal * (long) Base + (long) Val; ; .dbg line, "_scanf.c", 365 lda _IntVal+3 sta sreg+1 lda _IntVal+2 sta sreg ldx _IntVal+1 lda _IntVal jsr pusheax ldy #$04 ldx #$00 lda (sp),y stx sreg stx sreg+1 jsr tosmuleax jsr pusheax ldx #$00 lda L00AC ldy #$00 stx sreg stx sreg+1 jsr tosaddeax sta _IntVal stx _IntVal+1 ldy sreg sty _IntVal+2 ldy sreg+1 sty _IntVal+3 ; ; ReadChar (); ; .dbg line, "_scanf.c", 366 jsr _ReadChar ; ; } ; .dbg line, "_scanf.c", 367 jmp L00B1 ; ; if (CharCount == 0) { ; .dbg line, "_scanf.c", 370 L00B2: lda L00AD bne L00C0 ; ; Error (RC_NOCONV); ; .dbg line, "_scanf.c", 371 lda #$01 jsr _Error ; ; Converted = true; ; .dbg line, "_scanf.c", 375 L00C0: lda #$01 sta _Converted ; ; } ; .dbg line, "_scanf.c", 376 jmp incsp1 .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ AssignInt (void) ; --------------------------------------------------------------- .segment "CODE" .proc _AssignInt: near .segment "CODE" ; ; if (NoAssign == false) { ; .dbg line, "_scanf.c", 388 lda _NoAssign bne L00DB ; ; (void*) __AX__ = va_arg (ap, void*); ; .dbg line, "_scanf.c", 391 sec lda _ap sbc #$02 sta _ap bcs L00D0 dec _ap+1 L00D0: ldx _ap+1 ldy #$01 jsr ldaxidx ; ; asm ("sta ptr1"); ; .dbg line, "_scanf.c", 394 sta ptr1 ; ; asm ("stx ptr1+1"); ; .dbg line, "_scanf.c", 395 stx ptr1+1 ; ; asm ("ldy %v", IntBytes); ; .dbg line, "_scanf.c", 398 ldy _IntBytes ; ; Loop: asm ("lda %v,y", IntVal); ; .dbg line, "_scanf.c", 401 L00D4: lda _IntVal,y ; ; asm ("sta (ptr1),y"); ; .dbg line, "_scanf.c", 402 sta (ptr1),y ; ; asm ("dey"); ; .dbg line, "_scanf.c", 403 dey ; ; asm ("bpl %g", Loop); ; .dbg line, "_scanf.c", 404 bpl L00D4 ; ; asm ("inc %v", Assignments); ; .dbg line, "_scanf.c", 407 inc _Assignments ; ; asm ("bne %g", Done); ; .dbg line, "_scanf.c", 408 bne L00DB ; ; asm ("inc %v+1", Assignments); ; .dbg line, "_scanf.c", 409 inc _Assignments+1 ; ; } ; .dbg line, "_scanf.c", 412 L00DB: rts .dbg line .endproc ; --------------------------------------------------------------- ; void __fastcall__ ScanInt (unsigned char) ; --------------------------------------------------------------- .segment "CODE" .proc _ScanInt .segment "CODE" ; ; { ; .dbg line, "_scanf.c", 420 jsr pusha ; ; SkipWhite (); ; .dbg line, "_scanf.c", 422 jsr _SkipWhite ; ; ReadSign (); ; .dbg line, "_scanf.c", 425 jsr _ReadSign ; ; if (Base == 0) { ; .dbg line, "_scanf.c", 428 ldy #$00 lda (sp),y bne L00FD ; ; if (CHAR (C) == '0') { ; .dbg line, "_scanf.c", 429 lda _C cmp #$30 bne L00E2 ; ; ReadChar (); ; .dbg line, "_scanf.c", 430 jsr _ReadChar ; ; switch (CHAR (C)) { ; .dbg line, "_scanf.c", 431 lda _C ; ; } ; .dbg line, "_scanf.c", 446 cmp #$58 beq L00EF cmp #$D8 bne L00F7 ; ; Base = 16; ; .dbg line, "_scanf.c", 434 L00EF: lda #$10 ldy #$00 sta (sp),y ; ; Converted = true; ; .dbg line, "_scanf.c", 435 lda #$01 sta _Converted ; ; ReadChar (); ; .dbg line, "_scanf.c", 436 jsr _ReadChar ; ; break; ; .dbg line, "_scanf.c", 437 jmp L00FD ; ; Base = 8; ; .dbg line, "_scanf.c", 439 L00F7: lda #$08 ldy #$00 sta (sp),y ; ; PushBack (); ; .dbg line, "_scanf.c", 444 jsr _PushBack ; ; C = '0'; ; .dbg line, "_scanf.c", 445 ldx #$00 lda #$30 sta _C stx _C+1 ; ; } ; .dbg line, "_scanf.c", 446 jmp L00FD ; ; Base = 10; ; .dbg line, "_scanf.c", 448 L00E2: lda #$0A sta (sp),y ; ; ReadInt (Base); ; .dbg line, "_scanf.c", 453 L00FD: ldy #$00 lda (sp),y jsr _ReadInt ; ; if (Positive == false) { ; .dbg line, "_scanf.c", 456 lda _Positive bne L0102 ; ; IntVal = -IntVal; ; .dbg line, "_scanf.c", 457 lda _IntVal+3 sta sreg+1 lda _IntVal+2 sta sreg ldx _IntVal+1 lda _IntVal jsr negeax sta _IntVal stx _IntVal+1 ldy sreg sty _IntVal+2 ldy sreg+1 sty _IntVal+3 ; ; AssignInt (); ; .dbg line, "_scanf.c", 461 L0102: jsr _AssignInt ; ; } ; .dbg line, "_scanf.c", 462 jmp incsp1 .dbg line .endproc ; --------------------------------------------------------------- ; unsigned char __near__ GetFormat (void) ; --------------------------------------------------------------- .segment "CODE" .proc _GetFormat: near .segment "CODE" ; ; (const char*) __AX__ = format; ; .dbg line, "_scanf.c", 470 lda _format ldx _format+1 ; ; asm ("sta regsave"); ; .dbg line, "_scanf.c", 471 sta regsave ; ; asm ("stx regsave+1"); ; .dbg line, "_scanf.c", 472 stx regsave+1 ; ; ++format; ; .dbg line, "_scanf.c", 473 inc _format bne L010D inc _format+1 ; ; asm ("ldy #0"); ; .dbg line, "_scanf.c", 474 L010D: ldy #0 ; ; asm ("lda (regsave),y"); ; .dbg line, "_scanf.c", 475 lda (regsave),y ; ; asm ("ldx #>0"); ; .dbg line, "_scanf.c", 476 ldx #>0 ; ; return (F = (char) __AX__); ; .dbg line, "_scanf.c", 477 sta _F ; ; } ; .dbg line, "_scanf.c", 478 rts .dbg line .endproc