Add full compiler toolchain, libc, examples and reference docs
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+554
@@ -0,0 +1,554 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; memchr
|
||||
; strcpy
|
||||
; strncpy
|
||||
; strcat
|
||||
; strncat
|
||||
; strcmp
|
||||
; strncmp
|
||||
; strchr
|
||||
; strcspn
|
||||
; strpbrk
|
||||
; strlen
|
||||
; strrchr
|
||||
; strlwr
|
||||
; strupr
|
||||
; strspn
|
||||
; strstr
|
||||
; strtok
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE memchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¨é¥â ¯¥à¢ë¥ count ¡ ©â ¢ buff á æ¥«ìî ®¡ à㦥¨ï
|
||||
; ¯¥à¢®£® ¯®ï¢«¥¨ï ᨬ¢®« "c". �®¨áª ¯à®¤®«¦ ¥âáï ¤® â¥å ¯®à,
|
||||
; ¯®ª ¥ ¡ã¤¥â ©¤¥ 㪠§ ë© á¨¬¢®« ¨«¨ ¥ ¡ã¤ã⠯஢¥à¥ë
|
||||
; ¢á¥ count ¡ ©âë.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì à ᯮ«®¦¥¨¥ ᨬ¢®« "c" ¢ buff.
|
||||
; …᫨ ᨬ¢®« "c" ¥ ®¡ à㦥 ¢ ¯¥à¢ëå count ¡ ©â å buff, ¢®§¢à -
|
||||
; é ¥âáï NULL.
|
||||
;
|
||||
; void *memchr(char *buff, c, count)
|
||||
;
|
||||
memchr_::
|
||||
ld a,e ; ᨬ¢®«
|
||||
cpir
|
||||
dec hl
|
||||
ret z ; ©¤¥
|
||||
ld hl,0 ; NULL
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcpy
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ª®¯¨àã¥â s2 ¢ s1 (¢ª«îç ï 0-© ᨬ¢®« ®ª®ç ¨ï áâப¨).
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strcpy(*s1, *s2)
|
||||
;
|
||||
strcpy_::
|
||||
ex de,hl
|
||||
push de
|
||||
@1: ld a,(hl)
|
||||
ldi
|
||||
or a
|
||||
jp nz,@1
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncpy
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ª®¯¨àã¥â â®ç® count ᨬ¢®«®¢ áâப¨ s2 ¢ áâபã s1.
|
||||
; …᫨ count ¬¥ìè¥ ¤«¨ë s2, ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨
|
||||
; ¥ ¤®¡ ¢«ï¥âáï ª áâப¥ s1. …᫨ count ¡®«ìè¥ ¤«¨ë s2, â®
|
||||
; s1 § ¯®«ï¥âáï ã«¥¢ë¬¨ ᨬ¢®« ¬¨, ¢¯«®âì ¤® ¤®á⨦¥¨ï ¤«¨ë
|
||||
; count.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strncpy(*s1, *s2, count)
|
||||
;
|
||||
strncpy_::
|
||||
ex de,hl
|
||||
push de
|
||||
@2: ld a,(hl)
|
||||
@3: ldi
|
||||
jp pe,@4
|
||||
or a
|
||||
jp nz,@2
|
||||
dec hl
|
||||
jp @3
|
||||
;
|
||||
@4: pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcat
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¤®¡ ¢«ï¥â s2 ª s1, § ¢¥àè ï áâபã s1
|
||||
; ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strcat(*s1, *s2)
|
||||
;
|
||||
strcat_::
|
||||
xor a
|
||||
ld b,a
|
||||
ld c,a
|
||||
push hl
|
||||
cpir
|
||||
dec hl
|
||||
ex de,hl
|
||||
@1: ld a,(hl)
|
||||
ldi
|
||||
or a
|
||||
jp nz,@1
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncat
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¤®¡ ¢«ï¥â count ᨬ¢®«®¢ áâப¨ s2 ¢ ª®¥æ áâப¨ s1,
|
||||
; § ¢¥àè ï áâபã s1 ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; ‚ s1 ¤®«¦® ¡ëâì ¤®áâ â®ç® ¬¥áâ ¤«ï à §¬¥é¥¨ï १ã«ìâ¨àã-
|
||||
; î饩 áâப¨.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strncat(*s1, *s2, count)
|
||||
;
|
||||
strncat_::
|
||||
xor a
|
||||
push hl
|
||||
ld bc,0
|
||||
cpir
|
||||
dec hl
|
||||
ex de,hl
|
||||
@4: ld a,(hl)
|
||||
or a
|
||||
jr z,@5
|
||||
ldi
|
||||
jp po,@4
|
||||
@5: xor a
|
||||
ld (de),a
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcmp
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®á«¥¤®¢ ⥫쮥 ॣ¨áâà®-§ ¢¨á¨¬®¥
|
||||
; áà ¢¥¨¥ ᨬ¢®«®¢ áâப s1 ¨ s2, ¨ ¯à®¤®«¦ ¥â íâ®, ¯®ª
|
||||
; ®¨ ᮢ¯ ¤ îâ, «¨¡® ¯®ª ®¤ ¨§ áâப ¥ § ª®ç¨âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥, 㪠§ë¢ î饥 á®®â®è¥¨¥
|
||||
; íâ¨å áâப:
|
||||
; < 0 s1 < s2
|
||||
; = 0 s1 = s2
|
||||
; > 0 s1 > s2
|
||||
;
|
||||
; int strcmp(*s1, *s2)
|
||||
;
|
||||
strcmp_::
|
||||
ex de,hl
|
||||
@6: ld a,(de)
|
||||
sub (hl)
|
||||
jr nz,@7
|
||||
inc de
|
||||
inc hl
|
||||
ld a,(de)
|
||||
or a
|
||||
jp nz,@6
|
||||
@7: ld h,a
|
||||
ld l,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncmp
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®á«¥¤®¢ ⥫쮥 ॣ¨áâà®-§ ¢¨á¨¬®¥ áà ¢¥¨¥
|
||||
; ᨬ¢®«®¢ áâப s1 ¨ s2. Š®«¨ç¥á⢮ áà ¢¨¢ ¥¬ëå ᨬ¢®«®¢ § ¤ ¥âáï
|
||||
; ¢ count. …᫨ ®¤ ¨§ áâப § ª 稢 ¥âáï, áà ¢¥¨¥ ¯à¥ªà é ¥âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥, 㪠§ë¢ î饥 á®®â®è¥¨¥ íâ¨å áâப:
|
||||
; < 0 s1 < s2
|
||||
; = 0 s1 = s2
|
||||
; > 0 s1 > s2
|
||||
;
|
||||
; int strncmp(*s1, *s2, uint count)
|
||||
;
|
||||
strncmp_::
|
||||
ex de,hl
|
||||
@6: ld a,(de)
|
||||
sub (hl)
|
||||
jr nz,@7
|
||||
ld a,(de)
|
||||
or a
|
||||
jr z,@7
|
||||
inc de
|
||||
inc hl
|
||||
dec bc
|
||||
ld a,b
|
||||
or c
|
||||
jp nz,@6
|
||||
@7: ld h,a
|
||||
ld l,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯¥à¢®¥ ¢å®¦¤¥¨¥ "c" ¢ string.
|
||||
; ‘¨¬¢®« "c" ¬®¦¥â ¡ëâì ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï string â ª¦¥ ¢ª«îç ¥âáï ¢ ¯®¨áª.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥ "c" ¢ string.
|
||||
; ‚®§¢à é ¥âáï NULL, ¥á«¨ ᨬ¢®« ¥ ©¤¥.
|
||||
;
|
||||
; char *strchr(*string, c)
|
||||
;
|
||||
strchr_::
|
||||
ld a,(hl) ; string
|
||||
cp e ; ᨬ¢®« "c"
|
||||
ret z
|
||||
inc hl
|
||||
or a
|
||||
jp nz,strchr_
|
||||
ld h,a ; NULL
|
||||
ld l,a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE inrange
|
||||
;
|
||||
; ¢ë§ë¢ ¥âáï ¨§ ¤à. ¯/¯à®£à ¬¬
|
||||
;
|
||||
@inran::
|
||||
ld a,(hl)
|
||||
or a
|
||||
ret z
|
||||
cp e
|
||||
inc hl
|
||||
jp nz,@inran
|
||||
or 0FFh
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcspn
|
||||
;
|
||||
; "string.h"
|
||||
; � 室¨â ¯¥à¢ãî ç áâì áâப¨ ¢ s1, ¥ ¢å®¤ïéãî ¢ áâபã s2.
|
||||
; ‚®§¢à é ¥â ¤«¨ã ç á⨠áâப¨ s1, á®áâ®ï饩 ¨§ ᨬ¢®«®¢, ¥
|
||||
; ©¤¥ëå ¢ áâப¥ s2. …᫨ ¨ ®¤¨ ¨§ ᨬ¢®«®¢ áâப¨ s1 ¥
|
||||
; ©¤¥ ¢ s2, ¢®§¢à é ¥âáï ®¡é ï ¤«¨ áâப¨ s1 ¡¥§ § ¢¥àè -
|
||||
; î饣® ã«ï.
|
||||
;
|
||||
; size_t strcspn(*s1, *s2)
|
||||
;
|
||||
strcspn_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0
|
||||
@1: ld a,(bc)
|
||||
or a
|
||||
ret z
|
||||
push hl
|
||||
ex de,hl
|
||||
push hl
|
||||
ld e,a
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret nz
|
||||
inc hl
|
||||
inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strpbrk
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯¥à¢®¥ ¢å®¦¤¥¨¥ ¢ áâப¥ s1 «î¡®£®
|
||||
; ᨬ¢®« ¨§ áâப¨ s2. �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï ¯à¨
|
||||
; ¯®¨áª¥ ¥ à áᬠâਢ ¥âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥
|
||||
; ᨬ¢®« ¨§ s2 ¢ áâப¥ s1.
|
||||
; �ਠ®âáãâá⢨¨ ®¡é¨å ᨬ¢®«®¢ ¢ s1 ¨ s2, ¢®§¢à -
|
||||
; é ¥âáï NULL.
|
||||
;
|
||||
; char *strpbrk(*s1, *s2)
|
||||
;
|
||||
strpbrk_::
|
||||
ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
@1: push hl
|
||||
ld l,(hl)
|
||||
push de
|
||||
ex de,hl
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret nz
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: ld h,a ; NULL
|
||||
ld l,a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strlen
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ¢ ¡ ©â å ¤«¨ã áâப¨ string,
|
||||
; ¯à¨ç¥¬ ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨, ¢ à §¬¥à
|
||||
; áâப¨ ¥ ¢å®¤¨â.
|
||||
;
|
||||
; size_t strlen(*string)
|
||||
;
|
||||
strlen_::
|
||||
xor a
|
||||
ld b,a
|
||||
ld c,a
|
||||
push hl
|
||||
cpir
|
||||
pop de
|
||||
scf
|
||||
sbc hl,de ; hl = ¤«¨ áâப¨
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strrchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯®á«¥¤¥¥ ¢å®¦¤¥¨¥ ᨬ¢®« "c"
|
||||
; ¢ áâப¥ string. �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨
|
||||
; string â ª¦¥ ¢ª«îç ¥âáï ¢ ¯®¨áª.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯®á«¥¤¥¥ ¢å®¦¤¥¨¥
|
||||
; ᨬ¢®« "c" ¢ string.
|
||||
; …᫨ § ¤ ë© á¨¬¢®« ¥ ©¤¥, ¢®§¢à é ¥âáï NULL.
|
||||
;
|
||||
; char *strrchr(*string, c)
|
||||
;
|
||||
strrchr_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0 ; NULL
|
||||
@1: ld a,(bc) ; string
|
||||
or a
|
||||
ret z
|
||||
cp e ; ᨬ¢®« "c"
|
||||
jp nz,@2
|
||||
ld h,b ; ¤à¥á ¢å®¦¤¥¨ï
|
||||
ld l,c
|
||||
@2: inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strlwr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à¥®¡à §®¢ë¢ ¥â «î¡ë¥ ¡ãª¢ë ¢¥à奣® ॣ¨áâà
|
||||
; áâப¨ string, § ª 稢 î饩áï ã«¥¬, ¢ ¡ãª¢ë ¨¦¥£®
|
||||
; ॣ¨áâà . „à㣨¥ ᨬ¢®«ë ¥ à áᬠâਢ îâáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì áâபã string.
|
||||
;
|
||||
; char *strlwr(*string)
|
||||
;
|
||||
strlwr_::
|
||||
push hl
|
||||
@1: ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
call tolower_## ; A..Z -> a..z
|
||||
ld (hl),a
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: pop hl ; ¢¥àãâì ¤à¥á string
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strupr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à¥®¡à §®¢ë¢ ¥â «î¡ë¥ ¡ãª¢ë ¨¦¥£® ॣ¨áâà
|
||||
; áâப¨ string, § ª 稢 î饩áï ã«¥¬, ¢ ¡ãª¢ë ¢¥à奣®
|
||||
; ॣ¨áâà . „à㣨¥ ᨬ¢®«ë ¥ à áᬠâਢ îâáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì áâபã string.
|
||||
;
|
||||
; char *strupr(*string)
|
||||
;
|
||||
strupr_::
|
||||
push hl
|
||||
@1: ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
call toupper_## ; a..z -> A..Z
|
||||
ld (hl),a
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: pop hl ; ¢¥àãâì ¤à¥á string
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strspn
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ¤«¨ã ᮢ¯ ¤ î饩 ç á⨠áâப¨ s1, ª®â®à ï
|
||||
; ¯®«®áâìî á®á⮨⠨§ ᨬ¢®«®¢, ©¤¥ëå ¢ áâப¥ s2. �ã«¥¢®©
|
||||
; ᨬ¢®« ®ª®ç ¨ï áâப¨ s2 ¥ à áᬠâਢ ¥âáï.
|
||||
; …᫨ áâப s1 ç¨ ¥âáï á ᨬ¢®« , ¥ ¢å®¤ï饣® ¢ áâபã s2,
|
||||
; ¢®§¢à é ¥âáï 0.
|
||||
;
|
||||
; size_t strspn(*s1, *s2)
|
||||
;
|
||||
strspn_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0 ; ç. ¤«¨ ¯®¤áâப¨
|
||||
@1: ld a,(bc)
|
||||
or a
|
||||
ret z
|
||||
push hl
|
||||
ex de,hl
|
||||
push hl
|
||||
ld e,a
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret z ; ¢¥àãâì ¤«¨ã ¯®¤áâப¨
|
||||
inc hl
|
||||
inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strstr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥
|
||||
; áâப¨ s2 ¢ áâபã s1.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â NULL, ¥á«¨ s2 ¥ ¡ë« ©¤¥ .
|
||||
; …᫨ ¤«¨ áâப¨ s2 à ¢ 0, ¢®§¢à é ¥âáï s1.
|
||||
;
|
||||
; char *strstr(*s1, *s2)
|
||||
;
|
||||
strstr_::
|
||||
ld a,(hl)
|
||||
or a
|
||||
jr nz,@1
|
||||
ld l,a ; NULL
|
||||
ld h,a
|
||||
ret
|
||||
@1: push hl ; ¤à¥á s1
|
||||
push de ; ¤à¥á s2
|
||||
@2: ld a,(de) ; s2
|
||||
or a
|
||||
jr z,@3
|
||||
cp (hl) ; s1
|
||||
inc hl
|
||||
inc de
|
||||
jp z,@2
|
||||
pop de
|
||||
pop hl
|
||||
inc hl
|
||||
jp strstr_
|
||||
;
|
||||
@3: pop de
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strtok
|
||||
;
|
||||
; "string.h"
|
||||
; �®¨áª ⮪¥ (®¢).
|
||||
; ”ãªæ¨ï 室¨â ¢ áâப¥ s1 ⮪¥, ®â¤¥«¥ë© ®¤¨¬ (¨«¨ ¡®«¥¥)
|
||||
; ®£à ¨ç¨â¥«¥¬ ¨§ ¬®¦¥á⢠ᨬ¢®«®¢-®£à ¨ç¨â¥«¥© áâப¨ s2.
|
||||
; � ©¤¥ë© ⮪¥ ¢ áâப¥ s1 ®ª 稢 ¥âáï ã«¥¬.
|
||||
; „«ï ⮣®, çâ®¡ë ¯à®ç¨â âì á«¥¤ãî騩 ⮪¥ ¨§ s1, äãªæ¨ï strtok
|
||||
; ¤®«¦ ¢ë§ë¢ âìáï á NULL-§ 票¥¬ ¤«ï à£ã¬¥â s1.
|
||||
; €à£ã¬¥â NULL s1 ¢ë§ë¢ ¥â strtok ¯®¨áª á«¥¤ãî饣® § ª ¢
|
||||
; ¯à¥¤ë¤ã饩 áâப¥ ᨬ¢®«®¢.
|
||||
; Œ®¦¥á⢮ ®£à ¨ç¨â¥«¥© ¢ áâப s2, ®â ¢ë§®¢ ª ¢ë§®¢ã, ¬®¦¥â
|
||||
; ¡ëâì à §«¨çë¬, â ª çâ® s2 ¬®¦¥â ¯à¨¨¬ âì «î¡ë¥ § 票ï.
|
||||
; �ਠª ¦¤®¬ ¢ë§®¢¥, äãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ©¤¥ë©
|
||||
; ⮪¥ áâப¨ s1, ª ¦¤ë© à § ¯à®¤¢¨£ ïáì ¢¯¥à¥¤ ¯® áâப¥ s1.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì NULL, ª®£¤ ¡®«ìè¥ ¥â ⮪¥®¢
|
||||
; ¢ áâப¥ s1.
|
||||
;
|
||||
; char *strtok(*s1, *s2)
|
||||
;
|
||||
strtok_::
|
||||
ld (@4+1),de ; s2
|
||||
ld (@2+1),hl ; s1
|
||||
ld a,l
|
||||
or h
|
||||
jr nz,@0
|
||||
@3: ld hl,0 ; ¤à¥á á«¥¤. ¯®¨áª ¢ s1
|
||||
ld (@2+1),hl
|
||||
@0: ld (@1+1),hl ; s1
|
||||
@2: ld hl,0 ; ⥪. ¤à¥á ¢ s1
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (@2+1),hl
|
||||
or a
|
||||
jr z,@1
|
||||
ld e,a
|
||||
@4: ld hl,0 ; á®åà. ¤à¥á s2
|
||||
call @inran##
|
||||
jr z,@2
|
||||
ld hl,(@2+1) ; ⥪. ¤à¥á ¢ s1
|
||||
dec hl
|
||||
ld (hl),0 ; ¬¥áâ® ©¤¥®£® ᨬ¢®« ?
|
||||
inc hl
|
||||
ld (@3+1),hl ; ¤à¥á á«¥¤. ¯®¨áª ¢ s1
|
||||
@1: ld hl,0 ; ¤à¥á ©¤¥®£® ᨬ¢®«
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
Reference in New Issue
Block a user