sdk-world v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Loading...
Searching...
No Matches
aalib.c
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <malloc.h>
5#include "aalib.h"
6#include "aaint.h"
7
8struct aa_hardware_params aa_defparams =
9{
10 &aa_font16, AA_NORMAL_MASK | AA_DIM_MASK | AA_BOLD_MASK
11};
12void aa_uninitmouse(struct aa_context *c)
13{
14 if (c->mousedriver != NULL) {
15 c->mousedriver->uninit(c);
16 if(c->mousedriverdata) free(c->mousedriverdata);
17 c->mousedriverdata=NULL;
18 c->mousedriver = NULL;
19 c->mousemode=0;
20 }
21}
22void aa_uninitkbd(struct aa_context *c)
23{
24 if (c->kbddriver != NULL) {
25 if (c->mousedriver != NULL)
26 aa_uninitmouse(c);
27 c->mousedriverdata=NULL;
28 c->kbddriver->uninit(c);
29 if(c->kbddriverdata) free(c->kbddriverdata);
30 c->kbddriverdata=NULL;
31 c->kbddriver = NULL;
32 }
33}
34
35int aa_resize(aa_context * c)
36{
37 int width, height;
38 width = abs(c->params.width);
39 height = abs(c->params.height);
40 c->driver->getsize(c, &width, &height);
41 if (width <= 0 || height <= 0) {
42 printf("Invalid buffer sizes!\n");
43 exit(-1);
44 }
45 if (width != aa_scrwidth(c) || height != aa_imgheight(c)) {
46 if (c->imagebuffer != NULL)
47 free(c->imagebuffer);
48 if (c->textbuffer != NULL)
49 free(c->textbuffer);
50 if (c->attrbuffer != NULL)
51 free(c->attrbuffer);
52 c->params.width = width;
53 c->params.height = height;
54 c->imgwidth = width * c->mulx;
55 c->imgheight = height * c->mulx;
56 if ((c->imagebuffer = calloc(1, c->imgwidth * c->imgheight)) == NULL)
57 return 0;
58 if ((c->textbuffer = calloc(1, aa_scrwidth(c) * aa_scrheight(c))) == NULL) {
59 free(c->imagebuffer);
60 return 0;
61 }
62 memset(c->textbuffer, ' ', c->params.width * c->params.height);
63 if ((c->attrbuffer = calloc(1, c->params.width * c->params.height)) == NULL) {
64 free(c->imagebuffer);
65 free(c->textbuffer);
66 return 0;
67 }
68 }
69 if (!c->driverparams.mmwidth)
70 c->params.mmwidth = 290;
71 else
72 c->params.mmwidth = c->driverparams.mmwidth;
73 if (!c->driverparams.mmheight)
74 c->params.mmheight = 215;
75 else
76 c->params.mmheight = c->driverparams.mmheight;
77 if (!c->driverparams.minwidth)
78 c->params.minwidth = c->params.width;
79 else
80 c->params.minwidth = c->driverparams.minwidth;
81 if (!c->driverparams.minheight)
82 c->params.minheight = c->params.height;
83 else
84 c->params.minheight = c->driverparams.minheight;
85 if (!c->driverparams.maxwidth)
86 c->params.maxwidth = c->params.width;
87 else
88 c->params.maxwidth = c->driverparams.maxwidth;
89 if (!c->driverparams.maxheight)
90 c->params.maxheight = c->params.height;
91 else
92 c->params.maxheight = c->driverparams.maxheight;
93 return 1;
94}
95aa_context *aa_init(struct aa_driver * driver, struct aa_hardware_params * defparams, void *driverdata)
96{
97 struct aa_context *c;
98 c = calloc(1, sizeof(*c));
99 c->driverdata=NULL;
100 c->mousedriverdata=NULL;
101 c->kbddriverdata=NULL;
102 if (c == NULL) {
103 return NULL;
104 }
105 if (!driver->init(defparams, driverdata,&c->driverparams,&c->driverdata)) {
106 free(c);
107 return NULL;
108 }
109 c->driver = driver;
110 c->kbddriver = NULL;
111 c->mousedriver = NULL;
112 c->params.supported = c->driverparams.supported & defparams->supported;
113 c->params.font = c->driverparams.font;
114 if (!c->params.font)
115 c->params.font = defparams->font;
116 if (!c->params.supported)
117 c->params.supported = c->driverparams.supported;
118 c->mulx = 2;
119 c->muly = 2;
120 c->cursorx = 0;
121 c->cursory = 0;
122 c->mousex = 0;
123 c->mousey = 0;
124 c->buttons = 0;
125 c->table = NULL;
126 c->filltable = NULL;
127 c->parameters = NULL;
128 if (defparams->width)
129 c->params.width = defparams->width;
130 else if (c->driverparams.width)
131 c->params.width = c->driverparams.width;
132 else if (defparams->recwidth)
133 c->params.recwidth = defparams->recwidth;
134 else if (c->driverparams.recwidth)
135 c->params.recwidth = c->driverparams.recwidth;
136 else
137 c->params.width = 80;
138 if (defparams->minwidth > c->params.width)
139 c->params.width = defparams->minwidth;
140 if (c->driverparams.minwidth > c->params.width)
141 c->params.width = c->driverparams.minwidth;
142 if (defparams->maxwidth && defparams->maxwidth > c->params.width)
143 c->params.width = defparams->maxwidth;
144 if (c->driverparams.maxwidth && c->driverparams.maxwidth > c->params.width)
145 c->params.width = c->driverparams.maxwidth;
146
147 if (defparams->height)
148 c->params.height = defparams->height;
149 else if (c->driverparams.height)
150 c->params.height = c->driverparams.height;
151 else if (defparams->recheight)
152 c->params.recheight = defparams->recheight;
153 else if (c->driverparams.recheight)
154 c->params.recheight = c->driverparams.recheight;
155 else
156 c->params.height = 25;
157 if (defparams->minheight > c->params.height)
158 c->params.height = defparams->minheight;
159 if (c->driverparams.minheight > c->params.height)
160 c->params.height = c->driverparams.minheight;
161 if (defparams->maxheight && defparams->maxheight > c->params.height)
162 c->params.height = defparams->maxheight;
163 if (c->driverparams.maxheight && c->driverparams.maxheight > c->params.height)
164 c->params.height = c->driverparams.maxheight;
165 c->params.width *= -1;
166 c->params.height *= -1;
167 c->params.dimmul = 5.3;
168 c->params.boldmul = 2.7;
169 if(c->driverparams.dimmul) c->params.dimmul=c->driverparams.dimmul;
170 if(c->driverparams.boldmul) c->params.boldmul=c->driverparams.boldmul;
171 if(defparams->dimmul) c->params.dimmul=defparams->dimmul;
172 if(defparams->boldmul) c->params.boldmul=defparams->boldmul;
173 c->imagebuffer = NULL;
174 c->textbuffer = NULL;
175 c->attrbuffer = NULL;
176 c->resizehandler = NULL;
177 if (!aa_resize(c)) {
178 driver->uninit(c);
179 if(c->driverdata!=NULL) free(c->driverdata);
180 free(c);
181 printf("out of memory\n");
182 return NULL;
183 }
184 if (!aa_validmode(aa_scrwidth(c), aa_scrheight(c), defparams)) {
185 aa_close(c);
186 return 0;
187 }
188 return (c);
189}
190static void aa_invalidate(aa_context * c)
191{
192 if (c->table != NULL)
193 free(c->table);
194 if (c->filltable != NULL)
195 free(c->filltable);
196 if (c->parameters != NULL)
197 free(c->parameters);
198 c->table = NULL;
199 c->filltable = NULL;
200 c->parameters = NULL;
201}
202void aa_setfont(aa_context * c, struct aa_font *font)
203{
204 c->params.font = font;
205 aa_invalidate(c);
206}
207void aa_setsupported(aa_context * c, int supported)
208{
209 c->params.supported = c->driverparams.supported & supported;
210 if (!c->params.supported)
211 c->params.supported = c->driverparams.supported;
212 aa_invalidate(c);
213}
214void aa_close(aa_context * c)
215{
216 if (c->cursorstate < 0 && c->driver->cursormode)
217 c->driver->cursormode(c, 1);
218 if (c->kbddriver != NULL)
219 aa_uninitkbd(c);
220 c->driver->uninit(c);
221 aa_invalidate(c);
222 if (c->imagebuffer != NULL)
223 free(c->imagebuffer);
224 if (c->textbuffer != NULL)
225 free(c->textbuffer);
226 if (c->attrbuffer != NULL)
227 free(c->attrbuffer);
228 if(c->driverdata) free(c->driverdata);
229 free(c);
230}