home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / pas / gfxfx / txtscr2.pas < prev    next >
Pascal/Delphi Source File  |  1994-04-21  |  3KB  |  108 lines

  1.  
  2. program tweaked_tweaked_textscroll;
  3. { Textscroll (see txt itself), uncomment asm, by Bas van Gaalen, Holland, PD }
  4. uses
  5.   crt;
  6.  
  7. const
  8.   tseg : word = $b800; hi = 1;
  9.   txt : string =
  10.     'howdy world...     this is a multicolored-bigchar-'+
  11.     'proportional-smoothscrolling-textscroll.       of '+
  12.     'course made by bas van gaalen!     it contains an '+
  13.     'extensive number of characters: 0 1 2 3 4 5 6 7 8 '+
  14.     '9 :-) ( / ? ! , . etc...       ';
  15.   cpos : array[0..46] of word = (
  16.     0,5,12,19,26,33,40,47,54,61,65,72,80,87,97,104,111,118,125,132,139,146,
  17.     153,160,170,177,184,191,195,200,205,211,215,222,227,232,240,247,252,259,
  18.     266,273,280,287,294,301,308);
  19.   clen : array[0..46] of byte = (
  20.     3,7,7,7,7,7,7,7,7,4,7,7,7,10,7,7,7,7,7,7,7,7,7,10,7,7,7,4,5,5,6,4,7,5,
  21.     5,4,7,5,7,7,7,7,7,7,7,7,6);
  22.   {$i chars.inc}
  23.  
  24. var
  25.   pos : word; i,cur,idx,len,line : byte;
  26.  
  27. procedure retrace; assembler; asm
  28.   mov dx,3dah; @l1: in al,dx; test al,8; jnz @l1;
  29.   @l2: in al,dx; test al,8; jz @l2; end;
  30.  
  31. procedure cursoroff; assembler; asm
  32.   mov ah,3; mov bh,0; int 10h; or ch,20h; mov ah,1; int 10h; end;
  33.  
  34. procedure cursoron; assembler; asm
  35.   mov ah,3; mov bh,0; int 10h; and ch,not 20h; mov ah,1; int 10h; end;
  36.  
  37. begin
  38.   textmode(co80+font8x8);
  39.   cursoroff;
  40.   gotoxy(12,7); writeln('As you can see, not the complete screen is scrolling...');
  41.   idx := 1;
  42.   repeat
  43.     cur := ord(txt[idx]); { get char }
  44.     case cur of
  45.       32 : cur := 0;
  46.       33 : cur := 31;
  47.       39 : cur := 29;
  48.       40,41 : dec(cur,7);
  49.       44 : cur := 28;
  50.       45 : cur := 30;
  51.       46 : cur := 27;
  52.       47 : cur := 46;
  53.       48..57 : dec(cur,12);
  54.       58 : cur := 35;
  55.       63 : cur := 32;
  56.       65..90 : dec(cur,64);
  57.       97..122 : dec(cur,96);
  58.     end; { conv ascii to table }
  59.     pos := cpos[cur];
  60.     len := clen[cur];
  61.     for i := 0 to len-1 do begin
  62.       retrace;
  63.  
  64.       {
  65.       asm
  66.         mov cx,200
  67.  
  68.        @l3:
  69.         mov dx,03c8h
  70.         mov al,59
  71.         out dx,al
  72.         inc dx
  73.         mov al,cl
  74.         and al,35
  75.         out dx,al
  76.         and al,20
  77.         out dx,al
  78.         push dx
  79.  
  80.         mov dx,03dah
  81.        @l4:
  82.         in al,dx
  83.         test al,1
  84.         jnz @l4
  85.        @l5:
  86.         in al,dx
  87.         test al,1
  88.         jz @l5
  89.  
  90.         pop dx
  91.         mov al,cl
  92.         and al,10
  93.         out dx,al
  94.         loop @l3
  95.       end;
  96.       }
  97.  
  98.       for line := 0 to 4 do begin
  99.         move(mem[tseg:(hi+line)*160+2],mem[tseg:(hi+line)*160],158);
  100.         memw[tseg:158+(hi+line)*160] := chars[line,pos+i];
  101.       end;
  102.     end;
  103.     idx := 1+idx mod length(txt);
  104.   until keypressed;
  105.   cursoron;
  106.   gotoxy(1,7);
  107. end.
  108.