DataMuseum.dk

Presents historical artifacts from the history of:

ICL Comet

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

See our Wiki for more about ICL Comet

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦6637ceac2⟧ TextFile

    Length: 15360 (0x3c00)
    Types: TextFile
    Names: »REGN5.PAS«

Derivation

└─⟦5c8344fa1⟧ Bits:30004223 REGN version 2.1 til ICL Comet
    └─ ⟦this⟧ »REGN5.PAS« 

TextFile

(* INCLUDE FILE REGN5.PAS *)
(* The first function is only for COMET. It tests the pressence of
   file REGN.000 on the ramdrive                                    *)
   
FUNCTION RAMDREVTEST:boolean;  (* Only for COMET *)
var
 ovnavn:stringÆ11Å;
 fcb:arrayÆ1..36Å of byte;
 dma:stringÆ128Å;
 a:byte;
begin
 ovnavn:='REGN    000';
 dma:='';
 for a:=1 to 128 do dma:=dma+' ';
 bdos(26,addr(dma)+1);                         (* SET DMA-ADRESS *)
 for a:=1 to 36 do fcbÆaÅ:=0;
 fcbÆ1Å:=4;                                    (* Search on drive D: *)
 for a:=2 to 12 do fcbÆaÅ:=ord(ovnavnÆa-1Å);
 a:=bdosb(17,addr(fcb));                       (* SEARCH FIRST *)
 RAMDREVTEST:=(a<>255);
end;

æ the following procedures up to COMMANDS are suitable for overlays å

OVERLAY PROCEDURE FORMAT;
var
 j,k,nyfw,nydec,maxcif,maxdec,maxbredde,fromline,toline,naboer:integer;
 renset:boolean;
 tal:stringÆ2Å;
 icount:sheetindex;

begin
 maxcif:=33;nydec:=2;nyfw:=normwidth;fromline:=fy;toline:=fy;
 if maxtegn+2-xposÆfxÅ>maxcif then
  maxbredde:=maxcif
 else
  maxbredde:=maxtegn+2-xposÆfxÅ;
 maxdec:=maxbredde-3;
 if maxdec>11 then maxdec:=11;
 str(maxdec,tal);
 MSG(' FORMAT: Angiv antal decimaler  (max. '+tal+'): ');
 GETINT(43,nydec,-1,maxdec);
 str(maxbredde,tal);
 MSG(' Angiv cellebredde. (max. '+tal+'): ');
 GETINT(32,nyfw,1,maxbredde);
 MSG(' Fra søjle '+fx+' linje: ');
 GETINT(20,fromline,1,fymax);
 MSG(' Til søjle '+fx+' linje: ');
 GETINT(20,toline,1,fymax);
 if fromline>toline then begin
  naboer:=fromline;
  fromline:=toline;
  toline:=naboer;
 end;
 if nyfw>11 then
  if nyfw>22 then
   naboer:=2
  else
   naboer:=1
 else
  naboer:=0;
 for j:=fromline to toline do begin
  sheetÆfx,jÅ.dec:=nydec;
  sheetÆfx,jÅ.fw:=nyfw;
  icount:=fx;
  if sheetÆicount,jÅ.cellstatus*Æoverwritten,lockedÅ=ÆÅ then begin
   for k:=1 to naboer do begin
    icount:=succ(icount);
    with sheetÆicount,jÅ do begin
     cellstatus:=Ælocked,txtÅ;
     contents:='';
    end;
   end;
   renset:=false;
   while (icount<fxmax) and not renset do begin
    icount:=succ(icount);
    with sheetÆicount,jÅ do
     if cellstatus*Ælocked,overwrittenÅ<>ÆÅ then
      RYDCELLE(icount,j,true)
     else
      renset:=true;
   end;
  end;
 end;
 UPDATE;
 GOTOCELL(fx,fy);
end;

OVERLAY PROCEDURE NULSTIL;
var
 a:sheetindex;
 b:byte;
begin
 for b:=1 to fymax do
  for a:='A' to fxmax do
   with sheetÆa,bÅ do
    if formula in cellstatus then begin
     value:=0;
     cellstatus:=cellstatus-ÆonscreenÅ;
     LEAVECELL(a,b);
    end; 
end;

OVERLAY PROCEDURE REPETER;
var
 rcount,rtop:integer;
 afbrudt,synlig:boolean;
begin
 MSG(' REPETER: Hvor mange gange skal arket omregnes? ');
 GETINT(48,rtop,1,30000);
 MSG(' REPETER: Synlig opdatering?  J/N ');
 repeat
  ch:=UPCASE(KEY);
 until ch in Æ'J','N'Å;
 synlig:=(ch='J');
 gotoxy(27,23);
 if synlig then
  write(': JA  ')
 else
  write(': NEJ ');
 rcount:=0;afbrudt:=false;
 FLASH(13,' Repeter:      af      ',false);
 gotoxy(31,22);write(rvson,rtop,rvsoff);
 FLASH(37,' Afbryd repetition = ESC ',false);
 
 repeteret:=true;               æ To make shure, that the cells get updated å
 
 while (rcount<rtop-1) and not afbrudt do begin
  rcount:=rcount+1;
  gotoxy(22,22);write(rvson,rcount:5,rvsoff);
  RECALCULATE(synlig);
  if keypress then if KEY=esc then afbrudt:=true; 
 end;
 RECALCULATE(true);
 repeteret:=false;
 FJERNFLASH(13,23);
end;

OVERLAY PROCEDURE HELP(upd:boolean);
var
 i,j,fejl: integer;
 escaped:boolean;

begin
 MSG('Et øjeblik ....... Vejledning hentes ...');
 if EXIST('REGN.HLP') then begin
  escaped:=false;
  assign(tekstfil,'REGN.HLP');
  reset(tekstfil);
  while not eof(tekstfil) do begin
   write(clrhom); i:=1; write(rvsoff);
   readln(tekstfil,eline);
   repeat
    writeln(eline);
    i:=i+1;
    readln(tekstfil,eline);
   until  eof(tekstfil) or (i>23) or (copy(eline,1,3)='.PA');
   gotoxy(24,23); write(rvson);
   write(' <<<<   TRYK PÅ EN TAST   >>>> ');
   write(rvsoff);
   ch:=KEY;
   escaped:=(ch=esc);
  end;
  (*$I-*)
  close(tekstfil);
  fejl:=iores;
  (*$I+*)
  if upd then UPDATE;
 end else begin             æ help file did not EXIST å
  MSG(bell+'For at få hjælp skal REGN.HLP være på diketten  -  TAST  <RETURN>');
  repeat
   ch:=KEY;
  until ch=return;
 end;
end;

OVERLAY PROCEDURE KOPIER;
var
 maxbredde,j,naboer:byte;
 renset:boolean;
 icount:sheetindex;
 nucell,num:stringÆ3Å;
begin
 gotoxy(0,23);write(clreol,'KOPIER CELLE: ',kopierfra,'  FRA eller TIL?  F/T ');
 repeat
  ch:=UPCASE(KEY);
 until ch in Æ'F','T'Å;
 if ch='F' then begin
  str(fy,num);
  kopierfra:=fx+num;
  formelbuffer:=sheetÆfx,fyÅ;
 end else begin
  if kopierfra='' then begin
   MSG(bell+'UMULIGT - INGEN CELLE AT KOPIERE - TRYK EN TAST ');
   sv:=KEY;
  end else begin
   maxbredde:=maxtegn+2-xposÆfxÅ;
   if (formelbuffer.fw>maxbredde) or
     ((formelbuffer.cellstatus=ÆtxtÅ) and (len(formelbuffer.contents)>maxbredde)) then begin
    MSG(bell+'UMULIGT - IKKE PLADS!! - TRYK EN TAST ');
    sv:=KEY;
   end else begin
    sheetÆfx,fyÅ:=formelbuffer;
    gotoxy(xposÆfxÅ,fy);
    write('           ');
    if formelbuffer.fw>11 then
     if formelbuffer.fw>22 then
      naboer:=2
     else
      naboer:=1
    else
     naboer:=0;
    icount:=fx;
    for j:=1 to naboer do begin
     icount:=succ(icount);
     with sheetÆicount,fyÅ do begin
      gotoxy(xposÆicountÅ,fy);
      write('           ');
      cellstatus:=Ælocked,txtÅ;
      contents:='';
     end;
    end;
    renset:=false;
    while (icount<fxmax) and not renset do begin
     icount:=succ(icount);
     nucell:=icount;
     with sheetÆicount,fyÅ do
      if cellstatus*Ælocked,overwrittenÅ<>ÆÅ then begin
       gotoxy(xposÆicountÅ,fy);
       write('           ');
       RYDCELLE(icount,fy,true);
      end else
       renset:=true;
    end;
    if ((formelbuffer.cellstatus=ÆtxtÅ) and (len(formelbuffer.contents)>11)) then begin
     naboer:=((len(formelbuffer.contents)-1) div 11);
     icount:=fx;
     for j:=1 to naboer do begin
      icount:=succ(icount);
      with sheetÆicount,fyÅ do begin
       gotoxy(xposÆicountÅ,fy);
       write('           ');
       cellstatus:=Ætxt,overwrittenÅ;
       contents:='';
      end;
     end;
    end;
    for icount:=fx to fxmax do LEAVECELL(icount,fy);
   end;
  end;
 end;
end;

OVERLAY PROCEDURE LINEMOVE;
var
 ccount:sheetindex;
 lcount:integer;
begin
 FORTRYDTEKST;
 MSG('Indsæt linje - Slet linje   I/S ');
 repeat
  ch:=UPCASE(KEY);
 until ch in Æ'I','S',escÅ;
 if ch<>esc then begin
  if ch='I' then begin
   for lcount:=fymax downto fy do
    if lcount>1 then
     for ccount:='A' to fxmax do
      sheetÆccount,lcountÅ:=sheetÆccount,lcount-1Å;
   for ccount:='A' to fxmax do
    with sheetÆccount,fyÅ do begin
     cellstatus:=ÆtxtÅ;contents:='';value:=0;dec:=2;fw:=normwidth;
    end;
  end else begin
   for lcount:=fy to fymax-1 do
    for ccount:='A' to fxmax do
     sheetÆccount,lcountÅ:=sheetÆccount,lcount+1Å;
   for ccount:='A' to fxmax do
    with sheetÆccount,fymaxÅ do begin
     cellstatus:=ÆtxtÅ;contents:='';value:=0;dec:=2;fw:=normwidth;
    end;
  end;
  UPDATE;
  MSG('Evt. formler kan refere forkerte celler nu! - Tryk en tast ');
  ch:=KEY;
 end;
 FJERNFLASH(37,25);
end;

OVERLAY PROCEDURE WELLCOME;

 PROCEDURE CENTRER(s: anystring;rvs:boolean);
 var
  i:byte;
 begin
  for i:=1 to (79-len(s)+2) div 2 do write(' ');
  if rvs then write(rvson);
  writeln(' ',s,' ');
  if rvs then write(rvsoff);
 end;

begin æ WELLCOME å
 write(clrhom);
 CENTRER('Et PRO''85 program',false);
 gotoxy(0,2);
 CENTRER('        REGN       ',true);
 CENTRER('Et simpelt regneark',true);
 gotoxy(0,5);
 CENTRER('Den officielle version',false);
 CENTRER('Fremstillet for Landscentralen for Undervisningsmidler',false);
 writeln;
 CENTRER('af',false); 
 writeln;
 CENTRER('Jørgen H. Christiansen',false);
 CENTRER('Hans Jørgen Jensen',false);
 CENTRER('Leif Kragh',false);
 CENTRER('Bent Lerche',false);
 CENTRER('Arne Mogensen',false);
 æ
 CENTRER('Ændret af:',false);
 å
 gotoxy(0,17);
 CENTRER('Vers. nr. '+vers,false);
 writeln;
 writeln;
 writeln;
 CENTRER('   Tryk en tast   ',true);
 gotoxy(40,23);
 ch:=KEY;
end;

OVERLAY PROCEDURE SAVE;
var
 udisk:char;
 i: sheetindex;
 j,fejl: integer;
 overskriv:boolean;
begin
 udisk:=DISKVALG;
 if udisk<>esc then begin
  DISKDIR(udisk,'????????ARK',false,'GEMTE ARK');
  repeat
   filename:='';
   MSG(' GEM:  Angiv arknavn:  ');
   GETFILENAME(23,filename,'ARK');
   if (filename<>'') then begin
    RESETDISK;
    ro:=false;
    overskriv:=EXIST(udisk+':'+filename);
    if ro then begin
     MSG(bell+'ARKET: '+filename+' Disk eller fil skrivebeskyttet - Tryk en tast ');
     ch:=KEY;
     filename:='';
    end else begin
     if overskriv then begin
      MSG(bell+'ARKET: '+filename+' findes allerede! - Skal det overskrives? J/N ');
      repeat
       ch:=UPCASE(KEY);
      until ch in Æ'J','N'Å;
      write(ch);
      if ch='N' then
       filename:=''
      else begin
       assign(mcfile,udisk+':'+filename);
       erase(mcfile);
      end;
     end else
      overskriv:=true;
    end;
   end;
  until (filename='') or overskriv;
  if filename<>'' then begin
   MSG(' Et øjeblik... - Ark: '+filename+' gemmes ');
   assign(mcfile,udisk+':'+filename);
   (*$I-*)
   rewrite(mcfile);
   fejl:=iores;
   if fejl=0 then 
    for i:='A' to fxmax do begin
     j:=1;
     while (j<=fymax) and (fejl=0) do begin
      write(mcfile,sheetÆi,jÅ);
      fejl:=iores;
      j:=j+1;
     end;
    end;
   if fejl=0 then begin
    close(mcfile);
    fejl:=iores;
   end;
   (*$I+*)
   if fejl>0 then begin
    MSG(bell+' FEJL VED SKRIVNING: '+errmessageÆfejlÅ+' - TRYK EN TAST ');
    ch:=KEY;
   end;
  end;
  UPDATE;
 end else
  GOTOCELL(fx,fy);
end;

OVERLAY PROCEDURE LOAD;
var
 udisk:char;
 fejl:integer;
begin
 udisk:=DISKVALG;
 if udisk<>esc then begin
  DISKDIR(udisk,'????????ARK',false,'GEMTE ARK');
  MSG(' HENT:  Angiv arknavn:  ');
  GETFILENAME(24,filename,'ARK');
  if (filename<>'') then begin
   ro:=false;
   if (not EXIST(udisk+':'+filename)) then
    repeat
     MSG(bell+' Intet ark: '+filename+'! - Skriv et andet arknavn: ');
     filename:='';
     GETFILENAME(52,filename,'ARK');
     ro:=false;
    until EXIST(udisk+':'+filename) or (filename='');
   end;
   if filename<>'' then
    if ro then begin
     MSG(bell+'Filen er beskyttet - kan ikke læses - Tryk en tast ');
     ch:=KEY;
     filename:='';
    end;
  if filename<>'' then begin
   MSG(' Et øjeblik... - Ark: '+filename+' hentes ');
   (*$I-*)
   assign(mcfile,udisk+':'+filename);
   reset(mcfile);
   fejl:=iores;
   if fejl=0 then begin
    for fx:='A' to fxmax do begin
     fy:=1;
     while (fy<=fymax) and (fejl=0) do begin
      read(mcfile,sheetÆfx,fyÅ);
      fejl:=iores;
      fy:=fy+1;
     end;
    end;
   end;
   close(mcfile);
   fejl:=iores;
   (*$I+*)
   if fejl>0 then begin
    MSG(bell+' FEJL VED LÆSNING: '+errmessageÆfejlÅ+' - TRYK EN TAST ');
    ch:=KEY;
   end else
    kopierfra:='OLD';
   fx:='A'; fy:=1;
  end;
  UPDATE;
 end else begin
  UPDATE;
  GOTOCELL(fx,fy);
 end;
end;

OVERLAY PROCEDURE PRINT;
var
 udisk:char;
 spoolok,printer,overskriv:boolean;
 i:sheetindex;
 j,count,fejl,
 leftmargin: integer;
 spoolname:stringÆ20Å;
 p:stringÆ33Å;
begin
 FORTRYDTEKST;
 MSG(' UDSKRIFT:  På Printer eller Diskette?  P/D ');
 repeat
  ch:=UPCASE(KEY);
 until ch in Æ'P','D',escÅ;
 if ch=esc then
  udisk:=esc
 else
  write(ch);
 printer:=(ch<>'D');
 if not printer then udisk:=DISKVALG;
 if udisk<>esc then begin
  leftmargin:=1;
  if not printer then begin
   DISKDIR(udisk,'????????LST',false,'SKREVNE ARK');
   repeat
    filename:='';
    MSG(' UDSKRIFT: Angiv arknavn:  ');
    GETFILENAME(27,filename,'LST');
    if (filename<>'') then begin
     RESETDISK;
     ro:=false;
     overskriv:=EXIST(udisk+':'+filename);
     if ro then begin
      MSG(bell+'ARKET: '+filename+' Disk eller fil skrivebeskyttet - Tryk en tast ');
      ch:=KEY;
      filename:='';
     end else begin
      if overskriv then begin
       MSG(bell+'ARKET: '+filename+' findes allerede! - Skal det overskrives? J/N ');
       repeat
        ch:=UPCASE(KEY);
       until ch in Æ'J','N'Å;
       write(ch);
       if ch='N' then
        filename:=''
       else begin
        assign(tekstfil,udisk+':'+filename);
        erase(tekstfil);
       end;
      end else
       overskriv:=true;
     end;
    end;
   until (filename='') or overskriv;
  end;
  if (filename<>'') or printer then begin 
   if printer then begin
    if multi then begin
     FJERNFLASH(37,25);
     repeat
      spoolok:=false;
      MSG('ANGIV SPOOL-DEVICE: (Return for: B:PRN1) ');
      read(spoolname);
      buflen:=6;
      if len(spoolname)=6 then
       if (spoolnameÆ2Å=':') then spoolok:=true;
     until (spoolname='') or spoolok;
     if spoolname='' then spoolname:='B:PRN1';
     spoolname:=spoolname+'.'+chr(65+random(25))+chr(65+random(25))+chr(65+random(25));
    end else
     filename:='LST:';
   end else
    filename:=udisk+':'+filename;
   if printer and multi then begin
    MSG(' Udskrift på : ' + spoolname + '....');
    assign(tekstfil,spoolname);
   end else begin 
    MSG(' Udskrift på : ' + filename + '....');
    assign(tekstfil,filename);
   end; 
   (*$I-*)
   rewrite(tekstfil);
   fejl:=iores;
   if fejl=0 then begin
    if printer then begin
     count:=1;
     while (count<=5) and (fejl=0) do begin
      count:=count+1;
      writeln(tekstfil);
      fejl:=iores;
     end;
    end;
    j:=1;
    while (j<=fymax) and (fejl=0) do begin
     eline:='';
     i:='A';
     for i:='A' to fxmax do begin
      with sheetÆi,jÅ do begin
       while (len(eline)-leftmargin<xposÆiÅ-3) do eline:=eline+' ';
       if (constant in cellstatus) or (formula in cellstatus) then begin
        if not (locked in cellstatus) then begin
         if dec>=0 then str(value:fw:dec,p) else str(value:fw,p);
         if (onscreen in cellstatus) or not (formula in cellstatus) then
          eline:=eline+p
         else
          eline:=eline+copy(tom,1,fw); 
        end;
       end else
        eline:=eline+contents;
      end; æ width å
     end; æ one line å
     for count:=1 to leftmargin do write(tekstfil,' ');
     writeln(tekstfil,eline);
     fejl:=iores;
     j:=j+1;
    end; æ end column å
    if fejl=0 then
     if printer then begin
      write(tekstfil,@12);
      close(tekstfil);
     end else begin
      close(tekstfil);
      fejl:=iores;
     end;
   end;
   (*$I+*)
   if fejl>0 then begin
    MSG(bell+' FEJL VED SKRIVNING: '+errmessageÆfejlÅ+' - TRYK EN TAST ');
    ch:=KEY;
   end;
  end;
  UPDATE;
 end else
 GOTOCELL(fx,fy);
end;

æ The procedures above are suitable for overlayes          å
«eof»