c71e249a4e
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>
1175 lines
28 KiB
NASM
1175 lines
28 KiB
NASM
; ”ãªæ¨¨ ¯à®¢¥à¥ë.
|
||
;
|
||
; ‚室ï騥 äãªæ¨¨:
|
||
;
|
||
; errno - ï祩ª
|
||
; open
|
||
; close
|
||
; creat
|
||
; read
|
||
; write
|
||
; sleep
|
||
; chdir
|
||
; getcwd
|
||
; strerr - ¢ ‘¨ ª ª strerror
|
||
; perror
|
||
; isatty
|
||
; unlink
|
||
; remove
|
||
; mkdir
|
||
; rmdir
|
||
; rename
|
||
; getenv
|
||
; putenv
|
||
; sysenv
|
||
; seek
|
||
; lseek
|
||
; tell
|
||
; ltell
|
||
; ioctl - ¥ £®â®¢
|
||
;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
MODULE errno
|
||
;---------------------------------------------------------------------
|
||
; errno variable
|
||
;---------------------------------------------------------------------
|
||
dseg
|
||
errno_::
|
||
db 0 ; ®¬¥à á¨áâ. ®è¨¡ª¨
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE open
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; creat() ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï creat á®§¤ ¥â ®¢ë© ä ©«.
|
||
; …᫨ ä ©« 㦥 áãé¥áâ¢ã¥â, ã१ ¥â ¥£® ¤® ã«¥¢®© ¤«¨ë.
|
||
; ‡ 票¥ attr á®á⮨⠨§ ®¤®© ¨«¨ ¥áª®«ìª¨å ª®áâ â:
|
||
; S_IWRITE ¨ S_IREAD, ®¡ê¥ëå ¢ "stat.h". …᫨ § ¤ îâáï ®¡¥
|
||
; ª®áâ âë, ®¨ ®¡ê¥¤¨ïîâáï ¯à¨ ¯®¬®é¨ «®£¨ç¥áª®£® ˆ‹ˆ "|".
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ®¬¥à ¤¥ªáਯâ®à .
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï § 票¥ -1 (0FFFFh) ¨ errno
|
||
; ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; uint creat(char *name, int attr)
|
||
; uint creat(char *name, char attr)
|
||
;--------------------------------------------------------------------------
|
||
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; open() ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï open ®âªàë¢ ¥â ä ©«, ®¯à¥¤¥«ï¥¬ë© ¯® path-¨¬¥¨ ¨ ¯®¤£®â ¢«¨¢ ¥â
|
||
; ¥£® ª ¯®á«¥¤ãî饬ã çâ¥¨î ¨«¨ § ¯¨á¨, çâ® ®¯à¥¤¥«ï¥âáï ¯®á।á⢮¬
|
||
; oflag. €à£ã¬¥â oflag ï¥âáï æ¥«ë¬ ¢ëà ¦¥¨¥¬, á®áâ®ï騬 ¨§ ª®¬¡¨-
|
||
; 樨 ®¤®© ¨«¨ ¡®«¥¥ ¬ ¨ä¥áâëå ª®áâ â, ®¡ê¥ëå ¢ "io.h".
|
||
; …᫨ § ¤ ® ¡®«ìè¥ ®¤®© ª®áâ âë, â® ®¨ ®¡ê¥¤¨ïîâáï ¯à¨ ¯®¬®é¨
|
||
; «®£¨ç¥áª®£® ®¯¥à â®à ˆ‹ˆ "|". ‡ 票ï à£ã¬¥â oflag ¯à¨¢®¤ïâáï
|
||
; ¨¦¥:
|
||
;
|
||
; O_RDWR ” ©« ®âªàëâ ®¤®¢à¥¬¥® ¤«ï çâ¥¨ï ¨ § ¯¨á¨.
|
||
; …᫨ § ¤ ¥âáï íâ®â ä« £, ¬®¦¥â ¡ëâì ¢ë¡à
|
||
; «¨¡® ä« £ O_RDONLY, «¨¡® O_WRONLY.
|
||
;
|
||
; O_RDONLY ” ©« ®âªàëâ ⮫쪮 ¤«ï ç⥨ï. …᫨ § ¤ ¥âáï
|
||
; íâ®â ä« £, ¬®¦¥â ¡ëâì ¢ë¡à «¨¡® ä« £ O_RDWR,
|
||
; «¨¡® O_WRONLY.
|
||
;
|
||
; O_WRONLY ” ©« ®âªàëâ ⮫쪮 ¤«ï § ¯¨á¨. …᫨ § ¤ íâ®â
|
||
; ä« £, ¬®¦¥â ¡ëâì § ¤ â ª¦¥ «¨¡® ä« £ O_RDONLY,
|
||
; «¨¡® ORDWR.
|
||
;
|
||
; O_TRUNC ‘ãé¥áâ¢ãî騩 ä ©« ®âªàëâ ç⥨¥ ¨ § ¯¨áì, ¨
|
||
; ãá¥ç¥ ª ¤«¨¥ 0. �â®â ä ©« ¤®«¦¥ ¨¬¥âì à §à¥-
|
||
; 襨¥ § ¯¨áì. ‘®¤¥à¦¨¬®¥ ä ©« ã¨ç⮦ ¥âáï.
|
||
;
|
||
; O_CREAT �®¢ë© ä ©« á®§¤ ¨ ®âªàëâ ¤«ï ç⥨ï/§ ¯¨á¨;
|
||
; íâ® ¥ íä䥪⨢®, ¥á«¨ áãé¥áâ¢ã¥â ä ©«, ®¯à¥-
|
||
; ¤¥«ï¥¬ë© ¯® path-¨¬¥¨.
|
||
;
|
||
; O_EXCL ‚®§¢à é ¥âáï § 票¥ ®è¨¡ª¨, ¥á«¨ áãé¥áâ¢ã¥â
|
||
; ä ©«, ®¯à¥¤¥«ï¥¬ë© ¯® path-¨¬¥¨. �ਬ¥ï¥âáï
|
||
; ⮫쪮 ¢¬¥á⥠á O_CREATE.
|
||
;
|
||
; O_APPEND “ª § â¥«ì ¢ ä ©«¥ ¯¥à¥¬¥áâ¨âì ª®¥æ ä ©« .
|
||
; „«ï ०¨¬®¢ O_RDONLY, O_TRUNC ¨ O_CREAT ¥
|
||
; ¨¬¥¥â á¬ëá« .
|
||
;
|
||
; ‡ ¬¥ç ¨¥! O_TRUNC ¯®«®áâìî ã¨ç⮦ ¥â ᮤ¥à¦¨¬®¥ áãé¥áâ¢ãî饣®
|
||
; ä ©« , ¯®í⮬ã 㦮 ¢¨¬ â¥«ì® ¨á¯®«ì§®¢ âì íâã ª®áâ âã.
|
||
;
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ®¬¥à ¤¥áªà¨¯â®à ä ©« , ¥á«¨ Ok.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥â § 票¥ -1 (0FFFFh) ¨ ï祩ª errno ᮤ¥à¦¨â
|
||
; ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; in: hl = *pathname (㪠§ â¥«ì ¨¬ï ä ©« )
|
||
; de = oflag (⨯ ®¯¥à 権)
|
||
; out: hl = ®¬¥à ¤¥áªà¨¯â®à , ¥á«¨ Ok
|
||
; hl = -1 ¯à¨ ®è¨¡ª¥
|
||
;
|
||
; uint open(char *pathname, int oflag)
|
||
; uint open(char *pathname, char oflag)
|
||
;
|
||
creat_::
|
||
open_::
|
||
; e=oflag
|
||
push ix
|
||
ld a,3
|
||
and e ; mask 1,0 bits
|
||
xor 3
|
||
ld d,a ; save "a"
|
||
; a=0..2
|
||
dec a
|
||
jr z,open ; O_RDONLY
|
||
ld a,0Ch
|
||
and e ; 3,2 bits ?
|
||
jr z,open ; no (O_WRONLY and O_RDWR)
|
||
; O_CREAT or O_TRUNC
|
||
ld c,0Ah ; create file
|
||
bit 4,e
|
||
jr z,trunc ; no O_EXCL
|
||
inc c ; create new file
|
||
trunc: ld a,20h ; attr "archive"
|
||
rst 10h
|
||
jr op24
|
||
;
|
||
open: push de
|
||
ld a,d ; O_RDONLY, O_WRONLY, O_RDWR
|
||
ld c,11h
|
||
rst 10h
|
||
pop de
|
||
jr c,op24 ; file not found
|
||
bit 5,e ; O_APPEND
|
||
jr z,op24 ; no
|
||
; ãáâ. 㪠§ â¥«ì ¢ ª®¥æ ä ©«
|
||
push af ; save file descriptor
|
||
ld hl,0
|
||
push hl
|
||
pop ix
|
||
ld b,2 ; SEEK_END
|
||
ld c,15h ; move_fp
|
||
rst 10h
|
||
pop bc
|
||
ld a,b
|
||
;
|
||
op24: ld l,a ; file descriptor
|
||
ld h,0
|
||
pop ix
|
||
ret nc ; Ok
|
||
ld (errno_##),a
|
||
ld hl,-1 ; error
|
||
ret
|
||
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï § ªàë¢ ¥â ä ©«.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ä ©« ãá¯¥è® § ªàëâ.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï § 票¥ -1 (0FFFFh) ¨ errno
|
||
; ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; uint close(FD fd)
|
||
;
|
||
close_::
|
||
push ix
|
||
ld a,l
|
||
ld c,12h
|
||
rst 10h
|
||
pop ix
|
||
ld hl,0
|
||
ret nc ; Ok
|
||
ld (errno_##),a
|
||
dec hl ; -1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE read
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ç¨â ¥â ç¨á«® ¡ ©â count ¨§ ä ©« ¢ ¡ãä¥à buff.
|
||
; ޝ¥à æ¨ï ç⥨ï ç¨ ¥âáï á ⥪ã饩 ¯®§¨æ¨¨ 㪠§ â¥«ï ¢ ä ©«¥.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ç¨á«® ॠ«ì® ¯à®ç¨â ëå ¡ ©â®¢, ª®â®à®¥
|
||
; ®¤ ª®, ¬®¦¥â ¡ëâì ¬¥ìè¥ § ¥®£® ¢ count ( ¯à¨¬¥à ¢áâà¥-
|
||
; â¨âáï ª®¥æ ä ©« ). Œaªá¨¬a«ìo¥ ç¨á«o ¡a©âo¢, ªoâoào¥ ¬o¦o
|
||
; ¯àoç¨âaâì ¨§ äa©«a §a o¤¨ àa§, àa¢o 65534; ¯oáªo«ìªã 65535
|
||
; (OxFFFF) ï¥âáï ¥oâ«¨ç¨¬ë¬ oâ -1, ¯oíâo¬ã ¡ã¤¥â ¢o§¢àaé¥a
|
||
; o訡ªa.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ¤¥« ¥âáï ¯®¯ë⪠çâ¥¨ï ª®æ ä ©« .
|
||
; �ਠ®è¨¡ª¥ ç⥨ï, ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; size_t read(FD fd, void *buff, count)
|
||
;
|
||
read_::
|
||
push ix
|
||
ld a,l ; file descriptor
|
||
ex de,hl ; hl = buffer address
|
||
ld e,c ; de = number of bytes to read
|
||
ld d,b
|
||
ld c,13h
|
||
rst 10h
|
||
ex de,hl ; hl = number of bytes actually read
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
ld hl,-1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE write
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï § ¯¨áë¢ ¥â ç¨á«® ¡ ©â count ¨§ ¡ãä¥à buff ¢ ä ©«.
|
||
; ޝ¥à 樨 § ¯¨á¨ ç¨ îâáï á ⥪ã饩 ¯®§¨æ¨¨ 㪠§ â¥«ï ¢ ä ©«¥.
|
||
; …᫨ ä ©« ®âªàëâ ¤«ï ¤®¡ ¢«¥¨ï, ®¯¥à 樨 ¢ë¯®«ïîâáï ¢ ª®¥æ
|
||
; ä ©« . �®á«¥ ®áãé¥á⢫¥¨ï ®¯¥à 権 § ¯¨á¨, 㪠§ â¥«ì ¢ ä ©«¥
|
||
; 㢥«¨ç¨¢ ¥âáï ª®«¨ç¥á⢮ ॠ«ì® § ¯¨á ëå ¡ ©â®¢.
|
||
; Œ ªá. ç¨á«® § ¯¨áë¢ ¥¬ëå ¡ ©â®¢ ¢ ä ©« à ¢® 65534; ¯®áª®«ìªã
|
||
; ç¨á«® 65535 ï¥âáï ¥®â«¨ç¨¬ë¬ ®â -1, â® ¢®§¢à é ¥âáï ®è¨¡ª .
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ç¨á«® ॠ«ì® § ¯¨á ëå ¡ ©â.
|
||
; �ਠ®è¨¡ª¥ § ¯¨á¨ ¢®§¢à é ¥âáï § 票¥ -1 ¨ ¢ errno ãáâ ¢«¨-
|
||
; ¢ ¥âáï ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; out: hl=ç¨á«® ॠ«ì® § ¯¨á. ¡ ©â
|
||
;
|
||
; size_t write(FD fd, void *buff, count)
|
||
;
|
||
write_::
|
||
push ix
|
||
ld a,l ; file descriptor
|
||
ex de,hl ; hl = buffer address
|
||
ld e,c ; de = number of bytes to write
|
||
ld d,b
|
||
ld c,14h
|
||
rst 10h
|
||
ex de,hl ; hl = number of bytes actually write
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
ld hl,-1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE sleep
|
||
;
|
||
; "dos.h"
|
||
; ”ãªæ¨ï ¯à¨®áâ ¢«¨¢ ¥â ¢ë¯®«¥¨¥
|
||
; ¯à®£à ¬¬ë seconds ᥪã¤.
|
||
; �®á«¥ ¢ë¯®«¥¨ï äãªæ¨¨, ¯à¥àë¢ ¨ï
|
||
; ®áâ îâáï ¢ª«îç¥ë¬¨.
|
||
;
|
||
; void sleep(uint seconds)
|
||
;
|
||
sleep_::
|
||
ei
|
||
@1: ld a,l
|
||
or h
|
||
ret z
|
||
ld a,49 ; 1/50 ᥪã¤ë
|
||
@2: halt
|
||
dec a
|
||
jr nz,@2
|
||
dec hl
|
||
jr @1
|
||
|
||
ENDMODULE
|
||
|
||
|
||
; MODULE pid
|
||
;
|
||
; char getpid() -- MISIX only
|
||
; char getppid() -- MISIX only
|
||
;
|
||
;getppid_::
|
||
; ld c,49h
|
||
; db 21h
|
||
;getpid_::
|
||
; ld c,48h
|
||
; ld a,(_os_ver_##)
|
||
; cp 2
|
||
; ld a,0
|
||
; ret nz
|
||
; push ix
|
||
; call 5
|
||
; pop ix
|
||
; ret
|
||
;
|
||
; ENDMODULE
|
||
|
||
|
||
MODULE chdir
|
||
;
|
||
; "direct.h"
|
||
; ”ãªæ¨ï ¨§¬¥ï¥â ⥪ã騩 ª â «®£ ¨ ⥪ã騩 ¤¨áª, ¥á«¨ ® 㪠§
|
||
; ¢ pathname. …᫨ ¯ãâì ç¨ ¥âáï á "\" - íâ® ®§ ç ¥â ¯ãâì ®â
|
||
; ª®à¥¢®£® ª â «®£ , ¨ ç¥ ®â ⥪ã饣®. Pathname ¤®«¦¥ ááë« âìáï
|
||
; áãé¥áâ¢ãî騩 ª â «®£.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥ 0, ¥á«¨ à ¡®ç¨© ª â «®£ ãá¯¥è® ¨§¬¥¥.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char chdir(char *pathname)
|
||
;
|
||
chdir_::
|
||
;push ix
|
||
ld c,1Dh
|
||
rst 10h
|
||
ld (errno_##),a
|
||
;pop ix
|
||
ld a,0
|
||
ret nc
|
||
dec a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE getcwd
|
||
;
|
||
; "direct.h"
|
||
; ”ãªæ¨ï ¯®«ãç ¥â ¯®«®¥ (á ¡ãª¢®© ¤¨áª ) path-¨¬ï ⥪ã饣® ª â «®£
|
||
; ¨ á®åà ï¥â ¥£® ¢ ¡ãä¥à¥ pathbuff. ‚ ª®æ¥ path-¨¬¥¨ ⥪ã饣® ª â -
|
||
; «®£ á⮨â ᨬ¢®« "\" á § ª«îç¨â¥«ìë¬ ã«¥¬ ¢ ª®æ¥ áâப¨.
|
||
; €à£ã¬¥â len ®¯à¥¤¥«ï¥â ¬ ªá¨¬ «ìãî ¤«¨ã ¤«ï path-¨¬¥¨, ª®â®à ï
|
||
; ¤®«¦ ¡ëâì ¤®áâ â®ç®©, çâ®¡ë ¢¬¥áâ¨âì ¨ä®à¬ æ¨î ¢¬¥áâ¥ á § ª«îç¨-
|
||
; ⥫ìë¬ ã«¥¬. Œ ªá¨¬ «ì ï ¤«¨ path-¨¬¥¨ ¢ „Ž‘ à ¢ 256 ¡ ©â®¢.
|
||
; …᫨ ¤«¨ path-¨¬¥¨ ¯à¥¢ëè ¥â len, â® path-¨¬ï ®¡à¥§ ¥âáï ¤«¨ã
|
||
; len, ¯à¨ í⮬ ᨬ¢®« "\" ¢ ª®¥æ áâப¨ ¥ áâ ¢¨âáï.
|
||
; …᫨ à£ã¬¥â pathbuff à ¢¥ NULL, â® getcwd ¢ë§ë¢ ¥â malloc ¤«ï
|
||
; ¢ë¤¥«¥¨ï ¡ãä¥à à §¬¥à®¬ len ¡ ©â®¢. �â®â ¢ë¤¥«¥ë© ¡ãä¥à ¯®§¦¥ ¬®¦¥â
|
||
; ¡ëâì ®á¢®¡®¦¤¥ ¯®á।á⢮¬ äãªæ¨¨ free.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì pathbuff.
|
||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï NULL ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char *getcwd(char *pathbuff, int len)
|
||
;
|
||
getcwd_::
|
||
;push ix
|
||
ld (@6+1),de
|
||
ld a,l
|
||
or h
|
||
jr nz,@1
|
||
ex de,hl ; hl=len
|
||
inc hl
|
||
call malloc_##
|
||
ld a,l
|
||
or h
|
||
ld a,30 ; ENOMEM (Not enough memory)
|
||
jr z,@4
|
||
;
|
||
@1: ld (@5+1),hl
|
||
ld hl,4100h ; exe-header as temp buffer
|
||
push hl
|
||
inc hl
|
||
inc hl
|
||
; get current directory
|
||
ld c,1Eh
|
||
rst 10h
|
||
jr c,@3
|
||
ex de,hl ; hl=end string
|
||
ld a,"\"
|
||
dec hl
|
||
dec hl
|
||
cp (hl)
|
||
jr z,@2
|
||
inc hl
|
||
ld (hl),a
|
||
inc hl
|
||
ld (hl),0
|
||
; get current disk
|
||
@2: ld c,2
|
||
rst 10h
|
||
pop hl
|
||
jr c,@4
|
||
ld c,"A"
|
||
add a,c
|
||
ld (hl),a
|
||
inc hl
|
||
ld (hl),":"
|
||
dec hl ; hl=4100h
|
||
;
|
||
@5: ld de,0
|
||
push de
|
||
@6: ld bc,1
|
||
ldir
|
||
xor a
|
||
ld (de),a
|
||
pop hl
|
||
;pop ix
|
||
ret
|
||
;
|
||
@3: pop hl
|
||
@4: ;pop ix
|
||
ld (errno_##),a
|
||
ld hl,0 ; NULL
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE strerr
|
||
;
|
||
; "string.h"
|
||
; (¢ ‘¨ á⮨⠪ ª "strerror").
|
||
; ”ãªæ¨ï ¯à¥®¡à §ã¥â errno ¢ áâàoªã á¨á⥬®£® áoo¡é¥¨ï o¡ o訡ª¥
|
||
; ¨ ¢o§¢àaéa¥â ãªa§a⥫ì a íâã áâàoªã.
|
||
; ”ãªæ¨ï, ¢ ®â«¨ç¨¥ ®â perror, ¥ ¢ë¢®¤¨â ¨ª ª¨å áoo¡é¥¨©. „«ï ¢ë¢®¤
|
||
; á®®¡é¥¨ï âॡã¥âáï ¢ë§¢aâì äãªæ¨î ¢ë¢o¤a ( ¯à¨¬¥à printf).
|
||
; �®¬¥à ®è¨¡ª¨ åà ¨âáï ¢ ¯¥à¥¬¥®© errno, ª®â®à ï ®¡ê¥ ¢¥è¥¬
|
||
; ã஢¥ ¨ ¨á¯®«ì§ã¥âáï ª ª ¨¤¥ªá ¢ ¬ áᨢ¥ á¨á⥬ëå á®®¡é¥¨©.
|
||
; ‘¨áâ¥¬ë¥ á®®¡é¥¨ï ®¡ ®è¨¡ª å ¤®áâã¯ë ç¥à¥§ ¯¥à¥¬¥ãî _errlst_,
|
||
; ïîéãîáï ¬ áᨢ®¬ á¨á⥬ëå á®®¡é¥¨© ®¡ ®è¨¡ª å.
|
||
; —â®¡ë ¢¥àãâì ¯à ¢¨«ìë© à¥§ã«ìâ â, äãªæ¨ï strerr ¤®«¦ ¡ëâì ¢ë§¢
|
||
; áà §ã ¯®á«¥ ¡¨¡«¨®â¥ç®© äãªæ¨¨, ¢®§¢à ⨢襩 ®è¨¡ªã. ˆ ç¥, § 票¥
|
||
; errno ¬®¦¥â ¡ëâì ¯¥à¥§ ¯¨á ® ¯à¨ ¯®á«¥¤ãîé¨å ¢ë§®¢ å ¡¨¡«¨®â¥çëå äãªæ¨©.
|
||
; „«ï «î¡®£® § 票ï errno, ¥ ¨á¯®«ì§ã¥¬®£® ¢ „Ž‘, äãªæ¨ï strerr ¢®§¢à -
|
||
; é ¥â 㪠§ â¥«ì ¯ãáâãî áâபã.
|
||
;
|
||
; in: a = ¨¤¥ªá áâப¨ ®è¨¡ª¨
|
||
; out: hl = ¤à¥á áâப¨
|
||
;
|
||
; char *strerr(char errno)
|
||
;
|
||
strerr_::
|
||
cp 50+1
|
||
jr nc,@2
|
||
ld e,a ; errno
|
||
ld d,0
|
||
inc de
|
||
ld hl,_errlst_ ; array of system messages
|
||
ld bc,__nerr ; size of array
|
||
@1: xor a
|
||
cpir
|
||
ret po
|
||
ret nz
|
||
dec de
|
||
ld a,d
|
||
or e
|
||
jp nz,@1
|
||
ret
|
||
;
|
||
@2: ld hl,@3
|
||
ret
|
||
;
|
||
@3: db 0Dh,0Ah,0
|
||
|
||
; array of system messages
|
||
_errlst_::
|
||
db 0
|
||
db "No error",0 ; 0
|
||
db "Invalid function",0 ; 1
|
||
db "Invalid drive number",0 ; 2
|
||
db "File not found",0 ; 3
|
||
db "Path not found",0 ; 4
|
||
db "Invalid handle",0 ; 5
|
||
db "Too many open files",0 ; 6
|
||
db "File already exists",0 ; 7
|
||
db "File read only",0 ; 8
|
||
db "Root overflow",0 ; 9
|
||
db "No free space",0 ; 10
|
||
db "Directory not empty",0 ; 11
|
||
db "Can't delete current directory",0 ; 12
|
||
db "Invalid media",0 ; 13
|
||
db "Unknown operation",0 ; 14
|
||
db "Directory exist",0 ; 15
|
||
db "Invalid filename",0 ; 16
|
||
db "Invalid EXE-file",0 ; 17
|
||
db "Not supported EXE-file",0 ; 18
|
||
db "Access denied",0 ; 19
|
||
db "Not ready",0 ; 20
|
||
db "Seek error",0 ; 21
|
||
db "Sector not found",0 ; 22
|
||
db "CRC error",0 ; 23
|
||
db "Write protect",0 ; 24
|
||
db "Read error",0 ; 25
|
||
db "Write error",0 ; 26
|
||
db "Drive failure",0 ; 27
|
||
db "Extended error: 28",0 ; 28
|
||
db "Extended error: 29",0 ; 29
|
||
db "Not enough memory",0 ; 30
|
||
db "Invalid memory block",0 ; 31
|
||
db "Extended error: 32",0 ; 32
|
||
db "Extended error: 33",0 ; 33
|
||
db "Extended error: 34",0 ; 34
|
||
db "35",0 ; 35
|
||
db "36",0 ; 36
|
||
db "37",0 ; 37
|
||
db "38",0 ; 38
|
||
db "39",0 ; 39
|
||
db "40",0 ; 40
|
||
db "41",0 ; 41
|
||
db "42",0 ; 42
|
||
db "43",0 ; 43
|
||
db "44",0 ; 44
|
||
db "45",0 ; 45
|
||
db "46",0 ; 46
|
||
db "47",0 ; 47
|
||
db "48",0 ; 48
|
||
db "49",0 ; 49
|
||
db "50",0 ; 50
|
||
_endlst_:
|
||
|
||
__nerr equ _endlst_ - _errlst_ ; size of array
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE perror
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â á®®¡é¥¨¥ ®¡ ®è¨¡ª¥ stderr.
|
||
; ‚ í⮬ á®®¡é¥¨¨ à£ã¬¥â string ¢ë¢®¤¨âáï ¯¥à¢ë¬, § ⥬ ¢ë¢®¤¨âáï
|
||
; ¤¢®¥â®ç¨¥, á¨á⥬®¥ á®®¡é¥¨¥ ®¡ ®è¨¡ª¥ ®â ¯®á«¥¤¥£® ¡¨¡«¨®â¥ç®£®
|
||
; ¢ë§®¢ , ¢¥àã¢è¥£® ®è¨¡ªã ¨ ®¢ ï áâப .
|
||
; …᫨ à£ã¬¥â string à ¢¥ NULL, â® äãªæ¨ï ¯à®¯ã᪠¥â á®®¡é¥¨¥ string,
|
||
; § ¤ ®¥ ¯®«ì§®¢ ⥫¥¬ ¨ ¢ë¢®¤¨â ⮫쪮 á¨á⥬®¥ á®®¡é¥¨¥ ®¡ ®è¨¡ª¥,
|
||
; ¨ ®¢ãî áâபã.
|
||
; —â®¡ë ¢ë¢¥á⨠¯à ¢¨«ìë© à¥§ã«ìâ â, äãªæ¨ï perror ¤®«¦ ¡ëâì ¢ë§¢
|
||
; áà §ã ¦¥ ¯®á«¥ ¡¨¡«¨®â¥ç®© äãªæ¨¨, ¢®§¢à ⨢襩 ®è¨¡ªã. ˆ ç¥ § 票¥
|
||
; errno ¬®¦¥â ¡ëâì ¯¥à¥§ ¯¨á ® ¯à¨ ¯®á«¥¤ãîé¨å ¢ë§®¢ å ¡¨¡«¨®â¥çëå äãªæ¨©.
|
||
; ”ãªæ¨ï perror ¥ ¢®§¢à é ¥â ¨ª ª®£® § 票ï.
|
||
;
|
||
; void perror(char *string)
|
||
;
|
||
perror_::
|
||
;push ix
|
||
ld a,l
|
||
or h
|
||
jr z,@1
|
||
call cputs_##
|
||
ld hl,@2
|
||
call cputs_##
|
||
@1: ld a,(errno_##)
|
||
call strerr_##
|
||
call cputs_##
|
||
ld a,0Ah
|
||
call putch_##
|
||
;pop ix
|
||
ret
|
||
;
|
||
@2: db ": ",0
|
||
|
||
ENDMODULE
|
||
|
||
|
||
; MODULE fcntl
|
||
;
|
||
; „«ï MISIX.
|
||
;
|
||
; int fcntl(FD fd, int mode, int arg)
|
||
; char fcntla
|
||
;
|
||
;fcntl_::
|
||
;fcntla_::
|
||
; ld a,(_os_ver_##) ; this function works ONLY in MISIX
|
||
; cp 2
|
||
; jr nz,@1
|
||
; ld h,e
|
||
; ld e,c
|
||
; ld d,b
|
||
; ld c,3Eh
|
||
; call 5
|
||
; ld (errno_##),a
|
||
; or a
|
||
; ret z
|
||
;@1: ld a,-1
|
||
; ld l,a
|
||
; ld h,a
|
||
; ret
|
||
;
|
||
; ENDMODULE
|
||
|
||
|
||
MODULE isatty
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ®¯à¥¤¥«ï¥â, ¯à¨ ¤«¥¦¨â «¨ ¤ ë© ¤¥áªà¨¯â®à
|
||
; áâ ¤ àâë¬ ¯®â®ª ¬ (â¥à¬¨ «, ª®á®«ì,...).
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â:
|
||
; true - ¤¥áªà¨¯â®à ¯à¨ ¤«¥¦¨â â¥à¬¨ «ã, ª®á®«¨.
|
||
; false - ¤¥áªà¨¯â®à ¯à¨ ¤«¥¦¨â ä ©«ã.
|
||
;
|
||
; in: l = ®¬¥à ¤¥áªà¨¯â®à
|
||
; out: a = true
|
||
; a = false
|
||
;
|
||
; BOOL isatty(FD fd)
|
||
;
|
||
isatty_::
|
||
xor a
|
||
cp l
|
||
jr z,@1 ; stdin
|
||
bit 7,l ; stdout, stderr, ... ?
|
||
ret z ; no
|
||
@1: inc a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE unlink
|
||
;
|
||
; "io.h"
|
||
; ”ãªæ¨ï 㤠«ï¥â ä ©«, ®¯à¥¤¥«¥ë© ¯® pathname.
|
||
; ƒ«®¡ «ìë¥ á¨¬¢®«ë * ¨ ? ¢ ¨¬¥¨ ä ©« ¥ ¤®¯ã᪠îâáï.
|
||
; ” ©«ë á âਡã⮬ "⮫쪮 ¤«ï ç⥨ï" ¥«ì§ï 㤠«¨âì ¤ ®©
|
||
; äãªæ¨¥© - ¯à¥¤¢ à¨â¥«ì® 㦮 ¨§¬¥¨âì íâ®â âਡãâ.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ä ©« ãá¯¥è® ã¤ «¥.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â
|
||
; ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char unlink(char *pathname)
|
||
; char remove(char *pathname)
|
||
;
|
||
unlink_::
|
||
remove_::
|
||
push ix
|
||
ld c,0Eh
|
||
rst 10h
|
||
pop ix
|
||
ld (errno_##),a
|
||
ld a,0
|
||
ret nc
|
||
dec a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE mkdir
|
||
;
|
||
; "direct.h"
|
||
; ”ãªæ¨ï á®§¤ ¥â ®¢ë© ª â «®£ á § ¤ ë¬ path-¨¬¥¥¬.
|
||
; ‡ ®¤¨ ¢ë§®¢ äãªæ¨¨ ¬®¦¥â ¡ëâì á®§¤ ⮫쪮 ®¤¨ ®¢ë©
|
||
; ª â «®£, á ¨¬¥¥¬ ¯®á«¥¤¥© ª®¬¯®¥âë pathname.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ®¢ë© ª â «®£ ãá¯¥è® á®§¤ .
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char mkdir(char *pathname)
|
||
;
|
||
mkdir_::
|
||
push ix
|
||
ld c,1Bh
|
||
rst 10h
|
||
pop ix
|
||
ld (errno_##),a
|
||
ld a,0
|
||
ret nc
|
||
dec a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE rmdir
|
||
;
|
||
; "direct.h"
|
||
; ”ãªæ¨ï 㤠«ï¥â ¯ãá⮩ ª â «®£, ®¯à¥¤¥«¥ë© ¢ pathname.
|
||
; �¥«ì§ï 㤠«¨âì ⥪ã騩 ª â «®£ ¨«¨ ª®à¥¢®©.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ª â «®£ ãá¯¥è® ã¤ «¥.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char rmdir(char *pathname)
|
||
;
|
||
rmdir_::
|
||
push ix
|
||
ld c,1Ch
|
||
rst 10h
|
||
pop ix
|
||
ld (errno_##),a
|
||
ld a,0
|
||
ret nc
|
||
dec a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE rename
|
||
;
|
||
; "io.h"
|
||
; ”ãªæ¨ï ¯¥à¥¨¬¥®¢ë¢ ¥â ä ©« ¨«¨ ª â «®£, ®¯à¥¤¥«¥ë© ¢ ¨¬¥¨
|
||
; newname. Oldname ¤®«¦® § ¤ ¢ âì path-¨¬ï áãé¥áâ¢ãî饣® ä ©«
|
||
; ¨«¨ ª â «®£ . Newname ¥ ®¯à¥¤¥«ï¥â ¨¬ï 㦥 áãé¥áâ¢ãî饣® ä ©«
|
||
; ¨«¨ ª â «®£ .
|
||
; ”ãªæ¨î rename ¥«ì§ï ¨á¯®«ì§®¢ âì ¤«ï ¯¥à¥¬¥é¥¨ï ä ©« ¨§ ®¤®£®
|
||
; ª â «®£ ¢ ¤à㣮©, 㪠§ ¢ ¤à㣮¥ path-¨¬ï ¢ à£ã¬¥â¥ newname.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ®¯¥à æ¨ï ¯à®è« ãᯥè®.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; char rename(char *oldname, char *newname)
|
||
;
|
||
rename_::
|
||
push ix
|
||
ld c,10h
|
||
rst 10h
|
||
pop ix
|
||
ld (errno_##),a
|
||
ld a,0
|
||
ret nc
|
||
dec a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE getenv
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ¤«ï § ¤ ®£® ¨¬¥¨ ¯¥à¥¬¥®© ®ªà㦥¨ï
|
||
; varname 㪠§ â¥«ì § 票¥ (áâபã) í⮩ ¯¥à¥¬¥®©.
|
||
; Œ ªá¨¬ «ì ï ¤«¨ áâப¨ § ç¥¨ï ¯¥à¥¬¥®© ®ªà㦥¨ï ¤®«¦
|
||
; ¡ëâì ¥ ¡®«¥¥ 255 ¡ ©â.
|
||
; ‚®§¢à é ¥âáï § 票¥ NULL, ¥á«¨ § ¤ ï ¯¥à¥¬¥ ï ⥪ã騩
|
||
; ¬®¬¥â ¥ ®¯à¥¤¥«¥ .
|
||
; �ਠ®è¨¡ª¥ â ª¦¥ ¢®§¢à é ¥âáï NULL, ® ¢ errno ¡ã¤¥â ᮤ¥à¦ âìáï
|
||
; ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; in: hl = ¤à¥á ¨¬¥¨ ¯¥à¥¬¥®©
|
||
; out: hl = ¤à¥á áâப¨ § ç¥¨ï ¯¥à¥¬¥®©
|
||
;
|
||
; char *getenv(char *varname)
|
||
;
|
||
getenv_::
|
||
;push ix
|
||
ld de,4000h ; exe-header as buffer for value
|
||
push de
|
||
ld bc,0146h ; get environment item
|
||
rst 10h
|
||
pop hl ; pointer to buffer for value
|
||
;pop ix
|
||
jr c,@1 ; error
|
||
or a
|
||
jr z,@1 ; not found
|
||
ret
|
||
@1: ld (errno_##),a
|
||
ld hl,0
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE putenv
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¤®¡ ¢«ï¥â ®¢ãî ¯¥à¥¬¥ãî ®ªà㦥¨ï.
|
||
; €à£ã¬¥â envstring ¤®«¦¥ ¡ëâì 㪠§ ⥫¥¬ áâபã á«¥¤ãî饣®
|
||
; ä®à¬ â :
|
||
;
|
||
; VARNAME=VALUE
|
||
;
|
||
; £¤¥: "VARNAME" - ¨¬ï ¤®¡ ¢«ï¥¬®© ¯¥à¥¬¥®© ®ªà㦥¨ï
|
||
; "VALUE - § 票¥ í⮩ ¯¥à¥¬¥®©.
|
||
;
|
||
; �«¥¬¥âë áâப¨ ¤®«¦ë à §¤¥«ïâìáï ᨬ¢®«®¬ "=" ¨ áâப ¤®«¦
|
||
; ®ª 稢 âìáï ã«¥¬.
|
||
;
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0, ¥á«¨ ® ãá¯¥è® ®âà ¡®â « .
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï § 票¥ -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
;
|
||
; in: hl = ¤à¥á ¨¬¥¨ ¯¥à¥¬¥®©
|
||
; out: hl = ¤à¥á § ç¥¨ï ¯¥à¥¬¥®©
|
||
;
|
||
; uint putenv(char *envstring)
|
||
;
|
||
putenv_::
|
||
;push ix
|
||
ld bc,0246h ; set environment item
|
||
rst 10h
|
||
;pop ix
|
||
ld hl,0
|
||
ret nc
|
||
ld (errno_##),a
|
||
dec hl
|
||
ret
|
||
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE sysenv
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¯®«ãç ¥â á¨á⥬®¥ ®ªà㦥¨¥.
|
||
; €à£ã¬¥â sysenv ¤®«¦¥ ¡ëâì 㪠§ ⥫¥¬ ¡ãä¥à, ¯à¥¤ § ç¥ë©
|
||
; ¤«ï ¤ ëå á¨á⥬®£® ®ªà㦥¨ï. � §¬¥à ¡ãä¥à ¤®«¦¥ ¡ëâì ¤®áâ -
|
||
; â®çë¬, çâ®¡ë ¢¬¥áâ¨âì ¢á¥ ¤ ë¥ á¨á⥬®£® ®ªà㦥¨ï. ”®à¬ â
|
||
; ¤ ëå ¢ ¡ãä¥à¥ á«¥¤ãî騩:
|
||
; ‘âப ª ¦¤®© ¯¥à¥¬¥®© ®ªà㦥¨ï § ª 稢 ¥âáï ã«ì.
|
||
; ‚ ª®æ¥ áâப¨ ¯®á«¥¤¥© ¯¥à¥¬¥®© ®ªà㦥¨ï, á⮨⠤®¯®«-
|
||
; ¨â¥«ìë© ã«ì, ¯®ª §ë¢ î騩, çâ® ¤ «ìè¥ ¯¥à¥¬¥ëå ¥â.
|
||
; �ਬ¥à (¢ ᬮ¢®¬ ¢ ਠâ¥):
|
||
;
|
||
; sysenv: db "PATH=c:\fn;c:\zx",0
|
||
; db "SOLID=H",0
|
||
; db 0
|
||
;
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¡ãä¥à sysenv.
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï § 票¥ -1 ¨ errno ᮤ¥à¦¨â ®¬¥à
|
||
; ®è¨¡ª¨.
|
||
;
|
||
; in: hl = ¤à¥á ¡ãä¥à sysenv
|
||
; out: hl = ¤à¥á ¡ãä¥à sysenv
|
||
;
|
||
; char *sysenv(char *sysenv)
|
||
;
|
||
sysenv_::
|
||
;push ix
|
||
push hl
|
||
ld bc,0046h ; set system environment
|
||
rst 10h
|
||
pop hl
|
||
;pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
ld hl,-1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
; MODULE dup
|
||
;
|
||
; "io.h"
|
||
; ‘®§¤ ¥â ¢â®à®© ¤¥áªà¨¯â®à ¤«ï ®âªàë⮣® ä ©« .
|
||
; ‘®§¤ ¨¥ ®¢®£® ¤¥áªà¨¯â®à ¥ ¢«¨ï¥â ⨯ ¤®áâ㯠ª ä ©«ã.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ®¬¥à 2-£® ¤¥áªà¨¯â®à .
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFFFh) ¨ errno ãáâ ¢«¨¢ ¥âáï
|
||
; ¢ ®¤® ¨§ á«¥¤ãîé¨å § 票©:
|
||
;
|
||
; EBADF - ¥¢¥àë© ¤¥áªà¨¯â®à ä ©« .
|
||
; EMFILE - ¤à㣨¥ ¤¥áªà¨¯â®àë ä ©« ¤«ï
|
||
; ¥£® ¥ ¤®áâã¯ë, â.ª. ¬®£®
|
||
; ®âªàëâëå ä ©«®¢.
|
||
;
|
||
; FD dup(FD fd)
|
||
;
|
||
;dup_:: ld a,(_os_ver_##)
|
||
; or a
|
||
; ret z
|
||
; push ix
|
||
; dec a
|
||
; jr z,du1
|
||
; ld h,0
|
||
; ld c,3Eh
|
||
; call 5
|
||
; pop ix
|
||
; ret
|
||
;du1: ld b,l
|
||
; ld c,47h
|
||
; call 5
|
||
; pop ix
|
||
; ld l,b
|
||
; ld h,0
|
||
; ret
|
||
;
|
||
; ENDMODULE
|
||
|
||
|
||
; MODULE dup2
|
||
;
|
||
; "io.h"
|
||
; ”ãªæ¨ï ä®àá¨àã¥â § ¤ ë© ¤¥áªà¨¯â®à fp2 ¤«ï áá뫪¨ â®â ¦¥ á ¬ë©
|
||
; ä ©«, ª®â®àë© ááë« ¥âáï ¤¥áªà¨¯â®à fp1. …᫨ ¢® ¢à¥¬ï ¢ë§®¢ í⮩
|
||
; äãªæ¨¨, fp2 á¢ï§ á ®âªàëâë¬ ä ©«®¬, â® íâ®â ä ©« § ªàë¢ ¥âáï.
|
||
; fp1 - ¤¥áªà¨¯â®à ®âªàë⮣® ä ©«
|
||
; fp2 - «î¡®¥ § 票¥ ¤¥áªà¨¯â®à
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â 0 ¢ á«ãç ¥ ãᯥå .
|
||
; �ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï -1 (0FFFFh) ¨ errno ãáâ ¢«¨¢ ¥âáï ¢ ®¤®
|
||
; ¨§ á«¥¤ãîé¨å § 票©:
|
||
;
|
||
; EBADF - ¥¢¥àë© ¤¥áªà¨¯â®à ä ©«
|
||
; EMFILE - ¤à㣨¥ ¤¥áªà¨¯â®àë ä ©« ¤«ï ¥£® ¥ ¤®áâã¯ë,
|
||
; â.ª. ¬®£® ®âªàëâëå ä ©«®¢
|
||
;
|
||
; char dup2(FD fp1, FD fp2) -- MISIX only
|
||
;
|
||
;dup2_::ld a,(_os_ver_##)
|
||
; cp 2
|
||
; ret nz
|
||
; ld h,1
|
||
; ld c,3Eh
|
||
; push ix
|
||
; call 5
|
||
; pop ix
|
||
; ret
|
||
;
|
||
; ENDMODULE
|
||
|
||
|
||
MODULE seek
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ãáâ ¢«¨¢ ¥â 㪠§ â¥«ì ¢ ä ©«¥ ®¢®¥ ¬¥áâ® à ᯮ«®¦¥¨ï,
|
||
; ª®â®à®¥ ®¯à¥¤¥«ï¥âáï ª ª ᬥ饨¥ offset. ’¨¯ ¯¥à¥¬¥é¥¨ï ®¯à¥¤¥«ï¥âáï
|
||
; à£ã¬¥â®¬ type. ‘«¥¤ãîé ï ®¯¥à æ¨ï ¢ ä ©«¥ ¢ë¯®«ï¥âáï ®¢®¬ ¬¥áâ¥
|
||
; à ᯮ«®¦¥¨ï 㪠§ ⥫ï. „¨ ¯ §® ¯¥à¥¬¥é¥¨ï 㪠§ â¥«ï ¥ ¬®¦¥â ¡ëâì
|
||
; ¡®«ìè¥ 65534. …᫨ 㦮 ¯¥à¥¬¥áâ¨âì 㪠§ â¥«ì ¡®«ì襥 § 票¥,
|
||
; ¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì äãªæ¨î lseek.
|
||
; €à£ã¬¥â type ¬®¦¥â ¡ëâì ®¤®© ¨§ á«¥¤ãîé¨å ª®áâ â, ®¯à¥¤¥«¥ëå ¢
|
||
; "io.h":
|
||
;
|
||
; SEEK_SET ®â ç « ä ©«
|
||
; SEEK_CUR ®â ⥪ã饩 ¯®§¨æ¨¨ 㪠§ â¥«ï ¢ ä ©«¥
|
||
; SEEK_END ®â ª®æ ä ©«
|
||
;
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥ ®¢®£® ¯®«®¦¥¨ï 㪠§ ⥫ï.
|
||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
; “áâ ®¢ª 㪠§ â¥«ï § ¯à¥¤¥« ¬¨ ä ©« , ®è¨¡ª¨ ¥ ¢ë§ë¢ ¥â.
|
||
; „«ï ãáâனáâ¢, ¥ ¯à¨á¯®á®¡«¥ëå ª ¯®¨áªã (â ª¨å ª ª â¥à¬¨ «ë
|
||
; ¨ ¯à¨â¥àë), ¢®§¢à é ¥¬®¥ § 票¥ -1.
|
||
;
|
||
; uint seek(FD fd, uint offset, int type)
|
||
; uint seek(FD fd, uint offset, char type)
|
||
;
|
||
seek_::
|
||
bit 7,l ; std... devices ?
|
||
jr nz,@1 ; yes
|
||
push ix
|
||
ld a,l
|
||
ld hl,0
|
||
push de
|
||
pop ix
|
||
ld b,c
|
||
ld c,15h
|
||
rst 10h
|
||
push ix
|
||
pop hl
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
@1: ld hl,-1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE tell
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ⥪ãéãî ¯®§¨æ¨î 㪠§ â¥«ï ¢ ä ©«¥.
|
||
; �®§¨æ¨ï ¢ëà ¦ ¥âáï ª ª ç¨á«® ¡ ©â®¢ ®â ç « ä ©« .
|
||
; ‡ 票¥ ¢®§¢à é ¥¬®£® 㪠§ â¥«ï ¥ ¬®¦¥â ¡ëâì ¡®«ìè¥ 65534. …᫨
|
||
; 㦮 ¯®«ãç¨âì ¡®«ì襥 § 票¥, ¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì äãªæ¨î
|
||
; ltell.
|
||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
; „«ï ãáâனáâ¢, ¥ ¯à¨á¯®á®¡«¥ëå ª ¯®¨áªã (â ª¨å ª ª â¥à¬¨ «ë
|
||
; ¨ ¯à¨â¥àë), ¢®§¢à é ¥¬®¥ § 票¥ -1.
|
||
;
|
||
; uint tell(FD fd)
|
||
;
|
||
tell_::
|
||
bit 7,l ; std... devices ?
|
||
jr nz,@1 ; yes
|
||
push ix
|
||
ld a,l
|
||
ld hl,0
|
||
push hl
|
||
pop ix
|
||
ld b,1
|
||
ld c,15h
|
||
rst 10h
|
||
push ix
|
||
pop hl
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
@1: ld hl,-1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE lseek
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ãáâ ¢«¨¢ ¥â 㪠§ â¥«ì ¢ ä ©«¥ ®¢®¥ ¬¥áâ® à ᯮ«®¦¥¨ï,
|
||
; ®¯à¥¤¥«ï¥¬®¥ à£ã¬¥â ¬¨ high ¨ low, ᮮ⢥âá⢥® áâ àè ï ¨ ¬« ¤-
|
||
; è ï ç áâì 32-å ¡¨â®£® § ç¥¨ï ¯¥à¥¬¥é¥¨ï.
|
||
; ’¨¯ ¯¥à¥¬¥é¥¨ï ®¯à¥¤¥«ï¥âáï à£ã¬¥â®¬ type. ‘«¥¤ãîé ï ®¯¥à æ¨ï ¢
|
||
; ä ©«¥ ¢ë¯®«ï¥âáï ®¢®¬ ¬¥á⥠à ᯮ«®¦¥¨ï 㪠§ ⥫ï.
|
||
; €à£ã¬¥â type ¬®¦¥â ¡ëâì ®¤®© ¨§ á«¥¤ãîé¨å ª®áâ â, ®¯à¥¤¥«¥ëå
|
||
; ¢ "io.h":
|
||
;
|
||
; SEEK_SET ®â ç « ä ©«
|
||
; SEEK_CUR ®â ⥪ã饩 ¯®§¨æ¨¨ 㪠§ â¥«ï ¢ ä ©«¥
|
||
; SEEK_END ®â ª®æ ä ©«
|
||
;
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â áâàãªâãàã f_point, ®¯à¥¤¥«¥ãî ¢ "types.h"
|
||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
; “áâ ®¢ª 㪠§ â¥«ï § ¯à¥¤¥« ¬¨ ä ©« , ®è¨¡ª¨ ¥ ¢ë§ë¢ ¥â.
|
||
; „«ï ãáâனáâ¢, ¥ ¯à¨á¯®á®¡«¥ëå ª ¯®¨áªã (â ª¨å ª ª â¥à¬¨ «ë
|
||
; ¨ ¯à¨â¥àë), ¢®§¢à é ¥âáï § 票¥ -1.
|
||
;
|
||
; Usage:
|
||
;
|
||
; static f_point *p; // ¨«¨ "f_point *p" ¢¥ äãªæ¨¨
|
||
;
|
||
; p = lseek(FD fd, p->high, p->low, type);
|
||
; printf("value: %X %X\n", p->high, p->low);
|
||
;
|
||
;
|
||
; struct fpoint *lseek(FD fd, uint high, uint low, int type)
|
||
; struct fpoint *lseek(FD fd, uint high, uint low, char type)
|
||
;
|
||
lseek_::
|
||
bit 7,l ; std... devices ?
|
||
jr nz,@1 ; yes
|
||
ld a,l ; descriptor
|
||
push ix
|
||
push bc
|
||
pop ix ; low
|
||
ld hl,4
|
||
add hl,sp
|
||
ld b,(hl) ; type
|
||
ex de,hl ; hl=high
|
||
ld c,15h
|
||
rst 10h
|
||
ld (high),hl
|
||
ld (low),ix
|
||
ld hl,low
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
@1: ld hl,-1
|
||
ret
|
||
|
||
low: dw 0
|
||
high: dw 0
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE ltell
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¯®«ãç ¥â ⥪ãéãî ¯®§¨æ¨î 㪠§ â¥«ï ¢ ä ©«¥.
|
||
; �®§¨æ¨ï ¢ëà ¦ ¥âáï ª ª ç¨á«® ¡ ©â®¢ ®â ç « ä ©« .
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â áâàãªâãàã f_point, ®¯à¥¤¥«¥ãî ¢ "types.h"
|
||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||
; „«ï ãáâனáâ¢, ¥ ¯à¨á¯®á®¡«¥ëå ª ¯®¨áªã (â ª¨å ª ª â¥à¬¨ «ë
|
||
; ¨ ¯à¨â¥àë), ¢®§¢à é ¥âáï § 票¥ -1.
|
||
;
|
||
; Usage:
|
||
;
|
||
; static f_point *p; // ¨«¨ "f_point *p" ¢¥ äãªæ¨¨
|
||
;
|
||
; p = ltell(FD fd);
|
||
; printf("value: %X %X\n", p->high, p->low);
|
||
;
|
||
;
|
||
; struct fpoint *ltell(FD fd)
|
||
;
|
||
ltell_::
|
||
bit 7,l ; std... devices ?
|
||
jr nz,@1 ; yes
|
||
push ix
|
||
ld a,l
|
||
ld hl,0
|
||
push hl
|
||
pop ix
|
||
ld bc,0115h
|
||
rst 10h
|
||
ld (high),hl
|
||
ld (low),ix
|
||
ld hl,low
|
||
pop ix
|
||
ret nc
|
||
ld (errno_##),a
|
||
@1: ld hl,-1
|
||
ret
|
||
|
||
low: dw 0
|
||
high: dw 0
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE ioctl
|
||
;
|
||
; "io.h"
|
||
;---------------------------------------------------------------------
|
||
; ”ãªæ¨ï ¨§ª®-ã஢¥¢®£® ¢¢®¤ /¢ë¢®¤
|
||
;---------------------------------------------------------------------
|
||
;
|
||
; int ioctl(FD fd, int cmd[,*argdx, argcx]) -- MS-DOS
|
||
;
|
||
; ”ãªæ¨ï ¯à¥¤ § ç¥ ¤«ï ã¯à ¢«¥¨ï ãáâனá⢠¢¢®¤ /¢ë¢®¤ ¨«¨ ä ©«®¢.
|
||
; ˆá¯®«ì§ã¥âáï á¨áâ¥¬ë© ¢ë§®¢ 0å44 MS-DOS. � à ¬¥âà cmd 㪠§ë¢ ¥â
|
||
; ®¯¥à æ¨î ¤«ï ãáâனá⢠:
|
||
;
|
||
; ------+------------------------------------------------------
|
||
; cmd | ޝ¥à æ¨ï
|
||
; ------+------------------------------------------------------
|
||
; 0 | �®«ãç¨âì ¨ä®à¬ æ¨î ®¡ ãáâனá⢥. (rst 08h, 58h)
|
||
; 1 | “áâ ®¢¨âì ¨ä®à¬ æ¨î ®¡ ãáâனá⢥. (rst 08h, 59h)
|
||
; 2 | �à®ç¨â âì argcx 1 ¡ ©â ¯® ¤à¥áã, 㪠§ ®¬ã ¢ argdx.
|
||
; 3 | ‡ ¯¨á âì argcx ¡ ©â ¯® ¤à¥áã, 㪠§ ®¬ã ¢ argdx.
|
||
; 4 | € «®£¨ç® 2, ⮫쪮 handle ¨â¥à¯à¥â¨àã¥âáï ª ª
|
||
; | ®¬¥à ãáâனá⢠(0=⥪ã騩, 1=A ¨ â.¤.).
|
||
; 5 | € «®£¨ç® 3, ⮫쪮 handle ¨â¥à¯à¥â¨àã¥âáï
|
||
; | ª ª ®¬¥à ãáâனá⢠(0=⥪ã騩, 1=A ¨ â.¤.).
|
||
; 6 | �®«ãç¨âì áâ âãá ¢¢®¤ .
|
||
; 7 | �®«ãç¨âì áâ âãá ¢ë¢®¤ .
|
||
; 8 | Test removability; DOS 3.x only.
|
||
; 11 | Set sharing conflict retry count; DOS 3.x only.
|
||
; ------+------------------------------------------------------
|
||
;
|
||
; ‘¤¥« âì ¢®§¢à 饨¥ 㪠§ â¥«ï ®¡éãî áâàãªâãàã ... ª®âà®«ï ¤¥¢ ©á /ä ©« .
|
||
; �ਠ®è¨¡ª¥, äãªæ¨ï ¢®§¢à é ¥â -1.
|
||
;
|
||
; int ioctl(FD fd, char func, int arg)
|
||
; ;char ioctla(FD fd, char func, int arg) -- DOS2 only
|
||
;
|
||
;ioctla_::
|
||
ioctl_::
|
||
ret
|
||
push ix
|
||
ld a,e ; func
|
||
ld e,c ; de=arg
|
||
ld d,b
|
||
ld b,l ; FD fd ®¬¥à ¤¥áªà¨¯â®à
|
||
ld c,4Bh
|
||
call 5
|
||
pop ix
|
||
ex de,hl ; ¢¥àãâì hl = .. ?
|
||
ret
|
||
|
||
ENDMODULE
|