DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦96b505958⟧ TextFile

    Length: 4480 (0x1180)
    Types: TextFile
    Names: »TEGN005.BAK«

Derivation

└─⟦29e35ddf2⟧ Bits:30003931/CCPM_Tegn.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline)
    └─⟦this⟧ »TEGN005.BAK« 

TextFile


function space(diskdrev:char):integer;

TYPE	
	REGISTRE = RECORD AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS:INTEGER; END;
        STR15=STRINGÆ15Å;

VAR	FCB	:STRING(.13.);
	DIRCODE	:ARRAY(.0..3,0..31.) OF BYTE;
	REGS	:REGISTRE;
	DRIVE,A :INTEGER;	

BEGIN
  drive:=ord(diskdrev)-65;
  FCB:=CHR(DRIVE+1); FCB(.13.):='?';
  (* F_DMAOFF *) 
  REGS.CX:=26; REGS.DX:=OFS(DIRCODE); SWINT(224,REGS);
  (* F_DMASEG *) 
  REGS.CX:=51; REGS.DX:=SEG(DIRCODE); SWINT(224,REGS);
  (* F_SFIRST *) 
  REGS.CX:=17; REGS.DX:=OFS(FCB)+1; REGS.DS:=SEG(FCB); 
  SWINT(224,REGS); A:=REGS.AX;
  (* DRV_SPACE *) REGS.CX:=46; REGS.DX:= DRIVE; SWINT(224,REGS); 
  SPACE:=(DIRCODE(.0,0.)DIV 8+DIRCODE(.0,1.)*32+DIRCODE(.0,2.)*8192); 
END;

procedure drv_get(var diskdrev : char);

var
  d_no          :integer;
  
begin
   reg.cx := $19;
   swint(224,reg);
   d_no := reg.ax;
   diskdrev:=chr(65+d_no);
end;


function Skaerm22khz: boolean;
var
  nvm                : ^byte;
begin
  reg.ax:=4;swint($28,reg); nvm:=ptr(reg.es,reg.si+18); Skaerm22khz:=(nvm^>=2);
end;

(* ▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀ *)
function Farveskaerm: boolean;

type
  config_array       = array(.0..22.) of byte;

var
  configptr: ^config_array;

begin
  reg.ax:=4; swint($28,reg); configptr:=PTR(reg.es,reg.si);
  if (configptr^(.18.)=0) or (configptr^(.18.)=2) then 
    Farveskaerm:=true
  else 
    Farveskaerm:=false;
end;

procedure fjern(xmin,xmax,ymin,ymax:integer);

var
  glymin,soejle,hoejde,
  gemindex,k         : integer;
  p,q                : char;

begin
   p:=chr(0);
   q:=chr(255);
   glymin:=ymin;
   xmin:=videolinier*round(xmin/xkoordinat_blok);
   xmax:=videolinier*round(xmax/xkoordinat_blok);
   ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
   ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
   hoejde:=ymax-ymin;
   soejle:=xmin+ymin;
   gemindex:=0;
   repeat
        move(pix(.soejle.),temp(.gemindex.),2*hoejde);
         fill(pix(.soejle.),2*hoejde,p);
        soejle:=soejle+videolinier;
        gemindex:=gemindex+hoejde;
   until soejle>xmax;
end;
(* ▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀ *)
   

procedure retur(xmin,xmax,ymin,ymax:integer);

var 
  glymin,soejle,hoejde,
  gemindex           : integer;

begin
   glymin:=ymin;
   xmin:=videolinier*round(xmin/xkoordinat_blok);
   xmax:=videolinier*round(xmax/xkoordinat_blok);
   ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
   ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
   hoejde:=ymax-ymin;
   soejle:=xmin+ymin;
   gemindex:=0;
   repeat
     move(temp(.gemindex.),pix(.soejle.),2*hoejde);
     soejle:=soejle+videolinier;
     gemindex:=gemindex+hoejde;
   until soejle>xmax;
end;


procedure transretur(xmin,xmax,ymin,ymax:integer);

var 
  glymin,soejle,hoejde,
  tre,mi,mj,rest1,rest2,gemindex,ene,anden : integer;
  rest:array(.1..2.) of integer;
  farve:array(.1..2,1..8.) of integer;
begin
   glymin:=ymin;
   xmin:=videolinier*round(xmin/xkoordinat_blok);
   xmax:=videolinier*round(xmax/xkoordinat_blok);
   ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
   ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
   hoejde:=ymax-ymin;
   soejle:=xmin+ymin;
   gemindex:=0;
   repeat
     rqlocator(2,xin,yin,status,term,xout,yout)
   until (term=32) or (term=33);
   if term=32 then begin ene:=1;anden:=2;end
   else begin ene:=2;anden:=1;end;
   tre:=$fff3;
   repeat
        mi:=0;
        repeat
            rest(.ene.):=pix(.soejle+mi.);
            rest(.anden.):=temp(.gemindex+mi.);
            for mj:=1 to 7 do
            begin
               farve(.1,mj.):= rest(.1.) and tre;
               rest(.1.):=rest(.1.) shr 2;
            end;
            for mj:=1 to 7 do
            begin
                farve(.2,mj.):= rest(.2.) and tre;
                rest(.2.):=rest(.2.) shr 2;
            end;
            if rest(.2.)=0 then rest(.2.):=rest(.1.);
            for mj:=7 downto 1 do
            begin
              if farve(.2,mj.)=0 then
                rest(.2.):=(rest(.2.) shl 2)+farve(.1,mj.)
              else
                rest(.2.):=(rest(.2.) shl 2)+farve(.2,mj.);
            end;
          pix(.soejle+mi.):=rest(.2.);
          mi:=mi+1;
        until mi=hoejde-1;
        soejle:=soejle+videolinier;
        gemindex:=gemindex+hoejde;
   until soejle>xmax;
end;
«eof»