Macro: REPORT

Module location: FMAC line 2943 (view source)

not updated for File_number vs recnum support. This should not be used with VDF. See Enter command for notes

  #CHECK !1.RECNUM _UVCWGL
  INTEGER RECCOUNT
  #SET P$ 0
  //          MOVEINT 20000 TO LINECOUNT  // start with a full page
  !A [] $82 |CI20000 |VI10
  //          MOVE 0 TO RECCOUNT
  !A [] $82 |CI0 RECCOUNT
  //          BREAKINIT           // init breakpoints
  !A [] $207
  //          INDICATE FIRSTREC TRUE      // used for subtotals
  #IFDEF FIRSTREC
  #ELSE
    #REPLACE FIRSTREC |!C
  #ENDIF
  !A [] $4028 |CI0 |CI0 FIRSTREC~
  #IFSAME !2 BY
    FIND GE !1 BY !3          // FIND first record
  #ELSE
    FIND LE !1 BY !3
  #ENDIF
  [~FOUND] GOTO END$OF$REPORT
  //          CLEARSCREEN         // start with a clear screen
  !A [] $144
  RPT.LOOP://   INDICATE SELECT TRUE      // default for SELECT
  #IFDEF SELECT
  #ELSE
    #REPLACE SELECT |!C
  #ENDIF
  !A [] $4028 |CI0 |CI0 SELECT~
  //          GOSUB RPT.SELECTION     // go to user selection
  !A [] $42 |CL0
  #FREF RPT.SELECTION !a
  //[NOT SELECT] GOTO RPT.CONT        // test SELECT
  !A [~ SELECT] $41 |CL0
  #FREF RPT.CONT !a
  BREAK$ !5 !6 !7 !8 !9       // set breakpoints
  #SET X$ !p                  // set up to break down
  [NOT FIRSTREC] BREAK$DOWN RPT.SUBTOTAL  // break down for SUBTOTAL
  #SET X$ 0               // set up to break up
  //          RELATE !1           // get related records
  !A [] $C4 !1.RECNUM
  BREAK$UP RPT.SUBHEADER      // break up for SUBHEADER
  //          INCREMENT RECCOUNT
  !A [] $083 RECCOUNT |CI0
  //          GOSUB RPT.BODY          // print body
  !A [] $42 |CL0
  #FREF RPT.BODY !a
  //          INDICATE FIRSTREC FALSE     // not first any more
  !A [] $4028 |CI0 |CI0 FIRSTREC
  RPT.CONT:
  #IFSAME !2 BY
    FIND GT !1 BY !3          // FIND next record
  #ELSE
    FIND LT !1 BY !3
  #ENDIF
  //          KEYCHECK            // check keyboard
  !A [] $46
  //[FOUND NOT KEYPRESS] GOTO RPT.LOOP    // if ok, loop
  !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
  //[KEYPRESS]  GOSUB RPT.KEYPRESS    // user can disable KEYPRESS
  !A [FOUND KEYPRESS]   $42 |CL0
  #FREF RPT.KEYPRESS !a
  !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
  #SET X$ !p                  // set up for break down
  END.OF.REPORT:
  [~ FIRSTREC]  BREAK$DOWN RPT.SUBTOTAL $X    // break down for last subtotals
  //[FIRSTREC]  GOSUB RPT.TOTAL       // print TOTAL
  !A [~ FIRSTREC] $42 |CL0
  #FREF RPT.TOTAL !a
  //          GOTO END$OF$REPORT      // GOTO end
  !A [] $41 |CL0
  #FREF END$OF$REPORT !a
  NEWPAGE://    GOSUB RPT.HEADER      // new page, print HEADER
  !A [] $42 |CL0
  #FREF RPT.HEADER !a
  #SET X$ 0    // this will reprint the page headers if included //
  [NOT FIRSTREC] BREAK$PRT SUBHEADER      // reprint pages
  //          RETURN              // end of NEWPAGE
  !A [] $43 |CI0
  RPT.SELECTION:              // selection starts after REPORT