*
* CONCAT: File concatination utility
*
* ?COPY.TXT 1983-2005 Dave Dunfield
* **See COPY.TXT**.
*
    ORG OSRAM
*
CONCAT  CMPA    #'?'        QUERY?
    BNE QUAL        NO, LOOK FOR QUALIFIERS
    SSR 25
    FCCZ    'Use: CONCAT[/QUIET] <destination> <source1> [<source2>] ...'
    RTS
* PARSE FOR COMMAND QUALIFIERS
QUAL    LDA ,Y      GET CHAR FROM COMMAND LINE
    CMPA    #'/'        IS IT A QUALIFIER?
    BNE MAIN        NO, CONTINUE WITH MAIN PROGRAM
    LEAX    QTABLE,PCR  POINT TO QUALIFIER TABLE
    SSR 18      LOOK IT UP
    CMPB    #QMAX       IS IT IN RANGE
    BHS QERR        IF SO, IT'S INVALID
    LEAX    QFLAGS,PCR  POINT TO QUALIFIER FLAGS
    CLR B,X     SET THE FLAG
    BRA QUAL        LOOK FOR ANOTHER QUALIFIER
QERR    SSR 24      DISPLAY MESSAGE
    FCCZ    /Invalid qualifier: '/
    LDA ,Y+     GET CHARACTER
DSQU1   SSR 33      DISPLAY
    LDA ,Y+     GET NEXT CHAR
    BEQ GOABO       NULL IS DELIMITER
    CMPA    #'/'        START OF ANOTHER QUALIFIER?
    BEQ GOABO       IF SO, QUIT
    CMPA    #' '        SPACE?
    BEQ GOABO       IF SO, QUIT
    CMPA    #$0D        END OF LINE?
    BNE DSQU1       NO, KEEP DUMPING
GOABO   SSR 25      DISPLAY MESSAGE
    FCB $27,0       CHARACTERS TO DISPLAY
    LDA #1      INVALID OPERAND RETURN CODE
    LBRA    ABORT
* OPEN OUTPUT FILE
MAIN    SSR 10      GET FILENAME
    BNE ABORT       ERROR
    LDU #OUTFIL     PT TO FILE POINTER
    SSR 56      OPEN OUTPUT FILE TO WRITE
    BNE ABORT       ERROR
* OPEN INPUT FILE
OPENIN  SSR 10
    BNE ABORT1
    LDX #RAM
    SSR 53
    BNE ABORT
    LDA #$FF
    STA ,X+     INCASE EXACTLY ONE BLOCK
* WRITE TO OUTPUT
    LDX #RAM
WR1 LDA ,X+
    BMI WR2
    TFR A,B
    SSR 61
    CMPB    #$0D
    BNE WR1
    LDD LINECT
    ADDD    #1
    STD LINECT
    BRA WR1
WR2 SSR 4
    BNE OPENIN
    LDA QUIET
    BEQ QUI1
    SSR 24
    FCCZ    'Total of '
    LDD LINECT
    SSR 26
    SSR 25
    FCCZ    ' lines written to output file.'
QUI1    CLRA
ABORT1  PSHS    A,CC
    SSR 57
    PULS    A,CC
ABORT   SSR 0
* QUALIFIER TABLE
QTABLE  FCB $82
    FCC '/QUIET'
    FCB $80     END OF TABLE
QMAX    EQU 1
* QUALIFIER FLAGS
QFLAGS  EQU *
QUIET   FCB $FF
* LOCAL RAM STORAGE
LINECT  FDB 0
OUTFIL  RMB 522     OUTPUT BUFFER
RAM EQU *
