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

⟦646802f03⟧ TextFile

    Length: 10112 (0x2780)
    Types: TextFile
    Names: »REGN2.PAS«

Derivation

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

TextFile

(* REGN2.PAS INCLUDE FILE *)

æ*******************************************************************å
æ*  purpose:            micellaneous utilities and commands.       *å
æ*******************************************************************å

PROCEDURE CURSOR(cursor_on:boolean);
begin
 if cursor_on then
  write(curon)
 else
  write(curoff); 
end;

FUNCTION KEY:char;  æ Allmost all keyboard inputs through this routine å 
var
 cch:char;
begin
 CURSOR(true);
 read(kbd,cch);
 KEY:=cch;
 CURSOR(false);
end;

PROCEDURE DELAY(antal:integer;var trykket:boolean);
var
 dcount:integer;
begin
 dcount:=0;
 while (dcount<antal) and not trykket do begin
  dcount:=dcount+1;
  trykket:=keypress;
 end; 
end;

æ Displayes a line in the bottom of the screen and higligts the listed å
æ characters                                                           å

PROCEDURE HIGHLIGHTMSG(indlin:str128);
var
 udlin1,udlin2:stringÆ128Å;
 tpos:byte;
begin
 udlin1:=indlin;
 udlin2:='';
 for tpos:=1 to len(udlin1) do begin
  if (udlin1ÆtposÅ in Æ'A'..'Å','0','?'Å) then
   udlin2:=udlin2+rvson+udlin1ÆtposÅ+rvsoff
  else
   udlin2:=udlin2+udlin1ÆtposÅ;
 end;
 write(udlin2);
end;

PROCEDURE MSG(s: anystring);
begin
 gotoxy(0,23);
 write(clreol);
 write(s,rvsoff,' ');
end;

PROCEDURE FLASH(x: integer; s: anystring;  blink: boolean);
var
 tasttrykket:boolean;
begin
 tasttrykket:=false;
 write(rvson);
 gotoxy(x,22);
 write(s);
 if blink then begin
  repeat
   gotoxy(x,22);
   blink:=not blink;
   if blink then write(rvson) else write(rvsoff);
   write(s);
   DELAY(pause,tasttrykket);
  until tasttrykket;
 end;
 write(rvsoff);
end;

PROCEDURE FJERNFLASH(xpos,tlen:byte);
begin
 FLASH(xpos,rvsoff+copy(tom,1,tlen),false);
end;

FUNCTION UPCASE(nch:char):char;
begin
 if (ord(nch)>96) and (ord(nch)<127) then
  UPCASE:=chr(ord(nch)-32)
 else
  UPCASE:=nch;
end;

PROCEDURE AUTO;
begin
 autocalc:=not autocalc;
 if autocalc then
  FLASH(63,' Autoregn: TIL ',false)
 else
  FLASH(63,' Autoregn: FRA ',false);
end;

PROCEDURE GRID;
var
 i:integer;
 count:char;
begin
 write(clrhom,indicator,rvson);
 for count:='A' to fxmax do begin
  gotoxy(xposÆcountÅ,0);
  write(vline,'    ',count,'     ');
 end;
 gotoxy(0,1);
 for i:=1 to fymax do writeln(i:2);
 write(rvsoff);
 if autocalc then
  FLASH(63,' Autoregn: TIL ' ,false)
 else
  FLASH(63,' Autoregn: FRA ',false);
 FLASH(37,'  Tast  /  for kommando  ',false);
end;
 
PROCEDURE BUFFERNULL;
begin
 kopierfra:='';
 with formelbuffer do begin
  cellstatus:=ÆtxtÅ;
  contents:='';
  value:=0;
  fw:=normwidth;dec:=2;
 end;
end;

PROCEDURE RYDCELLE(i:sheetindex;j:integer;all:boolean);
begin
 with sheetÆi,jÅ do begin
  cellstatus:=ÆtxtÅ;      æ all cells initiated with text attribut å
  contents:='';           æ all strings emty                       å  
  value:=0;               æ all values 0                           å
  if all then dec:=2;     æ default number of decimals             å
  if all then fw:=normwidth;  æ all cells width = normwidth        å
 end;
end;

PROCEDURE INIT;
var
 i: sheetindex;
 j: integer;
begin
 forladt:='A';repeteret:=false;
 errmessageÆ1Å:='Uoverenstemmelse i filtype';
 errmessageÆ2Å:='Filen findes ikke';
 errmessageÆ3Å:='Disketten er fuld';
 errmessageÆ4Å:='Fil forsvundet';
 errmessageÆ5Å:='Programfejl - kan ikke læses';
 errmessageÆ6Å:='Programfejl - kan ikke skrives';
 errmessageÆ7Å:='For mange åbne filer';
 errmessageÆ8Å:='Ukendt fejl';
 errmessageÆ9Å:='Fejl ved indlæsning af tal';
 errmessageÆ10Å:='Ukendt fejl';
 errmessageÆ11Å:='For stor fil';
 errmessageÆ12Å:='Fil uafsluttet';
 errmessageÆ13Å:='Disketten er fuld';
 errmessageÆ14Å:='Søgning udover kant af fil';
 errmessageÆ15Å:='Fil ikke åben';
 retning:=1;indicator:=pilh;
 slut:=false;
 for i:='A' to fxmax do
  for j:=1 to fymax do RYDCELLE(i,j,true);
 autocalc:=true;            æ autocalc is on                         å
 fx:='A'; fy:=1;            æ first field in upper left corner       å
end;

PROCEDURE CLEAR;
begin
 write(rvsoff);
 gotoxy(0,23); write(clreol);
 write(bell+' Slet dette regneark?  (J/N) ');
 repeat
  ch:=UPCASE(KEY);
 until ch in Æ'J','N'Å;
 write(ch);
 if ch='J' then begin
  INIT;
  if kopierfra<>'' then kopierfra:='OLD';
  GRID;
 end;
end;

PROCEDURE SKIFTTYPE(typenr:byte);
begin
 gotoxy(4,22);write(rvson);
 if typenr=0 then
  write('TEKST: ')
 else
  if typenr=1 then
   write('TAL:   ')
  else
   write('FORMEL:');
 write(rvsoff);    
end;

PROCEDURE FLASHTYPE;
begin
 with sheetÆfx,fyÅ do begin
  gotoxy(0,22);
  if fy<10 then
   write(fx,fy,'  ')
  else
   write(fx,fy:2,' ');
  if formula in cellstatus  then
   write('FORMEL  ')
  else
   if constant in cellstatus then
    write('TAL     ')
   else
    if txt in cellstatus then write('TEKST   ');
  gotoxy(0,23);write(rvsoff,clreol);
  if Æformula,constantÅ*cellstatus<>ÆÅ then write(contents);
 end;
end;

PROCEDURE TALUD(i:sheetindex;j:integer);
var
 teststr:anystring;
begin
 with sheetÆi,jÅ do
  if (dec>=0) then begin
   str(value:fw+1:dec,teststr);
   if teststrÆ1Å<>' ' then
    write(copy(stars,1,fw))
   else
    write(value:fw:dec);
  end else begin
   str(value:fw+1,teststr);
   if teststrÆ1Å<>' ' then
    write(copy(stars,1,fw))
   else
    write(value:fw);
  end;
end;
 
PROCEDURE GOTOCELL(gx: sheetindex; gy: integer);
begin
 with sheetÆgx,gyÅ do begin
  write(rvson);
  gotoxy(xposÆgxÅ,gy);
  write(copy(tom,1,fw));
  gotoxy(xposÆgxÅ,gy);
  if txt in cellstatus then
   write(contents)
  else begin
   if not (formula in cellstatus) then
    TALUD(gx,gy)
   else
    if onscreen in cellstatus then
     TALUD(gx,gy)
    else
     write(copy(points,1,fw));
  end;
  FLASHTYPE;
  gotoxy(xposÆgxÅ,gy);
 end;
 write(rvsoff);
end;

PROCEDURE LEAVECELL(fx:sheetindex;fy: integer);
begin
 with sheetÆfx,fyÅ do begin
  gotoxy(xposÆfxÅ,fy);
  write(rvsoff);
  if (txt in cellstatus) then begin
   if not (cellstatus*Æoverwritten,lockedÅ<>ÆÅ) then
    write(contents+copy(tom,1,fw-len(contents)));
  end else begin
   write(copy(tom,1,fw));
   gotoxy(xposÆfxÅ,fy);
   if onscreen in cellstatus then
    TALUD(fx,fy)
   else
    write(copy(points,1,fw));
  end;
 end;
end;

PROCEDURE UPDATE;
var
 ufx: sheetindex;
 ufy: integer;
begin
 GRID;
 for ufx:='A' to fxmax do
  for ufy:=1 to fymax do
   if sheetÆufx,ufyÅ.contents<>'' then LEAVECELL(ufx,ufy);
end;

PROCEDURE MOVEDOWN;
var
 startx: sheetindex;
 starty: integer;
begin
 retning:=2;indicator:=pilned;
 gotoxy(0,0);write(indicator);
 LEAVECELL(fx,fy);
 if forladt>fx then fx:=forladt;
 startx:=fx;starty:=fy;
 repeat
  fy:=fy+1;
  if fy>fymax then fy:=1;
  while (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ<>ÆÅ)
   and (fx>'A') do fx:=pred(fx);
 until (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ=ÆÅ)
  or ((fy=starty) and (fx=startx));
 GOTOCELL(fx,fy);
end;

PROCEDURE MOVEUP;
var
 startx: sheetindex;
 starty: integer;
begin
 LEAVECELL(fx,fy);
 if forladt>fx then fx:=forladt;
 startx:=fx;starty:=fy;
 repeat
  fy:=fy-1;
  if fy<1 then fy:=fymax;
  while (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ<>ÆÅ)
   and (fx>'A') do fx:=pred(fx);
 until (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ=ÆÅ)
  or ((fy=starty) and (fx=startx));
 GOTOCELL(fx,fy);
end;

PROCEDURE MOVERIGHT;
var
 startx: sheetindex;
 starty: integer;
begin
 retning:=1;indicator:=pilh;
 gotoxy(0,0);write(indicator);
 LEAVECELL(fx,fy);
 startx:=fx;starty:=fy;
 repeat
  if fx<fxmax then
   fx:=succ(fx)
  else begin
   fx:='A';
   fy:=fy+1;
   if fy>fymax then fy:=1;
  end;
 until (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ=ÆÅ)
  or ((fx=startx) and (fy=starty));
 forladt:=fx;
 GOTOCELL(fx,fy);
end;

PROCEDURE MOVELEFT;
var
 startx: sheetindex;
 starty: integer;
begin
 LEAVECELL(fx,fy);
 startx:=fx;starty:=fy;
 repeat
  if fx>'A' then
   fx:=pred(fx)
  else begin 
   fx:=fxmax;
   fy:=fy-1;
   if fy<1 then fy:=fymax;
  end;
 until (sheetÆfx,fyÅ.cellstatus*Æoverwritten,lockedÅ=ÆÅ)
  or ((fx=startx) and (fy=starty));
 forladt:=fx;
 GOTOCELL(fx,fy);
end;

FUNCTION DREVTEST(drev:char):boolean;
var
 ch:char;
begin
 if drev>'B' then begin
  FJERNFLASH(37,25);
  MSG('DREV '+drev+': - OK?  J/N ');
  repeat
   ch:=UPCASE(KEY);
  until pos(ch,'JN')>0;
  if ch='J' then
   DREVTEST:=true
  else
   DREVTEST:=false; 
 end else
  DREVTEST:=true;
end;

FUNCTION EXIST(filen:anystring):boolean;
var
 f:file;
 test:boolean;
begin
 (*$i-*)
 assign(f,filen);
 reset(f);
 (*$i+*)
 test:=(iores=0);
 (*$i+*)
 if test then begin
  ro:=(memÆaddr(f)+21Å>127);
  close(f);
 end;
 EXIST:=test;
end;

PROCEDURE FORTRYDTEKST;
begin
 FLASH(37,'  Fortryd  -  Tast  ESC  ',false);
end;

FUNCTION DISKVALG:char;
var
 sv,udisk:char;
 drevok:boolean;
begin
 repeat
  FORTRYDTEKST;
  MSG(' Hvilket drev?  ');
  repeat
   udisk:=UPCASE(KEY);
  until udisk in Æ'A'..'P',escÅ;
  FJERNFLASH(37,25);
  drevok:=true;
  if udisk<>esc then drevok:=DREVTEST(udisk);
  if udisk<>esc then MSG('DREV '+(udisk)+': er valgt ');
 until drevok;
 DISKVALG:=udisk;
end;

PROCEDURE GETFILENAME(xp:byte; var line: str14; filetype:str3);
var
 kniv:stringÆ8Å;
begin
 line:='';
 FORTRYDTEKST;
 gotoxy(xp,23);write(clreol);
 repeat
  ch:=UPCASE(KEY);
  if ch in Æ'A'..'Z','_','0'..'9',return,venstre,delleft,escÅ then begin
   if ch in Ævenstre,delleftÅ then begin
    if len(line)>0 then delete(line,len(line),1);
    gotoxy(xp,23);write(clreol,line);
   end else begin
    if ch=esc then
     line:=''
    else
     if (len(line)<8) or (ch=return) then begin
      write(ch);
      line:=line+ch;
     end;
   end; 
  end;
 until (ch=return) or (ch=esc);
 if ch=return then delete(line,len(line),1);
 kniv:=line;line:=kniv;
 if line<>'' then line:=line+'.'+filetype;
 FJERNFLASH(37,25);
end;
«eof»