DISPTIF.PAS {display a tif file, for portfolio, aug 97, uses turbo4.0 A few graphics procedures for the Atari Portfolio in Turbo 4.0 by G.W.Rutten, 16 aug 1997 Boekel. Test on PC if constant portfolio =3D false, and on portfolio if constant portfolio =3D true; } uses dos; var F:file; var tag,typ,number_of_fields,block,ofset, adres,x,y,i,j,start,aantal_blocks:integer; fieldbuf:array[0..11] of integer; c:char; videoadres,byteorder,version:word; dummy,width,height,ifdoffset,count,offset:longint; data:byte; name:string; shiftx,shifty:integer; dummybuf:array[0..1023] of byte; const portfolio=3Dtrue; var regs:registers; stop:boolean; procedure textmode; begin regs.ax:=3D7; intr($10,regs); end; procedure putpixel(x,y,pixel:integer); var adres:integer; begin; regs.ax:=3D12*256+pixel; regs.dx:=3Dy; regs.cx:=3Dx; intr($10,regs); end; procedure refresh; begin {refresh the pofo lcd screen} regs.bx:=3D0; regs.ax:=3D$1200; if portfolio then intr($61,regs); end; procedure hires; begin regs.ax:=3D$0000; if portfolio then intr($61,regs); {initiliaze int 61} regs.bx:=3D0; regs.ax:=3D$0006; intr($10,regs); refresh; end; procedure clrscr; var x:integer; begin for x:=3D0 to 1919 do mem[videoadres:x]:=3D0; refresh; end; procedure randomscr; var x:integer; begin for x:=3D0 to 1919 do mem[videoadres:x]:=3Drandom($ff); refresh; end; procedure scrollup; var i:integer; begin for i:=3D0 to 1889 do mem[videoadres:i]:=3Dmem[videoadres:i+30]; for i:=3D1890 to 1919 do mem[videoadres:i]:=3D0; refresh; end; procedure scrolldown; var i:integer; begin for i:=3D1889 downto 0 do mem[videoadres:i+30]:=3Dmem[videoadres:i]; for i:=3D0 to 29 do mem[videoadres:i]:=3D0; refresh; end; procedure scrollleft; var y,i:integer; begin for y:=3D0 to 63 do begin for i:=3D0 to 29 do = mem[videoadres:y*30+i]:=3Dmem[videoadres:Y*30+i+1]; mem[videoadres:y*30+29]:=3D0; end; refresh; end; procedure scrollright; var y,i:integer; begin for y:=3D0 to 63 do begin for i:=3D28 downto 0 do = mem[videoadres:y*30+i+1]:=3Dmem[videoadres:Y*30+i]; mem[videoadres:y*30]:=3D0; end; refresh; end; begin if portfolio then name:=3D'gemertbw.tif' else = name:=3D'c:\mydocu~1\wingps~1\gemertbw.tif'; assign(f,name); reset(f,1); blockread(f,byteorder,2); blockread(f,version,2); blockread(f,ifdoffset,4); seek(f,ifdoffset); blockread(f,number_of_fields,2); for i:=3D1 to number_of_fields do begin blockread(f,tag,2); blockread(f,typ,2); blockread(f,count,4); blockread(f,offset,4); case tag of 256:width:=3Doffset; 257:height:=3Doffset; 273:start:=3Doffset; end; {case} end; {now the data can be displayed} if portfolio then videoadres:=3D$b000 else videoadres:=3D$b800; hires; shiftx:=3D0; shifty:=3D0; stop:=3Dfalse; seek(f,start); blockread(f,adres,4); repeat seek(f,adres+shiftx+(width div 8)*shifty); for y:=3D0 to 63 do begin for x:=3D0 to 29 do begin blockread(f,data,1); mem[videoadres:y*30+x]:=3Dnot data; end; blockread(f,dummybuf,(width div 8)-29); {read not used = bytes} end; { refresh; c:=3Dreadkey; if ord(c)=3D27 then c:=3Dreadkey; case ord(c) of 75:shiftx:=3Dshiftx-1; 77:shiftx:=3Dshiftx+1; 72:shifty:=3Dshifty+8; 80:shifty:=3Dshifty-8; 27:stop:=3Dtrue; end; if shiftx < 0 then shiftx:=3D0; if shifty < 0 then shifty:=3D0; if shiftx > (width-8) then shiftx:=3Dwidth-8; if shifty > (height-8) then shifty:=3Dheight-8; shiftx:=3Dshiftx+1; } until stop; close(f); textmode; end.