home *** CD-ROM | disk | FTP | other *** search
/ The Party 1994: Try This At Home / disk_image.bin / source / less_src / fractal.c < prev    next >
C/C++ Source or Header  |  1994-09-08  |  4KB  |  193 lines

  1. #include <dos.h>
  2. #include <mem.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #pragma inline
  6. #define PROTECT
  7. #define MATRIXSIZE 20
  8.  
  9. #define I asm
  10. #define XPos 32
  11. #define YPos 34
  12. #define Xsize 128
  13. #define Ysize 64
  14. #define SCALE_FACTOR 16
  15. //2
  16. extern char Liike[];
  17. extern int lasttodraw;
  18. extern int *ScanRight;
  19. extern int *ScanLeft;
  20. extern int *ScanRCount;
  21. extern int *ScanLCount;
  22. extern long *sintaulu;
  23. extern long *costaulu;
  24.  
  25. extern void pixel(int,int,int);
  26. void CalcLandScape(void);
  27. void setmode(void);
  28. void piirralauta(void);
  29. unsigned char *CurPalette;
  30.  
  31. typedef void (*funcptr)(void);
  32.  
  33. extern void ScanConvert(int x,int y,int x1,int y1,int *Scanner);
  34. extern int *ScanRight;
  35. extern int *ScanLeft;
  36. void SetPage(unsigned offs)
  37. {
  38. I mov dx,03d4h
  39. I mov bx,offs
  40. I mov al,0ch
  41. I mov ah,bh
  42. I out dx,ax
  43. I inc al
  44. I mov ah,bl
  45. I out dx,ax
  46. }
  47. volatile unsigned drawoffs=19200;
  48.  
  49. void rotate(int,int,int);
  50. void LaskeSpeeds(void);
  51.  
  52. volatile int XN=0,YN=0;
  53. volatile int KN=0;
  54. volatile int XA,YA,KA;
  55. int volatile TM;
  56. volatile char *LiikePtr=Liike;
  57.  
  58. volatile int P_i=90,P_X=20,P_Y=20;
  59. volatile int P_XCount=0,P_YCount=0,P_icount=0;
  60. void VahennaTime(void)
  61. {
  62.          if (lasttodraw>0) lasttodraw-=8;
  63.          if (TM>0) TM--; else
  64.             {
  65.             if (TM!=-1) {
  66.                 XA=LiikePtr[0];
  67.                 YA=LiikePtr[1];
  68.                 KA=LiikePtr[2];
  69.                 TM=LiikePtr[3];
  70.                 LiikePtr+=4;
  71.             }
  72.                 else {lasttodraw+=16;return;}
  73.             }
  74.  
  75.             P_icount+=(KN+=KA);
  76.         if (P_icount<0) {P_i--;P_icount+=SCALE_FACTOR;} else
  77.         if (P_icount>SCALE_FACTOR) {P_i++;P_icount-=SCALE_FACTOR;}
  78.         if (P_i<0) P_i+=360;
  79.         if (P_i>=360) P_i-=360;
  80.         P_YCount+=(YN+=YA);
  81.         if (P_YCount<0) {P_Y--;P_YCount+=SCALE_FACTOR;} else
  82.         if (P_YCount>SCALE_FACTOR) {P_Y++;P_YCount-=SCALE_FACTOR;}
  83.         P_XCount+=(XN+=XA);
  84.         if (P_XCount<0) {P_X--;P_XCount+=SCALE_FACTOR;} else
  85.                 if (P_XCount>SCALE_FACTOR) {P_X++;P_XCount-=SCALE_FACTOR;}
  86. }
  87.  
  88. void CalcSinTable(void);
  89.  
  90.  
  91.  
  92. extern char *landscape;
  93. extern long *XCoord;
  94. extern long *YCoord;
  95. extern int *XIndex;
  96. extern int *YIndex;
  97. extern int *XIndex1;
  98. extern int *YIndex1;
  99. extern long *matrixZ;
  100. extern void far TimerHandler(void);
  101. void SetIntVec(char,unsigned,unsigned);
  102.  
  103. void clrscr(void)
  104. {
  105.      I push es
  106.     outport(0x3c4,0x0f02);
  107.     _ES=0xa000;
  108.     _EDI=drawoffs;
  109.     _ECX=4800;
  110.     _EAX=0;
  111.     I rep stosd
  112.     I pop es
  113. }
  114. void waitscreen(void);
  115.  
  116. void main_1()
  117. {
  118.     char  l_andscape[22500];
  119.     long AXCoord[MATRIXSIZE*MATRIXSIZE];
  120.     long AYCoord[MATRIXSIZE*MATRIXSIZE];
  121.     int AXIndex[(MATRIXSIZE+1)*(MATRIXSIZE+1)];
  122.     int AYIndex[(MATRIXSIZE+1)*(MATRIXSIZE+1)];
  123.     int AXIndex1[(MATRIXSIZE+1)*(MATRIXSIZE+1)];
  124.     int AYIndex1[(MATRIXSIZE+1)*(MATRIXSIZE+1)];
  125.     long AMatrixZ[MATRIXSIZE*MATRIXSIZE];
  126.     long A_sintaulu[360],A_costaulu[360];
  127.     int End_effect(void);
  128.     int j,item;
  129.     XCoord=AXCoord;
  130.     YCoord=AYCoord;
  131.     XIndex=AXIndex;
  132.     YIndex=AYIndex;
  133.     XIndex1=AXIndex1;
  134.     YIndex1=AYIndex1;
  135.     _DI=(int)(matrixZ=AMatrixZ);
  136.     _ES=_DS;
  137.     _CX=MATRIXSIZE*MATRIXSIZE/4;
  138.     asm rep stosd
  139.     drawoffs=0;
  140.     clrscr();
  141.  
  142.     landscape=l_andscape;
  143.     sintaulu=A_sintaulu;costaulu=A_costaulu;
  144.  
  145.         _AX=0;
  146.         _BX=980;
  147.         _CX=_BX;
  148.         _DI=(int)ScanRight;
  149.         I rep stosw
  150.         _CX=_BX;
  151.         _DI=(int)ScanLeft;
  152.         I rep stosw
  153.         _CX=_BX;
  154.         _DI=(int)ScanRCount;
  155.         I rep stosw
  156.         _CX=_BX;
  157.         _DI=(int)ScanLCount;
  158.         I rep stosw;
  159.      drawoffs=19200;
  160.      clrscr();
  161.      CalcSinTable();
  162.      CalcLandScape();
  163.      XA=LiikePtr[0];
  164.      YA=LiikePtr[1];
  165.      KA=LiikePtr[2];
  166.      TM=LiikePtr[3];
  167.      LiikePtr+=4;
  168.  
  169.     SetIntVec(0x8,FP_OFF(TimerHandler),_CS);
  170.     #ifdef PROTECT
  171.     I mov al,0feh
  172.     I out 021h,al
  173.     #endif
  174.     for (;(TM!=-1 || lasttodraw<MATRIXSIZE*MATRIXSIZE);) {
  175.         rotate(P_i,P_X,P_Y);
  176.  
  177.         piirralauta();
  178.  
  179.         waitscreen();
  180.  
  181.         drawoffs^=19200;
  182.         outport(0x3c4,0x0f02);
  183.  
  184.         I mov ax,0a000h
  185.         I mov es,ax
  186.         I mov di,word ptr drawoffs
  187.         I add di,3300
  188.         I mov cx,4062
  189.         I xor eax,eax
  190.         I rep stosd
  191.     }
  192. }
  193.