1
0
mirror of https://github.com/cc65/cc65.git synced 2024-09-27 19:55:09 +00:00

Rewrote fopen in assembler

git-svn-id: svn://svn.cc65.org/cc65/trunk@1608 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2002-11-23 18:46:40 +00:00
parent 6f198ae131
commit 6195f87f6a
4 changed files with 52 additions and 34 deletions

View File

@ -11,7 +11,6 @@ fdopen.s
fgetc.s
fgetpos.s
fgets.s
fopen.s
fputc.s
fputs.s
fread.s

View File

@ -23,7 +23,6 @@ C_OBJS = _afailed.o \
fgetc.o \
fgetpos.o \
fgets.o \
fopen.o \
fputc.o \
fputs.o \
fread.o \
@ -72,6 +71,7 @@ S_OBJS = _fdesc.o \
divt.o \
errno.o \
fmisc.o \
fopen.o \
fprintf.o \
free.o \
getcpu.o \

View File

@ -1,32 +0,0 @@
/*
* fopen.c
*
* Ullrich von Bassewitz, 17.06.1998
*/
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include "_file.h"
FILE* fopen (const char* name, const char* mode)
{
FILE* f;
/* Find a free file slot */
if (!(f = _fdesc ())) {
/* No slots */
_errno = EMFILE; /* Too many files */
return 0;
}
/* Open the file and return the descriptor */
return _fopen (name, mode, f);
}

51
libsrc/common/fopen.s Normal file
View File

@ -0,0 +1,51 @@
;
; Ullrich von Bassewitz, 22.11.2002
;
; FILE* __fastcall__ fopen (const char* name, const char* mode)
; /* Open a file */
;
.export _fopen
.import __fopen, __fdesc
.import pushax, return0
.include "errno.inc"
; ------------------------------------------------------------------------
; Code
.proc _fopen
; Bring the mode parameter on the stack
jsr pushax
; Allocate a new file stream
jsr __fdesc
; Check if we have a stream
cmp #$00
bne @L1
cpx #$00
bne @L1
; Failed to allocate a file stream
lda #EMFILE
sta __errno
lda #0
sta __errno+1
tax
rts ; Return zero
; Open the file and return the file descriptor. All arguments are already
; in place: name and mode on the stack, and f in a/x
@L1: jmp __fopen
.endproc