home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / nicol / sti_edit / sti_edit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-11-08  |  26.5 KB  |  628 lines

  1. unit STI_EDIT;                              { editor                        }
  2.  
  3. interface
  4.  
  5. Uses Crt,                                   { standard TP 5.0 library       }
  6.      Dos,                                   { staandard Dos unit            }
  7.      STI_SCRF,                              { a few screen procedures       }
  8.      STI_STRN,                              { string handling               }
  9.      STI_KEYS,                              { key scanning unit             }
  10.      STI_ED_V,                              { editor variables              }
  11.      STI_ED_F;                              { editor functions              }
  12.  
  13. procedure  STI_ED(X1,Y1,X2,Y2,TextCol,BorderCol,PromptCol : byte; Border : boolean;
  14.                   Name : string; HelpP,DirP,PassP : pointer);
  15.  
  16.  
  17. implementation
  18.  
  19. {---------------------------------------------------------------------------}
  20.  
  21. procedure Process_Character(Dummy : Char);
  22.  
  23. Var
  24.   Dummy1   : string;
  25.   Col,Len  : byte;
  26.  
  27. begin
  28.   case Dummy of
  29.     #8  : begin                             { BACK SPACE                    }
  30.             Edit_Buffer^.Saved := FALSE;
  31.             One_Char_Left;
  32.             Delete_One_Char;
  33.             Draw_All_Screen;
  34.           end;
  35.     #9  : begin                             { TAB                           }
  36.             Do_Tab;
  37.           end;
  38.     #13 : begin                             { RETURN                        }
  39.             Process_Return_key;
  40.             Edit_Buffer^.Saved := FALSE;
  41.             Draw_All_Screen;
  42.           end;
  43.     #27 : begin                             { ESCAPE                        }
  44.           end
  45.     else
  46.           begin
  47.             Edit_Buffer^.Saved := FALSE;
  48.             Col := Edit_Buffer^.Column;
  49.             Len := length(Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^);
  50.             if Col > Len then
  51.               begin
  52.                 Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ :=
  53.                   Copy(Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^,1,Len-1)
  54.                   + MakeStr(Col-Len,32) + #31;
  55.               end;
  56.             Dummy1 := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  57.             if Edit_Buffer^.Insert then
  58.               begin
  59.                 Dummy1 := Copy(Dummy1,1,Col-1) + Dummy + Copy(Dummy1,Col,128);
  60.                 if Length(Dummy1) > 128 then
  61.                   begin
  62.                     Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Copy(Dummy1,1,127)+#31;
  63.                     One_Line_Down;
  64.                     Insert_One_Line;
  65.                     Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Copy(Dummy1,128,255);
  66.                     Edit_Buffer^.Column := length(Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^);
  67.                     Edit_Buffer^.SCRX   := Edit_Buffer^.Column;
  68.                   end
  69.                 else
  70.                   begin
  71.                     Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy1;
  72.                     One_Char_Right;
  73.                   end;
  74.               end
  75.             else
  76.               begin
  77.                 Dummy1[Col] := Dummy;
  78.                 Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy1;
  79.                 One_Char_Right;
  80.               end;
  81.             Draw_All_Screen;
  82.           end;
  83.   end;{case}
  84. end;
  85.  
  86. {---------------------------------------------------------------------------}
  87.  
  88. procedure Process_Control_Characters(CH : KeyRec);
  89.  
  90. Var
  91.   Dummy    : string;
  92.   CNTRLCH  : char;
  93.   PassCh   : ChrSet;
  94.  
  95. begin
  96.   CNTRLCH := CH[1];
  97.   case CNTRLCH of
  98.     #16  : begin                            { ^P                            }
  99.              case UpCase(ReadKey) of
  100.                ^P,'P' : begin
  101.                           Print_File;
  102.                           Draw_All_Screen;
  103.                         end;
  104.                ^B,'B' : begin
  105.                           Block_Print;
  106.                           Draw_All_Screen;
  107.                         end;
  108.              end;
  109.            end;
  110.     #19  : begin                            { ^S                            }
  111.              One_Char_Left;
  112.            end;
  113.     #4   : begin                            { ^D                            }
  114.              One_Char_Right;
  115.            end;
  116.     #5   : begin                            { ^E                            }
  117.              One_Line_Up;
  118.            end;
  119.     #24  : begin                            { ^X                            }
  120.              One_Line_Down;
  121.            end;
  122.     #1   : begin                            { ^A                            }
  123.              One_Word_Back;
  124.            end;
  125.     #6   : begin                            { ^F                            }
  126.              One_Word_Forward;
  127.            end;
  128.     #18  : begin                            { ^R                            }
  129.              One_Screen_Up;
  130.              Draw_All_Screen;
  131.            end;
  132.     #3   : begin                            { ^C                            }
  133.              One_Screen_Down;
  134.              Draw_All_Screen;
  135.            end;
  136.     #7   : begin                            { ^G                            }
  137.              Delete_One_Char;
  138.              Draw_All_Screen;
  139.            end;
  140.     #9   : begin                            { ^I                            }
  141.              Edit_Buffer^.Insert := Not(Edit_Buffer^.Insert);
  142.              Put_Top_Line;
  143.              Put_Bottom_Line;
  144.              GotoXY(Edit_Buffer^.X1+Edit_Buffer^.SCRX -1,
  145.                     Edit_Buffer^.Y1+Edit_Buffer^.SCRY -1);
  146.              Delay(100);
  147.            end;
  148.     #11  : begin                            { ^K                            }
  149.              case UpCase(ReadKey) of
  150.                ^D,'D' : Quit_Check;
  151.                ^Q,'Q' : Quit_Check;
  152.                ^S,'S' : begin
  153.                           Save_File(Edit_Buffer^.FileName);
  154.                         end;
  155.                ^B,'B' : begin
  156.                           Block_Mark_Start;
  157.                           Draw_All_Screen;
  158.                         end;
  159.                ^C,'C' : begin
  160.                           Block_Copy;
  161.                           Draw_All_Screen;
  162.                         end;
  163.                ^K,'K' : begin
  164.                           Block_Mark_End;
  165.                           Draw_All_Screen;
  166.                         end;
  167.                ^Y,'Y' : begin
  168.                           Block_Erase;
  169.                           Draw_All_Screen;
  170.                         end;
  171.                ^V,'V' : begin
  172.                           Block_Move;
  173.                           Draw_All_Screen;
  174.                         end;
  175.                ^W,'W' : begin
  176.                           Block_Write;
  177.                           Draw_All_Screen;
  178.                         end;
  179.                ^R,'R' : begin
  180.                           Block_Read;
  181.                           Draw_All_Screen;
  182.                         end;
  183.              end;
  184.            end;
  185.     #17  : begin                            { ^Q                            }
  186.              case UpCase(ReadKey) of
  187.                ^H,'H' : begin
  188.                           Erase_Line_Contents(Edit_Buffer^.Row);
  189.                           Draw_All_Screen;
  190.                         end;
  191.                ^Q,'Q' : begin
  192.                           Search_And_Replace;
  193.                         end;
  194.                ^F,'F' : begin
  195.                           Search;
  196.                         end;
  197.                ^R,'R' : begin
  198.                           Jump_Start_Of_File;
  199.                           Draw_All_Screen;
  200.                         end;
  201.                ^C,'C' : begin
  202.                           Jump_End_Of_File;
  203.                           Draw_All_Screen;
  204.                         end;
  205.              end;
  206.            end;
  207.     #25  : begin                            { ^Y                            }
  208.              Delete_One_Line;
  209.              Draw_All_Screen;
  210.            end;
  211.     #20  : begin                            { ^T                            }
  212.              Erase_One_Word;
  213.              Draw_All_Screen;
  214.            end;
  215.     #12  : begin                            { ^L                            }
  216.              case UpCase(ReadKey) of
  217.                ^U,'U' : begin
  218.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  219.                           UpCaseStr2(Dummy);
  220.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  221.                           Draw_All_Screen;
  222.                         end;
  223.                ^D,'D' : begin
  224.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  225.                           LoCaseStr2(Dummy);
  226.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  227.                           Draw_All_Screen;
  228.                         end;
  229.                ^C,'C' : begin
  230.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  231.                           Centre_String(Dummy,MAX_LEN,' ');
  232.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  233.                           Draw_All_Screen;
  234.                         end;
  235.                ^R,'R' : begin
  236.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  237.                           RightTrimStr(Dummy);
  238.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy+#31;
  239.                           Draw_All_Screen;
  240.                         end;
  241.                ^L,'L' : begin
  242.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  243.                           LeftTrimStr(Dummy);
  244.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  245.                           Draw_All_Screen;
  246.                         end;
  247.              end;
  248.            end;
  249.     #23  : begin                            { ^W                            }
  250.              case UpCase(ReadKey) of
  251.                ^U,'U' : begin
  252.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  253.                           UpCase_One_Word(Dummy,Edit_Buffer^.Column);
  254.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  255.                           Draw_All_Screen;
  256.                         end;
  257.                ^D,'D' : begin
  258.                           Dummy := Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^;
  259.                           LoCase_One_Word(Dummy,Edit_Buffer^.Column);
  260.                           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := Dummy;
  261.                           Draw_All_Screen;
  262.                         end;
  263.              end;
  264.            end
  265.     else
  266.       begin
  267.         PassCh[1] := byte(CH[1]);
  268.         PassCh[2] := byte(CH[2]);
  269.         PassCh[3] := byte(CH[3]);
  270.         Pass_Chars_On(PassCh);              { pass it on                    }
  271.       end;
  272.   end;{case }
  273. end;
  274.  
  275. {---------------------------------------------------------------------------}
  276.  
  277. procedure Process_Special_Key(Dummy : KeyRec); { handle all weird keys      }
  278.  
  279. Var
  280.   ASCII   :  byte;                             { plain ASCII code           }
  281.   EXTEND  :  byte;                             { F1 etc                     }
  282.   SPECIAL :  byte;                             { SHIFT, CTRL, GRPH          }
  283.   PassCh  :  ChrSet;                           { set to pass on             }
  284.  
  285. begin
  286.   ASCII     := byte(Dummy[1]);                 { assign ascii code          }
  287.   EXTEND    := byte(Dummy[2]);                 { assign extended code       }
  288.   SPECIAL   := byte(Dummy[3]);                 { assign special code        }
  289.   case SPECIAL of                              { check for CTRL,SHIFT,GRPH  }
  290.     0   : begin                                { nothing                    }
  291.             case EXTEND of
  292.               98  : begin                      { F1                         }
  293.                       Do_Help;
  294.                       Draw_All_Screen;
  295.                     end;
  296.               99  : begin                      { F2                         }
  297.                       Save_File(Edit_Buffer^.FileName);
  298.                       Edit_Buffer^.Saved := TRUE;
  299.                       Draw_All_Screen;
  300.                     end;
  301.               100 : begin                      { F3                         }
  302.                       Load_New_File;
  303.                       Edit_Buffer^.Saved := FALSE;
  304.                       Draw_All_Screen;
  305.                     end;
  306.               101 : begin                      { F4                         }
  307.                       Search;
  308.                       Draw_All_Screen;
  309.                     end;
  310.               102 : begin                      { F5                         }
  311.                       Search_And_Replace;
  312.                       Edit_Buffer^.Saved := FALSE;
  313.                       Draw_All_Screen;
  314.                     end;
  315.               103 : begin                      { F6                         }
  316.                       Block_Mark_Start;
  317.                       Draw_All_Screen;
  318.                     end;
  319.               104 : begin                      { F7                         }
  320.                       Block_Mark_End;
  321.                       Draw_All_Screen;
  322.                     end;
  323.               105 : begin                      { F8                         }
  324.                       Block_Copy;
  325.                       Draw_All_Screen;
  326.                     end;
  327.               106 : begin                      { F9                         }
  328.                       Block_Erase;
  329.                       Draw_All_Screen;
  330.                     end;
  331.               107 : begin                      { F10                        }
  332.                       Quit_Check;
  333.                     end;
  334.               54  : begin                      { ROLL UP                    }
  335.                       One_Screen_Up;
  336.                       Draw_All_Screen;
  337.                     end;
  338.               55  : begin                      { ROLL DOWN                  }
  339.                       One_Screen_Down;
  340.                       Draw_All_Screen;
  341.                     end;
  342.               56  : begin                      { INSERT                     }
  343.                       Edit_Buffer^.Insert := Not(Edit_Buffer^.Insert);
  344.                       Draw_All_Screen;
  345.                       GotoXY(Edit_Buffer^.X1+Edit_Buffer^.SCRX -1,
  346.                              Edit_Buffer^.Y1+Edit_Buffer^.SCRY -1);
  347.                       Delay(100);
  348.                     end;
  349.               57  : begin                      { DELETE                     }
  350.                       Edit_Buffer^.Saved := FALSE;
  351.                       Delete_One_Char;
  352.                       Draw_All_Screen;
  353.                     end;
  354.               62  : begin                      { HOME CLEAR                 }
  355.                       Begin_Of_Line;
  356.                       Draw_All_Screen;
  357.                     end;
  358.               63  : begin                      { HELP                       }
  359.                       Do_Help;
  360.                       Draw_All_Screen;
  361.                     end;
  362.               59  : begin                      { <---                       }
  363.                       One_Char_Left;
  364.                     end;
  365.               60  : begin                      { --->                       }
  366.                       One_Char_Right;
  367.                     end;
  368.               58  : begin                      { UP ARROW                   }
  369.                       One_Line_Up;
  370.                     end;
  371.               61  : begin                      { DOWN ARROW                 }
  372.                       One_Line_Down;
  373.                     end
  374.               else
  375.                 begin
  376.                   PassCh[2] := ord(EXTEND);
  377.                   PassCh[1] := ord(ASCII);
  378.                   PassCh[3] := ord(SPECIAL);
  379.                   Pass_Chars_On(PassCh);
  380.                 end;
  381.             end;{case of EXTEND}
  382.           end;
  383.     1   : begin                                { CTRL                       }
  384.             case EXTEND of
  385.               0   : begin                      { nothing                    }
  386.                       Process_Control_Characters(char(ASCII));
  387.                     end;
  388.               57  : begin                      { DELETE                     }
  389.                       Erase_One_Word;
  390.                       Draw_All_Screen;
  391.                     end;
  392.               59  : begin                      { <---                       }
  393.                       Begin_Of_Line;
  394.                       Draw_All_Screen;
  395.                     end;
  396.               60  : begin                      { --->                       }
  397.                       End_Of_Line;
  398.                       Draw_All_Screen;
  399.                     end;
  400.               58  : begin                      { UP ARROW                   }
  401.                       One_Screen_Down;
  402.                       Draw_All_Screen;
  403.                     end;
  404.               61  : begin                      { DOWN ARROW                 }
  405.                       One_Screen_Up;
  406.                       Draw_All_Screen;
  407.                     end
  408.               else
  409.                 begin
  410.                   PassCh[2] := ord(EXTEND);
  411.                   PassCh[1] := ord(ASCII);
  412.                   PassCh[3] := ord(SPECIAL);
  413.                   Pass_Chars_On(PassCh);
  414.                 end;
  415.             end;{case of EXTEND}
  416.           end;
  417.     10  : begin                                { SHIFT                      }
  418.             case EXTEND of
  419.               0   : begin                      { nothing                    }
  420.                       if ASCII = 9 then
  421.                         Reset_TAB
  422.                       else
  423.                         Process_Character(char(ASCII));
  424.                     end;
  425.               54  : begin                      { ROLL UP                    }
  426.                       Jump_End_Of_File;
  427.                       Draw_All_Screen;
  428.                     end;
  429.               55  : begin                      { ROLL DOWN                  }
  430.                       Jump_Start_Of_File;
  431.                       Draw_All_Screen;
  432.                     end;
  433.               56  : begin                      { INSERT                     }
  434.                       Insert_One_Line;
  435.                       Edit_Buffer^.Saved := FALSE;
  436.                       Draw_All_Screen;
  437.                     end;
  438.               57  : begin                      { DELETE                     }
  439.                       Delete_One_Line;
  440.                       Edit_Buffer^.Saved := FALSE;
  441.                       Draw_All_Screen;
  442.                     end;
  443.               174 : begin                      { HOME CLEAR                 }
  444.                       End_Of_Line;
  445.                       Draw_All_Screen;
  446.                     end;
  447.               59  : begin                      { <---                       }
  448.                       One_Word_Back;
  449.                       Draw_All_Screen;
  450.                     end;
  451.               60  : begin                      { --->                       }
  452.                       One_Word_Forward;
  453.                       Draw_All_Screen;
  454.                     end;
  455.               58  : begin                      { UP ARROW                   }
  456.                       if Edit_Buffer^.Row > Edit_Buffer^.SCRY then
  457.                         Edit_Buffer^.Row := (Edit_Buffer^.Row - Edit_Buffer^.SCRY) + 1
  458.                       else
  459.                         Edit_Buffer^.Row := 1;
  460.                       Edit_Buffer^.Column := 1;
  461.                       Edit_Buffer^.SCRX   := 1;
  462.                       Edit_Buffer^.SCRY   := 1;
  463.                       Draw_All_Screen;
  464.                     end;
  465.               61  : begin                      { DOWN ARROW                 }
  466.                       Edit_Buffer^.Row := Edit_Buffer^.Row +
  467.                                             ((Edit_Buffer^.Y2 - Edit_Buffer^.SCRY)-1);
  468.                       Edit_Buffer^.Column := 1;
  469.                       Edit_Buffer^.SCRX   := 1;
  470.                       Edit_Buffer^.SCRY   := Edit_Buffer^.Y2-1;
  471.                       Draw_All_Screen;
  472.                     end
  473.               else
  474.                 begin
  475.                   PassCh[2] := ord(EXTEND);
  476.                   PassCh[1] := ord(ASCII);
  477.                   PassCh[3] := ord(SPECIAL);
  478.                   Pass_Chars_On(PassCh);
  479.                 end;
  480.             end;{case of EXTEND}
  481.           end;
  482.     100 : begin                                { GRAPH                      }
  483.             PassCh[2] := ord(EXTEND);
  484.             PassCh[1] := ord(ASCII);
  485.             PassCh[3] := ord(SPECIAL);
  486.             Pass_Chars_On(PassCh);
  487.           end;
  488.     101 : begin                                { GRAPH + CTRL               }
  489.             PassCh[2] := ord(EXTEND);
  490.             PassCh[1] := ord(ASCII);
  491.             PassCh[3] := ord(SPECIAL);
  492.             Pass_Chars_On(PassCh);
  493.           end;
  494.     110 : begin                                { GRAPH + SHIFT              }
  495.             PassCh[2] := ord(EXTEND);
  496.             PassCh[1] := ord(ASCII);
  497.             PassCh[3] := ord(SPECIAL);
  498.             Pass_Chars_On(PassCh);
  499.           end;
  500.      11 : begin                                { CTRL + SHIFT               }
  501.             PassCh[2] := ord(EXTEND);
  502.             PassCh[1] := ord(ASCII);
  503.             PassCh[3] := ord(SPECIAL);
  504.             Pass_Chars_On(PassCh);
  505.           end;
  506.     111 : begin                                { CTRL + SHIFT               }
  507.             PassCh[2] := ord(EXTEND);
  508.             PassCh[1] := ord(ASCII);
  509.             PassCh[3] := ord(SPECIAL);
  510.             Pass_Chars_On(PassCh);
  511.           end;
  512.   end;{case for SPECIAL}
  513. end;
  514.  
  515. {---------------------------------------------------------------------------}
  516.  
  517. procedure Main_Edit_Loop;                   { main loop of the editor       }
  518.  
  519. Var
  520.   Dummy : KeyRec;                           { the read key                  }
  521.  
  522. begin
  523.   Put_Top_Line;                             { draw the top line             }
  524.   Put_Bottom_Line;                          { draw the bottom line          }
  525.   Load_File(Edit_Buffer^.FileName);         { load the file                 }
  526.   Draw_All_Screen;                          { draw the screen               }
  527.   while not(Edit_Buffer^.Done) do           { loop until done               }
  528.     begin
  529.       Dummy := STI_InKey2;                  { get a key                     }
  530.       if Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row] = NIL then
  531.         begin
  532.           new(Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]);
  533.           Edit_Buffer^.TextBuffer^[Edit_Buffer^.Row]^ := '';
  534.         end;
  535.       if (Dummy[2] <> #0) or (Dummy[3] <> #0) then  { check for special     }
  536.         Process_Special_Key(Dummy)          { process a special key         }
  537.       else
  538.         Process_Character(Dummy[1]);        { this is just a normal key     }
  539.     end;
  540. end;
  541.  
  542. {---------------------------------------------------------------------------}
  543.  
  544. procedure  STI_ED(X1,Y1,X2,Y2,TextCol,BorderCol,PromptCol : byte; Border : boolean;
  545.                   Name : string; HelpP,DirP,PassP : pointer);
  546.  
  547. Var
  548.   Loop  : word;
  549.   BREAK : boolean;
  550.   HP1   : HelpProcedure absolute HelpP;
  551.   DP1   : DirectoryFunc absolute DirP;
  552.   PP1   : PassOnProc    absolute PassP;
  553.  
  554. begin
  555.   if (X1 > 30) or (X1 < 1) then X1 := 1;
  556.   if (X2 > 80) or (X2 < 40) then X2 := 80;
  557.   if (Y1 > 10) or (Y1 < 1) then Y1 := 1;
  558.   if (Y2 > 23) or (Y2 < 15) then Y2 := 23;
  559.   GetCBreak(BREAK);                         { save old CBreak mode          }
  560.   SetCBreak(FALSE);                         { don't stop for CBreak)        }
  561.   New(Edit_Buffer);                         { get the edit buffer memory    }
  562.   New(Edit_Buffer^.TextBuffer);             { get the text buffer memory    }
  563.   Edit_Buffer^.HP          := HP1;          { set the help procedure        }
  564.   Edit_Buffer^.DP          := DP1;          { set the directory procedure   }
  565.   Edit_Buffer^.PP          := PP1;          { set the pass on procedure     }
  566.   Edit_Buffer^.Saved       := TRUE;         { file originally saved         }
  567.   Edit_Buffer^.TabWidth    := 5;            { default tab width             }
  568.   Edit_Buffer^.Block.BC    := 0;            { start of block column         }
  569.   Edit_Buffer^.Block.BL    := 0;            { start of block line           }
  570.   Edit_Buffer^.Block.EC    := 0;            { end of block column           }
  571.   Edit_Buffer^.Block.EL    := 0;            { end of block line             }
  572.   Edit_Buffer^.FileName    := Name;         { set the file name             }
  573.   Edit_Buffer^.X1          := X1;           { set the edit area borders     }
  574.   Edit_Buffer^.X2          := X2;
  575.   Edit_Buffer^.Y1          := Y1;
  576.   Edit_Buffer^.Y2          := Y2;
  577.   Edit_Buffer^.Border      := Border;       { use a border or not           }
  578.   Edit_Buffer^.TextCol     := TextCol;      { set the colors                }
  579.   Edit_Buffer^.BorderCol   := BorderCol;
  580.   Edit_Buffer^.PromptCol   := PromptCol;
  581.   Edit_Buffer^.Done        := FALSE;        { edit end flag                 }
  582.   Edit_Buffer^.Insert      := TRUE;         { default to insert             }
  583.   Edit_Buffer^.Column      := 1;            { initialise row/col etc        }
  584.   Edit_Buffer^.Row         := 1;
  585.   Edit_Buffer^.SCRX        := 1;
  586.   Edit_Buffer^.SCRY        := 1;
  587.   Edit_Buffer^.OldWMin     := WindMin;      { save old window dimentions    }
  588.   Edit_Buffer^.OldWMax     := WindMax;
  589.   Edit_Buffer^.OldX        := WhereX;       { save old screen pos           }
  590.   Edit_Buffer^.OldY        := WhereY;
  591.   Edit_Buffer^.NoLines     := 0;            { number of lines in file       }
  592.   for Loop := 1 to MAX_LEN   do             { loop on width                 }
  593.     begin
  594.       if Loop mod Edit_Buffer^.TabWidth = 0 then
  595.         Edit_Buffer^.TabMarks[Loop] := TRUE
  596.       else                                  { set tab markers               }
  597.         Edit_Buffer^.TabMarks[Loop] := FALSE;
  598.     end;
  599.   for Loop := 1 to MAX_LINES do             { loop on the number of lines   }
  600.     begin
  601.       Edit_Buffer^.TextBuffer^[Loop] := NIL;{ null all lines                }
  602.     end;
  603.  
  604.   Set_Up_Screen(Edit_Buffer^);              { set up the screen             }
  605.   Main_Edit_Loop;                           { do the actual editing         }
  606.   Restore_Screen(Edit_Buffer^);             { restore the screen            }
  607.   GotoXY(Edit_Buffer^.OldX,                 { restore old screen position   }
  608.          Edit_Buffer^.OldY);
  609.  
  610.   Erase_Buffer;
  611.   WindMin := Edit_Buffer^.OldWMin;          { restore old window size       }
  612.   WindMax := Edit_Buffer^.OldWMax;
  613.   GotoXY(Edit_Buffer^.OldX,Edit_Buffer^.OldY); { restore cursor position    }
  614.   Dispose(Edit_Buffer^.TextBuffer);         { no need for text buffer       }
  615.   Dispose(Edit_Buffer);                     { no need for edit buffer too   }
  616.   SetCBreak(BREAK);                         { reset old mode                }
  617. end;
  618.  
  619. {---------------------------------------------------------------------------}
  620.  
  621. begin
  622. end.
  623.  
  624.  
  625.  
  626.  
  627.  
  628.