home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / APPS / BUSINESS / TTYPRT36.ZIP / ED_PROCS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-09-11  |  13.8 KB  |  351 lines

  1. {These are support routines to the mini-editor}
  2.  
  3. PROCEDURE ed_ent;
  4. (*****************************************************************************
  5. process a <ret> or <ent>
  6. ******************************************************************************)
  7. VAR i:INTEGER;
  8.     keychr:CHAR;
  9. BEGIN
  10.     IF Ins_Mode THEN BEGIN                   {break lines}
  11.         tmpstr:=COPY(ed_text[ln],cc,Max_Tty_Width-cc+1);  {what to move down}
  12.         ed_text[ln]:=COPY(COPY(ed_text[ln],1,cc-1)+spaces,1,Max_Tty_Width);
  13.                                                  {what is left}
  14.         keychr:=ed_text[ln+1][1];                {last char of *next* line}
  15.         IF (keychr=' ') OR (keychr='!') OR       {if next line is blank}
  16.             ((keychr>'1') AND (keychr<'9')) THEN BEGIN {or starts a new para}
  17.             IF ln<=last_ln THEN BEGIN            {bump everyline down one}
  18.                 FOR i:=last_ln DOWNTO ln DO
  19.                     ed_text[i+1]:=ed_text[i];
  20.                 last_ln:=last_ln+1
  21.             END;
  22.             IF ln<Max_Ed_Lines THEN                 {eof check}
  23.                 ed_text[ln+1]:=COPY(tmpstr+spaces,1,Max_Tty_Width); {fill in}
  24.         END ELSE BEGIN
  25.             i:=LENGTH(tmpstr);
  26.             ln:=ln+1;                            {point to next line}
  27.             WHILE (tmpstr[i]=' ') AND (i>0) DO i:=i-1;   {del trailing spaces}
  28.             tmpstr:=COPY(tmpstr,1,i)+' '+ed_text[ln];    {build next line}
  29.             i:=wrapper;                          {wrap new line to eo para}
  30.             ln:=ln-1;                            {pt back ot org line}
  31.         END;
  32.         dr_page
  33.     END;
  34.     IF ln+1-top_ln<Ln_Pg THEN                {scroll needed?}
  35.         ln:=ln+1
  36.     ELSE
  37.         IF ln<Max_Ed_Lines THEN BEGIN           {scroll stuff}
  38.             top_ln:=top_ln+1;
  39.             ln:=ln+1;
  40.             dr_page
  41.         END;
  42.     {end}
  43.     cc:=1
  44. END; {PROCEDURE ed_ent}
  45.  
  46. PROCEDURE ed_tab;
  47. (*****************************************************************************
  48. process a <tab>
  49. ******************************************************************************)
  50. BEGIN
  51.     IF cc<Tab_Col THEN BEGIN                 {if curr pos < tab column}
  52.         IF Ins_Mode THEN BEGIN               {inset approp # of spaces}
  53.             tmpstr:=COPY(ed_text[ln],1,cc-1)+COPY(spaces,1,Tab_Col-cc)+
  54.                 COPY(ed_text[ln],cc,Max_Tty_Width-cc);
  55.             IF wrapper>0 THEN                {& wrap}
  56.                 dr_page                      {redraw whole page}
  57.             ELSE BEGIN
  58.                 GOTOXY(2,3+ln-top_ln);       {redraw just this line}
  59.                 WRITE(ed_text[ln])
  60.             END
  61.         END
  62.         {cc:=Tab_Col}
  63.     END ELSE                                 {curr pos > tab column}
  64.         IF ln-top_ln+1<Ln_Pg THEN BEGIN      {move to next line - scroll?}
  65.             ln:=ln+1
  66.         END ELSE
  67.             IF ln<Max_Ed_Lines THEN BEGIN       {scroll stuff}
  68.                 top_ln:=top_ln+1;
  69.                 ln:=ln+1;
  70.                 dr_page
  71.             END;
  72.         {end}
  73.     {end}
  74.     cc:=Tab_Col                              {put cursor on tab column}
  75. END; {PROCEDURE ed_tab}
  76.  
  77. PROCEDURE ed_recall;
  78. (*****************************************************************************
  79. recall deleted line from 'tmpstr'
  80. ******************************************************************************)
  81. VAR i:INTEGER;
  82. BEGIN
  83.     FOR i:=last_ln DOWNTO ln DO         {bump every subsequent line down one}
  84.         ed_text[i+1]:=ed_text[i];
  85.     last_ln:=last_ln+1;                 {add one to count}
  86.     ed_text[ln]:=delstr;                {insert the deleted buffer}
  87.     dr_page
  88. END; {PROCEDURE ed_recall}
  89.  
  90. PROCEDURE ed_delln;
  91. (*****************************************************************************
  92. delete line
  93. ******************************************************************************)
  94. VAR i:INTEGER;
  95. BEGIN
  96.     delstr:=ed_text[ln];
  97.     FOR i:=ln TO last_ln DO                  {pull everyline up one}
  98.         ed_text[i]:=ed_text[i+1];
  99.     IF ln<=last_ln THEN last_ln:=last_ln-1;  {delete one from count}
  100.     cc:=1;                                   {return to col 1}
  101.     dr_page
  102. END; {PROCEDURE ed_delln}
  103.  
  104. PROCEDURE ed_insln;
  105. (*****************************************************************************
  106. insert line
  107. ******************************************************************************)
  108. VAR i:INTEGER;
  109. BEGIN
  110.     FOR i:=last_ln DOWNTO ln DO    {bump every subsequent line down one}
  111.         ed_text[i+1]:=ed_text[i];
  112.     last_ln:=last_ln+1;
  113.     ed_text[ln]:=spaces;
  114.     cc:=1;
  115.     dr_page
  116. END; {PROCEDURE ed_insln}
  117.  
  118. PROCEDURE ed_deleol;
  119. (*****************************************************************************
  120. delete to end of line;
  121. ******************************************************************************)
  122. BEGIN
  123.     ed_text[ln]:=COPY(COPY(ed_text[ln],1,cc-1)+spaces,1,Max_Tty_Width);
  124.     GOTOXY(2,3+ln-top_ln);       {redraw just this line}
  125.     WRITE(ed_text[ln])
  126. END; {PROCEDURE ed_deleol}
  127.  
  128. PROCEDURE ed_bs;
  129. (*****************************************************************************
  130. process a backspace
  131. ******************************************************************************)
  132. VAR i,j:INTEGER;
  133. BEGIN
  134.     IF (cc<>1) AND (cc<>Max_Tty_Width+1) THEN BEGIN {eol or bol?}
  135.         cc:=cc-1;                            {no}
  136.         DELETE(ed_text[ln],cc,1);
  137.         ed_text[ln]:=ed_text[ln]+' ';
  138.         GOTOXY(2,3+ln-top_ln);               {redraw this line}
  139.         WRITE(ed_text[ln])
  140.     END ELSE BEGIN                           {yes, join lines}
  141.         IF top_ln=ln THEN                    {adjust top line if neccessary}
  142.             IF top_ln>1 THEN
  143.                 top_ln:=top_ln-1;
  144.         IF ln>1 THEN BEGIN
  145.             ln:=ln-1;
  146.             i:=Max_Tty_Width;
  147.             IF ed_text[ln][i]<>' ' THEN      {prev line does not end in sp}
  148.                 tmpstr:=ed_text[ln]+ed_text[ln+1]
  149.             ELSE BEGIN
  150.                 WHILE (ed_text[ln][i]=' ') AND (i>0) DO i:=i-1;
  151.                                               {strip trailing spaces prev line}
  152.                 IF i=0 THEN BEGIN             {and add wrapped line to ti}
  153.                     tmpstr:=ed_text[ln+1];
  154.                     cc:=1
  155.                 END ELSE BEGIN
  156.                     tmpstr:=COPY(ed_text[ln],1,i)+' '+ed_text[ln+1];
  157.                     cc:=i+2
  158.                 END
  159.             END;
  160.  
  161.             FOR j:=ln+1 TO last_ln DO               {pull everyline up one}
  162.                 ed_text[j]:=ed_text[j+1];
  163.             IF ln<last_ln THEN last_ln:=last_ln-1; {delete one from count}
  164.             j:=wrapper                              {& wrap}
  165.         END;
  166.         dr_page                                     {redraw whole page}
  167.     END
  168. END; {PROCEDURE ed_bs}
  169.  
  170. PROCEDURE ed_del;
  171. (*****************************************************************************
  172. delete character
  173. ******************************************************************************)
  174. BEGIN
  175.     Delete(ed_text[ln],cc,1);            {delete char at cursor}
  176.     ed_text[ln]:=ed_text[ln]+' ';        {tack a space on eol}
  177.     GOTOXY(2,3+ln-top_ln);               {redraw just this line}
  178.     WRITE(ed_text[ln])
  179. END; {PROCEDURE ed_del}
  180.  
  181. PROCEDURE ed_zap;
  182. (*****************************************************************************
  183. clear all msg text
  184. ******************************************************************************)
  185. VAR c:CHAR;
  186.     i:INTEGER;
  187. BEGIN
  188.     GOTOXY(40,24); TextColor(Yellow); TextBackground(Black);
  189.     WRITE('Zap (delete) all text? ',#26,' ');
  190.     c:=READKEY;
  191.     IF (c='Y') or (c='y') THEN BEGIN
  192.         FOR i:=1 TO Max_Ed_Lines DO ed_text[i]:=spaces;
  193.         ln:=1; cc:=1; top_ln:=1;
  194.         dr_page
  195.     END;
  196.     TextBackground(Black); GOTOXY(40,24); CLREOL; TextBackground(Blue);
  197. END; {PROCEDURE ed_zap}
  198.  
  199. PROCEDURE ed_ins;
  200. (*****************************************************************************
  201. toggle insert mode
  202. ******************************************************************************)
  203. BEGIN                          {insert}
  204.     GOTOXY(11,24);
  205.     IF Ins_Mode THEN BEGIN
  206.         Ins_Mode:=FALSE;
  207.         WRITE('Overwrite')
  208.     END ELSE BEGIN
  209.         Ins_Mode:=TRUE;
  210.         WRITE('Insert   ')
  211.     END
  212. END; {PROCEDURE ed_ins}
  213.  
  214. PROCEDURE ed_find;
  215. (*****************************************************************************
  216. find a char string
  217. ******************************************************************************)
  218. VAR stng:STRING[20];
  219.     i,p:INTEGER;
  220.     found:BOOLEAN;
  221.     c:CHAR;
  222. BEGIN
  223.     GOTOXY(40,24); TextColor(Yellow); TextBackground(Black);
  224.     WRITE('Find String ',#26,'');
  225.     READLN(stng);
  226.     FOR i:=1 TO LENGTH(stng) DO stng[i]:=UPCASE(stng[i]);
  227.     i:=ln;
  228.     found:=FALSE;
  229.     WHILE (i<last_ln) AND NOT found DO BEGIN
  230.         p:=POS(stng,ed_text[i]);
  231.         IF p=0 THEN
  232.             i:=i+1
  233.         ELSE BEGIN
  234.             ln:=i;
  235.             cc:=p;
  236.             found:=TRUE;
  237.             IF (ln<top_ln) OR (ln>top_ln+Ln_Pg-1) THEN BEGIN
  238.                 top_ln:=ln;
  239.                 dr_page
  240.             END
  241.         END
  242.     END;
  243.     IF NOT found THEN BEGIN
  244.         GOTOXY(40,24);
  245.         WRITE('Not Found, strike any key ...');
  246.         c:=READKEY;
  247.     END;
  248.     TextBackground(Black); GOTOXY(40,24); ClrEol; TextBackground(Blue);
  249. END; {PROCEDURE ed_find}
  250.  
  251.  
  252. PROCEDURE ed_abort;
  253. (*****************************************************************************
  254. save editor file and abort?
  255. ******************************************************************************)
  256. LABEL loop;
  257. BEGIN
  258. loop:
  259.     TextColor(LightGreen); TextBackground(Black); clrscr;
  260.     WRITELN('Program abort requested, do you want to save message text?');
  261.     WRITELN; TextColor(LightCyan);
  262.     WRITE('     Options:  ');
  263.     TextColor(LightRed); WRITE('Y   ');
  264.     TextColor(Cyan); WRITELN(#26,' Yes, save to a file and then abort to DOS');
  265.     TextColor(LightRed); WRITE('               N   ');
  266.     TextColor(Cyan); WRITELN(#26,' No, discard message text and abort to DOS');
  267.     TextColor(LightRed); WRITE('             <esc> ');
  268.     TextColor(Cyan); WRITELN(#26,' Do not abort and return to mini-editor');
  269.     TextColor(LightRed); WRITE('               ?   ');
  270.     TextColor(Cyan); WRITELN(#26,' Help!  Explain this to me');
  271.     WRITELN;
  272.     TextColor(Yellow); WRITE('Waiting '); TextColor(Cyan);
  273.     c:=READKEY;
  274.     WRITELN;
  275.     CASE c OF
  276.     '?'     : BEGIN
  277.                   help_msg('edabort');
  278.                   clrscr;
  279.                   GOTO loop;
  280.               END;
  281.     'Y','y' : BEGIN
  282.                   savefile;
  283.                   WRITELN;
  284.                   WRITELN('TTYPRT halted.');
  285.                   HALT
  286.               END;
  287.     'N','n' : BEGIN
  288.                   WRITELN;
  289.                   WRITELN('TTYPRT halted.');
  290.                   HALT
  291.               END
  292.     { ELSE      anything other than Y or N, return to editor}
  293.     END {case}
  294. END; {PROCEDURE ed_abort}
  295.  
  296. PROCEDURE ed_help;
  297. (*****************************************************************************
  298. displays an help screen for the mini editor
  299. ******************************************************************************)
  300. BEGIN
  301.     TextBackGround(Black); clrscr;
  302.     TextColor(Yellow); WRITELN('             <F1>  TTY Print!  Mini-Editor Help screen');
  303.     TextColor(Cyan); WRITELN;
  304.     TextColor(LightRed); WRITE('      ',#24,', ',#27,', ',#25,', ',#26);
  305.     TextColor(Cyan); WRITELN('   Arrow keys move one space in the appropriate direction');
  306.     WRITELN;
  307.     TextColor(LightRed); WRITE('     <PgUp>,<PgDn> ');
  308.     TextColor(Cyan); WRITELN('Move one screen up or down');
  309.     TextColor(LightRed); WRITE('     <Home>,<End>  ');
  310.     TextColor(Cyan); WRITELN('Move to top or bottom of screen');
  311.     TextColor(LightRed); WRITE('<Ctrl-Home>,<Ctrl-End>  ');
  312.     TextColor(Cyan); WRITELN('Move to top or bottom of message');
  313.     WRITELN;
  314.     TextColor(LightRed); WRITE('            <F10>  ');
  315.     TextColor(Cyan); WRITELN('To save entries and continue to header info input');
  316.     TextColor(LightRed); WRITE('          <Alt-X>  ');
  317.     TextColor(Cyan); WRITELN('Discard all input and exit program');
  318.     TextColor(LightRed); WRITE('          <Alt-Z>  ');
  319.     TextColor(Cyan); WRITELN('Zap (clear) all text (confirmation required)');
  320.     WRITELN;
  321.     TextColor(LightRed); WRITE('   <Ins> ');
  322.     TextColor(Cyan); WRITE('Toggle insert/overwrite mode   ');
  323.     TextColor(LightRed); WRITE('<F5>  ');
  324.     TextColor(Cyan); WRITELN('Save entries in a file (also ^W)');
  325.     TextColor(LightRed); WRITE('   <Del> ');
  326.     TextColor(Cyan); WRITE('Delete character at cursor     ');
  327.     TextColor(LightRed); WRITE('<F6>  ');
  328.     TextColor(Cyan); WRITELN('Read (insert) text from a file');
  329.     WRITELN;
  330.     TextColor(LightRed); WRITE('         <F7>     ');
  331.     TextColor(Cyan); WRITELN('Delete line, move all subsequent lines up');
  332.     TextColor(LightRed); WRITE('         <F8>     ');
  333.     TextColor(Cyan); WRITELN('Insert blank line at cursor, push subsequent lines down');
  334.     TextColor(LightRed); WRITE('         <F9>     ');
  335.     TextColor(Cyan); WRITELN('Recall last deleted line, insert at cursor location');
  336.     WRITELN;
  337.     TextColor(LightRed); WRITE('       <Enter>    ');
  338.     TextColor(Cyan); WRITELN('Move to column 1 on next line, break lines if mode=Insert');
  339.     TextColor(LightRed); WRITE('        <Tab>     ');
  340.     TextColor(Cyan); WRITELN('Move to column 15 (where addresses should start)');
  341.     TextColor(LightRed); WRITE('       <BckSp>    ');
  342.     TextColor(Cyan); WRITELN('Destructive BackSpace (join lines if at column 1)');
  343.     WRITELN;
  344.     WRITELN('In addition, many WordStar Ctrl-keys may be used.  See documentation for list');
  345.     TextColor(Yellow); WRITE('                  Strike a "?" for more help, or any other key to continue ...');
  346.     c:=READKEY;
  347.     IF c='?' THEN
  348.         help_msg('edhelp');    {more help}
  349.     dr_frame; dr_page          {draw screen}
  350. END; {PROCEDURE ed_help}
  351.