home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / pibterm / pibt41s1.arc / HANDLEHT.MOD < prev    next >
Text File  |  1988-01-26  |  2KB  |  74 lines

  1. (*----------------------------------------------------------------------*)
  2. (*            Handle_Tab --- Process horizontal tab sequence            *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. PROCEDURE Handle_Tab( VAR Tabs : Tab_Stop_Vector; NTabs : INTEGER );
  6.  
  7. (*----------------------------------------------------------------------*)
  8. (*                                                                      *)
  9. (*     Procedure:  Handle_Tab                                           *)
  10. (*                                                                      *)
  11. (*     Purpose:    Handle horizontal tab character for VT52, VT100.     *)
  12. (*                                                                      *)
  13. (*     Calling Sequence:                                                *)
  14. (*                                                                      *)
  15. (*        Handle_Tab( VAR Tabs : Tab_Stop_Vector; NTabs : INTEGER );    *)
  16. (*                                                                      *)
  17. (*----------------------------------------------------------------------*)
  18.  
  19. VAR
  20.    Curcol : INTEGER;
  21.    ITab   : INTEGER;
  22.    TabCol : INTEGER;
  23.  
  24. BEGIN (* Handle_Tab *)
  25.  
  26.    Curcol := WhereX;
  27.  
  28.    IF ( Curcol > Wrap_Screen_Col ) THEN
  29.       Curcol := Wrap_Screen_Col;
  30.  
  31.    IF ( NTabs > 0 ) THEN
  32.       BEGIN
  33.  
  34.          ITab   := 1;
  35.  
  36.          WHILE ( ( ITab <= NTabs ) AND
  37.                  ( Curcol >= Tabs[ITab] ) ) DO
  38.             INC( ITab );
  39.  
  40.          IF ( ITab <= NTabs ) THEN
  41.             TabCol := Tabs[ITab]
  42.          ELSE
  43.             TabCol := Wrap_Screen_Col;
  44.  
  45.       END
  46.    ELSE
  47.       TabCol := Curcol;
  48.  
  49.    IF Double_Width_Mode THEN
  50.       BEGIN
  51.          TabCol := PRED( TabCol * 2 );
  52.          IF ( TabCol > Wrap_Screen_Col ) THEN
  53.             CASE ODD( Wrap_Screen_Col ) OF
  54.                TRUE : TabCol := Wrap_Screen_Col;
  55.                FALSE: TabCol := PRED( Wrap_Screen_Col );
  56.             END (* CASE *);
  57.       END;
  58.  
  59.    MoveToXY( TabCol , WhereY );
  60.  
  61.    IF Review_On THEN
  62.       FOR ITab := CurCol TO ( TabCol - 1 ) DO
  63.          IF ( LENGTH( Review_Line ) < Max_Review_Line_Length ) THEN
  64.             Review_Line := Review_Line + ' ';
  65.  
  66.    IF ( Capture_On AND Exact_Capture ) THEN
  67.       Capture_Char( CHR( HT ) );
  68.  
  69.    IF Printer_On THEN
  70.       FOR ITab := CurCol TO ( TabCol - 1 ) DO
  71.          Write_Prt( ' ' );
  72.  
  73. END   (* Handle_Tab *);
  74.