home *** CD-ROM | disk | FTP | other *** search
- ⓪ IMPLEMENTATION MODULE FileNames;
- ⓪ (*$Y+, L-*)
- ⓪
- ⓪ (*
- ⓪!03.12.90 Fehler bei SplitName behoben, so daß nun kein Fehler mehr mit
- ⓪+68020 passieren dürfte. (D0 war bei CopyA0OnStack-Aufruf um
- ⓪+eins zu hoch, was ggf. ein Byte zuviel kopierte und damit den
- ⓪+Stack überschrieb).
- ⓪!31.01.91 ValidatePath verwendet "fileUpper" statt Strings.Upper
- ⓪!29.03.93 StrToDrv erlaubt nun Drives v. A-Z (bisher A-P)
- ⓪ *)
- ⓪
- ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS, ADR, TSIZE, BYTE, WORD, LONGWORD;
- ⓪ IMPORT Strings;
- ⓪ FROM MOSGlobals IMPORT FileStr, PathStr, DriveStr, NameStr, SfxStr, PfxStr,
- ⓪(OutOfStack, StringOverflow, fNotDeleted, fPathNotFound, fFileNotFound,
- ⓪(Drive, DriveSet;
- ⓪
- ⓪ CONST drvZ = 26;
- ⓪
- ⓪ VAR strok: BOOLEAN;
- ⓪
- ⓪
- ⓪ PROCEDURE fileUpper (VAR s: ARRAY OF CHAR);
- ⓪"(* "Upper" für Dateinamen: berücksichtigt nur die unteren 128 Zeichen *)
- ⓪"VAR n: CARDINAL;
- ⓪"BEGIN
- ⓪$(*
- ⓪$FOR n:= 0 TO HIGH (s) DO
- ⓪&IF s[n]='' THEN RETURN END;
- ⓪&IF s[n]<CHR(128) THEN s[n]:=CAP(s[n]) END
- ⓪$END
- ⓪$*)
- ⓪$ASSEMBLER
- ⓪(MOVE.W -(A3),D1
- ⓪(MOVE.L -(A3),A1
- ⓪(CLR.W D0
- ⓪&luup:
- ⓪(MOVE.B (A1)+,D0
- ⓪(BEQ ende
- ⓪(BMI next
- ⓪(JSR @CAP ;/A2
- ⓪(MOVE.B D0,-1(A1)
- ⓪&next:
- ⓪(DBRA D1,luup
- ⓪&ende:
- ⓪$END
- ⓪"END fileUpper;
- ⓪
- ⓪
- ⓪ PROCEDURE copyA0OnStack;
- ⓪"(*
- ⓪#* Kopiert String in A0/D0.W auf Stack und korrigiert A0
- ⓪#*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L (A7)+,(A3)+ ; Rücksprung-Adr retten
- ⓪(MOVE.L A1,(A3)+ ; A1 retten
- ⓪(MOVE.W D0,(A3)+ ; D0 retten
- ⓪(ADDQ #2,D0 ; wichtig: es muß mind. -2- sein!
- ⓪(BCLR #0,D0 ; SYNC D0
- ⓪(SUBA.W D0,A7
- ⓪(CMPA.L A3,A7
- ⓪(BCC N
- ⓪(TRAP #6
- ⓪(DC.W OutOfStack
- ⓪&N MOVE.L A7,A1
- ⓪(MOVE.W -2(A3),D0
- ⓪&L MOVE.B (A0)+,(A1)+
- ⓪(DBEQ D0,L
- ⓪(MOVE.L A7,A0
- ⓪(MOVE.W -(A3),D0
- ⓪(MOVE.L -(A3),A1
- ⓪(MOVE.L -(A3),-(A7) ; und Rücksprung
- ⓪$END
- ⓪"END copyA0OnStack;
- ⓪
- ⓪ PROCEDURE ConcatName (REF prefix, suffix: ARRAY OF CHAR; VAR name: ARRAY OF CHAR);
- ⓪"(*$L+*)
- ⓪"VAR s1, s2: SfxStr; n1: NameStr; app: BOOLEAN;
- ⓪"BEGIN
- ⓪$(* aufpassen, da 'prefix'/'suffix' mit 'name' identisch sein können! *)
- ⓪$app:= suffix[0] # 0C;
- ⓪$IF app THEN
- ⓪&Strings.Copy (suffix, Strings.Pos ('.', suffix, 0) + 1, 3, s1, strok);
- ⓪$END;
- ⓪$SplitPath (prefix, name, n1);
- ⓪$SplitName (n1, n1, s2);
- ⓪$Strings.Append (n1, name, strok);
- ⓪$IF app THEN
- ⓪&Strings.Append ('.', name, strok);
- ⓪&Strings.Append (s1, name, strok);
- ⓪$END;
- ⓪"END ConcatName;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE ConcatPath (REF path, name: ARRAY OF CHAR; VAR fullname: ARRAY OF CHAR);
- ⓪"(*$L+*)
- ⓪"VAR p1: PathStr; n2, n1: NameStr;
- ⓪"BEGIN
- ⓪$(* aufpassen, da 'path'/'name' mit 'fullName' identisch sein können! *)
- ⓪$SplitPath (name, p1, n1);
- ⓪$SplitPath (path, fullname, n2);
- ⓪$Strings.Append (n1, fullname, strok);
- ⓪"END ConcatPath;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE NameConc ( REF prefix, suffix: ARRAY OF CHAR ): FileStr;
- ⓪"(*$L+*)
- ⓪"VAR n1: FileStr;
- ⓪"BEGIN
- ⓪$ConcatName (prefix, suffix, n1);
- ⓪$RETURN n1
- ⓪"END NameConc;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE PathConc ( REF path, name: ARRAY OF CHAR ): FileStr;
- ⓪"(*$L+*)
- ⓪"VAR p1: FileStr;
- ⓪"BEGIN
- ⓪$ConcatPath (path, name, p1);
- ⓪$RETURN p1
- ⓪"END PathConc;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE SplitName ( REF source: ARRAY OF CHAR; VAR prfx, sfx: ARRAY OF CHAR );
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(LINK A5,#0
- ⓪(
- ⓪(MOVE -(A3),D2
- ⓪(MOVE.L -(A3),A2 ; sfx
- ⓪(MOVE -(A3),D1
- ⓪(MOVE.L -(A3),A1 ; prfx
- ⓪(MOVE -(A3),D0
- ⓪(MOVE.L -(A3),A0 ; source
- ⓪(
- ⓪(CMPA.L A2,A0
- ⓪(BNE a2NotEqu
- ⓪(JSR copyA0OnStack
- ⓪(BRA a1NotEqu
- ⓪&a2NotEqu
- ⓪(CMPA.L A1,A0
- ⓪(BNE a1NotEqu
- ⓪(JSR copyA0OnStack
- ⓪&a1NotEqu
- ⓪(
- ⓪(ADDQ #1,D0
- ⓪(MOVE D3,-(A7)
- ⓪(
- ⓪(; Fehler melden, wenn 'prfx' zu klein
- ⓪(CMPI #7,D1
- ⓪(BEQ OK1
- ⓪(BHI OK2
- ⓪(TRAP #6
- ⓪(DC.W StringOverflow-$4000 ; callerCaused
- ⓪(ADDQ #1,D1
- ⓪(BRA OK3
- ⓪&OK2:
- ⓪(CLR.B 8(A1)
- ⓪&OK1:
- ⓪(MOVEQ #8,D1
- ⓪&OK3:
- ⓪(
- ⓪(; Fehler melden, wenn 'sfx' zu klein
- ⓪(CMPI #2,D2
- ⓪(BEQ OK4
- ⓪(BHI OK5
- ⓪(TRAP #6
- ⓪(DC.W StringOverflow
- ⓪(ADDQ #1,D2
- ⓪(BRA OK6
- ⓪&OK5:
- ⓪(CLR.B 3(A2)
- ⓪&OK4:
- ⓪(MOVEQ #3,D2
- ⓪&OK6:
- ⓪(
- ⓪&L1:
- ⓪(SUBQ #1,D0
- ⓪(BCS EMPTY
- ⓪(MOVE.B (A0)+,D3
- ⓪(BEQ EMPTY
- ⓪(CMPI.B #'.',D3
- ⓪(BEQ POINT
- ⓪(SUBQ #1,D1
- ⓪(BMI L1
- ⓪(MOVE.B D3,(A1)+
- ⓪(BRA L1
- ⓪(
- ⓪&POINT:
- ⓪(SUBQ #1,D0
- ⓪(BCS EMPTY
- ⓪(MOVE.B (A0)+,D3
- ⓪(BEQ EMPTY
- ⓪(SUBQ #1,D2
- ⓪(BCS EMPTY
- ⓪(MOVE.B D3,(A2)+
- ⓪(BRA POINT
- ⓪(
- ⓪&EMPTY:
- ⓪(TST D1
- ⓪(BLE EM1
- ⓪(CLR.B (A1)
- ⓪&EM1:
- ⓪(TST D2
- ⓪(BLE EM2
- ⓪(CLR.B (A2)
- ⓪&EM2:
- ⓪(
- ⓪(MOVE (A7)+,D3
- ⓪(UNLK A5
- ⓪$END
- ⓪"END SplitName;
- ⓪
- ⓪ PROCEDURE SplitPath ( REF source: ARRAY OF CHAR; VAR path, name: ARRAY OF CHAR );
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(LINK A5,#0
- ⓪(
- ⓪(MOVE.L -18(A3),A0 ; ADR (source)
- ⓪(MOVE.L A0,A1
- ⓪(MOVE.W -14(A3),D0 ; HIGH (source)
- ⓪(MOVE.W D0,D2
- ⓪(
- ⓪(MOVE.L A1,D1
- ⓪ len TST.B (A1)+
- ⓪(DBEQ D2,len
- ⓪(BNE cle
- ⓪(SUBQ.L #1,A1
- ⓪ cle SUBA.L D1,A1
- ⓪(MOVE.W A1,D1
- ⓪(BEQ ende0
- ⓪(
- ⓪&lupo:
- ⓪(MOVE.B -1(A0,D1.W),D2
- ⓪(CMPI.B #':',D2
- ⓪(BEQ ende0
- ⓪(CMPI.B #'\',D2
- ⓪(BEQ ende0
- ⓪(SUBQ #1,D1
- ⓪(BNE lupo
- ⓪&ende0:
- ⓪(
- ⓪(MOVE.L -12(A3),A1 ; ADR (path)
- ⓪(MOVE.L -06(A3),A2 ; ADR (name)
- ⓪(
- ⓪(CMPA.L A2,A0
- ⓪(BNE a2NotEqu
- ⓪(JSR copyA0OnStack
- ⓪(BRA a1NotEqu
- ⓪&a2NotEqu
- ⓪(CMPA.L A1,A0
- ⓪(BNE a1NotEqu
- ⓪(JSR copyA0OnStack
- ⓪&a1NotEqu
- ⓪(
- ⓪(CLR.B (A1)
- ⓪(CLR.B (A2)
- ⓪(
- ⓪(MOVEM.L D3-D7,-(A7)
- ⓪(
- ⓪(MOVE.W -08(A3),D5 ; HIGH (path)
- ⓪(MOVE.W -(A3),D6 ; HIGH (name)
- ⓪(SUBA.W #16,A3
- ⓪(
- ⓪(MOVE #1,-(A7) ; Flag: Bisher kein Überlauf
- ⓪(
- ⓪(MOVEQ #0,D2 ; source-counter
- ⓪ l CMP D1,D2 ; pos erreicht ?
- ⓪(BGE scnd
- ⓪(CMP D0,D2 ; source geleert ?
- ⓪(BHI err ; ja.
- ⓪(CMP D5,D2
- ⓪(BHI full
- ⓪(MOVE.B (A0)+,(A1)+
- ⓪ c BEQ err2
- ⓪(ADDQ #1,D2
- ⓪(BRA l
- ⓪(
- ⓪ full CLR (A7)
- ⓪(TST.B (A0)+
- ⓪(BRA c
- ⓪(
- ⓪ full2 TST D7
- ⓪(BNE full3
- ⓪(TST D3
- ⓪(BNE ende
- ⓪ full3 TST.B (A0)+
- ⓪(BEQ ende
- ⓪(
- ⓪ err CMP D5,D2
- ⓪(BHI err2
- ⓪(CLR.B (A1)+ ; Endemarke bei dest1 setzen
- ⓪(
- ⓪ err2 CLR (A7)
- ⓪(BRA ende
- ⓪(
- ⓪ scnd CMP D5,D2
- ⓪(BHI scnd0
- ⓪(CLR.B (A1)+ ; Endemarke bei dest1 setzen
- ⓪ scnd0 MOVEQ #0,D4
- ⓪(MOVEQ #0,D3 ; Flag f. prefix/suffix
- ⓪(MOVEQ #8,D7
- ⓪ l2 CMP D6,D4 ; dest2 voll ?
- ⓪(BHI full2
- ⓪(MOVE.B (A0)+,D1
- ⓪(BEQ ende2
- ⓪(CMPI.B #'.',D1
- ⓪(BNE l22
- ⓪(MOVEQ #0,D7
- ⓪(TST D3
- ⓪(BNE l22
- ⓪(MOVEQ #1,D3
- ⓪(MOVEQ #4,D7
- ⓪ l22 TST D7
- ⓪(BEQ l21
- ⓪(SUBQ #1,D7
- ⓪(MOVE.B D1,(A2)+
- ⓪(ADDQ #1,D4
- ⓪ l21 ADDQ #1,D2
- ⓪(CMP D0,D2
- ⓪(BLS l2
- ⓪ ende2 CMP D6,D4
- ⓪(BHI ende
- ⓪(CLR.B (A2)+ ; Endemarke bei dest2 setzen
- ⓪ ende
- ⓪(TST.W (A7)+
- ⓪(BNE ok
- ⓪(TRAP #6
- ⓪(DC.W StringOverflow
- ⓪&ok:
- ⓪(MOVEM.L (A7)+,D3-D7
- ⓪(UNLK A5
- ⓪$END
- ⓪"END SplitPath;
- ⓪
- ⓪ PROCEDURE FileName ( REF filename: ARRAY OF CHAR ): NameStr;
- ⓪"(*$L+*)
- ⓪"VAR path: PathStr; name: NameStr;
- ⓪"BEGIN
- ⓪$SplitPath (filename, path, name);
- ⓪$RETURN name
- ⓪"END FileName;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE FilePath ( REF filename: ARRAY OF CHAR ): PathStr;
- ⓪"(*$L+*)
- ⓪"VAR path: PathStr; name: NameStr;
- ⓪"BEGIN
- ⓪$SplitPath (filename, path, name);
- ⓪$RETURN path
- ⓪"END FilePath;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE FilePrefix ( REF filename: ARRAY OF CHAR ): PfxStr;
- ⓪"(*$L+*)
- ⓪"VAR path: PathStr; name: NameStr; pfx: PfxStr; sfx: SfxStr;
- ⓪"BEGIN
- ⓪$SplitPath (filename, path, name);
- ⓪$SplitName (name, pfx, sfx);
- ⓪$RETURN pfx
- ⓪"END FilePrefix;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE FileSuffix ( REF filename: ARRAY OF CHAR ): SfxStr;
- ⓪"(*$L+*)
- ⓪"VAR path: PathStr; name: NameStr; pfx: PfxStr; sfx: SfxStr;
- ⓪"BEGIN
- ⓪$SplitPath (filename, path, name);
- ⓪$SplitName (name, pfx, sfx);
- ⓪$RETURN sfx
- ⓪"END FileSuffix;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE DriveToStr ( driveNo: Drive ): DriveStr;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE -(A3),D0
- ⓪(BEQ DFT
- ⓪(ADDI.B #$40,D0
- ⓪(MOVE.B D0,(A3)+
- ⓪(MOVE.B #':',(A3)+
- ⓪(RTS
- ⓪&DFT:
- ⓪(CLR (A3)+
- ⓪$END
- ⓪"END DriveToStr;
- ⓪
- ⓪ PROCEDURE StrToDrive ( REF driveStr: ARRAY OF CHAR ): Drive;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(CLR D0
- ⓪(TST.W -(A3)
- ⓪(MOVE.L -(A3),A0
- ⓪(BEQ DFT
- ⓪(TST.B (A0)
- ⓪(BEQ DFT
- ⓪(CMPI.B #':',1(A0)
- ⓪(BNE DFT
- ⓪(MOVE.B (A0),D0
- ⓪(CMPI.B #'Z',D0
- ⓪(BLS nolower
- ⓪(SUBI.B #32,D0 ; change to lower case
- ⓪&nolower
- ⓪(SUBI.B #'A',D0
- ⓪(BCS err
- ⓪(ADDQ #1,D0
- ⓪(CMPI.W #drvZ,D0
- ⓪(BLS DFT
- ⓪&err
- ⓪(CLR D0
- ⓪&DFT:
- ⓪(MOVE D0,(A3)+
- ⓪$END
- ⓪"END StrToDrive;
- ⓪
- ⓪ PROCEDURE ValidatePath ( VAR path: ARRAY OF CHAR );
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L -6(A3),-(A7)
- ⓪(MOVE.W -2(A3),-(A7)
- ⓪(JSR fileUpper
- ⓪(MOVE.W (A7)+,D0
- ⓪(MOVE.L (A7)+,A0
- ⓪(TST.B (A0)
- ⓪(BEQ e
- ⓪&l TST.B (A0)+
- ⓪(DBEQ D0,l
- ⓪(BNE a
- ⓪(SUBQ.L #1,A0
- ⓪&a SUBQ.L #1,A0
- ⓪(CMPI.B #':',(A0)
- ⓪(BEQ e
- ⓪(CMPI.B #'\',(A0)
- ⓪(BEQ e
- ⓪(TST.W D0
- ⓪(BPL o
- ⓪(; string ist schon voll!
- ⓪(TRAP #6
- ⓪(DC.W StringOverflow
- ⓪(BRA e
- ⓪&o BEQ f
- ⓪(CLR.B 2(A0) ; wenn mit '\' nicht voll, NUL-Zeichen dran
- ⓪&f MOVE.B #'\',1(A0)
- ⓪&e
- ⓪$END
- ⓪"END ValidatePath;
- ⓪"
- ⓪ PROCEDURE PathValidated ( REF path: ARRAY OF CHAR ): PathStr;
- ⓪"(*$L+*)
- ⓪"VAR newpath: PathStr; ok: BOOLEAN;
- ⓪"BEGIN
- ⓪$Strings.Assign (path, newpath, ok);
- ⓪$ValidatePath (newpath);
- ⓪$RETURN newpath
- ⓪"END PathValidated;
- ⓪"(*$L=*)
- ⓪
- ⓪
- ⓪ PROCEDURE NameUnique ( REF fileName: ARRAY OF CHAR ): BOOLEAN;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.W -(A3),D0
- ⓪(MOVE.L -(A3),A0
- ⓪(MOVEQ #'?',D1
- ⓪(MOVEQ #'*',D2
- ⓪&L TST.B (A0)
- ⓪(BEQ T
- ⓪(CMP.B (A0),D1
- ⓪(BEQ F
- ⓪(CMP.B (A0)+,D2
- ⓪(BEQ F
- ⓪(DBRA D0,L
- ⓪&T MOVE #1,(A3)+
- ⓪(RTS
- ⓪&F CLR (A3)+
- ⓪$END
- ⓪"END NameUnique;
- ⓪
- ⓪
- ⓪ PROCEDURE NameMatching ( REF fileName, wildcard: ARRAY OF CHAR ): BOOLEAN;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪((*
- ⓪*MOVE.W -(A3),D1
- ⓪*MOVE.L -(A3),A1 ; A1: wildcard
- ⓪*MOVE.W -(A3),D0
- ⓪*MOVE.L -(A3),A0 ; A0: filename
- ⓪*TST.B 4(A0)
- ⓪*BEQ F ; leerer filename ergibt FALSE
- ⓪(*)
- ⓪(LINK A5,#0
- ⓪
- ⓪(MOVE.L -12(A3),(A3)+
- ⓪(MOVE.W -08(A3),(A3)+
- ⓪(JSR fileUpper
- ⓪(MOVE.L -06(A3),(A3)+
- ⓪(MOVE.W -02(A3),(A3)+
- ⓪(JSR fileUpper
- ⓪
- ⓪(MOVE.L -12(A3),A0
- ⓪(TST.B (A0)
- ⓪(BEQ.W F ; leerer filename ergibt FALSE
- ⓪
- ⓪(BRA C0
- ⓪
- ⓪%U0 ; Strings auf Stack löschen!
- ⓪(MOVE.L (A7)+,D0
- ⓪(CLR.L -(A7)
- ⓪(CLR.L -(A7)
- ⓪(CLR.W -(A7)
- ⓪(MOVE.L A7,(A3)+ ; VAR pfx
- ⓪(MOVE #8,(A3)+
- ⓪(CLR.L -(A7)
- ⓪(MOVE.L A7,(A3)+ ; VAR sfx
- ⓪(MOVE #3,(A3)+
- ⓪(MOVE.L D0,-(A7)
- ⓪(JMP SplitName
- ⓪
- ⓪%C0 BSR U0
- ⓪(BSR U0
- ⓪(; Stack (alle Strings Null-terminiert):
- ⓪(; 0(A7): sfx(filename)
- ⓪(; 4(A7): pfx(filename)
- ⓪(; 14(A7): sfx(wildcard)
- ⓪(; 18(A7): pfx(wildcard)
- ⓪
- ⓪(LEA 18(A7),A0
- ⓪(LEA 4(A7),A1
- ⓪%L1 MOVE.B (A0)+,D0 ; Zeichen aus 'wildcard'
- ⓪(BEQ E1 ; filename muß zu ende sein
- ⓪(CMPI.B #'*',D0
- ⓪(BEQ T1 ; filename ist egal
- ⓪(CMP.B (A1)+,D0
- ⓪(BEQ L1
- ⓪(CMPI.B #'?',D0
- ⓪(BEQ L1 ; zeichen ist egal
- ⓪(BRA F
- ⓪
- ⓪%E1 TST.B (A1)
- ⓪(BNE F
- ⓪
- ⓪%T1 LEA 14(A7),A0
- ⓪(LEA (A7),A1
- ⓪%L2 MOVE.B (A0)+,D0
- ⓪(BEQ S1 ; filename muß zu ende sein
- ⓪(CMPI.B #'*',D0
- ⓪(BEQ T ; filename ist egal
- ⓪(CMP.B (A1)+,D0
- ⓪(BEQ L2
- ⓪(CMPI.B #'?',D0
- ⓪(BEQ L2 ; zeichen ist egal
- ⓪(BRA F
- ⓪
- ⓪%S1 TST.B (A1)
- ⓪(BNE F
- ⓪
- ⓪&T MOVE #1,(A3)+
- ⓪(UNLK A5
- ⓪(RTS
- ⓪
- ⓪&F CLR (A3)+
- ⓪(UNLK A5
- ⓪$END
- ⓪"END NameMatching;
- ⓪
- ⓪ END FileNames.
- ⓪ ə
- (* $FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$000020AC$FFECF05A$00002CAF$FFECF05A$00001E79$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05A$FFECF05AÇ$00000195T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000002BD$0000015C$00000164$00000195$0000016B$000002B2$FFEE7904$0000275D$FFE2D09E$00000404$FFF13E0C$00000410$00000404$00001E79$000020AC$00001F6FÿÇé*)
-