Enabled some keys which need the alt qualifier (brackets, back slash etc.)
[AROS.git] / workbench / c / LibList.c
blobf49c5ac1065dd5749f392ba096f369e002063ff9
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc:
6 Lang: english
7 */
9 /******************************************************************************
12 NAME
14 LibList
16 SYNOPSIS
18 (N/A)
20 LOCATION
24 FUNCTION
26 Print list of all libraries.
28 INPUTS
30 RESULT
32 NOTES
34 EXAMPLE
36 BUGS
38 SEE ALSO
40 INTERNALS
42 HISTORY
44 ******************************************************************************/
46 #include <exec/memory.h>
47 #include <exec/tasks.h>
48 #include <exec/execbase.h>
49 #include <proto/exec.h>
50 #include <dos/dosextens.h>
51 #include <proto/dos.h>
53 const TEXT version[] = "$VER: LibList 41.2 (10.10.2005)\n";
55 struct lib
57 STRPTR name;
58 APTR address;
59 WORD version;
60 WORD revision;
61 WORD opencnt;
62 UBYTE flags;
65 static int addlib(struct Library *lib, struct lib **l, STRPTR *e)
67 STRPTR s1, s2;
69 (*l)->address = lib;
70 (*l)->version = lib->lib_Version;
71 (*l)->revision = lib->lib_Revision;
72 (*l)->opencnt = lib->lib_OpenCnt;
73 (*l)->flags = lib->lib_Flags;
75 s1 = lib->lib_Node.ln_Name;
77 if(s1!=NULL)
79 s2=s1;
80 while(*s2++)
82 while(s2>s1)
84 if(*e<=(STRPTR)l)
85 return 0;
86 *--(*e)=*--s2;
89 if((STRPTR)(*l+1)>*e)
90 return 0;
92 (*l)->name=*e;
93 ++*l;
95 return 1;
98 static int fillbuffer(struct lib **buffer, IPTR size)
100 STRPTR end=(STRPTR)*buffer+size;
101 struct Library *lib;
102 Forbid();
103 for(lib=(struct Library *)SysBase->LibList.lh_Head;
104 lib->lib_Node.ln_Succ!=NULL;
105 lib=(struct Library *)lib->lib_Node.ln_Succ)
106 if(!addlib(lib,buffer,&end))
108 Permit();
109 return 0;
111 Permit();
112 return 1;
115 int __nocommandline;
117 int main(void)
119 IPTR size;
120 struct lib *buffer,*libs,*libs2;
121 LONG error=RETURN_OK;
123 for(size=2048;;size+=2048)
125 buffer=AllocVec(size,MEMF_ANY);
126 if(buffer==NULL)
128 FPuts(Output(),"Not Enough memory for library buffer\n");
129 SetIoErr(ERROR_NO_FREE_STORE);
130 error = RETURN_FAIL;
131 break;
133 libs=buffer;
134 if(fillbuffer(&libs,size))
136 FPuts(Output(),"address\t\tversion\trev\topencnt\tflags\tname\n"
137 "------------------------------------------------------------\n");
138 for(libs2=buffer;libs2<libs;libs2++)
140 IPTR args[6];
141 args[0] = (IPTR)libs2->address;
142 args[1] = (IPTR)libs2->version;
143 args[2] = (IPTR)libs2->revision;
144 args[3] = (IPTR)libs2->opencnt;
145 args[4] = (IPTR)libs2->flags;
146 args[5] = (IPTR)libs2->name;
148 VPrintf("0x%08.lx\t%ld\t%ld\t%ld\t0x%lx\t%s\n", args);
149 if(SetSignal(0L,SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
151 error = RETURN_FAIL;
152 SetIoErr(ERROR_BREAK);
153 break;
156 FreeVec(buffer);
157 break;
159 FreeVec(buffer);
162 if (error != RETURN_OK)
164 PrintFault(IoErr(), NULL);
167 return error;