home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / calculat / pibcal11.zip / READLINE.PAS < prev    next >
Pascal/Delphi Source File  |  1985-03-11  |  5KB  |  121 lines

  1. (*--------------------------------------------------------------------------*)
  2. (*                  ReadLine -- Read PibCalc command line                   *)
  3. (*--------------------------------------------------------------------------*)
  4.  
  5. PROCEDURE ReadLine;
  6.  
  7. (*--------------------------------------------------------------------------*)
  8. (*                                                                          *)
  9. (*     Procedure: ReadLine                                                  *)
  10. (*                                                                          *)
  11. (*     Purpose:   Reads PibCalc command line                                *)
  12. (*                                                                          *)
  13. (*     Calling sequence:                                                    *)
  14. (*                                                                          *)
  15. (*        ReadLine;                                                         *)
  16. (*                                                                          *)
  17. (*     Calls:                                                               *)
  18. (*                                                                          *)
  19. (*        TextColor                                                         *)
  20. (*        UpCase                                                            *)
  21. (*        COPY                                                              *)
  22. (*                                                                          *)
  23. (*     Called by:                                                           *)
  24. (*                                                                          *)
  25. (*        PibCalc (Main program)                                            *)
  26. (*                                                                          *)
  27. (*--------------------------------------------------------------------------*)
  28.  
  29. LABEL
  30.    1, 99;
  31.  
  32. VAR
  33.    c: CHAR;
  34.  
  35. BEGIN (* Readline *)
  36.  
  37.                                    (* Check if we have edited line to *)
  38.                                    (* be used as command line. If so, *)
  39.                                    (* skip command line read.         *)
  40.  
  41.    IF UseEdit THEN
  42.       BEGIN
  43.          Iline   := Oline;
  44.          UseEdit := FALSE;
  45.          Ipos    := 1;
  46.          GOTO 99;
  47.       END;
  48.  
  49.                                    (* Save previous command line      *)
  50.    Oline := Iline;
  51.                                    (* Prompt for input                *)
  52. 1: TEXTCOLOR( Prompt_Color );
  53.    WRITE('? ');
  54.    TEXTCOLOR( ForeGround_Color );
  55.  
  56.                                    (* Initialize input Iline to null  *)
  57.                                    (* Ipos used globally as current   *)
  58.                                    (* position in in Iline            *)
  59.    Ipos  := 0;
  60.    Iline := '';
  61.                                    (* Get first character in line     *)
  62.    READ( c );
  63.                                    (* Loop over input                 *)
  64.  
  65.    WHILE ( Ipos < ( Maxstrlen - 1 ) ) AND ( NOT EOLN ) DO
  66.       BEGIN
  67.                                    (* Ctrl-x is line-delete char.     *)
  68.          IF c = Ctrlx THEN
  69.             BEGIN
  70.                WRITE(' *** DELETED');
  71.                WRITELN;
  72.                GOTO 1;
  73.             END                    (* Back up in line if backspace    *)
  74.          ELSE IF ( c = bs ) OR ( c = del ) THEN
  75.             IF Ipos > 0 THEN
  76.                BEGIN
  77.                   Ipos  := Ipos - 1;
  78.                   WRITE(bs,' ',bs);
  79.                   IF Ipos > 0 THEN
  80.                      Iline := COPY( Iline, 1, Ipos )
  81.                   ELSE
  82.                      Iline := '';
  83.                END
  84.             ELSE
  85.                BEGIN
  86.                   Ipos  := 0;
  87.                   Iline := '';
  88.                END
  89.          ELSE                      (* Ordinary character -- convert to *)
  90.                                    (* upper case and append to Iline.  *)
  91.            BEGIN
  92.               Ipos  := Ipos + 1;
  93.               IF c IN ['a'..'z'] THEN c := UPCASE( c );
  94.               Iline := Iline + c;
  95.            END;
  96.                                    (* Get next character               *)
  97.          READ( c );
  98.  
  99.      END;
  100.                                    (* Add end-of-string marker COL and *)
  101.                                    (* reset Ipos to 1 = start of Iline *)
  102.    Iline := Iline + COL;
  103.    Ipos  := 1;
  104.  
  105. 99:
  106. END  (* Readline *);
  107.  
  108. (*--------------------------------------------------------------------------*)
  109. (*                 CheckEol -- Check for end-of-command-line                *)
  110. (*--------------------------------------------------------------------------*)
  111.  
  112. PROCEDURE CheckEol;
  113.  
  114. BEGIN  (* CheckEol *)
  115.  
  116.    NextTok;
  117.  
  118.    IF Token <> eolsy THEN SynErr;
  119.  
  120. END    (* CheckEol *);
  121.