home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_PAS / XLIB_TP5.ZIP / DEMO / BITMAP_D.PAS < prev    next >
Pascal/Delphi Source File  |  1994-01-22  |  5KB  |  142 lines

  1. (*  Bitmap - Demo     This Demo show the using of bitmaps                  *)
  2.  
  3. {$N+,E+,Q-}
  4.  
  5. uses X_Const,  (* Const. like GetMaxX, GetMaxY                             *)
  6.      x_Main,   (* x_set_mode ...                                           *)
  7.      x_Bitmap, (* very importend for this demo ,-)                         *)
  8.      X_Pal,    (* x_set_rgb_pal                                            *)
  9.      X_Text,   (* E_Write                                                  *)
  10.      X_FileIO, (* F_Open_Read, F_Size, F_Close                             *)
  11.      X_Keys,   (* Clear_Buffer                                             *)
  12.      dos;      (* FindFirst, FindNext ...                                  *)
  13.  
  14. const sort : Array[0..4] of Byte = (0,3,1,2,4);
  15. type big = array[0..33333] of Byte;
  16.  
  17. var pbm,cbm,ibm,p:^big;
  18.     s:SearchRec;
  19.     Name:String;
  20.     F:File;
  21.     Hour,min,sek,sek100:Word;
  22.     AbsTime : Array[0..5] of Comp;
  23.     Count   : Array[0..5] of LongInt;
  24.     i,j,l,k,maxX,MaxY,AddY,Saved_Size_cbm,Saved_Size_ibm:Word;
  25.     Line:String;
  26.     dummy:Boolean;
  27.     Size:LongInt;
  28.     r:Real;
  29.  
  30.  
  31. begin;
  32.  
  33.                                  (* Search an PBM-File *)
  34.   if (paramcount>0)and(F_Size(paramstr(1))>0) then Name:=paramstr(1)
  35.   else begin;
  36.          findfirst('*.pbm',AnyFile,S);
  37.          if doserror<>0 then begin;writeLn('None *.pbm-file found');halt;end;
  38.          Name:=S.Name;
  39.        end;
  40.  
  41.   x_set_mode(8,408);
  42.   x_set_activ_start_addr(0,ScrnLogicalHeight-GetMaxY);
  43.   x_set_visible_start_addr(0,ScrnLogicalHeight-GetMaxY);
  44.   x_set_rgb_pal;
  45.   x_text_init;
  46.  
  47.   x_set_font(0);
  48.   E_Write(20,GetMaxY-x_font_height,Gray5,Gray2,'Press any key to continue.');
  49.   E_Write(1,20,Gray5,Gray3,'PBM:');
  50.   E_Write(1,20+GetMaxY div 3,Gray5,Gray3,'CBM:');
  51.   E_Write(1,20+2*GetMaxY div 3,Gray5,Gray3,'IBM:');
  52.  
  53.   GetMEM(pbm,F_Size(Name));      (* Load a PBM *)
  54.   x_load_pbm(Name,pbm^);
  55.  
  56.                                  (* Convert PBM to IBM *)
  57.   Saved_Size_ibm:=x_sizeof_ipbm(pbm^);
  58.   GetMEM(ibm,Saved_Size_ibm);
  59.   x_pbm_to_ibm(pbm^,ibm^);
  60.                                  (* Convert PBM to CBM *)
  61.   Saved_Size_cbm:=x_sizeof_cpbm(ScrnLogicalByteWidth,pbm^);
  62.   GetMEM(cbm,Saved_Size_cbm);
  63.   x_pbm_to_cbm(ScrnLogicalByteWidth,pbm^,cbm^);
  64.  
  65.  
  66.   x_get_pbm_sizeXY(i,j,pbm^);
  67.   MaxX:=GetMaxX -i-20;
  68.   MaxY:=GetMaxY div 3-j-10;
  69.   AddY:=GetMaxY div 3;
  70.  
  71.   for i:=0 to 4 do
  72.   begin;
  73.     GetTime(Hour,min,sek,sek100);
  74.     AbsTime[i]:=360000*Hour+min*6000+sek*100+sek100;
  75.     Count[i]:=0;
  76.     repeat
  77.       case i of
  78.         0:  X_Put_masked_pbm(random(MaxX)+20,random(MaxY)+10       ,pbm^);
  79.         1:  X_Put_cbm       (random(MaxX)+20,random(MaxY)+10+AddY  ,cbm^);
  80.         2:  X_Put_masked_ibm(random(MaxX)+20,random(MaxY)+10+AddY*2,ibm^);
  81.         3:  X_Put_pbm       (random(MaxX)+20,random(MaxY)+10       ,pbm^);
  82.         4:  X_Put_ibm       (random(MaxX)+20,random(MaxY)+10+AddY*2,ibm^);
  83.       end;
  84.       Inc(Count[i]);
  85.     until keyspressed;
  86.     Clear_Buffer;
  87.     GetTime(Hour,min,sek,sek100);
  88.     AbsTime[i]:=Hour*360000+min*6000+sek*100+sek100-AbsTime[i];
  89.   end;
  90.  
  91.   x_text_mode;
  92.   WriteLn('     │ Time in sek-100 │ Count of Bitmaps │ Bitmap per sek │ memory size');
  93.   WriteLn('─────┴─────┬───────────┼──────────────────┼────────────────┼──────────────');
  94.   x_get_pbm_sizeXY(l,j,pbm^);k:=((l+3)div 4+1)*j;
  95.   for i:=0 to 4 do
  96.   begin;
  97.     case Sort[i] of
  98.          0:Write('PBM masked │');
  99.          3:Write('PBM        │');
  100.          1:Write('CBM masked │');
  101.          2:Write('IBM masked │');
  102.          4:Write('IBM        │');
  103.     end;
  104.     Write(AbsTime[Sort[i]]:6:0,'     │',Count[Sort[i]]:10,'        │',
  105.           Count[Sort[i]]/AbsTime[Sort[i]]*100:7:0,' (',
  106.           (100*Count[Sort[i]]/AbsTime[Sort[i]]/Count[0]*AbsTime[0]):3:0,'%)  │');
  107.     case Sort[i] of
  108.       0,3:Size:=x_sizeof_pbm(pbm^);
  109.       1:Size:=Saved_Size_cbm;
  110.       2,4:Size:=Saved_Size_ibm;
  111.     end;
  112.     WriteLn(Size:6,' (',100*Size div x_sizeof_pbm(pbm^):3,'%)');
  113.   end;
  114.   WriteLn;
  115.   Write('Bitmap size : ',l:2,'x',j:2);
  116.   r:=100 /(l*j+2);
  117.  
  118.   i:=0;for j:=4 to x_sizeof_pbm(pbm^) do if MEM[seg(pbm^):(ofs(pbm^)+j)]=0 then Inc(i);
  119.   WriteLn('  with ',i,' (',r*i:2:0,'%) transparent pixel.');
  120.   WriteLn;
  121.  
  122.   FreeMEM(pbm,x_sizeof_pbm(pbm^));
  123.   FreeMEM(cbm,Saved_Size_cbm);
  124.   FreeMEM(ibm,Saved_Size_ibm);
  125.  
  126.   if F_Open_Read(F,'Bitmap_D.dat') then
  127.   begin;
  128.     WriteLn('Other Results :                 PBM% (Bitmap per sek),   CBM% ,   VBM% ');
  129.     WriteLn;
  130.     while not eof(F) do
  131.     begin;
  132.       WriteLn(Read_Line(F));
  133.     end;
  134.     F_Close(F);
  135.   end;
  136.  
  137.   Close_MasterFile;
  138.  
  139. end.
  140.  
  141.  
  142.