
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]