%%HP: T(1)A(D)F(.); " 'DEFS.SOU *RclPath %>ResZone:@Nom Fichier %=C.B RTY %Rcl Port GOSUBL ReadDecimal D1=(5)RclPort C=B.A DAT1=C.B GOSUBL Switch GOSUB.Dec\ %EndOfDir RTNC D0=C GOSUB.SIZE GOSUB RclDir RTNC GOSUB.Dec\ UP } *.Dec\ D=0.A LCASC(1)/ D1=(5)@ResZone { A=DAT1.B ?A=0.B EXIT D+1.A D1+2 ?A#C.B UP } D+D.A { A=DAT1.B CD1EX C-D.A CD1EX DAT1=A.B D1+2 CD1EX C+D.A CD1EX ?A#0.B UP } RTN *.SIZE D1=(5)@ResZone LCASC(1)/ D=0.A { A=DAT1.B ?A=0.B RTY ?A=C.B RTY D+1.A D1+2 UPNC } *RclSauveResZone D1=(5)@ResZone LC 20 B=C.B D=0.A { A=DAT0.B ?A<=C.B EXIT D+1.A DAT1=A.B D1+2 D0+2 B+1.B UPNC } C=0.A DAT1=C.B RTN *RclDir %>D0:@Dernier Objet Dir Da:Taille nom ResZone:Nom %EndOfDir %>Ca:@DIR Cb: Port %Cb D1 P=2 LC F0 P=4 D1=(5)@BankSwitch+#4 C=DAT1.P P=0 C-2.B RTNC CBIT=1.5 C+C.B D1=C C=DAT1.B RTN *Compare %compare Ca quartets de D0 a D1 carry si distincs %Aw Cw Ba P C-1.A GOC.Idem P=C.0 B=C.A A=DAT0.WP C=DAT1.WP ?A#C.WP Ť.dif CD0EX C+P+1 CD0EX CD1EX C+P+1 CD1EX P=0 BSR.A B-1.A SKC { A=DAT0.W C=DAT1.W ?A#C.W RTY D1+16 D0+16 B-1.A UPNC } *.Idem RTNCC *.dif P=0 RTNSC *ReadDecimal LC 3 ?A#C.B { D0+2 } B=0.W A=0.W { GOSUBL ReadOneDec RTNC C=B.W B+B.W B+B.W B+C.W B+B.W B+A.W UPNC } *ReadOneDec %Lit un chifre decimal, resultat dans Ab Carry si erreur A=DAT0.B LC 30 A-C.B RTNC LC 09 ?A>C.B RTY D0+2 RTNCC @"