|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10112 (0x2780)
Types: TextFile
Names: »REGN2.PAS«
└─⟦5c8344fa1⟧ Bits:30004223 REGN version 2.1 til ICL Comet
└─⟦this⟧ »REGN2.PAS«
(* 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»