;***************************************************************************;
;                                                                           ;
;                                                                           ;
;                                  VUECOM                                   ;
;                           VUE-like File Compare                           ;
;                                                                           ;
;                                                                           ;
;***************************************************************************;
;1.0 01-Nov-84 DFP written by D. Pallmann.

       VMAJOR=1

       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM
       SEARCH  CRT

       IMP=A5

       TAB=11
       LF=12
       CR=15
       ESC=33

       .OFINI
       .OFDEF  FILE1,D.DDB             ;DDB for 1st file
       .OFDEF  FILE2,D.DDB             ;DDB for 2nd file
       .OFDEF  BASE1,4                 ;base of 1st file
       .OFDEF  BASE2,4                 ;base of 2nd file
       .OFSIZ  IMPSIZ

START:  PHDR    -1,0,PH$REE!PH$REU      ;program header
       GETIMP  IMPSIZ,IMP              ;allocate impure area

CHKLIN: BYP
       LIN
       BNE     GETFLS

HELP:   TYPECR  <? usage: .VUECOM file1,file2>
       JMP     EXIT

GETFLS: FSPEC   FILE1(IMP),M68          ;load DDB w/spec
       INIT    FILE1(IMP)              ;fetch driver, allocate buffer
       FSPEC   FILE2(IMP),M68          ;load DDB w/spec
       INIT    FILE2(IMP)              ;fetch driver, allocate buffer

LOAD:   FETCH   FILE1(IMP),A4           ;load file 1
       JNE     EXIT                    ;branch on error
       MOV     A4,BASE1(IMP)           ;save base
       FETCH   FILE2(IMP),A4           ;load file 2
       JNE     EXIT                    ;branch on error
       MOV     A4,BASE2(IMP)           ;save base

SETUP:  CLS
       LOW
       TTYL    DASHES
       CRT     #12.,#1
       TTYL    DASHES
       CRT     #23.,#1
       TTYL    DASHES
       CRT     #1,#65.
       PFILE   FILE1(IMP)
       CRT     #23.,#65.
       PFILE   FILE2(IMP)
       MOV     BASE1(IMP),A4
       CLR     D5
       CRT     #2,#1
       CALL    DISPLAY
       MOV     BASE2(IMP),A4
       CLR     D5
       CRT     #13.,#1
       CALL    DISPLAY
       MOV     BASE1(IMP),A4
       CLR     D5
       JOBIDX  A0
       MOV     JOBTRM(A0),A1
       ORW     #T$IMI!T$ECS,T.STS(A1)

READY:  CMM     BASE1(IMP),A4
       BNE     10$
       CRT     #2,#1
       BR      20$
10$:    CRT     #13.,#1
20$:    KBD     EXIT

EVAL:   LEA     A0,CMDTBL
       MOV     #-2,D0
10$:    TSTB    @A0
       BEQ     READY
       ADDW    #2,D0
       CMMB    (A0)+,D1
       BNE     10$

BRANCH: MOVW    JMPTBL[~D0],D0
       JMP     JMPTBL[~D0]

CMDTBL: BYTE    'J-'@
       BYTE    'K-'@
       BYTE    'R-'@
       BYTE    'T-'@
       BYTE    TAB
       BYTE    ESC
       BYTE    0
       EVEN

JMPTBL: WORD    DOWN-JMPTBL
       WORD    UP-JMPTBL
       WORD    BACK-JMPTBL
       WORD    FWD-JMPTBL
       WORD    SWITCH-JMPTBL
       WORD    EXIT-JMPTBL

PAGE
SWITCH: CMM     BASE1(IMP),A4
       BEQ     10$
       MOV     BASE1(IMP),A4
       CRT     #2,#1
       CALL    DISPLAY
       JMP     READY
10$:    MOV     BASE2(IMP),A4
       CRT     #13.,#1
       CALL    DISPLAY
       JMP     READY

PAGE
BACK:   TST     D5
       JEQ     READY
       MOV     A4,A0
       ADD     D5,A0
       MOV     #10.,D0
10$:    DEC     D5
       BEQ     30$
       CMPB    -(A0),#LF
       BNE     10$
       SOB     D0,10$
20$:    INC     D5
30$:    CALL    DISPLAY
       JMP     READY

PAGE
FWD:    MOV     A4,A0
       ADD     D5,A0
       MOV     #10.,D2
10$:    MOV     #80.,D0
20$:    INC     D5
       CMPB    (A0)+,#LF
       BEQ     30$
       SOB     D0,20$
30$:    SOB     D2,10$
       CALL    DISPLAY
       JMP     READY

PAGE
DOWN:   MOV     A4,A0
       ADD     D5,A0
       MOV     #80.,D0
10$:    INC     D5
       CMPB    (A0)+,#LF
       BEQ     20$
       SOB     D0,10$
20$:    CALL    DISPLAY
       JMP     READY

PAGE
UP:     TST     D5
       JEQ     READY
       MOV     A4,A0
       ADD     D5,A0
       SUB     #2,A0
       SUB     #2,D5
10$:    DEC     D5
       BEQ     30$
       CMPB    -(A0),#LF
       BNE     10$
20$:    INC     D5
30$:    CALL    DISPLAY
       JMP     READY

PAGE
EXIT:   CRLF
       EXIT

DISPLAY:
       HIGH
       MOV     #CR,D1
       TTY
       MOV     #10.,D0
       MOV     A4,A0
       ADD     D5,A0
       CLR     D2
10$:    CTRLC   EXIT
       MOVB    (A0)+,D1
       CMPB    D1,#CR
       BNE     20$
       SAVE    D1
       CLREOL
       REST    D1
20$:    TTY
       INC     D2
       CMPB    D1,#LF
       BNE     30$
24$:    SOB     D0,10$
       RTN
30$:    CMPB    D1,#CR
       BNE     10$
       INC     D2
       CMPB    D2,#80.
       BEQ     24$
       BR      10$

DASHES: ASCIZ   /-------------------------------------------------------------------------------/
       EVEN

       END