dos_compilers/Borland Turbo Pascal v4/MCALC.PAS

143 lines
3.6 KiB
Plaintext
Raw Normal View History

2024-07-02 06:08:56 +02:00
{ Copyright (c) 1985, 87 by Borland International, Inc. }
Program MCalc;
uses Crt, Dos, MCVars, MCUtil, MCDisply, MCParser, MCLib, MCInput, MCommand;
var
Ch : Char;
procedure Run;
{ The main program loop }
var
Input : Char;
begin
Stop := False;
ClearInput;
repeat
DisplayCell(CurCol, CurRow, HIGHLIGHT, NOUPDATE);
CurCell := Cell[CurCol, CurRow];
ShowCellType;
GotoXY(1, 25);
Input := GetKey;
case Input of
'/' : MainMenu;
F1 : Recalc;
F2 : EditCell(CurCell);
DELKEY : begin
DeleteCell(CurCol, CurRow, UPDATE);
PrintFreeMem;
if AutoCalc then
Recalc;
end; { DELKEY }
PGUPKEY : begin
if CurRow <= SCREENROWS then
begin
CurRow := 1;
TopRow := 1;
end
else if TopRow <= SCREENROWS then
begin
CurRow := Succ(CurRow - TopRow);
TopRow := 1;
end
else begin
Dec(TopRow, SCREENROWS);
Dec(CurRow, SCREENROWS);
end;
SetBottomRow;
DisplayScreen(NOUPDATE);
end; {PGUPKEY }
PGDNKEY : begin
Inc(TopRow, SCREENROWS);
Inc(CurRow, SCREENROWS);
if (CurRow > MAXROWS) and (TopRow > MAXROWS) then
begin
CurRow := MAXROWS;
TopRow := Succ(MAXROWS - SCREENROWS);
end
else if TopRow > Succ(MAXROWS - SCREENROWS) then
begin
CurRow := Succ(CurRow) - (TopRow + SCREENROWS - MAXROWS);
TopRow := Succ(MAXROWS - SCREENROWS);
end;
SetBottomRow;
DisplayScreen(NOUPDATE);
end; { PGDNKEY }
CTRLLEFTKEY : begin
DisplayCell(CurCol, CurRow, NOHIGHLIGHT, NOUPDATE);
if LeftCol = 1 then
CurCol := 1
else begin
CurCol := Pred(LeftCol);
RightCol := CurCol;
SetLeftCol;
SetRightCol;
DisplayScreen(NOUPDATE);
end;
end; { CTRLLEFTKEY }
CTRLRIGHTKEY : begin
DisplayCell(CurCol, CurRow, NOHIGHLIGHT, NOUPDATE);
if RightCol = MAXCOLS then
CurCol := RightCol
else begin
CurCol := Succ(RightCol);
LeftCol := CurCol;
SetRightCol;
SetLeftCol;
DisplayScreen(NOUPDATE);
end;
end; { CTRLRIGHTKEY }
HOMEKEY : begin
CurRow := 1;
CurCol := 1;
LeftCol := 1;
TopRow := 1;
SetRightCol;
SetBottomRow;
DisplayScreen(NOUPDATE);
end; { HOMEKEY }
ENDKEY : begin
CurCol := LastCol;
RightCol := CurCol;
BottomRow := LastRow;
CurRow := BottomRow;
SetTopRow;
SetLeftCol;
SetRightCol;
DisplayScreen(NOUPDATE);
end; { ENDKEY }
UPKEY : MoveRowUp;
DOWNKEY : MoveRowDown;
LEFTKEY : MoveColLeft;
RIGHTKEY : MoveColRight;
else if Input in [' '..'~'] then
GetInput(Input);
end; { case }
until Stop;
end; { Run }
begin
CheckBreak := False;
SetColor(TXTCOLOR);
ClrScr;
SetColor(MSGHEADERCOLOR);
WriteXY(MSGHEADER, (80 - Length(MSGHEADER)) shr 1, 10);
SetColor(PROMPTCOLOR);
WriteXY(MSGKEYPRESS, (80 - Length(MSGKEYPRESS)) shr 1, 12);
GotoXY(80, 25);
Ch := GetKey;
ClrScr;
InitVars;
Changed := False;
RedrawScreen;
if (ParamCount > 0) then
LoadSheet(ParamStr(1));
ClearInput;
Run;
SetColor(LightGray);
TextMode(OldMode);
SetCursor(OldCursor);
end.