Ind- udlæsning, sletning og sortering af data i en typedef buffer
HejSom spørgesmålet lyder så har jeg problemer med Indlæsning, udlæsning, sletning og
sortering af data i en typedef buffer. Her er starten af min code som jeg ikke kan komme
videre med...
Sorteringsdelen har jeg slet ikke kikket på endnu, da jeg ikke kan overskue det. Men det
meningen at alle "kald" skal sorteres i stigende talorden. Dvs hver gang der kommer et nyt
kald så skal det kunne placeres på den rigtige plads i bufferen.
Det drejer sig om 999 numre.
Sletningsdelen skal tjekke om FKaldBuffer[MAXCALL] er blevet fyldt og hvis det er
tilfældet så skal det ældste "kald" slettes.
static byte FCallIndex;
static byte FCallCount; // =0-> tom ellers værdi 1 til MAXCALL
#define MAXCALL 64
typedef struct{
byte KTypeKVaegt;
word IDNr;
byte SengePersonaleNummer;
byte RumTekstIndex;
}TKaldStruct;
static TKaldStruct FKaldBuffer[MAXCALL];
#define BUFFERERR -1
byte GetNewIndex(const word BCDIDNummer)
{
byte i;
i=0;
while ( ( i<FCallCount ) && ( FKaldBuffer[i].IDNr != BCDIDNummer) ){
i++;
}
if (i>=FCallCount){
// ikke fundet
if ( FCallCount<(MAXCALL) ){ // er der plads i buffer ?
FCallCount++;
i = FCallCount-1;
}
else{
i = BUFFERERR; // ikke plads
}
}
return(i);
}
byte GetIndex(const word BCDIDNummer)
{
byte i;
i=0;
while ( ( i<FCallCount ) && ( FKaldBuffer[i].IDNr != BCDIDNummer) ){
i++;
}
if (i>=FCallCount)
i = BUFFERERR; // ikke fundet
return(i);
}
void GetNextCall(word *IDNR,byte *Ktype,byte *TextIndex, byte *SengPersonNr)
{
FCallIndex++; //0-MAXCALL-1
if(FCallIndex>(FCallCount-1)){
FCallIndex=0;
}
if (FCallIndex<FCallCount){
*IDNR = FKaldBuffer[FCallIndex].IDNr;
*Ktype = FKaldBuffer[FCallIndex].KTypeKVaegt;
*TextIndex = FKaldBuffer[FCallIndex].RumTekstIndex;
*SengPersonNr = FKaldBuffer[FCallIndex].SengePersonaleNummer;
}
else{
*IDNR = 0;
*Ktype = 0;
*TextIndex = 0;
*SengPersonNr = 0;
}
}
void EraseIndex(const word BCDIDNummer)
{
//for løkke som finder bcd nr og rykker buffer sammen og dec bufferindex
byte i, j;
j = GetIndex(BCDIDNummer);
for(i=0; i<MAXCALL; i++){
if( (FKaldBuffer[i].IDNr == BCDIDNummer) && (FKaldBuffer[i].KTypeKVaegt == 0) ){
FCallIndex--;
}
}
}
void IndexSetKaldCode(const word BCDIDNummer,const byte KType,const byte KaldeVaegtdt,const byte Afsnit)
{
byte i=0;
i = GetNewIndex(BCDIDNummer);
FKaldBuffer[i].IDNr = BCDIDNummer;
FKaldBuffer[i].KTypeKVaegt = KType;
FKaldBuffer[i].RumTekstIndex = KaldeVaegtdt;
FKaldBuffer[i].SengePersonaleNummer = Afsnit;
}