Metropoli BBS
VIEWER: bitmap.h MODE: TEXT (CP437)
typedef struct {
    char *bitmap;
    char *background;
    int x;
    int y;
    int xsize;
    int ysize;
    int xspeed;
    int yspeed;
} BITMAP;

void bdraw(BITMAP *b) {
    int y=b->y,
        x=b->x,
        yy, xx;

    /* Eli loopataan koko suorakulman kokoinen alue. bitmap- ja
       ja background -puskureissahan lasketaan sijainti seuraavasti:
       y * b->xsize + x. */
    for(yy=0; yy<b->ysize; yy++) { 
    for(xx=0; xx<b->xsize; xx++) {
        /* eli värillä 0 tämä vertailu alla ei ole tosi, joten värillä
           0 merkittyjä kohtia EI piirretä! */
        if(b->bitmap[yy*b->xsize+xx]) {
            /* doublebuffer muuttuja osoittaa kaksoispuskuriin. Huomaa, että
               yläkulma on y*320+x, mutta koska haluamme vielä piirtää useita
               rivejä, lisäämme yy-looppimme y-arvoon, kutenn myös xx-looppi
               x-arvoon. Jos et ymmärtänyt niin poista väliaikaisesti kohdat
               ja näet mitä tapahtuu */
            b->background[yy*b->xsize+xx]=
                doublebuffer[ (y+yy) * 320 + (x+xx) ];

            /* sitten vain asetetaan bittikartasta oikea kohta ruudulle,
               alle peittyvä osa on jo tallessa puskurin background vastaa-
               valla kohdalla. */
            doublebuffer[ (y+yy) * 320 + (x+xx) ]=
                b->bitmap[yy*b->xsize+xx];
        }
    }
    }
}

void bm>round v=n vain asetetaan bittikart2P*b->xsähdalla. */
      aanorta   )m a   )   ine; )m a   )orpi:n var brvrEomA tyryy ine; )m a   )n u ruapsea  );r=n  vara   )n u rä tdaipaar   yuk  /r<grin muuttuja osoittaa kaksoisbittikart2P*b->xsähdalla sl,a(b->lnix) ]tf
      aa,sl-o(lebuffer muuttuja osoittaa kaksoispuskuriin. Huomaa, että
               yläkulma          rlain. Hs pbrEomA tyryyt0]ähateelxe    int xsiHly*b =    aklmrcrxxxähatäx    intmu, että
     apsrtf
 
[ RETURN TO DIRECTORY ]