'This scroller is made by Markus Svilans 'email: bh447@freenet.carleton.ca 'date: September 8th, 1997 'I don't care if you give me credit or not if you use this. 'Enjoy and (ab)use at your own risk. 'ps- this is for PowerBasic $compile exe $optimize speed $cpu 80286 DECLARE SUB Scroll (row%, text$, colour%) RANDOMIZE TIMER CLS 'scrolling$ = "Scrolling Marquee by Markus Svilans" Scroll 8, "Scrolling Marquee by Markus Svilans", RND * 14 + 1 Scroll -2, "Clips to screen on top", rnd*14+1 Scroll 19, "and on the bottom.",rnd*14+1 Scroll 8, "Enjoy.", rnd*14+1 DEFINT A-Z SUB Scroll (row, scrolltext AS STRING, colour) dim absolute buffer(1999) at &hb800 'array at screen buffer for faster 'printing. DIM BitMask(0 TO 7) 'bitmasks FOR i = 0 TO 7 BitMask(i) = 2 ^ i NEXT i textlen = LEN(scrolltext$) text$ = scrolltext$ FOR i = 1 TO textlen MID$(text$, i, 1) = MID$(scrolltext$, textlen - i + 1, 1) NEXT i DIM marquee(1 TO textlen, 7) as byte DEF SEG = &HF000 'get characters out of memory FOR char = 1 TO textlen 'for each character of the string FOR scanline = 1 TO 8 'for each scanline marquee(char, scanline - 1) = PEEK(&H0FA6D + (ASC(MID$(text$, char, 1)) *8) + scanline) NEXT scanline NEXT char DEF SEG col = 80 + textlen * 8 DO wait &h3da,8 'delay.. start!=timer do until timer-start!>=.01 loop FOR i = textlen TO 1 STEP -1 'for each letter of the string FOR j = 0 TO 7 'for each scanline r = row + j if r >= 0 then IF r > 25 THEN EXIT FOR c = (col - i * 8) IF c > 80 THEN GOTO newcol FOR k = 0 TO 7 'for each column if c+k>=1 and c+k<=80 then 'are we still inside the 'screen limits IF (marquee(i, j) AND BitMask(7 - k)) THEN buffer(r*80+c+k-1)=cvi(chr$(219)+chr$(colour)) 'draw dot ELSE buffer(r*80+c+k-1)=cvi(chr$(32)+chr$(colour)) 'erase dot end if END IF NEXT k end if NEXT j NEXT i newcol: col = col - 1 IF col <= 0 THEN EXIT DO 'has the string scolled past edge 'of screen? If so then exit sub. 'if inkey$<>"" then end LOOP END SUB