home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / utility / crossref / aak_xref / prntpage.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-25  |  3KB  |  56 lines

  1. (********************************************************************)
  2. (* THIS PROCEDURE WILL PROCESS THE PAGES AND SEND ON TO OUTPUT IF   *)
  3. (* THAT PAGE IS DONE BEING PROCESSED                                *)
  4. (* INPUT        : NONE                                              *)
  5. (* INPUT/OUTPUT : First,Last,No                                     *)
  6. (* OUTPUT       : PAGE IF DONE PROCESSING                           *)
  7. (* USES         : NO SIDE EFFECTS                                   *)
  8. (* CALLS        : Print__Page,New_Line_Ptr,Delete_Page              *)
  9. (* ERRORS       : NONE                                              *)
  10. (* GLOBAL VARS  : NONE                                              *)
  11. (* SUBJECT      : PRINTER, PROCESS PAGE                             *)
  12. (* DOMAIN       : ARNO A. KARNER                      LEVEL : 002   *)
  13. (********************************************************************)
  14.  
  15. PROCEDURE Print_Page                  ( VAR First , Last : Page_Ptr ;
  16.                                         VAR No           : INTEGER ) ;
  17.  
  18. VAR
  19.    Squeezed : BOOLEAN ;
  20.    L        : Line_Ptr ;
  21.    P        : Page_Ptr ;
  22.  
  23. BEGIN (* AT LEAST ONE OR MORE PAGES PRESENT *)
  24.    { COMPRESS PAGES SWITCH }
  25.    P := First^.Next ;
  26.    IF ( 'C' IN Switches )
  27.    THEN BEGIN (* TRY TO COMPRESS THE TWO PAGES *)
  28.            IF ( First^.Next <> Last )
  29.            THEN BEGIN (* THREE OR MORE PAGES PRESENT *)
  30.                    WITH First^ DO
  31.                    BEGIN (* INSIDE FIRST PAGE REC *)
  32.                       IF ( P^.Cur_LPP + Cur_LPP + 1 < Lines_Per_Page )
  33.                       THEN BEGIN (* COMBINE FIRST TWO PAGES INTO ONE *)
  34.                               New_Line_Ptr    ( L ) ;
  35.                               Last_Line^.Next := L ;
  36.                               Last_Line       := L ;{INSERT BLANK LINE}
  37.                               Last_Line^.Next := P^.First_Line ;
  38.                               Last_Line       := P^.Last_Line ;
  39.                               Squeezed        := TRUE;
  40.                               Cur_LPP         := Cur_LPP + P^.Cur_LPP+1;
  41.                               IF Max_CPL < P^.Max_CPL
  42.                                  THEN Max_CPL := P^.Max_CPL ;
  43.                            END   (* COMBINE FIRST TWO PAGES INTO ONE *)
  44.                       ELSE BEGIN
  45.                               Print__Page ( First , Last , Page_Numb ) ;
  46.                               Squeezed := FALSE ;
  47.                            END ;
  48.                    END ; (* INSIDE FIRST PAGE REC *)
  49.                    IF squeezed THEN Delete_Page ( First , P , Last ) ;
  50.                 END ; (* THREE OR MORE PAGES PRESENT *)
  51.         END   (* TRY TO COMPRESS THE TWO PAGES *)
  52.    ELSE BEGIN (* PRINT PAGE *)
  53.            Print__Page ( First , Last , Page_Numb ) ;
  54.         END ; (* PRINT PAGE *)
  55. END ; (* TWO OR MORE PAGES PRESENT *)
  56.