home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo5 / mcalc.pas < prev    next >
Pascal/Delphi Source File  |  1988-10-09  |  4KB  |  143 lines

  1.  
  2. { Copyright (c) 1985, 88 by Borland International, Inc. }
  3.  
  4. Program MCalc;
  5.  
  6. uses Crt, Dos, MCVars, MCUtil, MCDisply, MCParser, MCLib, MCInput, MCommand;
  7.  
  8. var
  9.   Ch : Char;
  10.  
  11. procedure Run;
  12. { The main program loop }
  13. var
  14.   Input : Char;
  15. begin
  16.   Stop := False;
  17.   ClearInput;
  18.   repeat
  19.     DisplayCell(CurCol, CurRow, HIGHLIGHT, NOUPDATE);
  20.     CurCell := Cell[CurCol, CurRow];
  21.     ShowCellType;
  22.     GotoXY(1, 25);
  23.     Input := GetKey;
  24.     case Input of
  25.       '/' : MainMenu;
  26.       F1 : Recalc;
  27.       F2 : EditCell(CurCell);
  28.       DELKEY : begin
  29.         DeleteCell(CurCol, CurRow, UPDATE);
  30.         PrintFreeMem;
  31.         if AutoCalc then
  32.           Recalc;
  33.       end; { DELKEY }
  34.       PGUPKEY : begin
  35.         if CurRow <= SCREENROWS then
  36.         begin
  37.           CurRow := 1;
  38.           TopRow := 1;
  39.         end
  40.         else if TopRow <= SCREENROWS then
  41.         begin
  42.           CurRow := Succ(CurRow - TopRow);
  43.           TopRow := 1;
  44.         end
  45.         else begin
  46.           Dec(TopRow, SCREENROWS);
  47.           Dec(CurRow, SCREENROWS);
  48.         end;
  49.         SetBottomRow;
  50.         DisplayScreen(NOUPDATE);
  51.       end; {PGUPKEY }
  52.       PGDNKEY : begin
  53.         Inc(TopRow, SCREENROWS);
  54.         Inc(CurRow, SCREENROWS);
  55.         if (CurRow > MAXROWS) and (TopRow > MAXROWS) then
  56.         begin
  57.           CurRow := MAXROWS;
  58.           TopRow := Succ(MAXROWS - SCREENROWS);
  59.         end
  60.         else if TopRow > Succ(MAXROWS - SCREENROWS) then
  61.         begin
  62.           CurRow := Succ(CurRow) - (TopRow + SCREENROWS - MAXROWS);
  63.           TopRow := Succ(MAXROWS - SCREENROWS);
  64.         end;
  65.         SetBottomRow;
  66.         DisplayScreen(NOUPDATE);
  67.       end; { PGDNKEY }
  68.       CTRLLEFTKEY : begin
  69.         DisplayCell(CurCol, CurRow, NOHIGHLIGHT, NOUPDATE);
  70.         if LeftCol = 1 then
  71.           CurCol := 1
  72.         else begin
  73.           CurCol := Pred(LeftCol);
  74.           RightCol := CurCol;
  75.           SetLeftCol;
  76.           SetRightCol;
  77.           DisplayScreen(NOUPDATE);
  78.         end;
  79.       end; { CTRLLEFTKEY }
  80.       CTRLRIGHTKEY : begin
  81.         DisplayCell(CurCol, CurRow, NOHIGHLIGHT, NOUPDATE);
  82.         if RightCol = MAXCOLS then
  83.           CurCol := RightCol
  84.         else begin
  85.           CurCol := Succ(RightCol);
  86.           LeftCol := CurCol;
  87.           SetRightCol;
  88.           SetLeftCol;
  89.           DisplayScreen(NOUPDATE);
  90.         end;
  91.       end; { CTRLRIGHTKEY }
  92.       HOMEKEY : begin
  93.         CurRow := 1;
  94.         CurCol := 1;
  95.         LeftCol := 1;
  96.         TopRow := 1;
  97.         SetRightCol;
  98.         SetBottomRow;
  99.         DisplayScreen(NOUPDATE);
  100.       end; { HOMEKEY }
  101.       ENDKEY : begin
  102.         CurCol := LastCol;
  103.         RightCol := CurCol;
  104.         BottomRow := LastRow;
  105.         CurRow := BottomRow;
  106.         SetTopRow;
  107.         SetLeftCol;
  108.         SetRightCol;
  109.         DisplayScreen(NOUPDATE);
  110.       end; { ENDKEY }
  111.       UPKEY : MoveRowUp;
  112.       DOWNKEY : MoveRowDown;
  113.       LEFTKEY : MoveColLeft;
  114.       RIGHTKEY : MoveColRight;
  115.       else if Input in [' '..'~'] then
  116.         GetInput(Input);
  117.     end; { case }
  118.   until Stop;
  119. end; { Run }
  120.  
  121. begin
  122.   CheckBreak := False;
  123.   SetColor(TXTCOLOR);
  124.   ClrScr;
  125.   SetColor(MSGHEADERCOLOR);
  126.   WriteXY(MSGHEADER, (80 - Length(MSGHEADER)) shr 1, 10);
  127.   SetColor(PROMPTCOLOR);
  128.   WriteXY(MSGKEYPRESS, (80 - Length(MSGKEYPRESS)) shr 1, 12);
  129.   GotoXY(80, 25);
  130.   Ch := GetKey;
  131.   ClrScr;
  132.   InitVars;
  133.   Changed := False;
  134.   RedrawScreen;
  135.   if (ParamCount > 0) then
  136.     LoadSheet(ParamStr(1));
  137.   ClearInput;
  138.   Run;
  139.   SetColor(LightGray);
  140.   TextMode(OldMode);
  141.   SetCursor(OldCursor);
  142. end.
  143.