1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
|
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <aalib.h>
#include "bb.h"
#define MAXLINES 10000
static char *text = "#cWell we've reached the end of this demo. But #bnot#n the #bREAL END#n because\n\n"
"#bAA PROJECT#n is here. \n\n"
"Please read curefully the following document for more information."
"\n"
"\n#b*** This IS the FINAL4 version of BB ***#n\n\n"
"#bCHECK OUT http://aa-project.sourceforge.net/#n\n"
"\n"
"First of all\n\n"
"#bControls:#n\n\n"
"f,space,down,j page down\n"
"b,up,k page up \n"
"q,esc quit \n"
"1,2,3 song \n"
"\n#l"
"\n"
"#bContents:#n\n\n"
"o Advanced usage of this demo\n"
"o Personal greetings \n"
"o AA PROJECT \n"
"o Available programs \n"
" o Aview \n"
" o XaoS \n"
" o aaflip \n"
"o The AA-Lib \n"
"o The history \n"
"#c\n#l\n"
"#c#bAdvanced usage of this demo\n\n"
" XXXXXXX \n"
" XX XX\n"
"XXXXXXX XX XX\n"
"XX XX XXXXXXX \n"
"XX XX XX XX\n"
"XXXXXXX XX XX\n"
"XX XX XXXXXXX \n"
"XX XX \n"
"XXXXXXX #n\n"
"\n"
"#c\n"
"#fYou can tune the demo using command line options:\n"
"type bb --help | more to get all available BB options\n\n"
"We can recommend to you the following combinations:\n\n"
"bb -loop -extended -reverse\n"
"bb -loop -reverse -nobold -nonormal -nodim\n"
"bb -loop -nodim -nobold -extended\n"
"bb -driver stdout -width 79\n"
"bb -driver stdout -width 79 > lpt1 (for some screenshots :)\n\n"
"The option #bfont#n is usefull on hardware where AA-Lib is unable to get current "
"font (like text terminals, mda etc..)\n\n"
"\n"
"Note: the most of this options are common to all #bAA Project#n programs.\n"
"\n#f#l"
"\n"
"#c#bSome BB rumours#n\n"
"\n"
"It was expected to be in SuperVGA mode, truecolor, two CDs\n"
"\n"
"#bPersonal greetings#n\n\n"
"#bHH#n:\n\n"
"#bJaroslav Kysela#n\n"
"I spent three hours patching koules for your drivers..I vote for #bsmaler fragments#n!\n"
"#bMartin Mares#n\n"
"What about searching alg for AAlib?\n"
"#b0rfelyus#n\n"
"be patient..\n"
"#bRoman Zenka\n#n"
"You are in credits again :)\n"
"#bFilip Kroluper#n\n"
"Is YOUR AAlib ready?\n"
"#bRobert Spalek#n\n"
"Lend me your MetafontBook please..\n"
"#bPetr Holicky#n\n"
"I #bLOVE#n your mathematical analyzis lessons!\n"
"\n"
"#bKT#n:\n\n"
"#bReni#n\n"
"All I need is love...\n"
"#bPetr Koloros#n\n"
"What about your songs ?\n"
"#bMartin Koloros#n\n"
"Hey, have you finished Caynis ?\n"
"#bVaclav Tesinsky#n\n"
"I'll join your Delta club\n"
"#bMartin Uddin#n\n"
"Release your adventure game\n"
"#bPetr Smejkal#n\n"
"Still writing those databases, huh ?\n"
"#bMichal Drda#n\n"
"Remove w95 and install Plan9\n"
"#bMichael W. Cerny#n\n"
"Sport!\n"
"#bJaroslav Kysela#n\n"
"Hard coding for your drivers....:)\n"
"\n"
"#bMS#n:\n\n"
"#bDenthor/Asphyxia#n\n"
"yar tutors R the kewlest ones\n"
"#bBLACKAXE#n\n"
"i'll buy U a flask of Absinth !\n"
"#b_MAD#n\n"
"thanq 4 all help\n"
"#bHeadSoft#n\n"
"nice 2 meet ya\n"
"#bSqrt(-1)#n\n"
"hey, dude, thank 4 all ya've done 4 me\n"
"#bQwert#n\n"
"I love you, my dear friend - remember : next year ... ;-)\n"
"#bHeroin#n\n"
"Hey U, Sexual maniac !?\n"
"#bKanec#n\n"
"Don't drink so much !\n"
"#bMarek Les#n\n"
"Hope hear soon your new song !\n"
"#bAnton Szandor LaVey#n\n"
"thanx for The Satanic Bible\n"
"#bMarquis de Sade#n\n"
"big kisses for new style of life\n"
"#bTrent Reznor#n\n"
"the kewlest muzak i've ever heard\n"
"#bJean-Philippe Couasnard#n\n"
"hey, friend .. i hope ya stay here !\n"
"#bMartin Literak#n\n"
"hey, we will fuck them all (but only girls, okay ?)\n"
"\n"
"#bFK#n:\n\n"
"#bEva Stroblova#n\n"
"I want you to want me just like I want you.\n"
"Carry on loving me\n"
"#bWarlord/Scrymag#n\n"
"Haven't you forgotten to close your mouth?\n"
"#bPsycho/Scrymag#n\n"
"Get Psyched!\n"
"#bSmall Electric#n\n"
"Don't you think that 300W sound in your room is too little ?\n"
"#bSystem Trooper/STC#n\n"
"Less Prodigy, more Dawn Music.\n"
"#bM.D.A.#n\n"
"Hey, I'm Samsa incompatible!\n"
"#bVTM/Scrymag#n\n"
"GUS !!!\n"
"#bMamut#n\n"
"No smoking, please.\n"
"#bPurple Motion#n\n"
"Your INSIDE.S3M made me start writting music\n"
"#bJeffrey Lim#n\n"
"Many thanx for Impulse Tracker\n"
"\n"
"\n#l\n"
"#bAA-Project#n\n"
"#c\n"
"#bThree goals of AA-Project:#n"
"\n\n"
"#f1)Port all important software (like Doom, Second Reality, X windows etc..) on new AA-lib.\n"
"\n"
"2)Port AA-lib on all available platforms (mainly ZX-Spectrum and Sharp).\n"
"\n"
"3)Force IBM to start manufacturing MDA cards again.\n"
"\n"
"AA-project was started by Jan Hubicka. In that times just few people knew about \n"
"it. Then a new demo named BB has been relased to show the power \n"
"of AA-lib technology. Now the project is freely available and anyone can help.\n"
"\n"
"Just browse our homepage at #bhttp://aa-project.sourceforge.net/#n. Ton of \n"
"examples of ascii-art generated by aalib, pointers to other AA-Project \n"
"resources etc. \n"
" \n"
" We decided to distribute all of our aa-related programs freely (see \n"
"COPYING for details). But if you want to help us develop more such software \n"
"send a small amount (or big one ;-) to AA/BB maintainer address: \n"
"\n"
"Kamil Toman\n"
"CS Armady 1930, Tabor\n"
"390 03\n"
"Czech republic\n"
"\n"
"and contact us at:\n"
"\n"
"kupsaf@feld.cvut.cz (Filip Kupsa)\n"
"hubicka@freesoft.cz (Jan Hubicka)\n"
"titania@horac.ta.jcu.cz (Mojmir Svoboda)\n"
"toman@artax.karlin.mff.cuni.cz (Kamil Toman)\n"
"#f"
"\n"
"#l\n"
"#c#bAvailable programs#n\n"
"#c\n"
"#fThis part contains a listing of programs currently avilable for #bAA-Lib#n. Note that "
"it is probably outdated now. So look at #bhttp://aa-project.sourceforge.net/#n to get latest information"
"#f\n\n\n\n"
"#c#b dT8 8 dP \n"
" dT 8 8 dP \n"
" dT 8 8 dP \n"
" <PROJECT> 8 dP \n"
" dT 8 8 dP \n"
" dT 8 8XP Aview\n"
"\n\n#c#f#n"
"This has been historically the first program developed for AA-Lib. In fact it is even older than "
"AA-Lib itself and AA-Lib was later seperated from Aview sources. It was programmed to convert "
"Linux Texas group #bpenguin logo#n to #bascii art#n. It has become powerful #bimage browser#n soon. "
"It is extremly useful in combination of lynx-the best web browser. \n"
"\n"
"Aview has some extended features (including text mode of course) "
"most notably: possibility to #bsave various text formats#n including #bHTML, ANSI "
"terminal escape sequences, Netscapized HTML, pure text file, UNIX more/less format "
"printing to HP-Laser Jet and many others.#n Another useful feature are #bfast image "
"scaling routines#n that automatically scale image to your favorite text resolutions; "
"also controls for all #bAA-Lib features#n are available (including#b contrast, brightness, "
"gamma correction, dithering modes, inversion, font selection, random dithering value#n#f"
"\n"
"\n"
"#c#bXX XX XXXXX \n"
" XX XX XXXX XXXX XX \n"
" XXX XX XX XX XX XXXXX \n"
" XX XX XXXXXX XX XX XX\n"
"XX XX XX XX XXXX XXXXX #n\n"
"#c\n"
"#fXaoS is a #bfast portable realtime interactive fractal zoomer/morpher#n. It was "
"the first program for AA routines in animation style. Current version (2.2) does not "
"contain fully featured support for AA-Lib but it uses its own simplier and less portable "
"routines (it is older than AA-Lib). But AA driver will be available soon after releasing "
"BB. So check out XaoS homepage (http://www.tedium.com/XaoS) for more details "
"#f\n"
"\n"
"#b#cXXXXXX XX XX XXXXXX \n"
"XX XX XX XX XX\n"
"XXXX XX XX XXXXXX \n"
"XX XX XX XX \n"
"XX XXXXXXX XX XX #n\n"
"#c\n"
"#fFlip is an #bfli/flc player#n originally developed for linux/SVGAlib. A version ported to"
"AA-Lib is available too (called #baaflip#n). It is portable and it works at MS-DOS and "
"probably other architectures too. It supports fullscreen playing of animations, "
"interactive changing of #bbrightness, contrast, gamma correction, value for random dithering."
"#f\n"
"\n#l"
"\n"
"#c#bThe AA-Lib#n\n"
"#f#c\n"
"AA-lib is a low level gfx library just as many other libraries are. The \n"
"main difference is that AA-lib does not require graphics device. In fact, \n"
"there is no graphical output possible. AA-lib replaces those old-fashioned \n"
"output methods with powerful ascii-art renderer. Now my linux boots \n"
"with a nice penguin logo at secondary display (yes! Like Win95 does:) \n"
"AA-lib API is designed to be similar to other graphics libraries. Learning \n"
"a new API would be a piece of cake! \n"
"#f\n"
"\n"
"#l\n"
"#c#bThe history#n\n"
"#f\n"
"Once upon a time we've (my friend Kamil and I) bought two old Herculeses \n"
"as secondary monitors. We didn't know for that time that our Diamond \n"
"Stealths 64 cards would become obsolete soon. Next day we downloaded \n"
"the logo of Linux Texas Users Group \n"
"- nice silly penguin looking like a cowboy! It was so exciting logo ... we \n"
"decided that we couldn't live without it and we wanted to see it every time \n"
"at a boot time as a logo on our secondary monitors. There was a small problem \n"
"- Hercules doesn't support color graphics. So we decided to convert an image \n"
"to ascii art using netpbm tools.\n"
"\n"
"The output was very ugly because the converting algorithm was absolutly stupid. \n"
"During the night I designed a new convertor that used a font bitmap for \n"
"creating aproximation table. The output wasn't very good since the algorithm \n"
"wasn't so well tuned. Many months this small piece of code was waiting on my \n"
"disc for the day \"D\". Meanwhile I started a new project XaoS (a fractal zoomer) \n"
"with my friend Thomas. And then I got an idea: Ascii Art Mandelbrots! \n"
"I was really impressed by the result! XaoS was faster, portable and looking \n"
"much better than ever before. I found a new way to go... "
"#c\n"
"#f\n"
"\n"
"\n"
"\n"
"#b#cAnd remember...\n"
" \n"
" dT8 8Tb \n"
" dT 8 8 Tb \n"
" dT 8 8 Tb \n"
" <PROJECT><PROJECT> \n"
" dT 8 8 Tb \n"
" dT 8 8 Tb \n"
"\n"
"...means Ascii art!\n"
"#c"
;
#define CENTER 1
#define FILL 2
int mode = 0;
char *line[MAXLINES];
int textsize;
static int currentmode = AA_NORMAL + 1;
static void addline(int width)
{
int l = textsize;
line[l] = (char *) malloc(width + 2);
line[l][0]=AA_NORMAL+1;
memset(line[l]+1,'~',width);
line[l][width+1]=0;
textsize++;
}
static void outputline(char *text, int length1, int length2, int width)
{
int centerstart = mode & CENTER && !(mode & FILL) ? (width - length1) / 2 : 0;
int y, y1 = 0, y2;
int l = textsize;
int nspaces = 0, wishspaces=0;
int pspaces=0;
if(mode&FILL)
line[l] = (char *) malloc(width + 20); else
line[l] = (char *) malloc(length1 + centerstart + 20);
line[l][0] = currentmode;
for (y = 0; y < centerstart; y++)
line[l][y + 1] = ' ';
y1 = centerstart + 1;
if (mode & FILL) {
for (y2 = 0; y2 < length2; y2++)
if (text[y2] == ' ')
nspaces++;
if (nspaces == 0)
nspaces = 1;
wishspaces = width - length1 + nspaces+1;
if(text[length2]=='\n') wishspaces=nspaces;
} else
nspaces = wishspaces = 1;
for (y2 = y = 0; y2 < length2; y++, y1++, y2++) {
while (text[y2] == '#') {
switch (text[y2 + 1]) {
case 'r':
if (context->driverparams.supported && AA_REVERSE) {
currentmode = line[l][y1] = AA_REVERSE + 1;
y1++;
}
break;
case 'n':
currentmode = line[l][y1] = AA_NORMAL + 1;
y1++;
break;
case 'd':
if (context->driverparams.supported && AA_DIM) {
currentmode = line[l][y1] = AA_DIM + 1;
y1++;
}
break;
case 'b':
if (context->driverparams.supported && AA_BOLD) {
currentmode = line[l][y1] = AA_BOLD + 1;
y1++;
}
}
y2 += 2;
if(y2>=length2) break;
}
if(y2>=length2) break;
if(text[y2]==' ')
{int z,m=((pspaces+1)*wishspaces)/nspaces-((pspaces)*wishspaces)/nspaces-1;
for(z=0;z<m;z++)
line[l][y1] = ' ',y1++;
pspaces++;
}
line[l][y1] = text[y2];
}
line[l][y1] = 0;
textsize++;
if(textsize>=MAXLINES) textsize=MAXLINES-1;
}
void format(int width)
{
int size = strlen(text);
int i;
int lastend = 0;
int lastlength = 0;
int linelength = 0;
int linestart = 0;
for (i = 0; i < size; i++) {
while (text[i] == '#') {
switch (text[i + 1]) {
case 'c':
mode ^= CENTER;
break;
case 'f':
mode ^= FILL;
break;
case 'l':
addline(width);
break;
}
i += 2;
}
if (text[i] == ' ')
lastend = i,lastlength=linelength;
if (text[i] == '\n')
lastend = i,lastlength=linelength;
if (linelength > width || text[i] == '\n') {
if(lastend<linestart) lastend=linestart;
outputline(text + linestart, lastlength, lastend - linestart, width);
linelength = 0;
i = lastend;
linestart = i + 1;
}
linelength++;
}
outputline(text + linestart, linelength, i - linestart, width);
}
|