home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / rbsrc / rb-rept.scr < prev    next >
Text File  |  1988-05-09  |  53KB  |  1 lines

  1.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 \ Load Screen                                    18:13 04/28/88                                                                 : MARKER ;                                                      2 51 THRU 2 51 THRU                                             BSAVE OVERLAY RBREPT                                            FORGET MARKER                                                   BYE                                                                                                                                                                                             2 49 THRU                                                       SYSTEM-INIT                                                     SCR-INIT                                                        0 RBREPT                                                        \S                                                                                                                                                                                              \ Overlays                                       16:26 04/13/88                                                                 FORTH DEFINITIONS DECIMAL                                       BSTART OVERLAY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ Variables                                      11:35 03/29/88                                                                 INCLUDE FILES.DEF                                               INCLUDE FIELD.DEF                                               INCLUDE REPORT.DEF                                              INCLUDE LCGLOBAL.DEF                                                                                                            SIZEOF REPORT ITEM-ALLOT R.BUFF                                                                                                 CREATE TBUFF         132 ALLOT                                  CREATE FMT.PAD       132 ALLOT                                                                                                  VARIABLE CLINE       VARIABLE CCOL      VARIABLE ACNT                                                                           VARIABLE CCHAR       VARIABLE CPOS      VARIABLE PLINE                                                                          \ Dictionarys & Etc.                             12:55 03/29/88                                                                 DICTIONARY WRK.DCT NULL                                         DICTIONARY WRK.RPT NULL                                         DICTIONARY WRK.DAT NULL                                         HCB WRK.LAY                                                     DICTIONARY REL.DCT NULL                                         DICTIONARY REL.DAT NULL                                         DICTIONARY ALT.DCT NULL                                         DICTIONARY ALT.DAT NULL                                                                                                         CREATE  TOT.BUFF      40  ALLOT                                 CREATE  ALT.BUFF     512  ALLOT                                                                                                                                                                                                                                 \ Equates                                        11:13 05/03/88                                                                 0 EQU SIZE          0 EQU OFFSET        0 EQU HBUFF             0 EQU ?DETAIL       1 EQU ANCHOR        0 EQU S.BUFF            0 EQU cREL          0 EQU ?pause                                                                                                                                                                                                                                                                                                2VARIABLE SUMHOLD                                               2VARIABLE MINHOLD                                               2VARIABLE MAXHOLD                                                                                                                                                                                                                                                                                                               \ ?pause                                         11:24 05/03/88                                                                 08 20 4 40 WINDOW PAUSEW                                                                                                        : ?PAUSE  ?pause                                                          IF " New Page" NONE DOUBLE PAUSEW OPEN-WINDOW                      5 2 PAUSEW NOR " Insert New page in Printer ..."                WND-CSTR!                                                      10 3 PAUSEW BLN " Hit any key to PRINT" WND-CSTR!                KEY DROP                                                        PAUSEW CLOSE-WINDOW                                          THEN ;                                                                                                                                                                                                                                                                                                                \ selectors                                      13:05 04/01/88                                                                                                                                 3 3 10 35 WINDOW REPORTW                                                                                                        ' NO.COND WRK.RPT R.BUFF 0 RPT.DESCR 30 DCT-CHOICE REPORTC                                                                                                                                      0 EQU ?FILTER                     \ is a filter on              0 EQU #FILTER                                                                                                                   : D+!     ( d1 addr --- ) DUP >R 2@ D+ R> 2! ;                                                                                  : D/  ( d u --- d ) SWAP OVER /MOD >R SWAP UM/MOD SWAP DROP R> ;                                                                                                                                \ Column Definition                              13:53 04/01/88 BEGIN-ITEM COLUMN                                                     2 COLUMN COL.FOFFSET                                            1 COLUMN COL.FTYPE                                              1 COLUMN COL.FFMT                                               1 COLUMN COL.FSIZE                                              2 COLUMN COL.RFILE                                              2 COLUMN COL.RFLD                                               2 COLUMN COL.ROFFSET                                            1 COLUMN COL.RTYPE                                              1 COLUMN COL.RSIZE                                              1 COLUMN COL.LS                                                 1 COLUMN COL.SIZE                                               1 COLUMN COL.JUST                                               1 COLUMN COL.?TOT                                         END-ITEM                                                        \ column maintenance                             16:46 03/29/88                                                                 CREATE COL.BUFF  SIZEOF COLUMN 20 * ALLOT                                                                                       VARIABLE #COLS                                                                                                                  : 'COL   ( #col --- offset )                                             SIZEOF COLUMN * COL.BUFF + ;                                                                                           : 'CCOL  ( --- )                                                         #COLS @ 'COL ;                                                                                                         VARIABLE CSPACES                                                                                                                VARIABLE #LINES                                                                                                                 \ !line & @line                                  14:43 03/28/88                                                                                                                                 : !LINE          ( --- ) DS0 TBUFF S.BUFF                                        CLINE @ R.BUFF RPT.#COLS C@ DUP >R *                            R> CMOVEL ;                                                                                                    : @LINE          ( --- ) S.BUFF CLINE @ R.BUFF RPT.#COLS C@                      DUP >R * DS0 TBUFF R> CMOVEL ;                                                                                 : .LINE          ( --- ) 1 ?XY NIP                                               FULLW NOR R.BUFF RPT.#COLS C@ 1- TBUFF WND-STR!                 ;                                                                                                              : ADD-LS     FLD.BUFF FLD.MS/LS @ 256 MOD 'CCOL COL.LS C! ;                                                                     \ Display                                        14:28 05/02/88                                                                 VARIABLE page#                                                                                                                  06 07 07 45 WINDOW STATW                                                                                                                                                                        : .STAT    2 4 STATW NOR " Printing Line ## of Page" WND-CSTR!            16 4 STATW HIL PLINE @ 0 <# # # #> SWAP WND-STR!                27 4 STATW HIL page# @ 0 <# #S #> SWAP WND-STR! ;                                                                                                                                                                                                                                                                                                                                                                                                     \ pointer maintenance                            10:41 03/31/88                                                                                                                                 : formf       R.BUFF RPT.#LINES C@ PLINE @ - 0                                ?DO CR LOOP 1 page# +! ?PAUSE ;                                                                                   : PLINE++     1 PLINE +! .STAT                                                PLINE @ R.BUFF RPT.#LINES C@ =                                  IF formf PLINE OFF THEN ;                                                                                         : PRT-CHAR    ( char --- )                                                    EMIT CCHAR @ R.BUFF RPT.#COLS C@ =                              IF CR CCHAR OFF CPOS ON 1 CLINE +! @LINE PLINE++                ELSE 1 CCHAR +!                                                 THEN ;                                                                                                            \ match-record                                   09:09 04/01/88                                                                                                                                 : <rec-cmp>  WRK.BUFF cREL + @ ALT.DAT D.LST-READ @ = ;                                                                                                                                         : REC-CMP    ?DETAIL IF <rec-cmp> ELSE NO.COND THEN ;                                                                                                                                           : new-cmp    ALT.BUFF cREL + @ WRK.DAT D.LST-READ @ = ;                                                                         : SUM-CMP    ?DETAIL IF new-cmp ELSE NO.COND THEN ;                                                                                                                                                                                                                                                                             \ find-field                                     14:41 03/29/88                                                                 : CMP-FLD  TBUFF OFFSET + HBUFF FLD.NLEN C@ DUP >R 2DUP                    MAKEUC HBUFF FLD.NAME R> 2DUP MAKEUC STRCMP                     0= ;                                                                                                                 : FIND-FIELD  WRK.DCT OPEN-DICTIONARY -1 WRK.DCT D.LST-READ !                 FLD.BUFF EQU HBUFF                                              ['] CMP-FLD FLD.BUFF WRK.DCT NXT-ITEM                           WRK.DCT CLOSE-DICTIONARY ;                                                                                                                                                                                                                                                                                                                                                                                                                        \ rel-field                                      14:29 03/30/88                                                                 : REL-FIELD   REL.DCT OPEN-DICTIONARY -1 REL.DCT D.LST-READ !                 TBUFF CPOS @ +                                                  80 ASCII [ SCAN DROP TBUFF - EQU OFFSET                         FLD.BUFF EQU HBUFF                                              OFFSET 1+ EQU OFFSET                                            ['] CMP-FLD FLD.BUFF REL.DCT NXT-ITEM                           REL.DCT CLOSE-DICTIONARY ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ res-flds                                         13:23 03/30/8                                                                CREATE FTYPES 0 C, 1 C, 1 C, 4 C, 2 C, 0 C, 3 C, 0 C, 0 C,                                                                      : RES-FLD  0= IF FLD.BUFF FLD.OFFSET @ 'CCOL COL.FOFFSET !                       FLD.BUFF FLD.TYPE C@ FTYPES + C@ DUP                            'CCOL COL.FTYPE C! 1 = IF ADD-LS THEN                           FLD.BUFF FLD.LENGTH C@ 'CCOL COL.FSIZE C!                       FLD.BUFF FLD.TYPE C@ 3 =                                        IF REL.DCT FLD.BUFF FLD.RELATION @ DUP 'CCOL                       COL.RFILE ! NAME>DCT REL-FIELD 0=                               IF REL.DCT D.LST-READ @ 'CCOL COL.RFLD !                           FLD.BUFF FLD.TYPE C@ 'CCOL COL.RTYPE C!     ADD-LS              FLD.BUFF FLD.OFFSET @ 'CCOL COL.ROFFSET !   FLD.BUFF FLD.LENGTH C@ 'CCOL COL.RSIZE C! -1 ELSE 0 THEN                      ELSE -1 THEN ELSE 0 THEN ;                     \ parse-line                                     13:36 03/29/88                                                                 : PARSE-LINE  'CCOL SIZEOF COLUMN ERASE                                       TBUFF 80 ASCII , SCAN OVER TBUFF -                              TBUFF SWAP STRPCK NUMBER? 2DROP                                 'CCOL COL.SIZE C! DROP 1+ DUP C@ TOUPPER                        ASCII R = ABS 'CCOL COL.JUST  C!                                2+ DUP C@ TOUPPER 'CCOL COL.?TOT C!                             2+ TBUFF - EQU OFFSET FIND-FIELD                                RES-FLD IF 1 #COLS +! THEN ;                                                                                                                                                                                                                                                                                                                                                                                                                      \ columns                                        16:27 04/22/88                                                                                                                                 : @COLUMNS   #COLS OFF @LINE                                                 COL.BUFF SIZEOF COLUMN 20 * ERASE                               BEGIN TBUFF 80 MAKEUC                                             TBUFF 80 " @ENDLINE" COUNT STRNDX                               -1 =                                                          WHILE                                                             PARSE-LINE                                                      1 CLINE +! @LINE                                              REPEAT ;                                                                                                                                                                                                                                                                                                           \ fmt-text                                       10:24 03/30/88                                                                 : fmt-text      ( csize fsize offset buff --- )                                 + FMT.PAD CSPACES @ + 2SWAP OVER                                CSPACES +! MIN CMOVE ;                                                                                          : FMT-TEXT      ( #col --- )                                                    DUP 'COL COL.SIZE C@ SWAP DUP 'COL COL.FSIZE C@                 SWAP 'COL COL.FOFFSET @ WRK.BUFF fmt-text ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                     \ fmt-num                                        16:39 03/30/88                                                                 : fmt-num       ( csize t/f #decs offset buff --- )                             + 2@ ROT <#NUM#> ROT CSPACES @ SWAP                             IF 3 PICK + OVER 1- - THEN                                      FMT.PAD + SWAP 3 ROLL DUP CSPACES +!                            MAX CMOVE ;                                                                                                     : FMT-NUMM   DUP 'COL COL.SIZE C@ SWAP DUP 'COL COL.JUST C@                  SWAP DUP 'COL COL.LS C@ SWAP DUP 'COL COL.FOFFSET @             SWAP DUP 'COL COL.?TOT C@ ASCII N <>                            IF 4 * TOT.BUFF + >R DUP WRK.BUFF + 2@ R> D+!                   ELSE DROP THEN                                                  WRK.BUFF fmt-num ;                                                                                                                                                                 \ fmt-date                                       11:23 03/30/88                                                                                                                                 : FMT-DAT   ( col --- ) >R WRK.BUFF R@ 'COL COL.FOFFSET @ +                 2@ SWAP 100 /MOD DROP SWAP 256 /MOD 100 * + 100 UM*             ROT 0 D+ <# # # 47 HOLD # # 47 HOLD # # #> CSPACES              @ R@ 'COL COL.JUST C@ IF R@ 'COL COL.SIZE C@ + OVER             - THEN FMT.PAD + SWAP R> 'COL COL.SIZE C@ DUP                   CSPACES +! MIN CMOVE ;                                                                                              : FMT-YN    ( col --- ) >R WRK.BUFF R@ 'COL COL.FOFFSET @ + C@              3 * " No Yes" 1+ + 3 CSPACES @ R@ 'COL COL.JUST C@              IF R@ 'COL COL.SIZE C@ + OVER - THEN FMT.PAD + SWAP             R> 'COL COL.SIZE C@ DUP CSPACES +! MIN CMOVE ;                                                                                                                                      \ relationship formats                           08:43 03/31/88                                                                                                                                 : RFMT-TEXT ( col --- ) >R                                                  R@ 'COL COL.SIZE C@ R@ 'COL COL.RSIZE C@                        R> 'COL COL.ROFFSET @ SEL.BUFF fmt-text ;                                                                                                                                           : RFMT-NUM  ( col --- ) DUP                                                 'COL COL.SIZE C@ SWAP DUP 'COL COL.JUST C@                      SWAP DUP 'COL COL.LS C@ SWAP DUP 'COL COL.ROFFSET @             SWAP DUP 'COL COL.?TOT C@ ASCII N <>                            IF 4 * TOT.BUFF + >R DUP SEL.BUFF + 2@ R> D+!                   ELSE DROP THEN                                                  SEL.BUFF fmt-num ;                                                                                                  \ fmt-rel                                        13:38 03/30/88                                                                 : FMT-REL  ( col --- ) DUP >R                                              'COL COL.RFILE @ REL.DAT SWAP NAME>DAT                          REL.DAT OPEN-DICTIONARY                                         SEL.BUFF WRK.BUFF R@ 'COL COL.FOFFSET @ + @ REL.DAT             DICT-READ REL.DAT CLOSE-DICTIONARY                              R> DUP 'COL COL.RTYPE C@                                        CASE                                                              0 OF RFMT-TEXT ENDOF                                            1 OF RFMT-NUM  ENDOF                                            7 OF RFMT-TEXT ENDOF                                          ENDCASE ;                                                                                                                                                                                                                                            \ fmt-line                                                                                                                      : fmt-line     FMT.PAD 132 BLANK CSPACES OFF                                   #COLS @ 0 ?DO                                                     I 'COL COL.FTYPE C@                                             CASE                                                              0 OF I FMT-TEXT ENDOF                                           1 OF I FMT-NUMM ENDOF                                           2 OF I FMT-DAT  ENDOF                                           3 OF I FMT-YN   ENDOF                                           4 OF I FMT-REL  ENDOF                                         ENDCASE 32 FMT.PAD CSPACES @ + C! 1 CSPACES +!                LOOP     ;                                                                                                       : FMT-LINE     fmt-line CR FMT.PAD CSPACES @ TYPE                              PLINE++ ;                                        \ totals                                         12:15 04/04/88                                                                 : TOTALS  ( --- ) FMT.PAD 132 BLANK                                       0 #COLS @ 0 ?DO I 'COL COL.?TOT C@ ASCII N <>                                   IF DROP -1 LEAVE THEN LOOP                      IF CSPACES OFF CR                                                 #COLS @ 0                                                       ?DO I 'COL COL.?TOT C@ DUP ASCII N <> IF                            ASCII A = IF I 4 * TOT.BUFF + 2@ #LINES @ D/                                 I 4 * TOT.BUFF + 2! THEN                           I 'COL DUP COL.SIZE C@ SWAP DUP COL.JUST C@                     SWAP COL.LS C@ I 4 * TOT.BUFF fmt-num                           ELSE DUP I 'COL COL.SIZE C@ CSPACES +! THEN                     1 CSPACES +! LOOP                                           CR FMT.PAD R.BUFF RPT.#COLS C@ TYPE PLINE++                   THEN ;                                                \ @do-line                                       14:15 03/31/88                                                                                                                                 : @DO-LINE  1 CLINE +! @COLUMNS TOT.BUFF 40 ERASE #LINES OFF                -1 WRK.DAT D.LST-READ !                                         BEGIN ['] REC-CMP WRK.BUFF WRK.DAT NXT-ITEM 0=                   WHILE WRK.BUFF ?ACTIVE IF FMT-LINE 1 #LINES +! THEN            REPEAT TOTALS                                                   #COLS OFF CCHAR OFF 1 CLINE +! @LINE                            CPOS ON ?DETAIL IF 0 EQU ?DETAIL                                           WRK.DAT CLOSE-DICTIONARY                                        ALT.BUFF WRK.BUFF MAX_REC_SZ CMOVE                              ALT.DCT WRK.DCT 98 CMOVE                                        ALT.DAT WRK.DAT 98 CMOVE                                        WRK.DAT OPEN-DICTIONARY                                      THEN ;                                      \ filter support                                 13:19 03/23/88                                                                 INCLUDE FILTER.DEF                                                                                                              CREATE MY.BUFF  SIZEOF FILTER 15 * ALLOT                                                                                        : 'FLT.BUFF     SIZEOF FILTER * MY.BUFF + ;                                                                                     : FLT.CMP-TEXT  #FILTER 'FLT.BUFF DUP >R FLT.HOLD                               R@ FLT.SIZE @ WRK.BUFF R> FLT.OFFSET @ + OVER                   2DUP MAKEUC 2SWAP STRCMP ;                                                                                      : FLT.CMP-DNUM  #FILTER 'FLT.BUFF DUP >R FLT.HOLD 2@                            WRK.BUFF R> FLT.OFFSET @ + 2@ 2SWAP NUMCMP ;                                                                                                                                    \ compares                                       13:51 03/23/88                                                                 : LT      ( value --- t/f )                                               -1 = ;                                                : GT      ( value --- t/f )                                               1 = ;                                                 : EQ      ( value --- t/f )                                               0= ;                                                                                                                  CREATE CVECS  ] LT EQ GT [                                                                                                      : FLT.CMP-SNUM  #FILTER 'FLT.BUFF DUP >R FLT.HOLD @ 0                           WRK.BUFF R> FLT.OFFSET @ + @ 0 2SWAP NUMCMP ;                                                                   : FLT.CMP-BYTE  #FILTER 'FLT.BUFF DUP >R FLT.HOLD C@ 0                          WRK.BUFF R> FLT.OFFSET @ + C@ 0 2SWAP NUMCMP ;  \ filter compares                                08:07 03/24/88                                                                 : FLT.CMP-RELAT REL.DAT #FILTER 'FLT.BUFF FLT.RFILE# @                          DUP >R NAME>DAT REL.DCT R> NAME>DCT                             REL.DCT OPEN-DICTIONARY                                            SEL.BUFF #FILTER 'FLT.BUFF FLT.RFLD# @                          REL.DCT DICT-READ                                            REL.DCT CLOSE-DICTIONARY                                        SEL.BUFF FLD.OFFSET @ SEL.BUFF FLD.LENGTH @                     38 MIN REL.DAT OPEN-DICTIONARY                                    SEL.BUFF WRK.BUFF #FILTER 'FLT.BUFF FLT.OFFSET                  @ + @ REL.DAT DICT-READ                                       REL.DAT CLOSE-DICTIONARY                                        #FILTER 'FLT.BUFF FLT.HOLD SWAP ROT                             SEL.BUFF SWAP + OVER 2DUP MAKEUC STRCMP ;                                                                       \ <flt-cmp>                                      09:09 03/24/88                                                                 : <flt-cmp>   #FILTER 'FLT.BUFF FLT.TYPE C@                                   CASE                                                              0 OF FLT.CMP-TEXT    ENDOF                                      1 OF FLT.CMP-DNUM    ENDOF                                      3 OF FLT.CMP-RELAT   ENDOF                                      4 OF FLT.CMP-DNUM    ENDOF                                      6 OF FLT.CMP-BYTE    ENDOF                                    ENDCASE                                                         #FILTER 'FLT.BUFF FLT.OPER C@ 2* CVECS + PERFORM ;                                                                                                                                                                                                                                                                                                                                \ filter-cmp                                     13:54 03/23/88                                                                                                                                 : FILTER-CMP  ?FILTER                                                         IF -1                                                           15 0 DO                                                               I 'FLT.BUFF FLT.OFFSET @                                        IF I EQU #FILTER <flt-cmp> AND THEN                            LOOP                                                       ELSE                                                               NO.COND                                                      THEN ;                                                                                                                                                                                                                                                                                                            \ @repeat                                        15:12 03/31/88                                                                 : @FORMFEED formf PLINE OFF #COLS OFF CCHAR OFF CPOS ON                     1 CLINE +! @LINE ;                                                                                                                                                                  : @REPEAT   ['] FILTER-CMP WRK.BUFF WRK.DAT NXT-ITEM DUP                    0= IF @FORMFEED                                                       CLINE OFF @LINE                                                 CPOS ON                                                   ELSE @FORMFEED THEN ;                                                                                                                                                                                                                                                                                                                                                               \ find-dict                                      08:52 04/01/88                                                                 : cmp-dct    TBUFF OFFSET + SIZE 2DUP MAKEUC                                 LC.BUFF LC.FNAME SIZE 2DUP MAKEUC STRCMP 0= ;                                                                      : FIND-DCT   -1 LCMAIN.DCT D.LST-READ !                                      ['] cmp-dct LC.BUFF LCMAIN.DCT NXT-ITEM ;                                                                          : FIND-OFF   ( dcb --- )                                                     DUP OPEN-DICTIONARY 0 OVER D.HU @ 0 ?DO                         FLD.BUFF I 3 PICK DICT-READ                                     FLD.BUFF FLD.TYPE C@ 3 = IF                                     FLD.BUFF FLD.RELATION @ ANCHOR                                  = IF DROP FLD.BUFF FLD.OFFSET @ EQU cREL -1 LEAVE                 THEN THEN LOOP                                                SWAP CLOSE-DICTIONARY ;                            \ @detail                                        17:03 03/31/88                                                                                                                                 : @DETAIL    TBUFF 80 ASCII [ SCAN                                           DROP 1+ TBUFF - EQU OFFSET                                      TBUFF 80 ASCII ] SCAN DROP                                      TBUFF OFFSET + - EQU SIZE                                       FIND-DCT 0= IF WRK.DCT ALT.DCT 98 CMOVE                           WRK.DAT CLOSE-DICTIONARY                                        WRK.DAT ALT.DAT 98 CMOVE                                        WRK.BUFF ALT.BUFF MAX_REC_SZ CMOVE                              WRK.DCT LCMAIN.DCT D.LST-READ @ DUP >R NAME>DCT                 WRK.DAT R> NAME>DAT WRK.DAT OPEN-DICTIONARY                     WRK.DCT FIND-OFF IF 1 EQU ?DETAIL @DO-LINE THEN                 THEN ;                                                                                                           \ >num                                           14:48 04/28/88                                                                                                                                 : >NUM    ( --- ) 0                                                       BEGIN                                                             DUP TBUFF + CPOS @ + C@ ISDIGIT                               WHILE                                                             1+                                                            REPEAT                                                          ?DUP IF TBUFF CPOS @ + OVER STRPCK                                      NUMBER? 2DROP EMIT CPOS +!                                   ELSE 1 CPOS +! THEN ;                                                                                                                                                                                                                                                                                            \ pcodes                                         08:53 04/28/88                                                                                                                                 : @PCODES    7 CPOS +!                                                       BEGIN                                                              TBUFF CPOS @ + C@ ASCII ] <>                                 WHILE                                                              >NUM                                                         REPEAT ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           \ parse-link                                     14:04 05/03/88                                                                 : PARSE-LINK ( --- #file #fld t/f )                                      TBUFF CPOS @ + 10 ASCII . SCAN IF                               TBUFF CPOS @ DUP 1+ EQU OFFSET + - 1- EQU SIZE FIND-DCT         0= IF SIZE 2+ CPOS +! LCMAIN.DCT D.LST-READ @ ELSE -1              THEN  ELSE DROP 1 CPOS +! ANCHOR THEN                        DUP -1 = IF 0 0 EXIT THEN                                       ALT.DCT OVER NAME>DCT                                           CPOS @ EQU OFFSET FLD.BUFF EQU HBUFF                            ALT.DCT OPEN-DICTIONARY -1 ALT.DCT D.LST-READ !                 ['] CMP-FLD FLD.BUFF ALT.DCT NXT-ITEM                           ALT.DCT CLOSE-DICTIONARY                                        IF DROP 0 0 0 ELSE ALT.DCT D.LST-READ @ -1 THEN ;                                                                                                                                      \ calc-value                                     11:07 05/08/88                                                                                                                                 : CALC-VAL  ALT.BUFF ?ACTIVE                                                IF ALT.BUFF FLD.BUFF FLD.OFFSET @ + 2@                             1 ACNT +!                                                       2DUP SUMHOLD D+!                                                2DUP MINHOLD 2@ DMIN MINHOLD 2!                                 MAXHOLD 2@ DMAX MAXHOLD 2!                                   THEN ;                                                                                                                                                                                                                                                                                                                                                                                                                                              \ @sum                                           10:25 05/03/88 : @sum   ( --- value ) 4 CPOS +! PARSE-LINK                              0. SUMHOLD 2! 0. MAXHOLD 2! 1000000. MINHOLD 2!                 TBUFF CPOS @ + 20 ASCII ) SCAN DROP ACNT OFF                    TBUFF CPOS @ + - 1+ CPOS +!                                     FLD.BUFF ALT.BUFF 200 CMOVE                                     FLD.BUFF FLD.TYPE C@ DUP 1 = SWAP 2 = OR NOT                    IF 2DROP DROP 0. 0 THEN IF OVER ANCHOR <> IF ALT.DCT            FIND-OFF IF 1 EQU ?DETAIL ELSE 2DROP 0. EXIT THEN THEN          ALT.BUFF FLD.BUFF 200 CMOVE                                     ALT.DCT HCB>N -EXT " .DAT" +EXT ALT.DAT NAME>HCB                ALT.DAT OPEN-DICTIONARY -1 ALT.DAT D.LST-READ !                 BEGIN ['] SUM-CMP ALT.BUFF ALT.DAT NXT-ITEM 0=                  WHILE CALC-VAL REPEAT 2DROP SUMHOLD 2@                          ALT.DAT CLOSE-DICTIONARY 0 EQU ?DETAIL THEN ;                                                                          \ @sum                                           10:41 05/04/88                                                                 : @SUM     @sum FLD.BUFF FLD.MS/LS @ 256 MOD <#NUM#>                       0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                                : @AVG     @sum ACNT @ ?DUP IF D/ THEN                                     FLD.BUFF FLD.MS/LS @ 256 MOD                                    <#NUM#> 0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                        : @MIN     @sum 2DROP MINHOLD 2@ FLD.BUFF FLD.MS/LS @ 256 MOD              <#NUM#> 0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                        : @MAX     @sum 2DROP MAXHOLD 2@ FLD.BUFF FLD.MS/LS @ 256 MOD              <#NUM#> 0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                                                                                        \ @sysdate                                       16:45 04/28/88                                                                                                                                 : @SYSDATE   7 CPOS +! @DATE SWAP 100 /MOD DROP                              SWAP 256 /MOD 100 * + 100 UM* ROT 0 D+                          <# # # 47 HOLD # # 47 HOLD # # #>                               0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                                                                                              : @SYSTIME   7 CPOS +! @TIME DROP 256 /MOD TUCK DUP 12 > IF 12               MOD THEN 100 * + 0 ROT <# 12 >= IF ASCII p ELSE                 ASCII a THEN HOLD # # 58 HOLD # # #>                            0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                                                                                                                                                              \ @page                                          16:55 04/28/88                                                                                                                                 : @PAGE#         5 CPOS +!                                                       page# @ 0 <# #S #>                                              0 ?DO DUP I + C@ PRT-CHAR LOOP DROP ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ *funcs                                         10:40 03/31/88                                                                                                                                 : *FUNCS    CSPACES OFF 1 CPOS +! CPOS @ EQU OFFSET #COLS OFF               FIND-FIELD RES-FLD                                              IF FLD.BUFF FLD.LENGTH @ 3 + 0 'COL COL.SIZE C!                    1 #COLS ! fmt-line                                              0 80 0 DO FMT.PAD 80 I - + C@ ISALNUM                                  IF DROP 81 I - LEAVE THEN LOOP                           0 ?DO FMT.PAD I + C@ PRT-CHAR LOOP                              FMT.PAD 132 BLANK                                               TBUFF CPOS @ + R.BUFF RPT.#COLS C@ CPOS @ -                     ASCII * SCAN NIP R.BUFF RPT.#COLS @ SWAP -                      CPOS ! #COLS OFF                                             THEN ;                                                                                                              \ find-it                                        14:16 03/31/88                                                                                                                                 : VSTR    " LINE      ENDREPORT  FORMFEED  REPEAT   DETAIL    PCODE     SYSDATE   SYSTIME   PAGE#     SUM       AVG       MIN       MAX       " ;                                                                                                               : FIND-IT  ( str --- # )                                                   0 OVER BEGIN DUP C@ ISALNUM WHILE 1+ SWAP 1+ SWAP                      REPEAT DROP                                              VSTR COUNT 2SWAP 2DUP MAKEUC                                                     STRNDX 10 / ;                                                                                       : ?ABORT   ( --- t/f )                                                     CONSOLE ?TERMINAL IF KEY 27 = ELSE 0 THEN PRINTER ;                                                                  \ @funcs                                         17:34 03/29/88                                                                 : @FUNCS    TBUFF CPOS @ 1+ + FIND-IT                                       CASE                                                              0 OF CCHAR OFF @DO-LINE   0 ENDOF                               1 OF CCHAR OFF @FORMFEED -1 ENDOF                               2 OF CCHAR OFF @FORMFEED  0 ENDOF                               3 OF CCHAR OFF @REPEAT      ENDOF                               4 OF CCHAR OFF @DETAIL    0 ENDOF                   5 OF @PCODES  0 ENDOF     6 OF @SYSDATE 0 ENDOF                 7 OF @SYSTIME 0 ENDOF     8 OF @PAGE# 0 ENDOF                   9 OF @SUM     0 ENDOF    10 OF @AVG   0 ENDOF                  11 OF @MIN     0 ENDOF    12 OF @MAX   0 ENDOF                               0 SWAP                                                        ENDCASE ;                                                                                                           \ ?parms                                         11:29 05/03/88                                                                                                                                 : ?PARMS    2 2 STATW NOR                                                   " Do you wish to Pause after each Page?" WND-CSTR!             40 2 STATW 0 ?YES/NO NIP EQU ?pause ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ scan_DOC                                       13:20 03/29/88                                                                 : SCAN_DOC    R.BUFF RPT.DESCR 30 STRPCK NONE SINGLE STATW                    OPEN-WINDOW ?PARMS 2 6 STATW HIL -CUR                           " Hit ESC to abort printing ..." WND-CSTR!                      CLINE OFF CCHAR OFF CPOS ON @LINE ?PAUSE                        TBUFF 132 BLANK                                                 BEGIN 1 CPOS +!                                                   TBUFF CPOS @ + C@ DUP                                           CASE                                                             ASCII @ OF DROP @FUNCS ENDOF                                    ASCII * OF DROP *FUNCS 0 ENDOF                                  PRT-CHAR 0 SWAP                                                ENDCASE CLINE @ 66 = OR ?ABORT OR                             UNTIL +CUR                                                      STATW CLOSE-WINDOW ;                              \ @filters                                       14:39 04/01/88                                                                 : @FILTERS  WRK.DCT OPEN-DICTIONARY                                         MY.BUFF WRK.DCT ?FILTER " RBEFILT" BRUN RBEFILT                 FORGET OVERLAY EQU ?FILTER                                      WRK.DCT CLOSE-DICTIONARY ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ prt-report                                     13:07 04/01/88                                                                 : PRT-REPORT ( #rpt --- )  1 page# !                                         545 MALLOC EQU S.BUFF                                           WRK.LAY 2 FOPEN DROP                                            WRK.LAY 8712 ROT UM* 0 FSEEK 2DROP                              WRK.LAY S.BUFF 0 8712 FREADL DROP CLINE OFF                     WRK.LAY FCLOSE DROP                                             MY.BUFF SIZEOF FILTER 15 * ERASE                                WRK.DAT OPEN-DICTIONARY @FILTERS                                COL.BUFF SIZEOF COLUMN 20 * ERASE #COLS OFF                     TBUFF 80 BLANK -1 WRK.DAT D.LST-READ !                          ['] FILTER-CMP WRK.BUFF WRK.DAT NXT-ITEM 0=                     IF PRINTER SCAN_DOC CONSOLE THEN                                WRK.DAT CLOSE-DICTIONARY                                        S.BUFF FREE ;                                      \ reports                                        09:18 03/29/88                                                                 : RBREPT   ( #file --- )                                                   EQU ANCHOR                                                      WRK.DCT ANCHOR NAME>DCT WRK.RPT ANCHOR NAME>RPT                 WRK.DAT ANCHOR NAME>DAT                                         WRK.DCT HCB>N -EXT " .LAY" +EXT WRK.LAY NAME>HCB                " Print Report" LISTL DOUBLE REPORTW OPEN-WINDOW                WRK.RPT OPEN-DICTIONARY                                         REPORTW REPORTC DCT-CHOOSE                                      REPORTW CLOSE-WINDOW                                            ?DUP IF 1- R.BUFF OVER WRK.RPT DICT-READ                                PRT-REPORT                                                  THEN                                                       WRK.RPT CLOSE-DICTIONARY ;                                                                                            \ Excises                                        14:58 04/01/88                                                                 EXCISE SIZE OFFSET                                              EXCISE HBUFF ?DETAIL                                            EXCISE ANCHOR S.BUFF                                            EXCISE ?FILTER #FILTER                                          EXCISE cREL ?pause