]> git.sur5r.net Git - cc65/commitdiff
Splitted the atexit module. Minor cleanup in doatexit.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 26 Oct 2000 06:36:29 +0000 (06:36 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 26 Oct 2000 06:36:29 +0000 (06:36 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@395 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/Makefile
libsrc/common/atexit.s
libsrc/common/doatexit.s [new file with mode: 0644]

index 37bddd0751788d8b75778d5f37e24d2da119b3ee..e90d1a634f6081e2e58ee5e8ba1385659c34008e 100644 (file)
@@ -33,6 +33,7 @@ S_OBJS =      _fdesc.o        \
                atexit.o        \
                atoi.o          \
                copydata.o      \
+               doatexit.o      \
                errno.o         \
                fmisc.o         \
                free.o          \
@@ -94,3 +95,4 @@ clean:
        @rm -f $(C_OBJS:.o=.s)
        @rm -f $(C_OBJS)
        @rm -f $(S_OBJS)
+                                
index 1751b80630f04677908c22696f0002cdc5360f62..14ba9c26d86f3121801b57368d6937efd5ada158 100644 (file)
@@ -4,34 +4,28 @@
 ; int atexit (void (*f) (void));
 ;
 
-; The exit functions
-
-       .export         _atexit, doatexit
-       .import         __errno, jmpvec
+       .export         _atexit
+       .import         exitfunc_table, exitfunc_index
+       .importzp       exitfunc_max
+       .import         __errno
 
        .include        "errno.inc"
 
-.bss
-ecount:        .byte   0               ; Really an index, inc'ed by 2
-efunc:         .word   0,0,0,0,0       ; 5 exit functions
-maxcount = * - efunc
-
 
-.code
+.proc  _atexit
 
-_atexit:
-       ldy     ecount
-       cpy     #maxcount       ; slot available?
-       beq     E0              ; jump if no
+       ldy     exitfunc_index
+               cpy     #exitfunc_max           ; Slot available?
+               beq     @Error                  ; Jump if no
 
 ; Enter the function into the table
 
-       sta     efunc,y
+       sta     exitfunc_table,y
        iny
        txa
-       sta     efunc,y
+       sta     exitfunc_table,y
        iny
-       sty     ecount
+       sty     exitfunc_index
 
 ; Done, return zero
 
@@ -41,32 +35,15 @@ _atexit:
 
 ; Error, no space left
 
-E0:    lda     #ENOSPC         ; No space left
-       sta     __errno
-       ldx     #$00
-       stx     __errno+1
-       dex
-       txa
-       rts
-
-; Function called from exit
-
-doatexit:
-       ldy     ecount          ; get index
-       beq     L9              ; jump if done
-       dey
-       lda     efunc,y
-       sta     jmpvec+2
-       dey
-       lda     efunc,y
-       sta     jmpvec+1
-       sty     ecount
-       ldy     #0              ; number of function parms
-       jsr     jmpvec
-       jmp     doatexit        ; next one
-
-L9:    rts
+@Error:        lda     #ENOSPC         ; No space left
+       sta     __errno
+       ldx     #$00
+       stx     __errno+1
+       dex                     ; Make return value -1
+       txa
+       rts
 
+.endproc
 
 
 
diff --git a/libsrc/common/doatexit.s b/libsrc/common/doatexit.s
new file mode 100644 (file)
index 0000000..39265cf
--- /dev/null
@@ -0,0 +1,38 @@
+;
+; Ullrich von Bassewitz, 26.10.2000
+;
+; Handle exit functions
+;
+
+       .export         doatexit, exitfunc_index, exitfunc_table
+               .exportzp       exitfunc_max
+       .import         jmpvec
+
+.bss
+exitfunc_index:        .res    1       ; Index into table, inc'ed by 2
+exitfunc_table:        .res    10      ; 5 exit functions
+exitfunc_max   = <(* - exitfunc_table)
+
+
+.code
+
+.proc  doatexit
+
+               ldy     exitfunc_index          ; Get index
+               beq     @L9                     ; Jump if done
+       dey
+       lda     exitfunc_table,y
+       sta     jmpvec+2
+       dey
+       lda     exitfunc_table,y
+       sta     jmpvec+1
+       sty     exitfunc_index
+       jsr     jmpvec                  ; Call the function
+       jmp     doatexit                ; Next one
+
+@L9:   rts
+
+.endproc
+
+
+