DEFINITION MODULE Reports;      (*$VER 0.9(101)*)

(* ----------------------------------------------------------------------
               Copyright 1988 (c) by Highlander Software Group.
                           All Rights Reserved

  Title:       Report Library Module Definition Module

  Purpose:     This library module defines the Report ADT, or object,
               and a set of procedures for manipulating reports. All
               of the functions required for crearting, formating and
               disposing of report objects are provided.

  History: 0.9 100 10/01/88 MTM Original version.
               101 11/14/88 MTM Added NewLine & NoBreakBar constant.
  ---------------------------------------------------------------------- *)

                 (*--- LIBRARY IMPORT DEFINITIONS ---*)

FROM SYSTEM IMPORT
       ADDRESS;        (* Address TYPE - requires 4 bytes *)


                   (*--- CONSTANT DEFINITIONS ---*)

CONST

 NewLine = 0;

 Total = 1; Average = 2; Maximum = 3; Minimum  = 4; Count     = 5;
 Right = 6; Left    = 7; Center  = 8; ZeroFill = 9; BlankFill = 10;

 NoBreakBar = 15;

                     (*--- TYPE DEFINITIONS ---*)

TYPE

 Report;       (* Report Abstract Data Type *)


 DataType      = (String,Float,Binary,Cardinal,LongCard,Integer,LongInt,
                  Real,LongReal,Char,Boolean,Date,Time,MMDDYY,YYMMDD);


                    (*--- PROCEDURE DEFINITIONS ---*)

(*+----------------------------------------------------------------------+
 |                                                                      |
 |  Procedure: OpenReport                                               |
 |                                                                      |
 |    Purpose: The OpenReport procedure creates a `Report-Object'       |
 |             and stores its specifications. This procedure may        |
 |             be executed any number of times. Each execution          |
 |             creates a new and seperate `Report-Object'. The          |
 |             parameter `rep' represents the report just opened.       |
 |             All of the other procedures in this library require      |
 |             this parameter to determine which report is being        |
 |             processed.                                               |
 |                                                                      |
 |      Usage: VAR                                                      |
 |               cuslist: Report;                                       |
 |               result:  CARDINAL;                                     |
 |             BEGIN                                                    |
 |               OpenReport(cuslist,"Customer List","LASER",            |
 |                          "CUSTMR.LST",2,TRUE,"GRNBAR",80,66,         |
 |                          2,result);                                  |
 |                                                                      |
 |    Results: 0 = Successful completion.                               |
 |             1 = Unable to open text stream for report output.        |
 |                                                                      |
 |    Remarks: All null printer name will bypass spooling report.       |
 |                                                                      |
 +----------------------------------------------------------------------+*)


PROCEDURE OpenReport(                   (* Open Report for processing     *)
                                       (*-----------Parameters-----------*)
       VAR rep:        Report;         (* Report ADT                     *)
           title:      ARRAY OF CHAR;  (* Title for report               *)
           printer:    ARRAY OF CHAR;  (* Printer to spool output to     *)
           name:       ARRAY OF CHAR;  (* Name of disk file for output   *)
           copies:     CARDINAL;       (* Number of copies of report     *)
           delete:     BOOLEAN;        (* Delete disk file after spool   *)
           form:       ARRAY OF CHAR;  (* Form name for report           *)
           linewidth:  CARDINAL;       (* Width of report line           *)
           lineperpg:  CARDINAL;       (* Number of lines per page       *)
           colgap:     CARDINAL;       (* Inter column spacing           *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

(*+----------------------------------------------------------------------+
 |                                                                      |
 |  Procedure: CloseReport                                              |
 |                                                                      |
 |    Purpose: The CloseReport procedure terminates processing for      |
 |             specified `Report-Object', closes the output text        |
 |             file, spools the file to a printer and destroys the      |
 |             `Report-Object'.                                         |
 |                                                                      |
 |      Usage: VAR                                                      |
 |               cuslist: Report;                                       |
 |               result:  CARDINAL;                                     |
 |             BEGIN                                                    |
 |               CloseReport(cuslist,result);                           |
 |                                                                      |
 |    Results: 0 = Successful completion.                               |
 |             # = Unable to close text stream for report output.       |
 |                                                                      |
 |    Remarks: None                                                     |
 |                                                                      |
 +----------------------------------------------------------------------+*)

PROCEDURE CloseReport(                  (* Close Report & spool output    *)
                                       (*-----------Parameters-----------*)
       VAR rep:        Report;         (* Report ADT                     *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE DefineHeader(                 (* Add line of text to report Hdr *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           text:       ARRAY OF CHAR;  (* Text line for header display   *)
           options:    BITSET;         (* Display options for text       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE ClearHeader(                  (* Clear all header text for Rpt. *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE DefineLegend(                 (* Add line of text to Rpt Legend *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           text:       ARRAY OF CHAR;  (* Text line for legend display   *)
           options:    BITSET;         (* Display options for text       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE ClearLegend(                  (* Clear all legend text from Rpt *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE DefineTrailer(                (* Add line of text to Rpr Trailer*)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           text:       ARRAY OF CHAR;  (* Text line for report tariler   *)
           options:    BITSET;         (* Display options for text       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE ClearTrailer(                 (* Clear all trailer text from Rpt*)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE PrintLine(                    (* Include give line into report  *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           line:       ARRAY OF CHAR;  (* Line of output for report      *)
           options:    BITSET;         (* Display options for line       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE DefineColumn(                 (* Define column for report       *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           addr:       ADDRESS;        (* Address of column variable     *)
           type:       DataType;       (* Data type of column variable   *)
           width:      CARDINAL;       (* Width of column in report      *)
           mask:       ARRAY OF CHAR;  (* Display mask for column        *)
           title:      ARRAY OF CHAR;  (* Column header text             *)
           options:    BITSET;         (* Display/action options         *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE FormatLine(                   (* Format report line by columns  *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE FormatSubTotals(              (* Format subtotal for report     *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           title:      ARRAY OF CHAR;  (* Title for subtotal line        *)
           column:     CARDINAL;       (* Display column for title       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE FormatTotals(                 (* Format total for report        *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           title:      ARRAY OF CHAR;  (* Title for total line           *)
           column:     CARDINAL;       (* Display column for title       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
);

PROCEDURE FormatGrandTotals(            (* Format grand totals for report *)
                                       (*-----------Parameters-----------*)
           rep:        Report;         (* Report ADT                     *)
           title:      ARRAY OF CHAR;  (* Title for grand total line     *)
           column:     CARDINAL;       (* Display column for title       *)
       VAR result:     CARDINAL        (* Result returned from procedure *)
       );

PROCEDURE StartNewPage(                 (* Force start of new page on Rpt *)
                                       (*-----------Parameters-----------*)
           rep:        Report          (* Report ADT                     *)
       );

PROCEDURE EndCurrentPage(               (* Finish current page on Rpt     *)
                                       (*-----------Parameters-----------*)
           rep:        Report          (* Report ADT                     *)
       );

               (*--- END OF LIBRARY MODULE ---*)

END Reports.