home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
monitors
/
rsys
/
rsyssrc.lha
/
RSysSummaryLists.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-09-19
|
14KB
|
540 lines
/*
***************************************************************************
*
* Datei:
* RSysSummaryLists.c
*
* Inhalt:
*
* --- Globale Routinen ---
*
* void MakeHardwareList ( void );
* void MakeMemoryList ( void );
* void MakeSystemList ( void );
*
* --- Lokale Routinen ---
*
* static struct _hardwareentry *allocentry ( struct _hardwareentry *prev , char *title , char *info );
* static struct _hardwareentry *allochardwareentry ( struct _hardwareentry *prev , char *title , char *info );
* static struct _hardwareentry *allocnumhardwareentry ( struct _hardwareentry *prev , char *title , unsigned long num , int hex );
* static void CheckProcessors ( char *cpu , char *fpu , char *mmu );
* static void extract_comp ( UWORD manufactnr , UWORD prodnr , char *name , char *company , int type );
*
* Bemerkungen:
* Listen für Hardwarekonfiguration, Speicherlisten und Systemliste.
*
* Erstellungsdatum:
* 25-Jun-93 Rolf Böhme
*
* Änderungen:
* 25-Jun-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSys.h"
static struct _hardwareentry
{
char title[TITLELEN];
char info[MAXSTRLEN];
struct _hardwareentry *next;
} firsthardwareentry =
{
"", "", NULL
};
static struct Remember *Key = NULL;
/*
* allochardwareentry() erzeugt einen Eintrag für die
* Hardwareliste
*/
static struct _hardwareentry *
allochardwareentry(struct _hardwareentry *prev, char *title, char *info)
{
struct _hardwareentry *new;
if (new = (struct _hardwareentry *) AllocRemember((struct Remember **) & Key,
sizeof(struct _hardwareentry),
MEMF_CLEAR))
{
if (title) strncpy(new->title, title, TITLELEN);
else
strcpy(new->title, field[BLANK_FIELD]);
if (info) strncpy(new->info, info, MAXSTRLEN);
else
new->info[0] = STRINGEND;
prev->next = new;
new->next = NULL;
}
else ErrorHandle(title, MEMORY_ERR, ALLOC_FAIL, KILL);
return new;
}
/*
* allochardwareentry() erzeugt einen Eintrag für die
* Hardwareliste
*/
static struct _hardwareentry *
allocentry(struct _hardwareentry *prev, char *title, char *info)
{
struct _hardwareentry *new;
if (new = (struct _hardwareentry *) AllocRemember((struct Remember **) & Key,
sizeof(struct _hardwareentry),
MEMF_CLEAR))
{
strncpy(new->title, title, TITLELEN);
if (info) strncpy(new->info, info, MAXSTRLEN);
else
strcpy(new->info, "-");
prev->next = new;
new->next = NULL;
}
else ErrorHandle(title, MEMORY_ERR, ALLOC_FAIL, KILL);
return new;
}
/*
* allocnumhardwareentry() erzeugt einen Zahleneintrag für die
* Hardwareliste
*/
static struct _hardwareentry *
allocnumhardwareentry(struct _hardwareentry *prev, char *title,
unsigned long num, int hex)
{
struct _hardwareentry *new;
if (new = (struct _hardwareentry *)AllocRemember((struct Remember **) & Key,
sizeof(struct _hardwareentry),
MEMF_CLEAR))
{
strncpy(new->title, title, TITLELEN);
if (hex) sprintf(new->info, "0x%08lx", num);
else
sprintf(new->info, "%lD", num);
prev->next = new;
new->next = NULL;
}
else ErrorHandle(title, MEMORY_ERR, ALLOC_FAIL, KILL);
return new;
}
extern char **company_str;
extern struct Manufacturer *manu;
/*
* extract_comp() ermittelt einen Company-Namen und einen
* Produktnamen aus dem Manufacturer-Eintrag in der
* ExpansionBase
*/
static void
extract_comp(UWORD manufactnr,UWORD prodnr,char *name,char *company, int type)
{
register int i,j;
extern int hardwarecnt;
strcpy(company,field[UNKNOWN_FIELD]);
strcpy(name,field[UNKNOWN_FIELD]);
type = -1;
if(Flags.dummy1 == 0) return;
for (i = 0; i < hardwarecnt; i++)
if (manu[i].manu_nr == manufactnr)
{
strncpy(company,company_str[ manu[i].company ],BUFSIZE);
j = i;
while((manu[j].prod_nr != prodnr) && (manu[j].manu_nr == manufactnr)) j++;
if((manu[j].prod_nr == prodnr) && (manu[j].manu_nr == manufactnr))
{
type = manu[j].type_nr;
strncpy(name,manu[j].name,BUFSIZE);
}
break;
}
return;
}
extern ULONG GetCPUType(void),GetFPUType(void),GetMMUType(void);
/*
* CheckProcessors() prüft den Type der CPU, MMU und der FPU
* mit ein paar kleinen Assemblerroutinen, die ich aus dem
* Quelltext des Programmes SetCPU von D. Haynie geratzt habe
*/
static void
CheckProcessors(char *cpu,char *fpu,char *mmu)
{
ULONG _cpu = GetCPUType(),_fpu = GetFPUType(),_mmu = GetMMUType();
sprintf(cpu,"CPU %ld",_cpu);
if(_fpu != 0L) sprintf(fpu,"FPU %ld",_fpu);
else
strcpy(fpu,"None");
if(_mmu != 0L) sprintf(mmu,"MMU %ld",_mmu);
else
strcpy(mmu,"None");
return;
}
/*
* MakeHardwareList() erzeugt eine Anzeigeliste mit den
* Daten der Hardware-Ausstattung des Rechners, auf dem RSys
* läuft
*/
void
MakeHardwareList(void)
{
struct _hardwareentry *loop;
int count = 0,
i;
UWORD type = SysBase->AttnFlags;
char out[BUFSIZE],comp[BUFSIZE],name[BUFSIZE],
*titles[]=
{
/* 0 */ "Processor",
/* 1 */ "Coprocessor",
/* 2 */ "Memory Unit",
/* 3 */ "Denise",
/* 4 */ "Agnus",
/* 5 */ "Type",
/* 6 */ "Company",
/* 7 */ "Name",
/* 8 */ "Init Action",
/* 9 */ "Driver",
/* 10 */ "Priority",
/* 11 */ "Diagnosis",
/* 12 */ "Manuf.nr.",
/* 13 */ "Prod.nr.",
/* 14 */ "Serial",
/* 15 */ "Boardaddr.",
/* 16 */ "Boardsize",
/* 17 */ "Slotaddr.",
/* 18 */ "Slotsize",
/* 19 */ " >",
/* 20 */ "Alice",
/* 21 */ "Lisa",
/* 22 */ "MLisa",
/* 23 */ "Chipset",
/* 24 */ "Manuf. type"
},cpu[3][10];
struct ConfigDev *lastboard = NULL;
struct ExpansionRom *expansionrom;
int manutype;
struct Node *devnode;
DPOS;
loop = allochardwareentry(&firsthardwareentry, "----- Hardware", NULL);
CheckProcessors(cpu[0],cpu[1],cpu[2]);
for(i = 0; i < 3; i++) loop = allochardwareentry(loop, titles[i], cpu[i]);
if(GfxBase->ChipRevBits0 & GFXF_HR_DENISE)
loop = allochardwareentry(loop, titles[3], "ECS-Denise (8373)");
else
loop = allochardwareentry(loop, titles[3], "Normal Denise (8362)");
if(GfxBase->ChipRevBits0 & GFXF_HR_AGNUS)
loop = allochardwareentry(loop, titles[4], "ECS-Agnus (8372)");
else
loop = allochardwareentry(loop, titles[4], "Normal Agnus");
count += 6;
if(GfxBase->ChipRevBits0 & (GFXF_AA_ALICE | GFXF_AA_LISA | GFXF_AA_MLISA))
{
if(GfxBase->ChipRevBits0 & GFXF_AA_ALICE)
loop = allochardwareentry(loop, titles[20], "AA-Alice");
else
loop = allochardwareentry(loop, titles[20], "Non AA-Alice");
if(GfxBase->ChipRevBits0 & GFXF_AA_LISA)
loop = allochardwareentry(loop, titles[21], "AA-Lisa");
else
loop = allochardwareentry(loop, titles[21], "Non AA-Lisa");
if(GfxBase->ChipRevBits0 & GFXF_AA_MLISA)
loop = allochardwareentry(loop, titles[22], "AA-MLisa");
else
loop = allochardwareentry(loop, titles[22], "Non AA-MLisa");
count += 3;
}
else
{
loop = allochardwareentry(loop, titles[23], "No AA-Chipset");
count++;
}
loop = allochardwareentry(loop, (char *)field[BLANK_FIELD], NULL);
loop = allochardwareentry(loop, "----- Expansion", NULL);
count += 2;
if (ExpansionBase = (struct ExpansionBase *) OpenLibrary((UBYTE *) "expansion.library", NULL))
{
int cnt = 0;
while (lastboard = FindConfigDev(lastboard, -1L, -1L))
{
expansionrom = &(lastboard->cd_Rom);
if (expansionrom->er_Type & ERTF_MEMLIST)
loop = allochardwareentry(loop, titles[5], "RAM Expansion");
else
loop = allochardwareentry(loop, titles[5], "Other Expansion");
extract_comp(expansionrom->er_Manufacturer, expansionrom->er_Product, name,comp, manutype);
loop = allochardwareentry(loop, titles[6], comp);
loop = allochardwareentry(loop, titles[7], name);
count += 3;
if (lastboard->cd_Flags & CDF_SHUTUP)
{
loop = allochardwareentry(loop, titles[8], "No active");
count++;
}
if (lastboard->cd_Flags & CDF_CONFIGME)
{
loop = allochardwareentry(loop, titles[8], "Need Driver");
count++;
}
if (lastboard->cd_Flags & CDF_BADMEMORY)
{
loop = allochardwareentry(loop,titles[19], "Contains bad memory");
count++;
}
if (lastboard->cd_Flags & CDF_PROCESSED)
{
loop = allochardwareentry(loop, titles[19], "Private processed");
count++;
}
if (devnode = (struct Node *) lastboard->cd_Driver)
{
loop = allochardwareentry(loop, titles[9], devnode->ln_Name);
loop = allocnumhardwareentry(loop, titles[10],
(unsigned long)devnode->ln_Pri,
FALSE);
count += 2;
}
if (expansionrom->er_Flags & ERTF_DIAGVALID)
loop = allochardwareentry(loop, titles[11], "Action attached");
else
loop = allochardwareentry(loop, titles[11], "No action attached");
loop = allocnumhardwareentry(loop, titles[12],
(unsigned long)expansionrom->er_Manufacturer, FALSE);
loop = allocnumhardwareentry(loop, titles[13],
(unsigned long)expansionrom->er_Product, FALSE);
loop = allocnumhardwareentry(loop, titles[14],
(unsigned long)expansionrom->er_SerialNumber,TRUE);
loop = allocnumhardwareentry(loop, titles[24],
(unsigned long)manutype,FALSE);
loop = allocnumhardwareentry(loop, titles[15],
(unsigned long)lastboard->cd_BoardAddr, TRUE);
loop = allocnumhardwareentry(loop, titles[16],
(unsigned long)lastboard->cd_BoardSize, FALSE);
loop = allocnumhardwareentry(loop, titles[17],
(unsigned long)lastboard->cd_SlotAddr, TRUE);
loop = allocnumhardwareentry(loop, titles[18],
(unsigned long)lastboard->cd_SlotSize, FALSE);
loop = allochardwareentry(loop, (char *)field[BLANK_FIELD], NULL);
count += 10;
cnt++;
}
sprintf(out,"%ld expansions found",cnt);
loop = allochardwareentry(loop, "Summary", out);
count++;
CloseLibrary((struct Library *) ExpansionBase);
}
else ErrorHandle("expansion.library", LIBRARY_ERR, OPEN_FAIL, NO_KILL);
countentries = count;
Entries = AllocScrollEntries(countentries);
loop = firsthardwareentry.next;
i = 0;
while (loop && (i < countentries))
{
if (loop->info[0]) sprintf(Entries[i].se_Entry, "%-13s : %s", loop->title, loop->info);
else
strncpy(Entries[i].se_Entry, loop->title, BUFSIZE);
i++;
loop = loop->next;
}
FreeRemember((struct Remember **) & Key, TRUE);
CreateEntryList(NO_SORT, 0);
PrintInfo("Hardwarelist read", SPEAK, 0);
return;
}
/*
* MakeMemoryList() erzeugt eine Liste der Speichereinträge mit
* allen Fragmentierungen
*/
void
MakeMemoryList(void)
{
register int i = 3;
register struct MemChunk *Loop;
register struct MemHeader *MemHeader;
char cattype[MEMTYPELEN],type[5];
ULONG BlockSize = 0L, MemSize;
DPOS;
countentries = CountMemory() + 3;
if (NoEntries()) return;
Entries = AllocScrollEntries(countentries);
Forbid();
for (MemHeader = (struct MemHeader *) SysBase->MemList.lh_Head;
MemHeader->mh_Node.ln_Succ && (i < countentries);
MemHeader = (struct MemHeader *) MemHeader->mh_Node.ln_Succ)
{
MemSize = ((ULONG) MemHeader->mh_Upper - (ULONG)MemHeader->mh_Lower);
BlockSize += MemSize;
if (MemHeader->mh_Attributes & MEMF_CHIP) strcpy(type, "CHIP");
else if (MemHeader->mh_Attributes & MEMF_FAST) strcpy(type, "FAST");
else
strcpy(type, field[NO_TYPE]);
strncpy(cattype, type, MEMTYPELEN);
Entries[i].se_obj_id.address = MemHeader;
sprintf(Entries[i].se_Entry, EntryAttr[MEMORY].ea_dataformat,
(ULONG) MemHeader, MemSize, type);
i++;
for (Loop = MemHeader->mh_First; Loop && (i < countentries);
Loop = Loop->mc_Next)
{
strncpy(cattype, type, MEMTYPELEN);
strcat(cattype, "-CHUNK");
Entries[i].se_obj_id.address = Loop;
sprintf(Entries[i].se_Entry, EntryAttr[MEMORY].ea_dataformat,
(ULONG) Loop, Loop->mc_Bytes, cattype);
i++;
}
}
Permit();
sprintf(Entries[0].se_Entry, "Total : %8ld C:%8ld F:%8ld",
BlockSize, AvailMem(MEMF_CHIP), AvailMem(MEMF_FAST));
sprintf(Entries[1].se_Entry, "Largest: %8s C:%8ld F:%8ld",
field[BLANK_FIELD], AvailMem(MEMF_CHIP | MEMF_LARGEST),
AvailMem(MEMF_FAST | MEMF_LARGEST));
strcpy(Entries[2].se_Entry,"-------------- Fragmentation --------------");
CreateEntryList(NO_SORT, 0);
return;
}
/*
* MakeSystemList() gibt eine Kurzinfo über das laufende System
*/
void
MakeSystemList(void)
{
int count = 0;
long timeptr;
struct tm tm, *tmhelp = &tm;
DPOS;
countentries = 10;
Entries = AllocScrollEntries(countentries);
timeptr = time(NULL);
tmhelp = localtime((time_t *) & timeptr);
sprintf(Entries[count++].se_Entry, "%02ld.%02ld.%ld, %3ld. day, %2ld. week",
tmhelp->tm_mday, tmhelp->tm_mon + 1, (1900 + tmhelp->tm_year),
tmhelp->tm_yday + 1, (int)((tmhelp->tm_yday + 1) / 7) + 1);
sprintf(Entries[count++].se_Entry, "Tasks : %ld",
CountNodes(&SysBase->TaskWait) + CountNodes(&SysBase->TaskReady) + 1);
sprintf(Entries[count++].se_Entry, "Libraries : %ld",
CountNodes(&SysBase->LibList));
sprintf(Entries[count++].se_Entry, "Ports : %ld",
CountNodes(&SysBase->PortList));
sprintf(Entries[count++].se_Entry, "Volumes : %ld",
CountDevices(LDF_VOLUMES));
sprintf(Entries[count++].se_Entry, "Assigns : %ld",
CountDevices(LDF_ASSIGNS));
sprintf(Entries[count++].se_Entry, "Fonts : %ld",
CountNodes(&GfxBase->TextFonts));
sprintf(Entries[count++].se_Entry, "Resources : %ld",
CountNodes(&SysBase->ResourceList));
sprintf(Entries[count++].se_Entry, "Windows : %ld",
CountIntuiObjects((int)WINDOWS));
sprintf(Entries[count++].se_Entry, "Screens : %ld",
CountIntuiObjects((int)SCREENS));
CreateEntryList(NO_SORT, 0);
PrintInfo("Systeminfo read", SPEAK, 0);
return;
}