;**********************************************************************
; RVINI.LIT
;
; Deciphered from disassembled version
;
;**********************************************************************


       SEARCH  SYS                     ;search normals
       SEARCH  SYSSYM


       VMAJOR=3.                       ;define version number
       VMINOR=1.


L0:     PHDR    -1,0,PH$REE!PH$REU      ;list a program header

       .OFINI                          ;define some variables
       .OFDEF  RETURN,4                ;return address of JMP VUE
       .OFDEF  INSTR,4                 ;instructions overwritten
       .OFSIZ  IMPSIZ

       GETIMP  IMPSIZ,A3               ;A3 points to variables




       ;First search for both VUE.LIT and REVUE.SYS in system memory
       ;
       LEA     A2,VUELIT               ;point A2 to VUE.LIT
       SRCH    @A2,A1                  ;look for VUE.LIT in RES:, A1 pointer
       BEQ     VUEOK                   ;found RES:VUE.LIT
       TYPECR  <?VUE.LIT not found in SYSTEM>
       TYPECR  <REVUE not installed!>
       MOV     #7,D1
       TTY
       EXIT
VUELIT: RAD50   /VUE   LIT/
NEWNAM: RAD50   /VUELIT/

       ;RENAME VUE.LIT to VUELIT.LIT
       ;
VUEOK:  LEA     A5,NEWNAM               ;point A5 to VUELIT name
       PUSH    A1                      ;save pointer to VUE.LIT
       SUB     #6,A1                   ;point to VUE name
       MOV     @A5,@A1                 ;rename VUE to VUELIT
       POP     A1                      ;repoint A1 to VUE

       ; Find REVUE.SYS
       ;
       LEA     A2,RVSYS                ;point A2 to REVUE.SYS
       SRCH    @A2,A2                  ;look for REVUE.SYS, A2 pointer
       BEQ     RVSOK                   ;found it
       TYPECR  <?REVUE.SYS not found in SYSTEM>
       TYPECR  <REVUE not installed!>
       MOV     #7,D1
       TTY
       EXIT
RVSYS:  RAD50   /REVUE SYS/


       ;Finally, search for RV.LIT in System Memory and rename it to VUE.LIT
       ;
RVSOK:  PUSH    A2                      ;save current pointers
       PUSH    A1
       LEA     A2,RV                   ;point A2 to RV.LIT
       SRCH    @A2,A1                  ;look for RV.LIT in RES:, A1 pointer
       BEQ     RVOK                    ;found RES:RV.LIT
       TYPECR  <?RV.LIT not found in SYSTEM>
       TYPECR  <REVUE not installed!>
       MOV     #7,D1
       TTY
       POP     A1                      ;restore pointers
       POP     A2
       EXIT
RV:     RAD50   /RV    LIT/

RVOK:   LEA     A5,VUELIT               ;point A5 to VUE.LIT name
       SUB     #6,A1                   ;point to RV name
       MOV     @A5,@A1                 ;rename RV to VUE
       POP     A1                      ;restore pointers
       POP     A2

       ;Locate the first occurance of TIN in REVUE.SYS
       ;
       CALL    FNDTIN                  ;find first TIN in REVUE.SYS (A2^)


       ;now find first occurance of TIN in VUE.LIT
       ;
VUETIN: CMPW    @A1,#120004             ;TIN?
       BEQ     10$                     ;yup
       ADD     #2,A1                   ;nope, point to next word
       BR      VUETIN                  ;and look again

       ;Overwrite TIN blah blah in VUE with JMP REVUE.SYS
       ;and then at end of routine, write JMP VUE
       ;
10$:    CALL    MOVE                    ;replace VUE TIN with JMP REVUE.SYS

       ;now find second occurance of TIN in REVUE
       ;
       CALL    FNDTIN                  ;find next occurance of TIN in REVUE

20$:    ADD     #2,A1                   ;Find next TIN in VUE.LIT
       CMPW    @A1,#120004             ;TIN?
       BNE     20$                     ;nope, still look
       CALL    MOVE                    ;yup, move in new instructions

       TYPECR  <REVUE installed>       ;let 'em know you're done
       EXIT                            ;back to dot


       ;SUBROUTINE to find occurance of TIN in REVUE.SYS
       ;
FNDTIN: CMPW    @A2,#120004             ;TIN?
       BNE     10$                     ;nope
       RTN                             ;yup, A2 points to TIN in REVUE.SYS
10$:    ADD     #2,A2                   ;point to next word
       BR      FNDTIN                  ;and look for TIN again


       ;SUBROUTINE to replace first TIN in VUE with JMP REVUE.SYS
       ;
MOVE:   MOV     A1,A4                   ;move VUE TIN address to A4
       ADD     #6,A4                   ;bypass next three instructions
       MOV     A4,RETURN(A3)           ;save return address in buffer
       MOV     2(A1),INSTR(A3)         ;save stuff after TIN in buffer
       MOVW    #47371,(A1)+            ;move JMP into TIN's place in VUE
       MOV     A2,(A1)+                ;next place address to JMP in VUE

       ;now locate first NOP in REVUE.SYS
       ;
FNDNOP: CMPW    @A2,#47161              ;look for NOP in REVUE.SYS
       BEQ     10$                     ;found a NOP
       ADD     #2,A2                   ;else point to next word
       BR      FNDNOP                  ;and look for NOP

       ;found a NOP, place overwritten instruction + JMP VUE in this location
       ;
10$:    MOV     INSTR(A3),(A2)+         ;replace instructs overwritten by JMP
       MOVW    #47371,(A2)+            ;place JMP into REVUE.SYS
       MOV     RETURN(A3),(A2)+        ;place return address after JMP
       RTN                             ;done with first replacement

       END