home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
monitors
/
rsys
/
source.lha
/
src
/
RSysSpecialList.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-09
|
7KB
|
293 lines
/*
***************************************************************************
*
* Datei:
* RSysSpecialList.c
*
* Inhalt:
* void RSysAmigaGuideRefList(void);
* void SysBrokerList(void);
* void SysAvailFontsList(void);
*
* Bemerkungen:
* Spezielle Listen, die unter keine der anderen Kategorien fallen.
*
* Erstellungsdatum:
* 07-Jul-93 Rolf Böhme
*
* Änderungen:
* 07-Jul-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSysDebug.h"
#include "RSysFunc.h"
void
RSysAmigaGuideRefList(void)
{
struct List listbuff, *list = &listbuff;
struct Node *node;
struct XRef *xrefnode;
LONG key;
register int i;
UBYTE *fpart, filename[16];
char *XRefTypes[] = {
"LINK", "FUNC", "COMM", "INCL", "MACR",
"STRU", "FIEL", "TYPD", "DEFI"
};
PrintHeader(AGUIDEXREF, NULL);
EmptyListView();
countentries = 0;
if (AmigaGuideBase = (struct AmigaGuideBase *)OpenLibrary ((STRPTR)"amigaguide.library", 33))
{
key = LockAmigaGuideBase(NULL);
if (GetAmigaGuideAttr(AGA_XRefList, NULL, (ULONG *)&list))
{
countentries = CountNodes(list);
if (!NoEntries())
{
Entries = AllocScrollEntries(countentries);
for(node = list->lh_Head, i = 0; node->ln_Succ && (i < countentries);
node = node->ln_Succ, i++)
{
xrefnode = (struct XRef *)node;
fpart = FilePart(xrefnode->xr_File);
if(fpart != xrefnode->xr_File)
sprintf((char *)filename,"+%-14s.14s",fpart);
else
strncpy((char *)filename, (char *)xrefnode->xr_File, 15);
sprintf(Entries[i].se_Entry, EntryAttr[32].ea_dataformat,
xrefnode->xr_Name, XRefTypes[node->ln_Type],
filename, xrefnode->xr_Line);
}
CreateEntryList(SORT);
}
}
UnlockAmigaGuideBase(key);
CloseLibrary((struct Library *)AmigaGuideBase);
}
else
ErrorHandle(LIBRARY_ERR, OPEN_FAIL, KILL);
PrintStatistics();
return;
}
/*
* Das sind die neuen Funktionen, die ich mit pragmas einbinde. Damit
* entfällt auch gleich das Prototyping. Alle Daten können mit dem
* Exchange-Programm überprüft werden. Die Funktionen sind in den fd-Files
* als private gekennzeichnet, was aber kein Prob sein sollte :-) Den
* Namen und die Übergaberegisterbelegung entnahm ich dem Program
* LIBSearcher v2.01 von Joep Grooten (lib201).
*/
/*
* FindBroker() gibt die Adresse des Brokers zurück, dessen Name in a0
* übergeben werden muß.
#pragma amicall(CxBase, 108, FindBroker(a0))
struct Node *FindBroker(STRPTR name);
*/
/*
* CopyBrokerList() kopiert den Listenkopf der Knoten mit den Commodities
* in eine zu übergebene mit MEMF_PUBLIC allozierte Liste. Offenbar gibt
* die Funktion die Anzahl der eingetragenen Commodities zurück. Die Liste
* scheint eine einfache normale struct List zu sein, ebenso wie die
* Knoten. Jedenfalls gibts beim Auslesen keine Probleme.
#pragma amicall(CxBase, 186, CopyBrokerList(a0))
LONG CopyBrokerList(struct List *bList);
*/
/*
* FreeBrokerList() scheint den Inhalt der allozierten Liste wieder
* freizugeben. Allerdings sind Seiteneffekte zu vermuten. Vielleicht wird
* auch die Commodities-Liste gekillt!
#pragma amicall(CxBase, 192, FreeBrokerList(a0))
void FreeBrokerList(struct List *bList);
*/
#define MAX_BROKER_ENTRIES 40
void
SysBrokerList(void)
{
struct Node *node,
*nodes[MAX_BROKER_ENTRIES],
*StartNode,
*foundBroker = NULL;
char name[MAX_BROKER_ENTRIES][22];
int pri[MAX_BROKER_ENTRIES],
i,
cnt;
extern CxObj *broker;
PrintHeader(COMMODITIES, NULL);
EmptyListView();
/*
* Analog zu FindName() oder FindPort() kann auch hier ein
* Schutzprotokoll nötig sein. Da Commodities auch mit Interrupts
* arbeiten müssen (InputHandler!), sollte gleich mit
* Disable()/Enable() hingelangt werden!
*/
Disable();
/* foundBroker = FindBroker((STRPTR) "RSys");*/
foundBroker = (struct Node *)broker;
for (node = foundBroker; node->ln_Pred; node = node->ln_Pred)
StartNode = node;
for (node = StartNode, cnt = 0;
node->ln_Succ && (cnt < MAX_BROKER_ENTRIES);
node = node->ln_Succ)
{
/*
* Vitale Daten kopieren; der Type ist unbekannt! Damit
* dennoch die Namen ausgegeben werden können, übergebe ich
* einfach den Node-Typen.
*/
savestrcpy(name[cnt], node, 22, (int)node->ln_Type);
pri[cnt] = node->ln_Pri;
nodes[cnt++] = node;
}
Enable();
countentries = cnt;
if(NoEntries())
return;
Entries = AllocScrollEntries(countentries);
for (i = 0; i < cnt; i++)
{
sprintf(Entries[i].se_Entry,
EntryAttr[26].ea_dataformat,
name[i],
pri[i]);
AddNodeToList(i, SORT);
}
PrintStatistics();
return;
}
/*
* SysAvailFontsList() listet alle Fonts im Verzeichnis
* FONTS: auf
*/
void
SysAvailFontsList(void)
{
char Style[MAXSHOW];
char *Type[5] =
{
"-", "ROM", "DISK", "-", "SCAL"
};
struct AvailFontsHeader *afh;
struct AvailFonts *AF;
int extrabytes,
initialsize = sizeof(struct AvailFontsHeader),
i;
DPOS;
PrintHeader(ALLFONTS, NULL);
EmptyListView();
PrintInfo("Read all Fonts", NO_SPEAK, 0);
do
{
afh = (struct AvailFontsHeader *)
MyAllocVec(initialsize, MEMF_CLEAR | MEMF_ANY, KILL);
if (afh)
{
extrabytes = AvailFonts((STRPTR) afh, initialsize, AFF_DISK);
if (extrabytes)
{
MyFreeVec(afh);
initialsize += extrabytes;
}
}
}
while (extrabytes);
countentries = afh->afh_NumEntries;
if (NoEntries())
return;
Entries = AllocScrollEntries(countentries);
AF = (struct AvailFonts *) & (afh[1]);
for (i = 0; i < countentries; i++)
{
strcpy(Style, " ");
if (!(AF[i].af_Attr.ta_Style & FS_NORMAL))
Style[0] = 'N';
if (AF[i].af_Attr.ta_Style & FSF_UNDERLINED)
Style[1] = 'U';
if (AF[i].af_Attr.ta_Style & FSF_BOLD)
Style[2] = 'B';
if (AF[i].af_Attr.ta_Style & FSF_ITALIC)
Style[3] = 'I';
if (AF[i].af_Attr.ta_Style & FSF_EXTENDED)
Style[4] = 'E';
if (AF[i].af_Attr.ta_Style & FSF_COLORFONT)
Style[5] = 'C';
if (AF[i].af_Attr.ta_Style & FSF_TAGGED)
Style[6] = 'T';
Style[7] = STRINGEND;
sprintf(Entries[i].se_Entry, EntryAttr[17].ea_dataformat,
AF[i].af_Attr.ta_Name,
Type[AF[i].af_Type],
AF[i].af_Attr.ta_YSize,
Style);
AddNodeToList(i, SORT);
}
MyFreeVec(afh);
PrintStatistics();
return;
}