Donc, comme convenu, j'offre au projet TIGCC file.azr sans délai
Tout a été testé sauf rename et remove, qui devraient marcher, mais sait-on jamais...
:: FILE
======
Ce fichier doit etre visualise avec
l'IDE inclus dans le SDK Azur.
L'editeur integre de la TI le rend
illisible.
Le langage Azur, le compilateur Azur,
l'ensemble des fichiers (tels que
celui-ci) constituant la bibliotheque
Azur, le code des fonctions de cette
bibliotheque, sont proteges par les
droits de la propriete intellectuelle.
Pour reprendre tout ou partie de la
bibliotheque dans un programme ecrit
en un langage autre que l'Azur,
contactez l'auteur.
(c) 2001 Thibaut Barthelemy
Pour toute question, remarque, idee
d'optimisation, remerciement, ou pour
proposer une nouvelle fonction...
-> barthib@hotmail.com
Derniere correction :
-> le 22 decembre 2001 a 11h23
::
#redecoff
#commoff
: Fonctions de cette librairie
[
extern void
@fopen [byte @Nom,@Mode],
@freopen[byte @Nom,@Mode;void @Fich];
extern word
fclose [void @Fich],
rename [byte @CurrentName,@NewName],
remove [byte @FileName];
extern void
@GetDataPtr[void @Fich];
]
: To do :
: fgetc fputc fgets fputs fread fwrite
: fprintf fseek feof rewind ungetc
: +----------------+
: | Implementation |
: +----------------+
<
fopen:
; Merci a Kevin Kofler pour
; le debogage de ce code
move.l 4(a7),a0
move.l 8(a7),a1
movem.l d3-d5/a2,-(a7)
move.b -(a0),file_byte
clr.b (a0)+
fopen_loop:
tst.b (a0)+
bne.s fopen_loop
pea -1(a0)
moveq #0,d3 ; flags
moveq #0,d4 ; pas append
moveq #0,d5 ; pas mode r+
move.b (a1)+,d0
cmp.b #'w',d0
beq.s fopen_modeW
cmp.b #'r',d0
beq.s fopen_modeR
cmp.b #'a',d0
bne fopen_erreur
fopen_modeA:
moveq #-1,d4 ; append
fopen_modeW:
or.w #$0002,d3
bra.s fopen_modesSuite
fopen_modeR:
or.w #$0001,d3
fopen_modesSuite:
move.b (a1)+,d0
cmp.b #'b',d0
beq.s fopen_modeB
cmp.b #'t',d0
beq.s fopen_modesSuite
cmp.b #'+',d0
bne.s fopen_tests_fin
fopen_modeP:
btst.b #0,d3
sne d5
or.w #$0003,d3
bra.s fopen_modesSuite
fopen_modeB:
or.w #$0040,d3
bra.s fopen_modesSuite
fopen_tests_fin:
tst.w d4
beq.s fopen_pasappend
move.l $180(a5),a0 ; SymFind
jsr (a0)
tst.l d0
bne.s fopen_dejacherche
bra.s fopen_ecraser
fopen_pasappend:
btst.l #1,d3
beq.s fopen_pascreer
tst.b d5
bne.s fopen_pascreer
fopen_ecraser:
move.l $170(a5),a0 ; SymAdd
jsr (a0)
move.l d0,(a7)
beq.s fopen_erreur
move.l $1E4(a5),a0 ; DerefSym
jsr (a0)
move.l a0,a2
move.l #8,(a7)
move.l $240(a5),a0 ; HeapAlloc
jsr (a0)
move.w d0,(a7)
beq.s fopen_erreur
move.w d0,12(a2)
move.l $258(a5),a0 ; HeapDeref
jsr (a0)
clr.w (a0)
btst.l #6,d3
bne.s fopen_suite
move.l #$00050001,(a0)
move.l #$2000E000,4(a0)
bra.s fopen_suite
fopen_erreur:
sub.w a2,a2
bra.s fopen_fin
fopen_pascreer:
move.l $180(a5),a0 ; SymFind
jsr (a0)
fopen_dejacherche:
move.l d0,(a7)
beq.s fopen_erreur
move.l $1E4(a5),a0 ; DerefSym
jsr (a0)
move.w 12(a0),(a7)
fopen_suite:
pea (18).w
move.l $288(a5),a0 ; HeapAllocPtr
jsr (a0)
addq.l #4,a7
move.l a0,a2
beq.s fopen_erreur
move.l $264(a5),a0 ; HLock
jsr (a0)
clr.w 12(a2)
move.l a0,4(a2)
move.w (a7),8(a2)
clr.w 14(a2)
move.w (a0),16(a2)
addq.w #2,16(a2)
tst.b d4
beq.s fopen_posdebut
moveq #0,d0
move.w (a0),d0
add.l d0,a0
bra.s fopen_EOF
fopen_posdebut:
btst.l #6,d3
bne.s fopen_binaire
addq.l #3,a0
fopen_binaire:
addq.l #2,a0
fopen_EOF:
move.w d3,10(a2)
move.w a0,d1
move.l a0,(a2)
sub.w 6(a2),d1
sub.w 16(a2),d1
btst.l #6,d3
seq d0
and.w #2,d0
add.w d0,d1
bne.s fopen_fin
or.w #$0020,10(a2)
fopen_fin:
move.l a2,a0
addq.l #4,a7
movem.l (a7)+,d3-d5/a2
move.l 4(a7),a1
move.b file_byte(pc),-(a1)
rts
freopen:
move.l 12(a7),-(a7)
bsr.s fclose
addq.l #4,a7
bra fopen
fclose:
move.w d3,-(a7)
move.w #-1,d3
move.l 6(a7),a0
beq.s fclose_fin
btst.b #4,10(a0)
sne d3
ext.w d3
move.l 4(a0),a1
move.w (a1),-(a7)
addq.w #2,(a7)
clr.w -(a7)
move.w 8(a0),-(a7)
move.l $27C(a6),a0 ; HeapUnlock
jsr (a0)
move.l $274(a6),a0 ; HeapRealloc
jsr (a0)
move.l 12(a7),(a7)
move.l $28C(a6),a0 ; HeapFreePtr
jsr (a0)
addq.l #6,a7
fclose_fin:
move.w d3,d0
move.w (a7)+,d3
rts
rename:
lea -64(a7),a7
move.l 72(a7),a0
lea (a7),a1
clr.b (a1)+
rename_loop1:
move.b (a0)+,(a1)+
bne.s rename_loop1
pea -1(a1)
move.l $180(a6),a0 ; SymFind
jsr (a0)
tst.l d0
bne.s rename_err
move.l 72(a7),a0
lea 32(a7),a1
clr.b (a1)+
rename_loop2:
move.b (a0)+,(a1)+
bne.s rename_loop2
pea -1(a1)
move.l $18C(a6),a0 ; SymMove
jsr (a0)
lea 72(a7),a7
tst.w d0
seq d0
ext.w d0
rts
rename_err:
lea 68(a7),a7
moveq #-1,d0
rts
remove:
move.l 4(a7),a0
move.b -(a0),file_byte
clr.b (a0)+
remove_loop:
tst.b (a0)+
bne.s remove_loop
pea -1(a0)
move.l $178(a6),a0 ; SymDel
jsr (a0)
addq.l #4,a7
tst.w d0
seq d0
ext.w d0
move.l 4(a7),a1
move.b file_byte(pc),-(a1)
rts
GetDataPtr:
move.l 4(a7),a0
beq.s GetDataPtr_err
move.l (a0),a0
GetDataPtr_err:
rts
file_byte:
dc.w 0
>
: +---------+
: | The end |
: +---------+
[edit]Edité par Thibaut le 24-12-2001 à 18:24:00[/edit]




)
Pourquoi a68k ne marche-t-il plus ??