143 lines
3.5 KiB
Plaintext
143 lines
3.5 KiB
Plaintext
|
||
{ Copyright (c) 1985, 88 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.
|
||
|