home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
monitors
/
rsys
/
source.lha
/
src
/
rsysmodify.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-09
|
25KB
|
1,067 lines
/*
***************************************************************************
*
* Datei:
* RSysModify.c
*
* Inhalt:
* void CountAssocObjects(struct Task *task, int *wins, int *scrs, int *ports);
* int CheckWindow(struct Window *findwin);
* void ModifyObject(int TypeID, unsigned long code);
*
* Bemerkungen:
* Enthält die Routinen zum Modifizieren von Objekten.
*
* Erstellungsdatum:
* 07-Jan-93 Rolf Böhme
*
* Änderungen:
* 07-Jan-93 Rolf Böhme Erstellung
*
***************************************************************************
*/
#include "RSysDebug.h"
#include "RSysFunc.h"
enum
{
GD_TaskGad,
GD_PrioGad,
GD_OkGad,
GD_CancelGad,
GD_PriIntGad
};
static void KillTask(struct objectid *);
/*
* CheckObject() prüft, ob ein ausgewähltes Listenelement (Objekt)
* sich noch in der Liste befindet
*/
static BOOL
CheckObject(struct List *list, struct objectid *obj)
{
struct Node *node;
Forbid();
for (node = list->lh_Head; node->ln_Succ && (node != obj->address);
node = node->ln_Succ) ;
Permit();
return ((node == obj->address) ? TRUE : FALSE);
}
/*
* CheckTask() prüft, ob ein Task-Objekt sich noch in den Listen
* befindet, also noch existiert
*/
static BOOL
CheckTask(struct objectid *obj)
{
if(CheckObject(&(SysBase->TaskWait),obj) ||
CheckObject(&(SysBase->TaskReady),obj) ||
((struct Task *)obj->address == FindTask(NULL)))
return(TRUE);
else
return(FALSE);
}
/*
* CountAssocObjects() zählt die zu einem Task gehörenden
* Windows, Screens und Ports
*/
void
CountAssocObjects(struct Task *task, int *wins, int *scrs, int *ports)
{
ULONG lock;
struct Window *win;
struct Screen *scr;
struct MsgPort *port;
struct Node *node;
DPOS;
Forbid();
lock = LockIBase(NULL);
for (scr = IntuitionBase->FirstScreen; scr; scr = scr->NextScreen)
for (win = scr->FirstWindow; win; win = win->NextWindow)
{
if (win->UserPort && win->UserPort->mp_SigTask &&
(win->UserPort->mp_SigTask == task))
{
(*wins)++;
if ((scr->Flags & CUSTOMSCREEN) && NOT(scr->Flags & PUBLICSCREEN))
(*scrs)++;
}
}
UnlockIBase(lock);
for (node = SysBase->PortList.lh_Head; node->ln_Succ; node = node->ln_Succ)
{
port = (struct MsgPort *) node;
if (port->mp_SigTask && (port->mp_SigTask == task))
(*ports)++;
}
Permit();
return;
}
/*
* CheckWindow() prüft, ob ein Fenster noch existiert, und zwar
* auf allen Screens
*/
int
CheckWindow(struct Window *findwin)
{
ULONG lock;
struct Window *win;
struct Screen *scr;
int ret = FALSE;
DPOS;
lock = LockIBase(NULL);
for (scr = IntuitionBase->FirstScreen; scr && NOT(ret); scr = scr->NextScreen)
for (win = scr->FirstWindow; win && NOT(ret); win = win->NextWindow)
if (win == findwin)
ret = TRUE;
UnlockIBase(lock);
return (ret);
}
/*
* CheckScreen() prüft, ob ein Screen noch existiert
*/
static int
CheckScreen(struct Screen *findscr)
{
ULONG lock;
struct Screen *scr;
int ret = FALSE;
lock = LockIBase(NULL);
for (scr = IntuitionBase->FirstScreen; scr && NOT(ret); scr = scr->NextScreen)
if (scr == findscr)
ret = TRUE;
UnlockIBase(lock);
return (ret);
}
/*
* TaskPort() sucht in der Liste der öffentlichen Ports
* nach dem ersten Port, der den Task task als Signaltask
* hat
*/
static struct MsgPort *
TaskPort(struct Task *task)
{
struct MsgPort *taskport = NULL,
*port;
struct Node *node;
Forbid();
for (node = SysBase->PortList.lh_Head; node->ln_Succ; node = node->ln_Succ)
{
port = (struct MsgPort *) node;
if (port->mp_SigTask && (port->mp_SigTask == task))
{
taskport = port;
break;
}
}
Permit();
return (taskport);
}
/*
* TaskWindow() sucht in der IntuitionBase nach dem ersten Fenster,
* dessen UserPort zu dem Task task gehört
*/
static struct Window *
TaskWindow(struct Task *task)
{
ULONG lock;
struct Window *win,
*taskwindow = NULL;
struct Screen *scr;
lock = LockIBase(NULL);
for (scr = IntuitionBase->FirstScreen; scr && NOT(taskwindow); scr = scr->NextScreen)
for (win = scr->FirstWindow; win && NOT(taskwindow); win = win->NextWindow)
if (win->UserPort && (win->UserPort->mp_SigTask) &&
(win->UserPort->mp_SigTask == task))
taskwindow = win;
UnlockIBase(lock);
return (taskwindow);
}
/*
* ClosingWindows() schließt ein Fenster auf sicherste
* Weise, wie ich hoffe...
*/
static void
ClosingWindows(struct Window *wind)
{
if (CheckWindow(wind))
{
if((wind->ReqCount != 0) && wind->FirstRequest)
while(wind->ReqCount != 0)
EndRequest(wind->FirstRequest,wind);
if(wind->DMRequest)
ClearDMRequest(wind);
if(wind->Pointer)
ClearPointer(wind);
if(wind->MenuStrip)
ClearMenuStrip(wind);
CloseWindow(wind);
}
else
ErrorHandle(WINDOW_ERR, FIND_FAIL, NO_KILL);
return;
}
/*
* ClosingScreens() schließt einen Screen auf sicherste
* Weise, wie ich hoffe...
*/
static void
ClosingScreens(struct Screen *scr)
{
struct Window *win = scr->FirstWindow,
*markwin;
if (CheckScreen(scr))
{
while (win)
{
markwin = win->NextWindow;
ClosingWindows(win);
win = markwin;
}
CloseScreen(scr);
if (CheckScreen(scr))
PrintInfo("Screen not killed!", SPEAK, SEC);
}
else
ErrorHandle(SCREEN_ERR, FIND_FAIL, NO_KILL);
return;
}
/*
* RemovePortSavely() entfernt eine Port auf sicherste Weise
*/
static void
RemovePortSafely(struct MsgPort *p, struct objectid *obj)
{
struct Node *MsgNode;
struct MsgPort *port;
port = (obj ? (struct MsgPort *) obj->address : p);
Forbid();
if (NOT(IsMsgPortEmpty(port)))
{
MsgNode = port->mp_MsgList.lh_Head;
while (MsgNode = MsgNode->ln_Succ)
Remove((struct Node *) MsgNode);
}
DeletePort(port);
if (CheckObject(&SysBase->PortList, obj))
RemPort(port);
Permit();
return;
}
static void
RemoveFontSafely(struct TextFont *tf)
{
if (tf->tf_Flags & FPF_DISKFONT)
{
Forbid();
CloseFont(tf);
Remove((struct Node *) tf);
Permit();
}
else if (Question(SysWnd,"You attempt to remove a ROM-Font!\n"
"Remove this Font anyway?", YES))
{
Forbid();
RemFont(tf);
Remove((struct Node *) tf);
Permit();
}
return;
}
/*
* KillTask() entfernt einen Task aund alle mit ihm verbundenen
* Windows, Screens und Ports. Alle anderen Resourcen können
* nicht mehr eindeutig zugeordnet werden
*/
static void
KillTask(struct objectid *obj)
{
struct Task *task = (struct Task *) obj->address;
struct Window *taskwin;
struct MsgPort *port;
if (Question(SysWnd, "Break signal failed!\n"
"Do you really want to kill the task harder?", YES))
if (CheckTask(obj))
{
Forbid();
Disable();
Remove((struct Node *)task);
Enable();
if (taskwin = TaskWindow(task))
{
struct Screen *taskscr = NULL;
ULONG lock = LockIBase(NULL);
if (taskwin->WScreen && (taskwin->WScreen->Flags & CUSTOMSCREEN))
taskscr = taskwin->WScreen;
while (taskwin)
{
ClosingWindows(taskwin);
taskwin = TaskWindow(task);
}
if (taskscr)
CloseScreen(taskscr);
UnlockIBase(lock);
}
while(port = TaskPort(obj->address))
RemovePortSafely(port, NULL);
Disable();
RemTask(task);
Enable();
Permit();
}
else
ErrorHandle(TASK_ERR, FIND_FAIL, NO_KILL);
return;
}
/*
* SignalTask() sendet eine Signal signal an den Task obj
*/
static void
SignalTask(struct objectid *obj, ULONG signal)
{
struct Task *task;
if (task = FindTask((UBYTE *) obj->fullname))
Signal(task, signal);
else
ErrorHandle(TASK_ERR, FIND_FAIL, NO_KILL);
return;
}
#define ChgPri_CNT 5
static struct Window *ChgPriWnd = NULL;
static struct Gadget *ChgPriGList = NULL;
static struct Gadget *ChgPriGadgets[5];
static UWORD ChgPriLeft = 195;
static UWORD ChgPriTop = 71;
static UWORD ChgPriWidth = 228;
static UWORD ChgPriHeight = 55;
static UBYTE *ChgPriWdt = (UBYTE *) NAME " " VERSION " - Change priority";
static UWORD ChgPriGTypes[]=
{
TEXT_KIND,
SLIDER_KIND,
BUTTON_KIND,
BUTTON_KIND,
INTEGER_KIND
};
static struct NewGadget ChgPriNGad[]=
{
52, 5, 169, 13, (UBYTE *) "Task", NULL, GD_TaskGad, PLACETEXT_LEFT, NULL, NULL,
52, 21, 129, 13, (UBYTE *) "Prio", NULL, GD_PrioGad, NG_HIGHLABEL, NULL, NULL,
8, 37, 69, 13, (UBYTE *) "Ok", NULL, GD_OkGad, PLACETEXT_IN, NULL, NULL,
156, 37, 65, 13, (UBYTE *) "Cancel", NULL, GD_CancelGad, PLACETEXT_IN, NULL, NULL,
88, 37, 57, 13, NULL, NULL, GD_PriIntGad, 0, NULL, NULL
};
static ULONG *ChgPriGTags[]=
{
(ULONG *) (GTTX_Text), (ULONG *) NULL,
(ULONG *) (GTTX_Border), (ULONG *) TRUE,
(ULONG *) (TAG_DONE),
(ULONG *) (GTSL_Min), (ULONG *) (-128),
(ULONG *) (GTSL_Max), (ULONG *) 128,
(ULONG *) (GTSL_MaxLevelLen), (ULONG *) 4,
(ULONG *) (GTSL_LevelFormat), (ULONG *) "%4ld",
(ULONG *) (GTSL_LevelPlace), (ULONG *) (PLACETEXT_RIGHT),
(ULONG *) (PGA_Freedom), (ULONG *) LORIENT_HORIZ,
(ULONG *) (GA_Immediate), (ULONG *) TRUE,
(ULONG *) (GA_RelVerify), (ULONG *) TRUE,
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (TAG_DONE),
(ULONG *) (GTIN_Number), (ULONG *) 0,
(ULONG *) (GTIN_MaxChars), (ULONG *) 5,
(ULONG *) (TAG_DONE)
};
/*
* OpenChgPriWindow() öffnet ein kleines Fenster, in
* dem man mit einem Slider die Priorität eines Tasks einstellen
* kann
*/
static int
OpenChgPriWindow(void)
{
struct NewGadget ng;
struct Gadget *g;
UWORD lc,
tc;
UWORD wleft = ChgPriLeft,
wtop = ChgPriTop,
ww,
wh;
int gl[] = {GD_TaskGad, GD_PriIntGad, GD_PrioGad};
ComputeFont(Scr, ChgPriWidth, ChgPriHeight);
ww = ComputeX(ChgPriWidth);
wh = ComputeY(ChgPriHeight);
if ((wleft + ww + OffX + Scr->WBorRight) > Scr->Width)
wleft = Scr->Width - ww;
if ((wtop + wh + OffY + Scr->WBorBottom) > Scr->Height)
wtop = Scr->Height - wh;
ww = compute((UWORD) (OffX + Scr->WBorRight), FontX, (int)ChgPriWidth);
wh = compute((UWORD) (OffY + Scr->WBorBottom), FontY, (int)ChgPriHeight);
CenterWindow(Scr, &wtop, &wleft, ww, wh);
if (!(g = CreateContext(&ChgPriGList)))
return (1L);
for (lc = 0, tc = 0; lc < ChgPri_CNT; lc++)
{
CopyMem((char *)&ChgPriNGad[lc], (char *)&ng, (long)sizeof(struct NewGadget));
ng.ng_VisualInfo = VisualInfo;
ng.ng_TextAttr = Font;
ng.ng_LeftEdge = OffX + ComputeX(ng.ng_LeftEdge);
ng.ng_TopEdge = OffY + ComputeY(ng.ng_TopEdge);
ng.ng_Width = ComputeX(ng.ng_Width);
ng.ng_Height = ComputeY(ng.ng_Height);
ChgPriGadgets[lc] = g = CreateGadgetA((ULONG) ChgPriGTypes[lc], g, &ng, (struct TagItem *) & ChgPriGTags[tc]);
makelabelvisible(ChgPriGadgets[lc]);
while (ChgPriGTags[tc])
tc += 2;
tc++;
if (NOT g)
return (2L);
}
if (!(ChgPriWnd = OpenWindowTags(NULL,
WA_Left, wleft,
WA_Top, wtop,
WA_Width, ww,
WA_Height, wh,
WA_IDCMP, TEXTIDCMP |
SLIDERIDCMP |
BUTTONIDCMP |
INTEGERIDCMP |
IDCMP_CLOSEWINDOW |
IDCMP_REFRESHWINDOW,
WA_Flags, WFLG_DRAGBAR |
WFLG_DEPTHGADGET |
WFLG_CLOSEGADGET |
WFLG_SMART_REFRESH |
WFLG_ACTIVATE |
WFLG_RMBTRAP,
WA_Gadgets, ChgPriGList,
WA_Title, ChgPriWdt,
WA_PubScreenFallBack,TRUE,
WA_PubScreen, Scr,
TAG_DONE)))
return (4L);
RefreshRastPort(ChgPriWnd,ChgPriGadgets,gl, 3);
return (0L);
}
/*
* ChangePri() öffnet ein Fenster und managed das
* Priority-Handling für ein gewähltes Objekt obj
*/
static void
ChangePri(struct objectid *obj)
{
struct Task *task = (struct Task *) obj->address;
int TaskPri = task->tc_Node.ln_Pri,
OldPri = TaskPri;
register struct IntuiMessage *message;
ULONG class,
code;
APTR object;
APTR req;
extern struct Window *ChgPriWnd;
extern struct Gadget *ChgPriGadgets[];
Flags.quit_cp = 0;
if (OpenASysWindow(OpenChgPriWindow,NO_KILL))
{
req = LockWindow(SysWnd);
GT_SetGadgetAttrs(ChgPriGadgets[GD_TaskGad], ChgPriWnd, NULL,
GTTX_Text, (UBYTE *) obj->fullname,
TAG_DONE);
GT_SetGadgetAttrs(ChgPriGadgets[GD_PrioGad], ChgPriWnd, NULL,
GTSL_Level, (UBYTE *) TaskPri,
TAG_DONE);
GT_SetGadgetAttrs(ChgPriGadgets[GD_PriIntGad], ChgPriWnd, NULL,
GTIN_Number, (UBYTE *) TaskPri,
TAG_DONE);
do
{
Wait(1L << ChgPriWnd->UserPort->mp_SigBit);
while ((message = (struct IntuiMessage *)
GT_GetIMsg(ChgPriWnd->UserPort)) != NULL)
{
object = message->IAddress;
class = message->Class;
code = message->Code;
GT_ReplyIMsg(message);
switch (class)
{
case IDCMP_GADGETUP:
switch (((struct Gadget *) object)->GadgetID)
{
case GD_PrioGad:
TaskPri = (int)((char)code);
GT_SetGadgetAttrs(ChgPriGadgets[GD_PriIntGad], ChgPriWnd,
NULL,
GTIN_Number, (int)TaskPri,
TAG_DONE);
break;
case GD_OkGad:
Flags.quit_cp = 1;
break;
case GD_CancelGad:
TaskPri = OldPri;
Flags.quit_cp = 1;
break;
case GD_PriIntGad:
TaskPri = (int)((struct StringInfo *)
(((struct Gadget *)
object)->SpecialInfo))->LongInt;
if ((TaskPri < -128) || (TaskPri > 127))
GT_SetGadgetAttrs(ChgPriGadgets[GD_PriIntGad],
ChgPriWnd,
NULL,
GTIN_Number, OldPri,
TAG_DONE);
else
GT_SetGadgetAttrs(ChgPriGadgets[GD_PrioGad], ChgPriWnd,
NULL,
GTSL_Level, TaskPri,
TAG_DONE);
break;
}
break;
case IDCMP_CLOSEWINDOW:
TaskPri = OldPri;
Flags.quit_cp = 1;
break;
}
}
}
while (NOT(Flags.quit_cp));
CloseASysWindow(&ChgPriWnd, &ChgPriGList, NULL);
UnlockWindow(req);
if (CheckTask(obj) && (TaskPri != OldPri))
SetTaskPri(task, TaskPri);
}
return;
}
/*
* FlushLibrary() entfernt eine geschlossene Library aus
* dem System
*/
static void
FlushLibrary(struct objectid *obj)
{
struct Library *result;
if (Question(SysWnd, "Do you really want to remove the Library?", YES))
{
Forbid();
if ((result = (struct Library *)FindName(&SysBase->LibList, (UBYTE *) obj->fullname)) &&
(result->lib_OpenCnt == 0))
RemLibrary(result);
Permit();
if (!result)
ErrorHandle(LIBRARY_ERR, FIND_FAIL, NO_KILL);
}
return;
}
static void
ModifyTask(int TypeID, struct objectid *obj)
{
WORD sel;
ULONG signals[5] =
{
SIGBREAKF_CTRL_C, SIGBREAKF_CTRL_D, SIGBREAKF_CTRL_E, SIGBREAKF_CTRL_F,
(SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E | SIGBREAKF_CTRL_F)
};
if (CheckTask(obj))
{
sel = DisplayTaskInfo(obj);
switch (sel)
{
case 0:
if (obj->address != FindTask(NULL))
{
SignalTask(obj, signals[4]);
Delay(SEC);
if (CheckTask(obj))
KillTask(obj);
else
PrintInfo("Break signal killed the task!", SPEAK, 2*SEC);
RefreshList(TypeID);
}
else
ErrorHandle(TASK_ERR, KILL_FAIL, NO_KILL);
break;
case 1:
break;
case 2:
case 3:
case 4:
case 5:
SignalTask(obj, signals[sel - 2]);
RefreshList(TypeID);
break;
case 6:
if (CheckTask(obj))
{
ChangePri(obj);
RefreshList(TypeID);
}
else
ErrorHandle(TASK_ERR, FIND_FAIL, NO_KILL);
break;
case 7:
RefreshList(TypeID);
break;
}
}
else
ErrorHandle(TASK_ERR, FIND_FAIL, NO_KILL);
return;
}
static void
ModifyLibrary(int TypeID, struct objectid *obj)
{
if (CheckObject(&SysBase->LibList, obj))
{
if(!DisplayLibraryInfo(obj))
FlushLibrary(obj);
}
else
ErrorHandle(LIBRARY_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
return;
}
static void
DisplaySoftDevice(int TypeID, struct objectid *obj)
{
if (CheckObject(&SysBase->DeviceList, obj))
DisplaySoftDevInfo(obj);
else
{
ErrorHandle(DEVICE_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
}
return;
}
static void
DisplayResource(int TypeID, struct objectid *obj)
{
if (CheckObject(&SysBase->ResourceList, obj))
DisplayResourceInfo(obj);
else
{
ErrorHandle(DEVICE_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
}
return;
}
static void
ModifyPort(int TypeID, struct objectid *obj)
{
WORD sel;
if (CheckObject(&SysBase->PortList, obj))
{
sel = DisplayPortInfo(obj);
if (!sel && ((obj->address == SysIdPort) || (obj->address == broker_mp)))
{
ErrorHandle(PORT_ERR, KILL_FAIL, NO_KILL);
return;
}
if (!sel && Question(SysWnd, "Do you want to remove the Port?", YES))
{
if (CheckObject(&SysBase->PortList, obj))
RemovePortSafely(NULL, obj);
else
ErrorHandle(PORT_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
}
}
else
{
ErrorHandle(PORT_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
}
return;
}
static void
ModifyFont(int TypeID, struct objectid *obj)
{
WORD sel;
struct TextFont *tf = (struct TextFont *) obj->address;
if (CheckObject(&GfxBase->TextFonts, obj))
sel = DisplayFontInfo(obj);
else
{
ErrorHandle(FONT_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
return;
}
switch(sel)
{
case 0:
if (Question(SysWnd, "Do you want to close and remove this font?", YES))
{
if (CheckObject(&GfxBase->TextFonts, obj))
RemoveFontSafely(tf);
else
ErrorHandle(FONT_ERR, FIND_FAIL, NO_KILL);
RefreshList(TypeID);
}
break;
case 2:
if (CheckObject(&GfxBase->TextFonts, obj))
ShowFont((struct TextFont *) obj->address);
else
ErrorHandle(FONT_ERR, FIND_FAIL, NO_KILL);
break;
}
return;
}
static void
ModifyWindow(int TypeID, struct objectid *obj)
{
WORD sel;
sel = DisplayWindowInfo(obj);
if (!sel && ((struct Window *) obj->address == SysWnd))
{
ErrorHandle(WINDOW_ERR, FIND_FAIL, NO_KILL);
return;
}
if (!sel &&
Question(SysWnd, "Closing of Windows are very dangerous! The System \n"
"may be crash, when you close an active Window\n"
"Do you want to close the Window anyway?", YES))
ClosingWindows((struct Window *) obj->address);
RefreshList(TypeID);
return;
}
static void
ModifyScreen(int TypeID, struct objectid *obj)
{
WORD sel;
sel = DisplayScreenInfo(obj);
if (NOT(sel) &&
(((struct Screen *) obj->address == SysWnd->WScreen) ||
(((struct Screen *) obj->address)->Flags & WBENCHSCREEN)))
{
ErrorHandle(SCREEN_ERR, FIND_FAIL, NO_KILL);
return;
}
if (NOT(sel) &&
Question(SysWnd, "Closing of Screens are very dangerous! The System \n"
"may be crash, when you close an active Screen with\n"
"all associated windows!\n"
"Do you want to close the Screen and Windows anyway?", YES))
ClosingScreens((struct Screen *) obj->address);
return;
}
static void
DisplayTreeDevice(int TypeID, struct objectid *obj)
{
WORD sel = DisplayDiskInfo(obj->fullname, TRUE);
if (sel == 0)
PrintTree(obj);
return;
}
static void
DisplayAllFonts(int TypeID, struct Node *ClickedNode)
{
struct TextFont *tf;
struct TextAttr testfont;
int i,
j;
char fontname[MAXSTRLEN],
size[5];
i = 0;
while (ClickedNode->ln_Name[i] != ' ')
{
fontname[i] = ClickedNode->ln_Name[i];
i++;
}
fontname[i] = STRINGEND;
testfont.ta_Name = (UBYTE *) fontname;
while (ClickedNode->ln_Name[i] == ' ')
i++;
while (ClickedNode->ln_Name[i] != ' ')
i++;
while (ClickedNode->ln_Name[i] == ' ')
i++;
j = 0;
while (ClickedNode->ln_Name[i] != ' ')
{
size[j] = ClickedNode->ln_Name[i];
i++;
j++;
}
size[j] = STRINGEND;
testfont.ta_YSize = atoi(size);
testfont.ta_Flags = 0;
testfont.ta_Style = 0;
tf = OpenDiskFont(&testfont);
if (tf)
{
ShowFont(tf);
CloseFont(tf);
}
return;
}
/*
* ModifyObject() prüft ob ein Element einer Liste im Hauptfenster
* modifiziert oder angezeigt werden kann und ruft die entsprechenden
* Routinen auf
*/
void
ModifyObject(int TypeID, ULONG code)
{
struct Node *ClickedNode;
struct objectid *obj;
char out[BUFSIZE];
DPOS;
sprintf(out, "Modify %s", EntryAttr[TypeID].ea_type);
PrintInfo(out, SPEAK, 0);
if (NOT(ClickedNode = GetNode(&ListeLVList, code)))
{
ErrorHandle(LIST_NODE_ERR, FIND_FAIL, NO_KILL);
return;
}
obj = &((ScrollEntry *) ClickedNode)->se_obj_id;
switch (TypeID)
{
case GD_TasksGad:
ModifyTask(TypeID, obj);
break;
case GD_LibrariesGad:
ModifyLibrary(TypeID, obj);
break;
case SYSSOFTDEV:
DisplaySoftDevice(TypeID, obj);
break;
case GD_ResourcesGad:
DisplayResource(TypeID, obj);
break;
case GD_PortsGad:
ModifyPort(TypeID, obj);
break;
case GD_FontsGad:
ModifyFont(TypeID, obj);
break;
case GD_WindowsGad:
ModifyWindow(TypeID, obj);
break;
case GD_ScreensGad:
ModifyScreen(TypeID, obj);
break;
case GD_AssignsGad:
case GD_VolumesGad:
DisplayTreeDevice(TypeID, obj);
break;
case ALLFONTS:
DisplayAllFonts(TypeID, ClickedNode);
break;
default:
DisplayBeep(NULL);
PrintInfo("No modifications possible", SPEAK, SEC);
break;
}
PrintStatistics();
return;
}