SVGADEM1.C
上传用户:kammenn
上传日期:2007-06-26
资源大小:210k
文件大小:24k
源码类别:

GDI/图象编程

开发平台:

C/C++

  1. /****************************************************************************
  2.  
  3.   'SVGACC' A Super Vga Graphics Library for use with Microsoft and
  4.   Borland C/C++
  5.   Copyright 1993-1994 by Stephen L. Balkum and Daniel A. Sill
  6.   GIF and 'Graphics Intechange Format' are trademarks (tm) of
  7.   Compuserve, Incorporated, an H&R Block Company.
  8. **************** UNREGISTERD SHAREWARE VERSION ***********************
  9. * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  10. * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  11. * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY.  *
  12. **********************************************************************
  13. **************** NO WARRANTIES AND NO LIABILITY **********************
  14. * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  15. * expressed or implied, of merchantability, or fitness, for a        *
  16. * particular use or purpose of this SOFTWARE and documentation.      *
  17. * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  18. * liable for any damages resulting from the use or misuse of the     * 
  19. * SOFTWARE and documentation.                                        *
  20. **********************************************************************
  21. ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  22. * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  23. * by the U.S. Government is subject to the restictions as set forth  *
  24. * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  25. * Computer Software cluse at DFARS 252.227-7013.                     *
  26. * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  27. * P.O. Box 7704, Austin, Texas 78713-7704                            *
  28. **********************************************************************
  29. **********************************************************************
  30. * By using this SOFTWARE or documentation, you agree to the above    *
  31. * terms and conditions.                                              *
  32. **********************************************************************
  33.  ***************************************************************************/
  34. #define MODULE
  35. #include <stdio.h>
  36. #include <conio.h>
  37. #include <stdlib.h>
  38. #include <malloc.h>
  39. #include <string.h>
  40. #include <math.h>
  41. #include "svgacc.h"
  42. #include "svgademo.h"
  43. #define randnum(size) (rand() % (int)(size))
  44. /***********
  45.  * DOBLOCK *
  46.  ***********/
  47. char doblock(void)
  48. {
  49. int i, colr;
  50. int xinc, yinc, x1, y1, x2, y2;
  51. int cntx, cnty;
  52. char ret;
  53. char title[TITLEN];
  54. char buf[TITLEN];
  55. RasterBlock far *gfxblk;
  56. RasterBlock far *gfxblk2;
  57. RasterBlock far *spritebkgnd;
  58. /*
  59.  * Set up the Title
  60.  */
  61. sprintf(title,"DEMO 5: Block function and Sprites");
  62. palset(pal,0,255);
  63. /*
  64.  * Show Block Get (draw some circles and "get a chunk of them")
  65.  */
  66. fillscreen(0);
  67. setview(0,0,maxx,maxy);
  68. drwstring(1,7,0,title,10,0);
  69. sprintf(buf,"blkget(x1,y1,x2,y2,GfxBlock);");
  70. drwstring(1,7,0,buf,10,16);
  71. colr = 16;
  72. for(i=0;i<=maxx/2;i++) {
  73. drwcircle(1,colr,maxx/4+i,maxy/2,maxy/5);
  74. colr+=2;
  75. if(colr>255)
  76. colr = 16;
  77. }
  78. xinc = maxx/20;
  79. yinc = maxy/20;
  80. x1 = maxx/2-xinc;
  81. y1 = maxy/2-yinc;
  82. x2 = maxx/2+xinc;
  83. y2 = maxy/2+yinc;
  84. i = (x2-x1+1)*(y2-y1+1)+4;
  85. gfxblk = _fmalloc(i);
  86. if (!gfxblk) {
  87. restext();
  88. printf("ERROR: Allocating memory for gfxblk: %d bytesn",i);
  89. exit(1);
  90. }
  91. drwbox(1,0,x1,y1,x2,y2);
  92. blkget(x1,y1,x2,y2,gfxblk);
  93. ret = getkey();
  94. if ((ret == 's') || (ret == 'q')) {
  95. fillscreen(0);
  96. _ffree(gfxblk);
  97. return(ret);
  98. }
  99. /*
  100.  * Show Block Rotate and Sprite Stuff
  101.  */
  102. drwstring(1,7,0,title,10,0);
  103. sprintf(buf,"blkrotate(angle,backfill,GfxBlockSrc,GfxBlockDst);");
  104. drwstring(1,7,0,buf,10,16);
  105. sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
  106. drwstring(1,7,0,buf,10,32);
  107. sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
  108. drwstring(1,7,0,buf,10,48);
  109. cntx = (x2-x1) / 2 + x1;
  110. cnty = (y2-y1) / 2 + y1;
  111. fillarea(x1+2,y1+2,0,0);
  112. i = blkrotatesize(45,gfxblk);
  113. spritebkgnd = _fmalloc(i);
  114. if (!spritebkgnd) {
  115. restext();
  116. printf("ERROR: Allocating memory for spritebkgnd: %d bytesn",i);
  117. exit(1);
  118. }
  119. gfxblk2 = _fmalloc(i);
  120. if (!gfxblk2) {
  121. restext();
  122. printf("ERROR: Allocating memory for gfxblk2: %d bytesn",i);
  123. exit(1);
  124. }
  125. blkget(x1,y1,x2,y2,spritebkgnd);
  126. setview(0,64,maxx,maxy);
  127. for(i=0;i<=360;i+=4) {
  128. blkrotate(i,1,gfxblk,gfxblk2);
  129. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  130. spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  131. sdelay(4);
  132. }
  133. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  134. blkput(SET,x1,y1,gfxblk);
  135. setview(0,0,maxx,maxy);
  136. ret = getkey();
  137. if ((ret == 's') || (ret == 'q')) {
  138. fillscreen(0);
  139. palset(pal,16,255);
  140. _ffree(gfxblk);
  141. _ffree(gfxblk2);
  142. _ffree(spritebkgnd);
  143. return(ret);
  144. }
  145. /*
  146.  * Show Block Resize and Sprite Stuff
  147.  */
  148. drwstring(1,7,0,title,10,0);
  149. sprintf(buf,"blkresize(Width,Height,GfxBlockSrc,GfxBlockDst);");
  150. drwstring(1,7,0,buf,10,16);
  151. sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
  152. drwstring(1,7,0,buf,10,32);
  153. sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
  154. drwstring(1,7,0,buf,10,48);
  155. fillarea(x1+2,y1+2,0,0);
  156. blkget(x1,y1,x2,y2,spritebkgnd);
  157. setview(0,64,maxx,maxy);
  158. i = (x2-x1+1+xinc)*(y2-y1+1+xinc)+4;
  159. spritebkgnd = _frealloc(spritebkgnd,i);
  160. if (!spritebkgnd) {
  161. restext();
  162. printf("ERROR: reallocating memory for spritebkgnd: %d bytesn",i);
  163. exit(1);
  164. }
  165. gfxblk2 = _frealloc(gfxblk2,i);
  166. if (!gfxblk2) {
  167. restext();
  168. printf("ERROR: reallocating memory for gfxblk2: %d bytesn",i);
  169. exit(1);
  170. }
  171. for(i=0;i<=xinc;i++) {
  172. blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
  173. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  174. spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  175. sdelay(3);
  176. }
  177. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  178. for(i=xinc;i>=0;i--) {
  179. blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
  180. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  181. spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  182. sdelay(3);
  183. }
  184. spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  185. blkput(SET,x1,y1,gfxblk);
  186. ret = getkey();
  187. if ((ret == 's') || (ret == 'q')) {
  188. fillscreen(0);
  189. palset(pal,16,255);
  190. setview(0,0,maxx,maxy);
  191. _ffree(gfxblk);
  192. _ffree(gfxblk2);
  193. _ffree(spritebkgnd);
  194. return(ret);
  195. }
  196. /*
  197.  * Show Block Put (put the "chunks" randomly around the screen)
  198.  */
  199. setview(0,16,maxx,32);
  200. fillview(0);
  201. sprintf(buf,"blkput(mode,x,y,GfxBlock);");
  202. drwstring(1,7,0,buf,10,16);
  203. xinc = maxx/10;
  204. yinc = maxy/10;
  205. setview(0,32,maxx,maxy);
  206. for(i=0;i<=maxx/2;i++) {
  207. x1 = randnum(maxx + xinc) - xinc;
  208. y1 = randnum(maxy + yinc) - yinc;
  209. blkput(1,x1,y1,gfxblk);
  210. }
  211. _ffree(gfxblk);
  212. _ffree(gfxblk2);
  213. _ffree(spritebkgnd);
  214. setview(0,0,maxx,maxy);
  215. ret = getkey();
  216. if ((ret == 's') || (ret == 'q')) {
  217. fillscreen(0);
  218. return(ret);
  219. }
  220. return(ret);
  221. }
  222. /**********
  223.  * DOCLIP *
  224.  **********/
  225. char doclip(void)
  226. {
  227. struct dcoord {
  228. int x1;
  229. int x2;
  230. int y1;
  231. int y2;
  232. };
  233. int i, j, k;
  234. int xinc, x, y, x1, y1, x2, y2;
  235. int xsub, radx, rady;
  236. int wdth, hgth, spcingx, spcingy;
  237. struct dcoord b[4];
  238. char ret;
  239. char title[TITLEN];
  240. char buf[TITLEN];
  241. /*
  242.  * Set up the Title
  243.  */
  244. sprintf(title,"DEMO 2: Clipping capability");
  245. palset(pal,0,255);
  246. /*
  247.  * Set up the windows
  248.  */
  249. fillscreen(0);
  250. setview(0,0,maxx,maxy);
  251. drwstring(1,7,0,title,10,0);
  252. sprintf(buf,"All pimitives automatically clip");
  253. drwstring(1,7,0,buf,10,16);
  254. wdth = (maxx + 1) * 4 / 9;
  255. spcingx = ((maxx + 1) - wdth * 2) / 3;
  256. hgth = (maxy + 1 - 35) * 4 / 9;
  257. spcingy = ((maxy + 1 - 35) - hgth * 2) / 3;
  258. xinc = wdth * 3 / 2;
  259. xsub = wdth / 4;
  260. b[0].x1 = spcingx;
  261. b[0].x2 = b[0].x1 + wdth;
  262. b[0].y1 = spcingy + 35;
  263. b[0].y2 = b[0].y1 + hgth;
  264. b[1].x2 = maxx - spcingx;
  265. b[1].x1 = b[1].x2 - wdth;
  266. b[1].y1 = spcingy + 35;
  267. b[1].y2 = b[1].y1 + hgth;
  268. b[2].x2 = maxx - spcingx;
  269. b[2].x1 = b[2].x2 - wdth;
  270. b[2].y2 = maxy - spcingy;
  271. b[2].y1 = b[2].y2 - hgth;
  272. b[3].x1 = spcingx;
  273. b[3].x2 = b[3].x1 + wdth;
  274. b[3].y2 = maxy - spcingy;
  275. b[3].y1 = b[3].y2 - hgth;
  276. for(i=0;i<4;i++)
  277. drwbox(1,15,b[i].x1++,b[i].y1++,b[i].x2--,b[i].y2--);
  278. /*
  279.  * Show the clipping
  280.  */
  281. for(i=0;i<=maxx/6;i++)
  282. for(j=0;j<4;j++) {
  283. setview(b[j].x1,b[j].y1,b[j].x2,b[j].y2);
  284. switch (j) {
  285. case 0:
  286. for(k=0;k<6;k++) {
  287. x = b[j].x1 + randnum(xinc) - xsub;
  288. y = b[j].y1 + randnum(xinc) - xsub;
  289. drwpoint(1,randnum(16),x,y);
  290. }
  291. break;
  292. case 1:
  293. x1 = b[j].x1 + randnum(xinc) - xsub;
  294. y1 = b[j].y1 + randnum(xinc) - xsub;
  295. x2 = b[j].x1 + randnum(xinc) - xsub;
  296. y2 = b[j].y1 + randnum(xinc) - xsub;
  297. drwline(1,randnum(16),x1,y1,x2,y2);
  298. break;
  299. case 2:
  300. x = b[j].x1 + randnum(xinc) - xsub;
  301. y = b[j].y1 + randnum(xinc) - xsub;
  302. radx = randnum(wdth) / 2;
  303. drwcircle(1,randnum(16),x,y,radx);
  304. break;
  305. case 3:
  306. x = b[j].x1 + randnum(xinc) - xsub;
  307. y = b[j].y1 + randnum(xinc) - xsub;
  308. radx = randnum(wdth) / 2;
  309. rady = randnum(wdth) / 2;
  310. drwellipse(1,randnum(16),x,y,radx,rady);
  311. break;
  312. }
  313. }
  314. setview(0,0,maxx,maxy);
  315. ret = getkey();
  316. return(ret);
  317. }
  318. /**********
  319.  * DOFILL *
  320.  **********/
  321. char dofill(void)
  322. {
  323. struct dcoord {
  324. int x1;
  325. int x2;
  326. int y1;
  327. int y2;
  328. };
  329. int i, colr;
  330. int x, y;
  331. int radx, rady;
  332. int wdth, hgth, spcingx, spcingy;
  333. struct dcoord b[4];
  334. char ret;
  335. char title[TITLEN];
  336. char buf[TITLEN];
  337. /*
  338.  * Set up the Title
  339.  */
  340. sprintf(title,"DEMO 3: Filling functions");
  341. palset(pal,0,255);
  342. /*
  343.  * Set up the windows
  344.  */
  345. fillscreen(10);
  346. setview(0,0,maxx,maxy);
  347. drwstring(1,7,0,title,10,0);
  348. sprintf(buf,"fillscreen(color);");
  349. drwstring(1,7,0,buf,10,16);
  350. ret = getkey();
  351. if ((ret == 's') || (ret == 'q'))
  352. return(ret);
  353. /*
  354.  * Set up windows and show viewport fill
  355.  */
  356. fillscreen(0);
  357. drwstring(1,7,0,title,10,0);
  358. sprintf(buf,"fillview(color);");
  359. drwstring(1,7,0,buf,10,16);
  360. wdth = (maxx + 1) * 4 / 9;
  361. spcingx = ((maxx + 1) - wdth * 2) / 3;
  362. hgth = (maxy + 1 - 35) * 4 / 9;
  363. spcingy = ((maxy + 1 - 35) - hgth * 2) / 3;
  364. b[0].x1 = spcingx;
  365. b[0].x2 = b[0].x1 + wdth;
  366. b[0].y1 = spcingy + 35;
  367. b[0].y2 = b[0].y1 + hgth;
  368. b[1].x2 = maxx - spcingx;
  369. b[1].x1 = b[1].x2 - wdth;
  370. b[1].y1 = spcingy + 35;
  371. b[1].y2 = b[1].y1 + hgth;
  372. b[2].x2 = maxx - spcingx;
  373. b[2].x1 = b[2].x2 - wdth;
  374. b[2].y2 = maxy - spcingy;
  375. b[2].y1 = b[2].y2 - hgth;
  376. b[3].x1 = spcingx;
  377. b[3].x2 = b[3].x1 + wdth;
  378. b[3].y2 = maxy - spcingy;
  379. b[3].y1 = b[3].y2 - hgth;
  380. for(i=0;i<4;i++)
  381. drwbox(1,15,b[i].x1++,b[i].y1++,b[i].x2--,b[i].y2--);
  382. ret = getkey();
  383. if ((ret == 's') || (ret == 'q')) {
  384. setview(0,0,maxx,maxy);
  385. return(ret);
  386. }
  387. /*
  388.  * Show the clipping
  389.  */
  390. for(i=0;i<4;i++) {
  391. setview(b[i].x1,b[i].y1,b[i].x2,b[i].y2);
  392. fillview(i+10);
  393. }
  394. setview(0,0,maxx,maxy);
  395. ret = getkey();
  396. if ((ret == 's') || (ret == 'q'))
  397. return(ret);
  398. /*
  399.  * Set up windows and show area fill
  400.  */
  401. fillscreen(0);
  402. drwstring(1,7,0,title,10,0);
  403. sprintf(buf,"fillarea(xseed,yseed,bordercolor,fillcolor);");
  404. drwstring(1,7,0,buf,10,16);
  405. drwbox(1,15,5,35,maxx-4,maxy-4);
  406. setview(6,36,maxx-5,maxy-5);
  407. colr=1;
  408. for(i=0;i<=maxx/10;i++) {
  409. x = 50 + randnum(maxx-50);
  410. y = 50 + randnum(maxy-50);
  411. radx = 2 + randnum(maxx/20);
  412. rady = 2 + randnum(maxy/20);
  413. drwellipse(1,colr++,x,y,radx,rady);
  414. if (colr>10)
  415. colr = 1;
  416. }
  417. for(i=0;i<=maxx/15;i++) {
  418. x = 50 + randnum(maxx-50);
  419. y = 50 + randnum(maxy-50);
  420. radx = 2 + randnum(maxx/20);
  421. rady = 2 + randnum(maxy/20);
  422. drwellipse(1,12,x,y,radx,rady);
  423. }
  424. ret = getkey();
  425. if ((ret == 's') || (ret == 'q')) {
  426. setview(0,0,maxx,maxy);
  427. return(ret);
  428. }
  429. fillarea(7,37,12,10);
  430. setview(0,0,maxx,maxy);
  431. ret = getkey();
  432. if ((ret == 's') || (ret == 'q'))
  433. return(ret);
  434. /*    
  435.  * Setup windows and show color fill
  436.  */
  437. fillscreen(0);
  438. drwstring(1,7,0,title,10,0);
  439. sprintf(buf,"fillcolor(xseed,yseed,oldcolor,fillcolor);");
  440. drwstring(1,7,0,buf,10,16);
  441. drwbox(1,15,5,35,maxx-4,maxy-4);
  442. setview(6,36,maxx-5,maxy-5);
  443. colr=1;
  444. for(i=0;i<=maxx/10;i++) {
  445. x = 50 + randnum(maxx-50);
  446. y = 50 + randnum(maxy-50);
  447. radx = 2 + randnum(maxx/20);
  448. rady = 2 + randnum(maxy/20);
  449. drwellipse(1,colr++,x,y,radx,rady);
  450. if (colr>10)
  451. colr = 1;
  452. }
  453. for(i=0;i<=maxx/15;i++) {
  454. x = 50 + randnum(maxx-50);
  455. y = 50 + randnum(maxy-50);
  456. radx = 2 + randnum(maxx/20);
  457. rady = 2 + randnum(maxy/20);
  458. drwellipse(1,12,x,y,radx,rady);
  459. }
  460. ret = getkey();
  461. if ((ret == 's') || (ret == 'q')) {
  462. setview(0,0,maxx,maxy);
  463. return(ret);
  464. }
  465. fillcolor(7,37,0,10);
  466. setview(0,0,maxx,maxy);
  467. ret = getkey();
  468. return(ret);
  469. }
  470. /*********
  471.  * DOPAL *
  472.  *********/
  473. char dopal(void)
  474. {
  475. int x1, x2, y1, y2;
  476. int i, colr;
  477. char ret;
  478. char title[TITLEN];
  479. char buf[TITLEN];
  480. /*
  481.  * Set up the Title
  482.  */
  483. sprintf(title,"DEMO 4: Palette functions");
  484. palset(orgpal,0,255);
  485. /*
  486.  * Show palette set/get
  487.  */
  488. fillscreen(0);
  489. setview(0,0,maxx,maxy);
  490. drwstring(1,7,0,title,10,0);
  491. sprintf(buf,"palget(pal,beg,end),palset(pal,beg,end)");
  492. drwstring(1,7,0,buf,10,16);
  493. colr = 16;
  494. x1 = 10;
  495. x2 = maxx - 9;
  496. y1 = 35;
  497. y2 = maxy - 9;
  498. i = 0;
  499. while (y1+i < y2-i) {
  500. drwbox(1,colr++,x1+i,y1+i,x2-i,y2-i);
  501. if (colr>255)
  502. colr = 16;
  503. i++;
  504. }
  505. ret = getkey();
  506. if ((ret == 's') || (ret == 'q')) {
  507. fillscreen(0);
  508. setview(0,0,maxx,maxy);
  509. return(ret);
  510. }
  511. palset(pal,16,255);
  512. ret = getkey();
  513. if ((ret == 's') || (ret == 'q')) {
  514. setview(0,0,maxx,maxy);
  515. fillscreen(0);
  516. return(ret);
  517. }
  518. /*
  519.  * Show palette auto fade out/in
  520.  */
  521. setview(0,16,maxx,32);
  522. fillview(0);
  523. sprintf(buf,"palioauto(pal,beg,end,speed);");
  524. drwstring(1,7,0,buf,10,16);
  525. palioauto(pal,16,255,-2);
  526. palioauto(pal,16,255,2);
  527. ret = getkey();
  528. if ((ret == 's') || (ret == 'q')) {
  529. setview(0,0,maxx,maxy);
  530. return(ret);
  531. }
  532. /*
  533.  * Show palette auto fade to
  534.  */
  535. setview(0,16,maxx,32);
  536. fillview(0);
  537. sprintf(buf,"palchgauto(pal,newpal,beg,end,speed);");
  538. drwstring(1,7,0,buf,10,16);
  539. palchgauto(pal,pal2,16,255,2);
  540. palchgauto(pal2,pal,16,255,2);
  541. ret = getkey();
  542. if ((ret == 's') || (ret == 'q')) {
  543. setview(0,0,maxx,maxy);
  544. return(ret);
  545. }
  546. /*
  547.  * Show palette rotate
  548.  */
  549. setview(0,16,maxx,32);
  550. fillview(0);
  551. sprintf(buf,"palrotate(pal,beg,end,shift);");
  552. drwstring(1,7,0,buf,10,16);
  553. for(i=0;i<=240;i++) {
  554. palrotate(pal,16,255,2);
  555. palget(pal,16,255);
  556. }
  557. for(i=0;i<=120;i++) {
  558. palrotate(pal,16,255,-8);
  559. palget(pal,16,255);
  560. }
  561. ret = getkey();
  562. if ((ret == 's') || (ret == 'q'))
  563. setview(0,0,maxx,maxy);
  564. return(ret);
  565. }
  566. /***********
  567.  * DOPRIMS *
  568.  ***********/
  569. char doprims(void)
  570. {
  571. int x1, x2, y1, y2;
  572. int maxrad, radx, rady;
  573. int i, colr, num;
  574. char ret;
  575. char title[TITLEN];
  576. char buf[TITLEN];
  577. /*
  578.  * Set up the Title
  579.  */
  580. sprintf(title,"DEMO 1: Primitives");
  581. palset(orgpal,0,255);
  582. /*
  583.  * Draw some points
  584.  */
  585. fillscreen(0);
  586. setview(0,0,maxx,maxy);
  587. drwstring(1,7,0,title,10,0);
  588. sprintf(buf,"drwpoint(mode,color,x,y);");
  589. drwstring(1,7,0,buf,10,16);
  590. setview(0,32,maxx,maxy);
  591. colr = 1;
  592. num = maxx * 2;
  593. for(i=0;i<num;i++) {
  594. x1 = randnum(maxx);
  595. y1 = randnum(maxy);
  596. drwpoint(1,colr++,x1,y1);
  597. if (colr>15)
  598. colr = 1;
  599. }   
  600. setview(0,0,maxx,maxy);
  601. ret = getkey();
  602. if ((ret=='s') || (ret=='q'))
  603. return(ret);
  604. /*
  605.  * Draw some lines
  606.  */
  607. fillscreen(0);
  608. setview(0,0,maxx,maxy);
  609. drwstring(1,7,0,title,10,0);
  610. sprintf(buf,"drwline(mode,color,x1,y1,x2,y2);");
  611. drwstring(1,7,0,buf,10,16);
  612. setview(0,32,maxx,maxy);
  613. colr = 1;
  614. num = maxx / 6;
  615. for(i=0;i<num;i++) {
  616. x1 = randnum(maxx);
  617. y1 = randnum(maxy);
  618. x2 = randnum(maxx);
  619. y2 = randnum(maxy);
  620. drwline(1,colr++,x1,y1,x2,y2);
  621. if (colr>15)
  622. colr = 1;
  623. }   
  624. setview(0,0,maxx,maxy);
  625. ret = getkey();
  626. if ((ret=='s') || (ret=='q'))
  627. return(ret);
  628. /*
  629.  * Draw some boxes
  630.  */
  631. fillscreen(0);
  632. setview(0,0,maxx,maxy);
  633. drwstring(1,7,0,title,10,0);
  634. sprintf(buf,"drwbox(mode,color,x1,y1,x2,y2);");
  635. drwstring(1,7,0,buf,10,16);
  636. setview(0,32,maxx,maxy);
  637. colr = 1;
  638. num = maxx / 10;
  639. for(i=0;i<num;i++) {
  640. x1 = randnum(maxx);
  641. y1 = randnum(maxy);
  642. x2 = randnum(maxx);
  643. y2 = randnum(maxy);
  644. drwbox(1,colr++,x1,y1,x2,y2);
  645. if (colr>15)
  646. colr = 1;
  647. }   
  648. setview(0,0,maxx,maxy);
  649. ret = getkey();
  650. if ((ret=='s') || (ret=='q'))
  651. return(ret);
  652. /*
  653.  * Draw some circles
  654.  */
  655. fillscreen(0);
  656. setview(0,0,maxx,maxy);
  657. drwstring(1,7,0,title,10,0);
  658. sprintf(buf,"drwcircle(mode,color,cx,cy,radius);");
  659. drwstring(1,7,0,buf,10,16);
  660. setview(0,32,maxx,maxy);
  661. colr = 1;
  662. num = maxx / 20;
  663. maxrad = maxx / 2;
  664. for(i=0;i<num;i++) {
  665. x1 = randnum(maxx);
  666. y1 = randnum(maxy);
  667. radx = randnum(maxrad);
  668. drwcircle(1,colr++,x1,y1,radx);
  669. if (colr>15)
  670. colr = 1;
  671. }   
  672. setview(0,0,maxx,maxy);
  673. ret = getkey();
  674. if ((ret=='s') || (ret=='q'))
  675. return(ret);
  676. /*
  677.  * Draw some ellipses
  678.  */
  679. fillscreen(0);
  680. setview(0,0,maxx,maxy);
  681. drwstring(1,7,0,title,10,0);
  682. sprintf(buf,"drwellipse(mode,color,cx,cy,radiusx,radiusy);");
  683. drwstring(1,7,0,buf,10,16);
  684. setview(0,32,maxx,maxy);
  685. colr = 1;
  686. num = maxx / 20;
  687. maxrad = maxx / 2;
  688. for(i=0;i<num;i++) {
  689. x1 = randnum(maxx);
  690. y1 = randnum(maxy);
  691. radx = randnum(maxrad);
  692. rady = randnum(maxrad);
  693. drwellipse(1,colr++,x1,y1,radx,rady);
  694. if (colr>15)
  695. colr = 1;
  696. }   
  697. setview(0,0,maxx,maxy);
  698. ret = getkey();
  699. return(ret);
  700. }
  701. /************
  702.  * DOSCROLL *
  703.  ************/
  704. char doscroll(void)
  705. {
  706. int i, colr, num, totnum;
  707. int a, b, c, d;
  708. int x1, x2, y1, y2;
  709. int spcing, skip;
  710. char ret;
  711. char title[TITLEN];
  712. char buf[TITLEN];
  713. char buf2[TITLEN];
  714. /*
  715.  * Set up the Title
  716.  */
  717. sprintf(title,"DEMO 7: Scroll functions");
  718. palset(pal,0,255);
  719. fillscreen(0);
  720. setview(0,0,maxx,maxy);
  721. drwstring(1,7,0,title,10,0);
  722. spcing = (maxy - 32) / 5;
  723. skip = (int)(((float)maxx + 1.) / 320. + .9) * 2 - 1;
  724. num = spcing / 2 / skip;
  725. if (spcing / 2 != (float)spcing / 2.)
  726. spcing++;
  727. x1 = (maxx + 1) / 2 - spcing;
  728. y1 = (maxy + 1 - 32) / 2 + 32 - spcing;
  729. x2 = (maxx + 1) / 2 + spcing;
  730. y2 = (maxy + 1 - 32) / 2 + 32 + spcing;
  731. drwbox(1,12,x1++,y1++,x2--,y2--);
  732. colr = 16;
  733. sprintf(buf2,"TEXT text TEXT");
  734. /*
  735.  * Show scrollup
  736.  */
  737. setview(0,16,maxx,maxy);
  738. sprintf(buf,"scrollup(x1,y1,x2,y2,numlines,fillcolor);");
  739. drwstring(1,7,0,buf,10,16);
  740. setview(x1,y1,x2,y2);
  741. fillview(0);
  742. totnum = maxx / 10;
  743. for(i=0;i<totnum;i++) {
  744. a = randnum(maxx);
  745. b = randnum(maxy);
  746. c = randnum(maxx);
  747. d = randnum(maxy);
  748. drwline(1,colr,a,b,c,d);
  749. colr += 3;
  750. if (colr > 255)
  751. colr = 16;
  752. }
  753. drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
  754. drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
  755. drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
  756. drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
  757. ret = getkey();
  758. if ((ret=='s') || (ret=='q'))
  759. return(ret);
  760. for(i=0;i<num;i++)
  761. scrollup(x1,y1,x2,y2,skip,0);
  762. ret = getkey();
  763. if ((ret=='s') || (ret=='q'))
  764. return(ret);
  765. /*
  766.  * Show scrolllt
  767.  */
  768. setview(0,16,maxx,maxy);
  769. sprintf(buf,"scrolllt(x1,y1,x2,y2,numlines,fillcolor);");
  770. drwstring(1,7,0,buf,10,16);
  771. setview(x1,y1,x2,y2);
  772. fillview(0);
  773. totnum = maxx / 10;
  774. for(i=0;i<totnum;i++) {
  775. a = randnum(maxx);
  776. b = randnum(maxy);
  777. c = randnum(maxx);
  778. d = randnum(maxy);
  779. drwline(1,colr,a,b,c,d);
  780. colr += 3;
  781. if (colr > 255)
  782. colr = 16;
  783. }
  784. drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
  785. drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
  786. drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
  787. drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
  788. ret = getkey();
  789. if ((ret=='s') || (ret=='q'))
  790. return(ret);
  791. for(i=0;i<num;i++)
  792. scrolllt(x1,y1,x2,y2,skip,0);
  793. ret = getkey();
  794. if ((ret=='s') || (ret=='q'))
  795. return(ret);
  796. /*
  797.  * Show scrolldn
  798.  */
  799. setview(0,16,maxx,maxy);
  800. sprintf(buf,"scrolldn(x1,y1,x2,y2,numlines,fillcolor);");
  801. drwstring(1,7,0,buf,10,16);
  802. setview(x1,y1,x2,y2);
  803. fillview(0);
  804. totnum = maxx / 10;
  805. for(i=0;i<totnum;i++) {
  806. a = randnum(maxx);
  807. b = randnum(maxy);
  808. c = randnum(maxx);
  809. d = randnum(maxy);
  810. drwline(1,colr,a,b,c,d);
  811. colr += 3;
  812. if (colr > 255)
  813. colr = 16;
  814. }
  815. drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
  816. drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
  817. drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
  818. drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
  819. ret = getkey();
  820. if ((ret=='s') || (ret=='q'))
  821. return(ret);
  822. for(i=0;i<num;i++)
  823. scrolldn(x1,y1,x2,y2,skip,0);
  824. ret = getkey();
  825. if ((ret=='s') || (ret=='q'))
  826. return(ret);
  827. /*
  828.  * Show scrollrt
  829.  */
  830. setview(0,16,maxx,maxy);
  831. sprintf(buf,"scrollrt(x1,y1,x2,y2,numlines,fillcolor);");
  832. drwstring(1,7,0,buf,10,16);
  833. setview(x1,y1,x2,y2);
  834. fillview(0);
  835. totnum = maxx / 10;
  836. for(i=0;i<totnum;i++) {
  837. a = randnum(maxx);
  838. b = randnum(maxy);
  839. c = randnum(maxx);
  840. d = randnum(maxy);
  841. drwline(1,colr,a,b,c,d);
  842. colr += 3;
  843. if (colr > 255)
  844. colr = 16;
  845. }
  846. drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
  847. drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
  848. drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
  849. drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
  850. ret = getkey();
  851. if ((ret=='s') || (ret=='q'))
  852. return(ret);
  853. for(i=0;i<num;i++)
  854. scrollrt(x1,y1,x2,y2,skip,0);
  855. ret = getkey();
  856. return(ret);
  857. }
  858. /**********
  859.  * DOTEXT *
  860.  **********/
  861. char dotext(void)
  862. {
  863. int i, colr;
  864. char ret;
  865. char title[TITLEN];
  866. char buf[TITLEN];
  867. char buf2[TITLEN];
  868. /*
  869.  * Set up the Title
  870.  */
  871. sprintf(title,"DEMO 6: Text functions");
  872. palset(pal,0,255);
  873. /*
  874.  * Show alternate print directions
  875.  */
  876. fillscreen(0);
  877. setview(0,0,maxx,maxy);
  878. drwstring(1,7,0,title,10,0);
  879. sprintf(buf,"drwstring(mode,foregnd,bkgnd,string,x,y);");
  880. drwstring(1,7,0,buf,10,16);
  881. setview(0,32,maxx,maxy);
  882. sprintf(buf2,"The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789");
  883. colr = 16;
  884. for(i=32;i<=maxy;i+=20) {
  885. drwstring(1,colr,0,buf2,0,i);
  886. colr+=5;
  887. if (colr>255)
  888. colr = 16;
  889. }
  890. ret = getkey();
  891. if ((ret=='s') || (ret=='q')) {
  892. setview(0,0,maxx,maxy);
  893. fillscreen(0);
  894. return(ret);
  895. }
  896. fillview(0);
  897. setview(0,16,maxx,32);
  898. sprintf(buf,"drwstringlt(mode,foregnd,bkgnd,string,x,y);");
  899. drwstring(1,7,0,buf,10,16);
  900. setview(0,32,maxx,maxy);
  901. colr = 16;
  902. for(i=0;i<=maxx;i+=20) {
  903. drwstringlt(1,colr,0,buf2,i,maxy);
  904. colr+=5;
  905. if (colr>255)
  906. colr = 16;
  907. }
  908. ret = getkey();
  909. if ((ret=='s') || (ret=='q')) {
  910. setview(0,0,maxx,maxy);
  911. fillscreen(0);
  912. return(ret);
  913. }
  914. fillview(0);
  915. setview(0,16,maxx,32);
  916. sprintf(buf,"drwstringdn(mode,foregnd,bkgnd,string,x,y);");
  917. drwstring(1,7,0,buf,10,16);
  918. setview(0,32,maxx,maxy);
  919. colr = 16;
  920. for(i=maxy;i>=32;i-=20) {
  921. drwstringdn(1,colr,0,buf2,maxx,i);
  922. colr+=5;
  923. if (colr>255)
  924. colr = 16;
  925. }
  926. ret = getkey();
  927. if ((ret=='s') || (ret=='q')) {
  928. setview(0,0,maxx,maxy);
  929. fillscreen(0);
  930. return(ret);
  931. }
  932. fillview(0);
  933. setview(0,16,maxx,32);
  934. sprintf(buf,"drwstringrt(mode,foregnd,bkgnd,string,x,y);");
  935. drwstring(1,7,0,buf,10,16);
  936. setview(0,32,maxx,maxy);
  937. colr = 16;
  938. for(i=maxx;i>=0;i-=20) {
  939. drwstringrt(1,colr,0,buf2,i,32);
  940. colr+=5;
  941. if (colr>255)
  942. colr = 16;
  943. }
  944. ret = getkey();
  945. setview(0,0,maxx,maxy);
  946. fillscreen(0);
  947. return(ret);
  948. }