sdk-world v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Loading...
Searching...
No Matches
aarec.c
1#include <string.h>
2#include <malloc.h>
3#include "aalib.h"
4aa_linkedlist *aa_kbdrecommended = NULL, *aa_mouserecommended = NULL,
5*aa_displayrecommended = NULL;
6#define addlist(l,m) ((((l)!=NULL)?(m)->next=(l),(m)->previous=(l)->previous,(l)->previous=(m),(m)->previous->next=(m):((m)->next=(m),(m)->previous=(m),(l)=(m))))
7#define inslist(l,m) (addlist(l,m),(l)=(m))
8#define remove(l,m) ((m)->next->previous=(m)->previous,(m)->previous->next=(m)->next,((l)==m?(l)=((l)->next==(l)?NULL:(l)->next):NULL))
9static aa_linkedlist *aa_find(aa_linkedlist * l, char *text)
10{
11 aa_linkedlist *m = l;
12 if (l == NULL)
13 return NULL;
14 do {
15 if (!strcmp(m->text, text))
16 return (m);
17 m = m->next;
18 } while (l != m);
19 return NULL;
20}
21void aa_recommendhi(aa_linkedlist ** l, char *name)
22{
23 aa_linkedlist *m = (aa_linkedlist *) malloc(sizeof(*m)), *o = aa_find(*l, name);
24 if (o != NULL)
25 remove(*l, o);
26 m->text = strdup(name);
27 inslist(*l, m);
28}
29
30void aa_recommendlow(aa_linkedlist ** l, char *name)
31{
32 aa_linkedlist *o = aa_find(*l, name);
33 if (o == NULL) {
34 aa_linkedlist *m = (aa_linkedlist *) malloc(sizeof(*m));
35 m->text = strdup(name);
36 addlist(*l, m);
37 }
38}
39
40char *aa_getfirst(aa_linkedlist ** l)
41{
42 char *c = NULL;
43 aa_linkedlist *m = *l;
44 if (*l != NULL) {
45 remove(*l, m);
46 c = m->text;
47 free((char *) m);
48 }
49 return (c);
50}
51#if 0
52main()
53{
54 char *t;
55 aa_linkedlist *l = NULL;
56 aa_recommendhi(&l, "ahoj1");
57 aa_recommendlow(&l, "ble1");
58 aa_recommendhi(&l, "ahoj2");
59 aa_recommendlow(&l, "ble2");
60 aa_recommendlow(&l, "ble1");
61 aa_recommendhi(&l, "ble1");
62 while ((t = aa_getfirst(&l)) != NULL) {
63 printf("-%s-\n", t);
64 }
65}
66#endif