;
.export _exit
- .import __hinit, initconio, zerobss, push0, doatexit
+ .import __hinit, initconio, zerobss, push0, condes
.import _main
+ .import __CONSTRUCTOR_TABLE__, __CONSTRUCTOR_COUNT__
+ .import __DESTRUCTOR_TABLE__, __DESTRUCTOR_COUNT__
+
.include "c64.inc"
.include "../cbm/cbm.inc"
ldy #4 ; Argument size
jsr _main ; call the users code
-; fall thru to exit...
+; Call module destructors
+
+_exit: lda #<__DESTRUCTOR_TABLE__
+ ldx #>__DESTRUCTOR_TABLE__
+ ldy #<(__DESTRUCTOR_COUNT__*2)
+ jsr condes
-_exit: jsr doatexit ; call exit functions
+; Restore system stuff
- ldx spsave
+ ldx spsave
txs ; Restore stack pointer
lda mmusave
sta $01 ; Restore memory configuration
atexit.o \
atoi.o \
copydata.o \
- doatexit.o \
errno.o \
fmisc.o \
free.o \
;
.export _atexit
- .import exitfunc_table, exitfunc_index
- .importzp exitfunc_max
+ .destructor doatexit, 16
.import __errno
+ .import jmpvec
.include "errno.inc"
+; ---------------------------------------------------------------------------
.proc _atexit
+; ---------------------------------------------------------------------------
+
+.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
+
+
+
+; ---------------------------------------------------------------------------
+
+.bss
+exitfunc_index: .res 1 ; Index into table, inc'ed by 2
+exitfunc_table: .res 10 ; 5 exit functions
+exitfunc_max = <(* - exitfunc_table)
+
+++ /dev/null
-;
-; 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
-
-
-
dey
jsr getbyt
sta jmpvec+1
+ sty index
jsr jmpvec
jmp loop