;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
main2
LAUNCH      movea.l     _AbsExecBase,a6
            cmpi.w      #37,LIB_VERSION(a6)
            bcc.s       LAUNCH.05                   ;GoodVersion
            tst.l       WBreturnMsg
            bne.s       LAUNCH.01
            lea         dosname,a1                  ;Print an error message - the user doesn't have 2.0
            jsr         _LVOOldOpenLibrary(a6)
            move.l      d0,DOSlib
            beq.s       LAUNCH.01                   ;Argh!
            lea         BadKS,a3
            bsr         IRJwritethis
            movea.l     DOSlib,a1
            jsr         _LVOCloseLibrary(a6)
LAUNCH.01   move.l      #20,IRJexitcode
            rts
BadKS       dc.b        'Sorry, ImagineRequesterJester requires Kickstart 2.0!',$a,0,0
;-----------
LAUNCH.05   clr.l       d0
            lea         dosname,a1
            jsr         _LVOOpenLibrary(a6)
            move.l      d0,DOSlib
            beq.s       LAUNCH.09                   ;couldn't open dos.library
            clr.l       d0
            lea         aslname,a1
            jsr         _LVOOpenLibrary(a6)
            move.l      d0,ASLlib
            bne.s       LAUNCH.10
            lea         NoASLlib,a3
            bsr         IRJwritethis
            movea.l     DOSlib,a1
            jsr         _LVOCloseLibrary(a6)        ;close dos.library
LAUNCH.09   move.l      #21,IRJexitcode             ;error - exit
            rts
NoASLlib    dc.b        'Error - asl.library not found!',$a,0
;-----------
LAUNCH.10   bsr         ReadArgs                    ;READ CLI/WB ARGS
            tst.l       d7
            bpl         LAUNCH.15
            lea         UsageError,a3
            bsr         IRJwritethis
            bsr         CloseLibs
            move.l      #1,IRJexitcode              ;error - exit
            rts
UsageError  dc.b        'Usage:',$a,'       IRJ CONFIG/K,ID=IMAGINEDIR/K,IN=IMAGINENAME/K,'
            dc.b        'IS=IMAGINESTACK/N,',$a,'            IP=IMAGINEPRIORITY/N,QUIT/S',$a,$a
            dc.b        'About:',$a,'       IRJ was written by myself, Kirk Piepho, for '
            dc.b        'Imagine by Impulse.',$a,'       IRJ is PD/shareware - if you '
            dc.b        'use it regularly, send me $5 (boy am I',$a,'       gonna get rich!) '
            dc.b        'to:',$a,$a,'        Kirk Piepho                 email welcome:',$a,'        '
            dc.b        '2383 N. Dale #307            rexx@wavefront.com',$a,'        Roseville, MN '
            dc.b        '55113',$a,'        USA',$a,$a,0,0
;---------------------------------------------------
LAUNCH.15   movea.l     _AbsExecBase,a6
            jsr         _LVOForbid(a6)
            lea         portname,a1
            jsr         _LVOFindPort(a6)            ;'HELLO?' . . . 
            tst.l       d0
            bne         LAUNCH.100                  ; . . . 'hi!'

            jsr         _LVOPermit(a6)              ;this is _FIRST_ invocation of IRJ
            move.l      #IRJdata,TC_Userdata(a4)    ;this is used by next invocation to find signal of IRJ code already running & IRJ_DTS & IM_codebase & IM_a4
            moveq       #-1,d0
            jsr         _LVOAllocSignal(a6)
            move.l      d0,IRJ_Signal
            bpl.s       LAUNCH.20
            bsr         FreeArgs
            bsr         CloseLibs
            move.l      #999,IRJexitcode            ;error - couldn't allocate signal!
            rts
;-----------
LAUNCH.20   bsr         PrepDirectoryTableStruct    ;* allocs _configdefault's, &:
            move.l      d0,IRJ_DTS                  ; IRJ_OBJECTdir  IRJ_OBJECTfile   IRJ_PIXdir
            bne.s       LAUNCH.25                   ; IRJ_DXFdir     IRJ_DXFfile      IRJ_ANIMdir
            lea         MemoryError,a3              ; IRJ_FORMdir    IRJ_FORMfile
            bsr         IRJwritethis                ; IRJ_CYCLEdir   IRJ_CYCLEfile    IRJ_tempdir
            move.l      IRJ_Signal,d0               ; IRJ_SPLINEdir  IRJ_SPLINEfile
            jsr         _LVOFreeSignal(a6)
            bsr         FreeArgs
            bsr         CloseLibs
            move.l      #25,IRJexitcode             ;error - exit
            rts
MemoryError dc.b        'Error - out of memory!',$a,0
;-----------
LAUNCH.25   move.l      IRJ_DTS,d5
            move.l      #0,DTSconfigflag            ;flag new configdefaults as original
            move.l      IRJconfig,d0
            beq.s       LAUNCH.29
            movea.l     d0,a1
            bsr         CONFIG_read
            tst.l       d7
            beq         LAUNCH.30                   ;got it..
            lea         UserConfigError,a3
            bsr         IRJwritethis
LAUNCH.29   lea         configname1,a1              ;'IRJ.cfg',0
            bsr         CONFIG_read
            tst.l       d7
            beq         LAUNCH.30
            lea         configname2,a1              ;'s:ImagineRequesterJester.cfg',0
            bsr         CONFIG_read
            tst.l       d7
            beq.s       LAUNCH.30
            bra.s       LAUNCH.30  ;couldn't open any config file to read...use hardwired ones
UserConfigError dc.b    'Error - could not read your config file',$a,'trying defaults '
            dc.b        'IRJ.cfg & s:ImagineRequesterJester.cfg',$a,0
;---------------------------------------------------
LAUNCH.30   lea         IRJ_Port,a1                 ;'HEY, here i am!'
            movea.l     _AbsExecBase,a6
            jsr         _LVOAddPort(a6)             ;hey, i just thought of something, do i ever RemPort() this?

            bsr         FindImagine
            tst.l       IRJ_ImagineTask
            beq.s       LAUNCH.40

            bsr         PatchImagine                ;Imagine _is_ running already

            tst.l       IRJpriorityflag             ;IMAGINEPRIORITY=
            beq.s       LAUNCH.35                   ;no priority change
            move.l      IRJpriority,d0
            movea.l     IRJ_ImagineTask,a1
            jsr         _LVOSetTaskPri(a6)

LAUNCH.35   move.l      IRJ_Signal,d1
            moveq       #0,d0
            bset        d1,d0
            jsr         _LVOWait(a6)                ;SLEEP - can also wait on signal sent by my own QUITTINGroutine - which is what it should do now
            jsr         _LVOForbid(a6)
            bra         LAUNCH.75

;-----------
LAUNCH.40   tst.l       IRJimaginename              ;Imagine _is not_ yet running, should I launch it?
            beq         LAUNCH.65                   ; no, go wait for it on LVOOpen & on my own signal
            move.l      IRJimaginedir,d1            ; yes, try running it
            bne.s       LAUNCH.45
            move.l      #nullstring,d1
LAUNCH.45   move.l      #ACCESS_READ,d2
            movea.l     DOSlib,a6
            jsr         _LVOLock(a6)
            move.l      d0,templock1                ;new dir
            beq         LAUNCH.65                   ;error - couldn't change dirs, patch LVOOpen and wait
            move.l      d0,d1
            jsr         _LVOCurrentDir(a6)
            move.l      d0,templock2                ;orig dir

            movea.l     _AbsExecBase,a6             ;patch LVOOpen to wait on Imagine we're about to run
            jsr         _LVOForbid(a6)
            movea.l     #-30,a0
            movea.l     DOSlib,a1
            move.l      #PatchImagine2,d0
            jsr         _LVOSetFunction(a6)
            move.l      d0,FailSafe_orig
            jsr         _LVOPermit(a6)

            move.l      #IRJruncommandstring+4,a0
            move.l      IRJimaginename,a3
LAUNCH.60   move.b      (a3)+,d0
            move.b      d0,(a0)+
            bne.s       LAUNCH.60
            move.l      #IRJruncommandstring,d1     ;'run '+IRJimaginename
            move.l      #ImagineTags,d2
            movea.l     DOSlib,a6
            jsr         _LVOSystemTagList(a6)

            move.l      templock2,d1
            jsr         _LVOCurrentDir(a6)
            move.l      templock1,d1
            jsr         _LVOUnLock(a6)

            bra.s       LAUNCH.70
;-----------
LAUNCH.65   movea.l     _AbsExecBase,a6
            jsr         _LVOForbid(a6)              ; no, lets wait for it on LVOOpen & on my own signal
            movea.l     #-30,a0
            movea.l     DOSlib,a1
            move.l      #PatchImagine2,d0
            jsr         _LVOSetFunction(a6)
            move.l      d0,FailSafe_orig
            jsr         _LVOPermit(a6)

LAUNCH.70   move.l      IRJ_Signal,d1
            moveq       #0,d0
            bset        d1,d0
            movea.l     _AbsExecBase,a6
            jsr         _LVOWait(a6)                ;SLEEP - can also wait on signal sent by my own QUITTINGroutine - which is what it should do now
            jsr         _LVOForbid(a6)

            tst.l       IRJ_ImagineTask
            bne.s       LAUNCH.75
            movea.l     #-30,a0                     ;Imagine never patched, so unpatch LVOOpen
            movea.l     DOSlib,a1
            move.l      FailSafe_orig,d0
            jsr         _LVOSetFunction(a6)
;-----------
LAUNCH.75   bsr         UnPatchImagine
            jsr         _LVOPermit(a6)
            move.l      IRJ_Signal,d0               ;Free signal
            jsr         _LVOFreeSignal(a6)
            lea         IRJ_Port,a1                 ;gotta go
            jsr         _LVORemPort(a6)
            bsr         FreeDirectoryTableStuff
            bsr         FreeArgs
            bsr         CloseLibs
            move.l      #0,IRJexitcode              ;That's all folks....
            rts
;---------------------------------------------------
LAUNCH.100  movea.l     d0,a1                       ;IRJ is _already_ running, update it or signal it to quit
            movea.l     MP_SIGTASK(a1),a1
            movea.l     TC_Userdata(a1),a0          ;IRJdata
            move.l      4(a0),d2                    ;IRJ_signal
            move.l      8(a0),d5                    ;IRJ_DTS
            move.l      12(a0),d3                   ;IRJ_ImagineCodeBase
            move.l      20(a0),IRJ_ImagineTask      ;IRJ_ImagineTask
            jsr         _LVOPermit(a6)

            tst.l       IRJquitflag                 ;QUIT=true, skip other args.
            bne         LAUNCH.145

            tst.l       IRJconfig                   ;CONFIG=
            beq.s       LAUNCH.115                  ;no config arg
            tst.l       IRJ_ImagineTask             ;Is Imagine running?
            bne.s       LAUNCH.105
            move.l      #0,DTSconfigflag            ; no - update configdefaults of IRJ
            bra.s       LAUNCH.110
LAUNCH.105  move.l      #1,DTSconfigflag            ; yes - flag new configdefaults as updated
LAUNCH.110  movea.l     IRJconfig,a1
            bsr         CONFIG_read
            tst.l       d7
            beq.s       LAUNCH.115
            lea         UserConfigError2,a3
            bsr         IRJwritethis
            bsr         FreeArgs
            bsr         CloseLibs
            move.l      #432,IRJexitcode
            rts
UserConfigError2 dc.b   'Error - could not find/read your config file',$a,0
;-----------
LAUNCH.115  tst.l       IRJ_ImagineTask
            beq.s       LAUNCH.120

            tst.l       IRJpriorityflag             ;Imagine _is_ running
            beq         LAUNCH.150
            move.l      IRJpriority,d0              ;IMAGINEPRIORITY=
            movea.l     IRJ_ImagineTask,a1
            jsr         _LVOSetTaskPri(a6)
            bra         LAUNCH.150
;-----------
LAUNCH.120  tst.l       IRJimaginename              ;Imagine _is not_ yet running, should I launch it?
            beq         LAUNCH.150                  ; no

            move.l      IRJimaginedir,d1            ; yes, try running it
            bne.s       LAUNCH.125
            move.l      #nullstring,d1
LAUNCH.125  move.l      #ACCESS_READ,d2
            movea.l     DOSlib,a6
            jsr         _LVOLock(a6)
            move.l      d0,templock1                ;new dir
            beq.s       LAUNCH.150                  ;error - couldn't change dirs, done
            move.l      d0,d1
            jsr         _LVOCurrentDir(a6)
            move.l      d0,templock2                ;orig dir

            move.l      #IRJruncommandstring+4,a0
            move.l      IRJimaginename,a3
LAUNCH.140  move.b      (a3)+,d0
            move.b      d0,(a0)+
            bne.s       LAUNCH.140
            move.l      #IRJruncommandstring,d1     ;'run '+IRJimaginename
            move.l      #ImagineTags,d2
            jsr         _LVOSystemTagList(a6)

            move.l      templock2,d1
            jsr         _LVOCurrentDir(a6)
            move.l      templock1,d1
            jsr         _LVOUnLock(a6)
            bra.s       LAUNCH.150
;-----------
LAUNCH.145  moveq       #0,d0                       ;signal orig IRJ task to QUIT
            bset        d2,d0
            jsr         _LVOSignal(a6)

            lea         QuittingMsg,a3
            bsr         IRJwritethis

LAUNCH.150  bsr         FreeArgs
            bsr         CloseLibs
            move.l      #0,IRJexitcode              ;success, IRJ updated
            rts
QuittingMsg dc.b        'Quitting the fabulous Imagine Requester Jester!',$a,0,0
;---------------------------------------------------------------------------------------------------
QUITTING_IMAGINE ;signal my task that user wants to quit
            movem.l     d2-d7/a2-a6,-(sp)
            movea.l     _AbsExecBase,a6
            jsr         _LVOForbid(a6)
            lea         portname,a1
            jsr         _LVOFindPort(a6)            ;'where are you?'
            movea.l     d0,a1                       ;IRJ is already running, update it or signal it to quit
            movea.l     MP_SIGTASK(a1),a1
            movea.l     TC_Userdata(a1),a0          ;IRJdata
            move.l      4(a0),d1                    ;IRJ_signal
            jsr         _LVOPermit(a6)

            moveq       #0,d0
            bset        d1,d0
            jsr         _LVOSignal(a6)              ;tell task to quit
            movem.l     (sp)+,d2-d7/a2-a6
            clr.l       -(sp)
QUITTING_dothisfirst
            nop                                     ;this will get written over
            nop
            nop
            rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
FindImagine
            clr.l       d0                          ;ok, now look for/wait for/start imagine
            lea         intuitionname,a1            ;try finding a window of screen titled 'Imagine...'
            movea.l     _AbsExecBase,a6
            jsr         _LVOOpenLibrary(a6)
            move.l      d0,Intuilib
            movea.l     d0,a6
            clr.l       d0
            jsr         _LVOLockIBase(a6)
            movea.l     d0,a2                       ;save it
            movea.l     ib_FirstScreen(a6),a0
FI.05       movea.l     sc_Title(a0),a1
            cmpi.l      #'Imag',(a1)
            bne.s       FI.10                       ;nope
            cmpi.w      #'in',4(a1)
            beq.s       FI.15                       ;good enuf
FI.10       tst.l       sc_NextScreen(a0)
            beq         FI.45                       ;done searching, no match
            move.l      sc_NextScreen(a0),a0
            bra.s       FI.05

FI.15       movea.l     sc_FirstWindow(a0),a0       ;screen title - 'Imagin.....'
            movea.l     wd_UserPort(a0),a0
            movea.l     MP_SIGTASK(a0),a1
            move.l      a1,-(sp)                    ;waiting on IRJ_ImagineTask when ready, so fill it last

            move.l      pr_CLI(a1),d0
            beq.s       FI.20
            asl.l       #2,d0                       ;Imagine from CLI
            movea.l     d0,a1
            move.l      cli_Module(a1),d0
            bra.s       FI.25
FI.20       move.l      pr_SegList(a1),d0           ;Imagine from WB
            asl.l       #2,d0
            movea.l     d0,a0
            move.l      12(a0),d0

FI.25       asl.l       #2,d0
            movea.l     d0,a0
FI.30       move.l      -4(a0),d1                   ;hunk size
            cmpi.l      #$b8000,d1
            bgt.s       FI.35
            move.l      (a0),d1
            beq         FI.99                       ;done - no find code hunk
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       FI.30

FI.35       adda.w      #4,a0
            movea.l     a0,a1                       ;IRJ_ImagineCodeBase
            adda.l      d1,a0
            suba.w      #8,a0
            move.l      a0,IRJ_ImagineCodeEnd

            cmpi.l      #$bb000,d1
            blt.s       FI_3                        ;3.0
            cmpi.l      #$e6000,d1
            blt.s       FI_4                        ;4.0
            bra         FI_5                        ;5.0
;---------------------------------------------------
FI_3        move.l      #3,IRJ_ImagineVersion
            movea.l     d0,a0
FI_3.05     move.l      -4(a0),d1
            cmpi.l      #$7000,d1
            bgt.s       FI_3.10
FI_3.07     move.l      (a0),d1
            beq         FI.40                       ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       FI_3.05
FI_3.10     cmpi.l      #$9000,d1
            bgt.s       FI_3.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       FI_3.07
FI_3.15     cmpi.l      #$a000,d1
            bgt         FI_3.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       FI_3.07
;-----------
FI_4        move.l      #4,IRJ_ImagineVersion
            movea.l     d0,a0
FI_4.05     move.l      -4(a0),d1
            cmpi.l      #$6800,d1
            bgt.s       FI_4.10
FI_4.07     move.l      (a0),d1
            beq         FI.40                       ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       FI_4.05
FI_4.10     cmpi.l      #$9000,d1
            bgt.s       FI_4.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       FI_4.07
FI_4.15     cmpi.l      #$f000,d1
            bgt.s       FI_4.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       FI_4.07
;-----------
FI_5        move.l      #5,IRJ_ImagineVersion
            movea.l     d0,a0
FI_5.05     move.l      -4(a0),d1
            cmpi.l      #$6a00,d1
            bgt.s       FI_5.10
FI_5.07     move.l      (a0),d1
            beq         FI.40                       ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       FI_5.05
FI_5.10     cmpi.l      #$9000,d1
            bgt.s       FI_5.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       FI_5.07
FI_5.15     cmpi.l      #$a0000,d1
            bgt.s       FI_5.07
            cmpi.l      #$ca00,d1
            blt.s       FI_5.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       FI_5.07
;-----------
FI.99       move.l      (sp)+,d0
            bra.s       FI.45
;---------------------------------------------------
FI.40       move.l      a1,IRJ_ImagineCodeBase
            addi.l      #4,IRJ_ImagineA4Base
            addi.l      #4,IRJ_ImaginePPTHhunk
            move.l      (sp)+,IRJ_ImagineTask

FI.45       movea.l     a2,a0
            jsr         _LVOUnlockIBase(a6)
            movea.l     Intuilib,a1
            movea.l     _AbsExecBase,a6
            jsr         _LVOCloseLibrary(a6)
            rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
PatchImagine2
            movea.l     d1,a0
            cmpi.b      #$00,14(a0)                 ;,0
            bne         notamatch
            cmpi.l      #$496d6167,(a0)             ;'Imag'
            bne         notamatch
            cmpi.l      #$696e652e,4(a0)            ;'ine.'
            bne         notamatch
            cmpi.l      #$636f6e66,8(a0)            ;'conf'
            bne         notamatch
            cmpi.w      #$6967,12(a0)               ;'ig'
            bne         notamatch

            movea.l     #-30,a0
            movea.l     DOSlib,a1
            movem.l     d0-d1/a6,-(sp)
            move.l      FailSafe_orig,d0
            movea.l     _AbsExecBase,a6
            jsr         _LVOSetFunction(a6)

            suba.l      a1,a1
            jsr         _LVOFindTask(a6)
            movea.l     d0,a1
            move.l      a1,-(sp)                    ;waiting on IRJ_ImagineTask when ready, so fill it last

            move.l      pr_CLI(a1),d0
            beq.s       PI2.20
            asl.l       #2,d0                       ;Imagine from CLI
            movea.l     d0,a1
            move.l      cli_Module(a1),d0
            bra.s       PI2.25
PI2.20      move.l      pr_SegList(a1),d0           ;Imagine from WB
            asl.l       #2,d0
            movea.l     d0,a0
            move.l      12(a0),d0

PI2.25      asl.l       #2,d0
            movea.l     d0,a0
PI2.30      move.l      -4(a0),d1                   ;hunk size
            cmpi.l      #$b8000,d1
            bgt.s       PI2.35
            move.l      (a0),d1
            beq         PI2.99                      ;done - no find code hunk
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       PI2.30

PI2.35      adda.w      #4,a0
            movea.l     a0,a1                       ;IRJ_ImagineCodeBase
            adda.l      d1,a0
            suba.w      #8,a0
            move.l      a0,IRJ_ImagineCodeEnd

            cmpi.l      #$bb000,d1
            blt.s       PI2_3                       ;3.0
            cmpi.l      #$e6000,d1
            blt.s       PI2_4                       ;4.0
            bra         PI2_5                       ;5.0
;---------------------------------------------------
PI2_3       move.l      #3,IRJ_ImagineVersion
            movea.l     d0,a0
PI2_3.05    move.l      -4(a0),d1
            cmpi.l      #$7000,d1
            bgt.s       PI2_3.10
PI2_3.07    move.l      (a0),d1
            beq         PI2.40                      ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       PI2_3.05
PI2_3.10    cmpi.l      #$9000,d1
            bgt.s       PI2_3.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       PI2_3.07
PI2_3.15    cmpi.l      #$a000,d1
            bgt         PI2_3.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       PI2_3.07
;-----------
PI2_4       move.l      #4,IRJ_ImagineVersion
            movea.l     d0,a0
PI2_4.05    move.l      -4(a0),d1
            cmpi.l      #$6800,d1
            bgt.s       PI2_4.10
PI2_4.07    move.l      (a0),d1
            beq         PI2.40                      ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       PI2_4.05
PI2_4.10    cmpi.l      #$9000,d1
            bgt.s       PI2_4.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       PI2_4.07
PI2_4.15    cmpi.l      #$f000,d1
            bgt.s       PI2_4.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       PI2_4.07
;-----------
PI2_5       move.l      #5,IRJ_ImagineVersion
            movea.l     d0,a0
PI2_5.05    move.l      -4(a0),d1
            cmpi.l      #$6a00,d1
            bgt.s       PI2_5.10
PI2_5.07    move.l      (a0),d1
            beq         PI2.40                      ;done
            asl.l       #2,d1
            movea.l     d1,a0
            bra.s       PI2_5.05
PI2_5.10    cmpi.l      #$9000,d1
            bgt.s       PI2_5.15
            move.l      a0,IRJ_ImagineA4Base
            bra.s       PI2_5.07
PI2_5.15    cmpi.l      #$a0000,d1
            bgt.s       PI2_5.07
            cmpi.l      #$ca00,d1
            blt.s       PI2_5.07
            move.l      a0,IRJ_ImaginePPTHhunk
            bra.s       PI2_5.07
;-----------
PI2.99      move.l      (sp)+,d0
            movem.l     (sp)+,d0-d1/a6
            bra.s       notamatch
;---------------------------------------------------
PI2.40      move.l      a1,IRJ_ImagineCodeBase
            addi.l      #4,IRJ_ImagineA4Base
            addi.l      #4,IRJ_ImaginePPTHhunk
            move.l      (sp)+,IRJ_ImagineTask

            bsr         PatchImagine

            movem.l     (sp)+,d0-d1/a6
notamatch:
            dc.w        $4ef9                       ;JMP
FailSafe_orig:
            dc.l        FailSafe
FailSafe    move.l      #0,d0                       ;this will be patched to go to origional LVOOpen
            nop
            rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
PatchImagine
            tst.l       IRJ_ImagineTask
            beq         PI.99
;-----------
            movea.l     IRJ_ImaginePPTHhunk,a0
PI.05       cmpi.l      #'PPTH',(a0)
            beq.s       PI.06
            adda.w      #1,a0
            bra.s       PI.05
PI.06       move.l      a0,d0
            movea.l     IRJ_ImagineCodeBase,a0
PI.07       cmp.l       (a0),d0
            beq.s       PI.09
PI.08       adda.w      #1,a0
            bra.s       PI.07
PI.09       cmpi.w      #$4879,-2(a0)               ;PEA
            bne.s       PI.08

            move.w      20(a0),d0
            move.w      d0,IM_RENDER40
            add.w       d0,IM_RENDER
            add.w       d0,IM_FILEformat
            add.w       d0,IM_WIDTH
            add.w       d0,IM_HEIGHT
            add.w       d0,IM_XASPECT
            add.w       d0,IM_YASPECT
            add.w       d0,IM_VIEWmode
            add.w       d0,IM_SUBPROJECTpixdir
            add.w       d0,IM_SUBPROJECTanimdir
;-----------
            movea.l     IRJ_ImagineCodeBase,a0
            movea.l     IRJ_ImagineCodeEnd,a1
PI.10       cmpi.l      #'Part',(a0)
            beq.s       PI.12
PI.11       adda.w      #1,a0
            cmpa        a0,a1
            bne.s       PI.10
            bra         PI.99                       ;couldn't find 'Particle Filename'
PI.12       cmpi.l      #' Fil',8(a0)
            bne.s       PI.11

            suba.w      #10,a0
            movea.l     (a0),a1
            clr.l       d0
            move.w      -8(a0),d0
            subi.w      #$6c,d0
            move.w      d0,IM_PROJECTdir
            add.w       d0,IM_PROJECTfile
            add.w       d0,IM_PROJECToutput
            addi.w      #12,d0
            move.w      d0,IM_OBJECTdir
            add.w       d0,IM_OBJECTfile
            add.w       d0,IM_OBJECToutput
            addi.w      #12,d0
            move.w      d0,IM_CONVERTIFFdir
            add.w       d0,IM_CONVERTIFFfile
            add.w       d0,IM_CONVERTIFFoutput
            addi.w      #12,d0
            move.w      d0,IM_BRUSHMAPSdir
            add.w       d0,IM_BRUSHMAPSfile
            add.w       d0,IM_BRUSHMAPSoutput
            addi.w      #12,d0
            move.w      d0,IM_TEXTURESdir
            add.w       d0,IM_TEXTURESfile
            add.w       d0,IM_TEXTURESoutput
            addi.w      #12,d0
            move.w      d0,IM_EFFECTSdir
            add.w       d0,IM_EFFECTSfile
            add.w       d0,IM_EFFECTSoutput
            addi.w      #12,d0
            move.w      d0,IM_SUBPROJECTdir
            add.w       d0,IM_SUBPROJECTfile
            add.w       d0,IM_SUBPROJECToutput
            addi.w      #12,d0
            move.w      d0,IM_PREFSdir
            add.w       d0,IM_PREFSfile
            add.w       d0,IM_PREFSoutput
            addi.w      #12,d0
            move.w      d0,IM_ATTRIBSdir
            add.w       d0,IM_ATTRIBSfile
            add.w       d0,IM_ATTRIBSoutput
            addi.w      #12,d0
            move.w      d0,IM_PARTICALSdir
            add.w       d0,IM_PARTICALSfile
            add.w       d0,IM_PARTICALSoutput
            addi.w      #24,d0
            move.w      d0,IM_PALETTEdir
            add.w       d0,IM_PALETTEfile
            add.w       d0,IM_PALETTEoutput
            addi.w      #12,d0
            move.w      d0,IM_BROWSEdir
            add.w       d0,IM_BROWSEfile
            add.w       d0,IM_BROWSEoutput
            addi.w      #12,d0
            move.w      d0,IM_REXXdir
            add.w       d0,IM_REXXfile
            add.w       d0,IM_REXXoutput

            cmpi.l      #5,IRJ_ImagineVersion
            beq.s       PI.14
            cmpi.l      #4,IRJ_ImagineVersion
            beq.s       PI.13
            move.w      #0,IM_RENDER40
PI.13       move.w      #0,IM_REXXdir
            move.w      #0,IM_REXXfile
            move.w      #0,IM_REXXoutput

PI.14       adda.w      #1,a1
            cmpi.w      #$4eb9,(a1)
            bne.s       PI.14
            move.l      2(a1),IRJrequester_orig
            move.l      #IRJrequester,2(a1)         ;gotta unpatch this
            move.l      a1,IRJtemp_1                ; when we quit
;-----------
            movea.l     IRJ_ImagineCodeBase,a0
            adda.l      #$88000,a0
            movea.l     IRJ_ImagineCodeEnd,a1
PI.20       cmpi.l      #$43ef0010,(a0)             ;LEA $10(A7),A1
            beq.s       PI.21
            adda.w      #1,a0                       ;     lea     $10(A7),A1
            cmpa        a0,a1                       ;     move.b  (A0)+,(A1)+
            bne.s       PI.20                       ;     bne.b   *-$02
            bra         PI.99                       ;4d6  pea     *-$127a   ;'/objects',0,0   $487aed84      /  pea	   -$127C(PC)  ;'/objects',0,0
PI.21       adda.w      #$1c,a0                     ;  a  pea     $14(a7)                     $486f0014      /  pea	   $14(A7)
            move.l      a0,IRJtemp_2                ;  e  jsr     $0b97e8                     $4eb900620050  /  jsr	   $0B97E8
                                                    ; e4  addq.w  #8,a7                       $504f          /  addq.w  #8,A7
            move.w      #$4eb9,(a0)       ;jsr      ;  6  lea     $10(a7),a0                  $41ef0010      /  lea	   $10(A7),A0
            move.l      2(a0),IRJtemp_3
            move.l      #CREATEDIRS,2(a0)           ;** a  move.l  a0,d1       JSR CREATEDIRS  $2208          /  move.l  A0,D1
            move.w      6(a0),IRJtemp_4

            move.w      #$4e71,6(a0)      ;nop      ;  c  jsr     -$78(a6)    **************  $4eaeff88      /  jsr	   _LVOCreateDir(a6)
            move.l      16(a0),IRJtemp_5
            move.l      #$4e714e71,16(a0) ;nop nop  ; f0  move.l  d0,d7       NOP             $2e00          /  move.l  D0,D7
                                                    ;  2  tst.l   d7                          $4a87          /  tst.l   D7
                                                    ;  4  beq     *+$fc                       $670000fa      /  beq.w   *+$FC
                                                    ;  8  move.l  d7,d1                       $2207          /  move.l  D7,D1
                                                    ;  a  jsr     -$5a(a6)    NOP NOP         $4eaeffa6      /  jsr	   _LVOUnlock(a6)
;-----------
            movea.l     IRJ_ImagineCodeBase,a0
            adda.l      #$8f000,a0
            movea.l     IRJ_ImagineCodeEnd,a1
PI.25       cmpi.l      #$12d866fc,(a0)             ;MOVE.B (A0)+,(A1)+
            beq.s       PI.27
PI.26       adda.w      #1,a0
            cmpa        a0,a1
            bne.s       PI.25
            bra         PI.99
PI.27       cmpi.l      #$12d866fc,12(a0)           ;MOVE.B (A0)+,(A1)+
            bne.s       PI.26
            move.l      a0,IRJtemp_6      ;disable copying over my init SUBPROJECT pix/anim dirs
            move.l      #$4e714e71,(a0)   ;was $12d866fc
            move.l      #$4e714e71,12(a0) ;was $12d866fc
;-----------
            movea.l     IRJ_ImagineCodeBase,a0
            movea.l     IRJ_ImagineCodeEnd,a1
PI.30       cmpi.l      #'No p',(a0)
            beq.s       PI.31
            adda.w      #1,a0
            cmpa        a0,a1
            bne.s       PI.30
PI.31       suba.w      #1,a0
            cmpi.l      #$42a761ff,(a0)
            bne.s       PI.31
            move.l      a0,IRJtemp_7                 ;clr.l -(a7)
            move.w      (a0),IRJtemp_8
            move.w      #$4eb9,(a0)
            move.l      2(a0),IRJtemp_9
            move.l      #QUITTING_IMAGINE,2(a0)
            move.w      6(a0),IRJtemp_10
            move.w      #$4e71,6(a0)

PI.32       adda.w      #1,a0
            cmpi.l      #$48e70316,(a0)             ;movem.l d6-d7/a3/a5-a6,-(a7)
            bne.s       PI.32
            move.l      a0,QUITTING_dothisfirst+2
            move.w      #$4eb9,QUITTING_dothisfirst
;-----------
PI.99       rts                                     ;UNKNOWN or not loaded
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
UnPatchImagine
            tst.l       IRJ_ImagineTask
            beq.s       UPI.99
            tst.l       IRJ_ImagineCodeBase
            beq.s       UPI.99

            move.l      IRJtemp_1,a1
            move.l      IRJrequester_orig,2(a1)

            move.l      IRJtemp_2,a0
            move.w      #$2208,(a0)                 ;MOVE.L A0,D1
            move.l      IRJtemp_3,2(a0)
            move.w      IRJtemp_4,6(a0)
            move.l      IRJtemp_5,16(a0)

            move.l      IRJtemp_6,a0
            move.l      #$12d866fc,(a0)
            move.l      #$12d866fc,12(a0)

            move.l      IRJtemp_7,a0
            move.w      IRJtemp_8,(a0)
            move.l      IRJtemp_9,2(a0)
            move.w      IRJtemp_10,6(a0)

            nop
            bra         FreeIRJbuffers
UPI.99      rts                                     ;UNKNOWN or not loaded
;---------------------------------------------------------------------------------------------------
FreeIRJbuffers
            tst.l       IRJ_ImagineTask
            beq         FRJ.05                      ;imagine wasn't ever found
            movea.l     IRJ_ImagineA4Base,a4
            movea.l     IRJ_OBJECTdir,a3            ;IRJobject->IMobject
            move.w      IM_OBJECTdir,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IRJ_OBJECTfile,a3
            move.w      IM_OBJECTfile,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IRJ_OBJECTdir,a3            ;IRJobject->IMbrowse
            move.w      IM_BROWSEdir,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IRJ_OBJECTfile,a3
            move.w      IM_BROWSEfile,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IM_BRUSHMAPSdir,a3          ;IMbrushmaps->IMconvertiff
            move.w      IM_CONVERTIFFdir,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IM_BRUSHMAPSfile,a3
            move.w      IM_CONVERTIFFfile,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IM_BRUSHMAPSdir,a3          ;IMbrushmaps->IMpalette
            move.w      IM_PALETTEdir,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
            movea.l     IM_BRUSHMAPSfile,a3
            move.w      IM_PALETTEfile,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString
FRJ.05      rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
PrepDirectoryTableStruct
            movea.l     _AbsExecBase,a6

            bsr         PDTSsub1                    ;IRJ_OBJECTdir  IRJ_OBJECTfile
            move.l      d0,IRJ_OBJECTdir            ;IRJ_DXFdir     IRJ_DXFfile
            beq         PDTS.error                  ;IRJ_FORMdir    IRJ_FORMfile
            bsr         PDTSsub2                    ;IRJ_CYCLEdir   IRJ_CYCLEfile
            move.l      d0,IRJ_OBJECTfile           ;IRJ_SPLINEdir  IRJ_SPLINEfile
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_DXFdir
            beq         PDTS.error
            bsr         PDTSsub2
            move.l      d0,IRJ_DXFfile
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_FORMdir
            beq         PDTS.error
            bsr         PDTSsub2
            move.l      d0,IRJ_FORMfile
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_CYCLEdir
            beq         PDTS.error
            bsr         PDTSsub2
            move.l      d0,IRJ_CYCLEfile
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_SPLINEdir
            beq         PDTS.error
            bsr         PDTSsub2
            move.l      d0,IRJ_SPLINEfile
            beq         PDTS.error

            bsr         PDTSsub1
            move.l      d0,IRJ_PIXdir
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_ANIMdir
            beq         PDTS.error
            bsr         PDTSsub1
            move.l      d0,IRJ_tempdir
            beq         PDTS.error

            lea         PROJECTdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PROJECTdir_configdefault
            beq         PDTS.error
            lea         PROJECTfileconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PROJECTfile_configdefault
            beq         PDTS.error
            lea         SUBPROJECTfileconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_SUBPROJECTfile_configdefault
            beq         PDTS.error
            lea         PIXdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PIXdir_configdefault
            beq         PDTS.error
            lea         ANIMdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_ANIMdir_configdefault
            beq         PDTS.error
            lea         PREFSfileconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PREFSfile_configdefault
            beq         PDTS.error
            lea         OBJECTdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_OBJECTdir_configdefault
            beq         PDTS.error
            lea         DXFdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_DXFdir_configdefault
            beq         PDTS.error
            lea         FORMdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_FORMdir_configdefault
            beq         PDTS.error
            lea         CYCLEdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_CYCLEdir_configdefault
            beq         PDTS.error
            lea         SPLINEdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_SPLINEdir_configdefault
            beq         PDTS.error
            lea         BRUSHMAPSdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_BRUSHMAPSdir_configdefault
            beq         PDTS.error
            lea         ATTRIBSdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_ATTRIBSdir_configdefault
            beq         PDTS.error
            lea         TEXTURESdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_TEXTURESdir_configdefault
            beq         PDTS.error
            lea         EFFECTSdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_EFFECTSdir_configdefault
            beq         PDTS.error
            lea         PARTICALSdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PARTICALSdir_configdefault
            beq         PDTS.error
            lea         REXXdirconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_REXXdir_configdefault
            beq         PDTS.error

            lea         PROJECTpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PROJECTpat_configdefault
            beq         PDTS.error
            lea         NEWSUBPROJECTpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_NEWSUBPROJECTpat_configdefault
            beq         PDTS.error
            lea         OPENSUBPROJECTpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_OPENSUBPROJECTpat_configdefault
            beq         PDTS.error
            lea         PREFSpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PREFSpat_configdefault
            beq         PDTS.error
            lea         OBJECTpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_OBJECTpat_configdefault
            beq         PDTS.error
            lea         DXFpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_DXFpat_configdefault
            beq         PDTS.error
            lea         FORMpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_FORMpat_configdefault
            beq         PDTS.error
            lea         CYCLEpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_CYCLEpat_configdefault
            beq         PDTS.error
            lea         SPLINEpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_SPLINEpat_configdefault
            beq         PDTS.error
            lea         BRUSHMAPSpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_BRUSHMAPSpat_configdefault
            beq         PDTS.error
            lea         ATTRIBSpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_ATTRIBSpat_configdefault
            beq         PDTS.error
            lea         TEXTURESpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_TEXTURESpat_configdefault
            beq         PDTS.error
            lea         EFFECTSpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_EFFECTSpat_configdefault
            beq         PDTS.error
            lea         PARTICALSpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_PARTICALSpat_configdefault
            beq         PDTS.error
            lea         REXXpatconfigdefault,a3
            bsr         PDTSsub3
            move.l      d0,IRJ_REXXpat_configdefault
            beq         PDTS.error

            move.l      #DIRECTORYTABLESTRUCT,d0   ;no error
            rts
PDTS.error  bsr         FreeDirectoryTableStuff
            move.l      #0,d0   ;memory error
            rts

PDTSsub1    move.l      #100,d0  ;dir
            move.l      #MEMF_CLEAR,d1
            jsr         _LVOAllocMem(a6)
            rts
PDTSsub2    move.l      #30,d0  ;file
            move.l      #MEMF_CLEAR,d1
            jsr         _LVOAllocMem(a6)
            rts
PDTSsub3    movea.l     a3,a1
            bsr         SizeOfString
            movea.l     a1,a3
            move.l      #MEMF_CLEAR,d1
            jsr         _LVOAllocMem(a6)
            move.l      d0,d2
            beq.s       PDTSs3.01
            bsr         CopyString
            move.l      d2,d0
PDTSs3.01   rts
;---------------------------------------------------------------------------------------------------
FreeDirectoryTableStuff
            movem.l     a3/a6,-(sp)
            movea.l     _AbsExecBase,a6

            move.l      IRJ_OBJECTdir,d0
            bsr         FDTSsub1
            move.l      IRJ_OBJECTfile,d0
            bsr         FDTSsub2
            move.l      IRJ_DXFdir,d0
            bsr         FDTSsub1
            move.l      IRJ_DXFfile,d0
            bsr         FDTSsub2
            move.l      IRJ_FORMdir,d0
            bsr         FDTSsub1
            move.l      IRJ_FORMfile,d0
            bsr         FDTSsub2
            move.l      IRJ_CYCLEdir,d0
            bsr         FDTSsub1
            move.l      IRJ_CYCLEfile,d0
            bsr         FDTSsub2
            move.l      IRJ_SPLINEdir,d0
            bsr         FDTSsub1
            move.l      IRJ_SPLINEfile,d0
            bsr         FDTSsub2

            move.l      IRJ_PIXdir,d0
            bsr         FDTSsub1
            move.l      IRJ_ANIMdir,d0
            bsr         FDTSsub1
            move.l      IRJ_tempdir,d0
            bsr         FDTSsub1

            move.l      IRJ_PROJECTdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PROJECTfile_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_SUBPROJECTfile_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PIXdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_ANIMdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PREFSfile_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_OBJECTdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_DXFdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_FORMdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_CYCLEdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_SPLINEdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_BRUSHMAPSdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_ATTRIBSdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_TEXTURESdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_EFFECTSdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PARTICALSdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_REXXdir_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PROJECTpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_NEWSUBPROJECTpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_OPENSUBPROJECTpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PREFSpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_OBJECTpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_DXFpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_FORMpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_CYCLEpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_SPLINEpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_BRUSHMAPSpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_ATTRIBSpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_TEXTURESpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_EFFECTSpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_PARTICALSpat_configdefault,d0
            bsr         FDTSsub3
            move.l      IRJ_REXXpat_configdefault,d0
            bsr         FDTSsub3
            movem.l     (sp)+,a3/a6
            rts

FDTSsub1    tst.l       d0
            beq.s       FDTSs1.01
            movea.l     d0,a1
            move.l      #100,d0  ;dir
            jsr         _LVOFreeMem(a6)
FDTSs1.01   rts
FDTSsub2    tst.l       d0
            beq.s       FDTSs2.01
            movea.l     d0,a1
            move.l      #30,d0   ;file
            jsr         _LVOFreeMem(a6)
FDTSs2.01   rts
FDTSsub3    tst.l       d0
            beq.s       FDTSs3.01
            movea.l     d0,a3
            movea.l     d0,a1
            bsr         SizeOfString
            jsr         _LVOFreeMem(a6)
FDTSs3.01   rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
IRJwritethis
            movem.l     d0-d3/a0-a1/a3/a6,-(sp)
            tst.l       WBreturnMsg
            bne.s       WT.05
            movea.l     DOSlib,a6
            jsr         _LVOOutput(a6)
            move.l      d0,d1
            beq.s       WT.05
            move.l      a3,d2
            bsr         SizeOfString
            move.l      d0,d3
            jsr         _LVOWrite(a6)
WT.05       movem.l     (sp)+,d0-d3/a0-a1/a3/a6
            rts
;---------------------------------------------------------------------------------------------------
;in:a3  out:d0.l
SizeOfString
            clr.l       d0
SOS.05      addi.w      #1,d0
            tst.b       (a3)+
            bne.s       SOS.05
            rts
;---------------------------------------------------------------------------------------------------
MoveString
CopyString  movea.l     d0,a0
CS.05       move.b      (a3)+,d0
            move.b      d0,(a0)+
            bne.s       CS.05
            rts
;---------------------------------------------------------------------------------------------------
CloseLibs   movea.l     _AbsExecBase,a6
            movea.l     DOSlib,a1
            jsr         _LVOCloseLibrary(a6)        ;close dos.library
            movea.l     ASLlib,a1
            jsr         _LVOCloseLibrary(a6)        ;close asl.library
            rts
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
IRJrequester
            movem.l     d1-d7/a0-a3/a6,-(sp)
            movea.l     ASLlib,a6
            move.l      52(sp),IRJaslfr_imaginewindow
            move.l      60(sp),IRJaslfr_title       ;title
            move.l      64(sp),d7                   ;file
            move.l      68(sp),d6                   ;dir

            movea.l     IRJaslfr_title,a0
            cmpi.b      #'!',(a0)                   ;">!< Delete File !" in detail.c:
            beq         IRJrequester_skip

            move.w      IM_PROJECTdir,d4
            cmp.l       (a4,d4.w),d6
            beq         PROJECTREQUESTER
            move.w      IM_SUBPROJECTdir,d4
            cmp.l       (a4,d4.w),d6
            beq         SUBPROJECTREQUESTER
            move.w      IM_PREFSdir,d4
            cmp.l       (a4,d4.w),d6
            beq         PREFSREQUESTER
            move.w      IM_CONVERTIFFdir,d4
            cmp.l       (a4,d4.w),d6
            beq         CONVERTIFFREQUESTER
            move.w      IM_PALETTEdir,d4
            cmp.l       (a4,d4.w),d6
            beq         PALETTEREQUESTER
            move.w      IM_PARTICALSdir,d4
            cmp.l       (a4,d4.w),d6
            beq         PARTICALSREQUESTER
            move.w      IM_EFFECTSdir,d4
            cmp.l       (a4,d4.w),d6
            beq         EFFECTSREQUESTER
            move.w      IM_TEXTURESdir,d4
            cmp.l       (a4,d4.w),d6
            beq         TEXTUREREQUESTER
            move.w      IM_ATTRIBSdir,d4
            cmp.l       (a4,d4.w),d6
            beq         ATTRIBSREQUESTER
            move.w      IM_BRUSHMAPSdir,d4
            cmp.l       (a4,d4.w),d6
            beq         BRUSHMAPREQUESTER
            move.w      IM_BROWSEdir,d4
            cmp.l       (a4,d4.w),d6
            beq         BROWSEREQUESTER
            move.w      IM_OBJECTdir,d4
            cmp.l       (a4,d4.w),d6
            beq         OBJECTREQUESTER

            cmpi.l      #5,IRJ_ImagineVersion
            bne.s       IRJrequester_skip
            move.w      IM_REXXdir,d4
            cmp.l       (a4,d4.w),d6           ;is imaginerexx?, then test
            beq         REXXREQUESTER

IRJrequester_skip:
            movem.l     (sp)+,d1-d7/a0-a3/a6
            dc.w        $4ef9                       ;JMP
IRJrequester_orig:
            dc.l        IRJrequester                ;this gets overwritten by PatchImagine
            nop
            nop
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
PARTICALSREQUESTER
            tst.l       IRJ_PARTICALSdir_configdefault+4    ;configflag
            beq.s       PAR.05                              ;nope, leave it
            movea.l     IRJ_PARTICALSdir_configdefault,a1
            movea.l     d6,a0
            bsr         EXPANDconfigdefault

PAR.05      move.l      IRJ_PARTICALSpat_configdefault,d5
            move.w      IM_PARTICALSoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile                          ;output = IM_PARTICALSoutput(a4)
            tst.l       d0
            beq.s       PAR_DONE                            ;cancel/error

            bsr         SplitDirFile

            move.l      #0,IRJ_PARTICALSdir_configdefault+4
            moveq       #1,d0
;-----------
PAR_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
TEXTUREREQUESTER
            tst.l       IRJ_TEXTURESdir_configdefault+4     ;configflag
            beq.s       TEX.05                              ;nope, leave it
            movea.l     IRJ_TEXTURESdir_configdefault,a1
            movea.l     d6,a0
            bsr         EXPANDconfigdefault

TEX.05      move.l      IRJ_TEXTURESpat_configdefault,d5
            move.w      IM_TEXTURESoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile                          ;output = IM_TEXTURESoutput(a4)
            tst.l       d0
            bne.s       TEX.10
            movea.l     d7,a2                               ;file
            move.b      #0,(a2)
            bra.s       TEX_DONE                            ;cancel/error

TEX.10      movea.l     d4,a2                               ;_output
TEX.15      tst.b       (a2)+                               ;if exists, chop off '.itx'
            bne.s       TEX.15
            cmpi.l      #'.itx',-5(a2)
            bne.s       TEX.20
            move.b      #0,-5(a2)

TEX.20      bsr         SplitDirFile

            move.l      #0,IRJ_TEXTURESdir_configdefault+4
            moveq       #1,d0
;-----------
TEX_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
EFFECTSREQUESTER
            tst.l       IRJ_EFFECTSdir_configdefault+4      ;configflag
            beq.s       EFX.05                              ;nope, leave it
            movea.l     IRJ_EFFECTSdir_configdefault,a1
            movea.l     d6,a0
            bsr         EXPANDconfigdefault

EFX.05      move.l      IRJ_EFFECTSpat_configdefault,d5
            move.w      IM_EFFECTSoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile                          ;output = IM_EFFECTSoutput(a4)
            tst.l       d0
            beq.s       EFX_DONE                            ;cancel/error

            movea.l     d4,a2                               ;_output
EFX.10      tst.b       (a2)+                               ;if exists, chop off '.ifx'
            bne.s       EFX.10
            cmpi.l      #'.ifx',-5(a2)
            bne.s       EFX.15
            move.b      #0,-5(a2)

EFX.15      bsr         SplitDirFile

            move.l      #0,IRJ_EFFECTSdir_configdefault+4
            moveq       #1,d0
;-----------
EFX_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
ATTRIBSREQUESTER
            tst.l       IRJ_ATTRIBSdir_configdefault+4      ;configflag
            beq.s       ATR.05                              ;nope, leave it
            movea.l     IRJ_ATTRIBSdir_configdefault,a1
            movea.l     d6,a0
            bsr         EXPANDconfigdefault

ATR.05      move.l      IRJ_ATTRIBSpat_configdefault,d5
            move.w      IM_ATTRIBSoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile                          ;output = IM_ATTRIBSoutput(a4)
            tst.l       d0
            beq.s       ATR_DONE                            ;cancel/error

            bsr         SplitDirFile

            move.l      #0,IRJ_ATTRIBSdir_configdefault+4
            moveq       #1,d0
;-----------
ATR_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
CONVERTIFFREQUESTER
            tst.l       IRJ_BRUSHMAPSdir_configdefault+4    ;configflag
            beq.s       IFF.05                              ;nope, leave it
            movea.l     IRJ_BRUSHMAPSdir_configdefault,a1
            move.w      IM_BRUSHMAPSdir,d4
            movea.l     (a4,d4.w),a0
            bsr         EXPANDconfigdefault

IFF.05      move.w      IM_BRUSHMAPSfile,d4
            move.l      (a4,d4.w),d7
            move.w      IM_BRUSHMAPSdir,d4
            move.l      (a4,d4.w),d6
            move.l      IRJ_BRUSHMAPSpat_configdefault,d5
            move.w      IM_CONVERTIFFoutput,d4
            move.l      (a4,d4.w),d4                        ;convertiff

            bsr         GetDirFile
            tst.l       d0
            beq.s       IFF_DONE                            ;cancel/error

            bsr         SplitDirFile

            movea.l     d4,a3                               ;copy IM_CONVERTIFFoutput to IM_BRUSHMAPSoutput
            move.w      IM_BRUSHMAPSoutput,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString

            move.l      #0,IRJ_BRUSHMAPSdir_configdefault+4
            moveq       #1,d0
;-----------
IFF_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
PALETTEREQUESTER
            tst.l       IRJ_BRUSHMAPSdir_configdefault+4    ;configflag
            beq.s       PAL.05                              ;nope, leave it
            movea.l     IRJ_BRUSHMAPSdir_configdefault,a1
            move.w      IM_BRUSHMAPSdir,d4
            movea.l     (a4,d4.w),a0
            bsr         EXPANDconfigdefault

PAL.05      move.w      IM_BRUSHMAPSfile,d4
            move.l      (a4,d4.w),d7
            move.w      IM_BRUSHMAPSdir,d4
            move.l      (a4,d4.w),d6
            move.l      IRJ_BRUSHMAPSpat_configdefault,d5
            move.w      IM_PALETTEoutput,d4
            move.l      (a4,d4.w),d4                        ;generate with loaded palette

            bsr         GetDirFile
            tst.l       d0
            beq.s       PAL_DONE                            ;cancel/error

            bsr         SplitDirFile

            movea.l     d4,a3                               ;copy IM_PALETTEoutput to IM_BRUSHMAPSoutput
            move.w      IM_BRUSHMAPSoutput,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString

            move.l      #0,IRJ_BRUSHMAPSdir_configdefault+4
            moveq       #1,d0
;-----------
PAL_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
BRUSHMAPREQUESTER
            tst.l       IRJ_BRUSHMAPSdir_configdefault+4    ;configflag
            beq.s       BRU.05                              ;nope, leave it
            movea.l     IRJ_BRUSHMAPSdir_configdefault,a1
            movea.l     d6,a0
            bsr         EXPANDconfigdefault

BRU.05      move.l      IRJ_BRUSHMAPSpat_configdefault,d5
            move.w      IM_BRUSHMAPSoutput,d4
            move.l      (a4,d4.w),d4                        ;applique/addbrushmap

            bsr         GetDirFile
            tst.l       d0
            beq.s       BRU_DONE                            ;cancel/error

            bsr         SplitDirFile

            move.l      #0,IRJ_BRUSHMAPSdir_configdefault+4
            moveq       #1,d0
;-----------
BRU_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
PREFSREQUESTER
            tst.l       IRJ_PREFSfile_configdefault+4
            bne.s       PRF.05                              ;ok, stick _configdef in there
            move.w      IM_PREFSoutput,d4
            movea.l     (a4,d4.w),a1
            tst.b       (a1)
            bne.s       PRF.15

PRF.05      move.l      IRJ_PREFSfile_configdefault,d1
            move.l      d1,d6                               ;dir
            movea.l     DOSlib,a6
            jsr         _LVOFilePart(a6)
            movea.l     ASLlib,a6
            move.l      d0,d7                               ;file
            cmp.l       d6,d7
            beq.s       PRF.10                              ;dir only, file=null

            movea.l     d0,a3
            cmpi.b      #':',-1(a3) ;- can still cause trouble. ie ram:test.cfg
            bne.s       PRF.08
            movea.l     a3,a0
            lea         IRJ_tempfilespace,a1
            move.l      a1,d7
PRF.06      move.b      (a0)+,(a1)+
            bne.s       PRF.06
            adda.w      #1,a3

PRF.08      move.b      -1(a3),IRJtemp_11                   ;temp
            move.b      #0,-1(a3)                           ;temp
            move.l      IRJ_PREFSpat_configdefault,d5
            move.w      IM_PREFSoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile

            move.b      IRJtemp_11,-1(a3)                   ;restore temp
            bra.s       PRF.20
;-----------
PRF.10      move.l      #nullstring,d6
PRF.15      move.l      IRJ_PREFSpat_configdefault,d5
            move.w      IM_PREFSoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
;-----------
PRF.20      tst.l       d0
            beq         PRF_DONE                            ;cancel/error

            move.w      IM_PREFSfile,d7
            move.l      (a4,d7.w),d7
            move.w      IM_PREFSdir,d6
            move.l      (a4,d6.w),d6

            bsr         SplitDirFile

            movea.l     IRJaslfr_title,a0
            cmpi.b      #'S',13(a0)                         ;"Config File (>S<ave)"
            beq.s       PRF.25

            movea.l     d4,a1                               ;_output
            move.l      #DIRECTORYTABLESTRUCT,d5
            move.l      #1,DTSconfigflag                    ;flag new configdefaults as updated - same flag as when updated by another IRJ
            bsr         CONFIG_read

PRF.25      move.l      #0,IRJ_PREFSfile_configdefault+4    ;clear this flag
            moveq       #1,d0
            bra.s       PRF_DONE
;-----------
PRF_unknown move.l      #0,d0
PRF_DONE    move.l      d0,d1
            movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
PROJECTREQUESTER
            movea.l     IRJaslfr_title,a0
            cmpi.b      #'N',14(a0)                         ;"Project Name (>N<ew)"
            beq.s       NEWPROJECT
            bra         OPENPROJECT
;---------------------------------------------------
NEWPROJECT
            tst.l       IRJ_PROJECTdir_configdefault+4
            beq.s       NPr.10
NPr.05      movea.l     IRJ_PROJECTdir_configdefault,a0
            bra.s       NPr.15

NPr.10      movea.l     d6,a0
            tst.b       (a0)
            beq.s       NPr.05
NPr.15      move.l      a0,d6
            tst.l       IRJ_PROJECTfile_configdefault+4
            beq.s       NPr.25
NPr.20      movea.l     IRJ_PROJECTfile_configdefault,a0
            bra.s       NPr.30
NPr.25      movea.l     d7,a0
            tst.b       (a0)
            beq.s       NPr.20
            lea         nullstring,a0                       ;clear file field
NPr.30      move.l      a0,d7
            move.l      IRJ_PROJECTpat_configdefault,d5
            move.w      IM_PROJECToutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
            tst.l       d0
            beq         PR_DONE                             ;cancel/error - should maybe have not cleared the IRJxxx_configflags unless this succeeds

            movea.l     d4,a2                               ;_output
NPr.35      tst.b       (a2)+                               ;if exists, chop off '.imp'
            bne.s       NPr.35
            cmpi.l      #'.imp',-5(a2)
            bne.s       NPr.40
            move.b      #0,-5(a2)
            move.w      IM_PROJECTfile,d0
            movea.l     (a4,d0.w),a2                       ;not so sure this is necessary, but why take chances
NPr.37      tst.b       (a2)+
            bne.s       NPr.37
            cmpi.l      #'.imp',-5(a2)
            bne.s       NPr.40
            move.b      #0,-5(a2)

NPr.40      move.w      IM_PROJECTdir,d6
            move.l      (a4,d6.w),d6
            move.w      IM_PROJECTfile,d7
            move.l      (a4,d7.w),d7

            bsr         SplitDirFile

            bsr         INITdirs

            move.l      #0,IRJ_PROJECTdir_configdefault+4
            move.l      #0,IRJ_PROJECTfile_configdefault+4
            move.l      #1,d0                               ;signal success
            bra         PR_DONE
;-----------
OPENPROJECT
            tst.l       IRJ_PROJECTdir_configdefault+4
            beq.s       OPr.10
OPr.05      movea.l     IRJ_PROJECTdir_configdefault,a0
            bra.s       OPr.15
OPr.10      movea.l     d6,a0
            tst.b       (a0)
            beq.s       OPr.05
OPr.15      move.l      a0,d6                               ;dir
            tst.l       IRJ_PROJECTfile_configdefault+4
            beq.s       OPr.25
            move.l      #0,IRJ_PROJECTfile_configdefault+4
            movea.l     IRJ_PROJECTfile_configdefault,a0    ;default file
            tst.b       (a0)
            beq.s       OPr.25

            movea.l     d6,a3
            move.l      IRJ_tempdir,d0
            bsr         CopyString                          ;copy from d6 to tempdir
            move.l      IRJ_tempdir,d1
            move.l      IRJ_PROJECTfile_configdefault,d2
            move.l      #100,d3
            movea.l     DOSlib,a6
            jsr         _LVOAddPart(a6)
            movea.l     ASLlib,a6
            move.l      IRJ_tempdir,d6                      ;dir
            movea.l     d6,a0
OPr.20      tst.b       (a0)+
            bne.s       OPr.20
            move.l      #'.imp',-1(a0)
            move.b      #0,3(a0)

OPr.25      move.l      #stagingname,d7
            move.l      IRJ_PROJECTpat_configdefault,d5
            move.w      IM_PROJECToutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
            tst.l       d0
            beq         PR_DONE                             ;cancel/error

            movea.l     d4,a2                               ;_output
OPr.30      tst.b       (a2)+                               ;if exists, chop off '.imp'
            bne.s       OPr.30
            cmpi.l      #'.imp',-13(a2)                     ;don't check to make sure they didn't change staging name
            bne.s       OPr.35
            move.b      #0,-13(a2)

OPr.35      move.w      IM_PROJECTdir,d6
            move.l      (a4,d6.w),d6
            move.w      IM_PROJECTfile,d7
            move.l      (a4,d7.w),d7

            bsr         SplitDirFile

            bsr         INITdirs

            move.l      #0,IRJ_PROJECTdir_configdefault+4
            move.l      #1,d0                               ;signal success
;-----------
PR_DONE     movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
SUBPROJECTREQUESTER
            cmpi.l      #$26,d0
            beq         NEWSUBPROJECT
            cmpi.l      #$106,d0
            beq         OPENSUBPROJECT
;---------------------------------------------------
NEWSUBPROJECT
            cmpi.l      #3,IRJ_ImagineVersion
            beq         NSp.005
            tst.l       IRJ_RENDER40_configdefault+4
            beq.s       NSp.005
            move.w      IM_RENDER40,d0
            move.b      IRJ_RENDER40_configdefault+3,(a4,d0.w)
            move.l      #0,IRJ_RENDER40_configdefault+4
NSp.005     tst.l       IRJ_RENDER_configdefault+4
            beq.s       NSp.010
            move.w      IM_RENDER,d0
            move.b      IRJ_RENDER_configdefault+3,(a4,d0.w)
            move.l      #0,IRJ_RENDER_configdefault+4
NSp.010     tst.l       IRJ_FILEformat_configdefault+4
            beq.s       NSp.015
            move.w      IM_FILEformat,d0
            move.b      IRJ_FILEformat_configdefault+3,(a4,d0.w)
            move.l      #0,IRJ_FILEformat_configdefault+4
NSp.015     tst.l       IRJ_WIDTH_configdefault+4
            beq.s       NSp.020
            move.w      IM_WIDTH,d0
            move.w      IRJ_WIDTH_configdefault+2,(a4,d0.w)
            move.l      #0,IRJ_WIDTH_configdefault+4
NSp.020     tst.l       IRJ_HEIGHT_configdefault+4
            beq.s       NSp.025
            move.w      IM_HEIGHT,d0
            move.w      IRJ_HEIGHT_configdefault+2,(a4,d0.w)
            move.l      #0,IRJ_HEIGHT_configdefault+4
NSp.025     tst.l       IRJ_XASPECT_configdefault+4
            beq.s       NSp.030
            move.w      IM_XASPECT,d0
            move.w      IRJ_XASPECT_configdefault+2,(a4,d0.w)
            move.l      #0,IRJ_XASPECT_configdefault+4
NSp.030     tst.l       IRJ_YASPECT_configdefault+4
            beq.s       NSp.035
            move.w      IM_YASPECT,d0
            move.w      IRJ_YASPECT_configdefault+2,(a4,d0.w)
            move.l      #0,IRJ_YASPECT_configdefault+4
NSp.035     tst.l       IRJ_VIEWmode_configdefault+4
            beq.s       NSp.040
            move.w      IM_VIEWmode,d0
            move.l      IRJ_VIEWmode_configdefault,(a4,d0.w)
            move.l      #0,IRJ_VIEWmode_configdefault+4

NSp.040     tst.l       IRJ_SUBPROJECTfile_configdefault+4
            beq.s       NSp.050
NSp.045     movea.l     IRJ_SUBPROJECTfile_configdefault,a0
            bra.s       NSp.055
NSp.050     movea.l     d7,a0
            tst.b       (a0)
            beq.s       NSp.045
            lea         nullstring,a0               ;clear file field
NSp.055     move.l      a0,d7
            move.l      IRJ_NEWSUBPROJECTpat_configdefault,d5
            move.w      IM_SUBPROJECToutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
            tst.l       d0
            beq         SPR_DONE                    ;cancel/error

            movea.l     d4,a2                       ;_output
NSp.060     tst.b       (a2)+                       ;if exists, chop off '.pix'
            bne.s       NSp.060
            cmpi.l      #'.pix',-5(a2)
            bne.s       NSp.065
            move.b      #0,-5(a2)

NSp.065     move.l      d4,d1                       ;_output
            movea.l     DOSlib,a6
            jsr         _LVOFilePart(a6)
            movea.l     ASLlib,a6
            movea.l     d0,a0
            move.w      IM_SUBPROJECTfile,d0
            movea.l     (a4,d0.w),a1                ;IM_SUBPROJECTdir must remain unchanged
NSp.070     move.b      (a0)+,(a1)+
            bne.s       NSp.070

            move.w      IM_SUBPROJECTpixdir,d4
            lea         (a4,d4.w),a1                ;Imagine pix directory
            movea.l     IRJ_PIXdir_configdefault,a0
            tst.b       (a0)
            beq.s       NSp.080 ;nope, use ProjName/SubProj (.pix)
NSp.075     move.b      (a0)+,(a1)+
            bne.s       NSp.075
            bra.s       NSp.090
NSp.080     move.w      IM_SUBPROJECToutput,d4
            movea.l     (a4,d4.w),a0
NSp.085     move.b      (a0)+,(a1)+
            bne.s       NSp.085
            move.l      #'.pix',-1(a1)
            move.b      #0,3(a1)
NSp.090     move.w      IM_SUBPROJECTanimdir,d4
            lea         (a4,d4.w),a1                ;Imagine anim directory
            movea.l     IRJ_ANIMdir_configdefault,a0
            tst.b       (a0)
            beq.s       NSp.100 ;nope, use ProjName/SubProj (.anim)
NSp.095     move.b      (a0)+,(a1)+
            bne.s       NSp.095
            bra.s       NSp.110
NSp.100     move.w      IM_SUBPROJECToutput,d4
            movea.l     (a4,d4.w),a0
NSp.105     move.b      (a0)+,(a1)+
            bne.s       NSp.105
            move.l      #'.ani',-1(a1)
            move.w      #$6d00,3(a1)     ;'m',0

NSp.110     move.l      #0,IRJ_SUBPROJECTfile_configdefault+4
            move.l      #0,IRJ_PIXdir_configdefault+4
            move.l      #0,IRJ_ANIMdir_configdefault+4
            move.l      #1,d0                       ;signal success
            bra         SPR_DONE
;-----------
OPENSUBPROJECT
            move.w      IM_SUBPROJECTdir,d4
            move.l      (a4,d4.w),d6

            tst.l       IRJ_SUBPROJECTfile_configdefault+4
            beq.s       OSp.010
            move.l      #0,IRJ_SUBPROJECTfile_configdefault+4
            move.l      d6,d1  ;dir
            move.l      IRJ_SUBPROJECTfile_configdefault,a0   ;default file
            tst.b       (a0)
            beq.s       OSp.010
            move.l      a0,d2
            move.l      #100,d3
            movea.l     DOSlib,a6
            jsr         _LVOAddPart(a6)
            movea.l     ASLlib,a6
            movea.l     d6,a0
OSp.005     tst.b       (a0)+
            bne.s       OSp.005
            cmpi.l      #'.pix',-5(a0)              ;make sure it doesn't already end with .pix
            beq.s       OSp.010
            move.l      #'.pix',-1(a0)
            move.b      #0,3(a0)
OSp.010     move.l      #specsname,d7
            move.l      IRJ_OPENSUBPROJECTpat_configdefault,d5
            move.w      IM_SUBPROJECToutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
            move.w      IM_SUBPROJECTdir,d4         ;repair the damage done before GDF to SUBPROJECT dir
            move.l      (a4,d4.w),a2
            tst.b       (a2)
            beq.s       OSp.014
OSp.012     tst.b       (a2)+
            bne.s       OSp.012
            suba.w      #1,a2
OSp.013     move.b      -(a2),d4
            cmpi.b      #'/',d4
            bne.s       OSp.013
            cmpi.l      #'.imp',-4(a2)
            bne.s       OSp.014
            move.b      #0,(a2)
OSp.014     tst.l       d0
            beq         SPR_DONE                    ;GDF cancel/error - should maybe have not cleared the IRJxxx_configflags unless this succeeds

            move.w      IM_SUBPROJECToutput,d4
            movea.l     (a4,d4.w),a2                ;_output
OSp.015     tst.b       (a2)+                       ;if exists, chop off '.pix/specs'
            bne.s       OSp.015
            cmpi.l      #'.pix',-11(a2)             ;don't check to make sure they didn't change staging name
            bne.s       OSp.020   ;oy - cancel out
            move.b      #0,-11(a2)

OSp.020     move.w      IM_SUBPROJECToutput,d4
            move.l      (a4,d4.w),d1                ;_output
            movea.l     DOSlib,a6
            jsr         _LVOFilePart(a6)
            movea.l     d0,a0
            move.w      IM_SUBPROJECTfile,d4
            movea.l     (a4,d4.w),a1
OSp.025     move.b      (a0)+,(a1)+
            bne.s       OSp.025

            move.l      #0,IRJ_SUBPROJECTfile_configdefault+4
            move.l      #1,d0                       ;signal success
            bra.s       SPR_DONE
;-----------
SPR_unknown move.l      #0,d0
SPR_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
BROWSEREQUESTER
            cmpi.b      #$00,d3
            beq         BRO.05                      ;OBJECTinfo
            bra         BRO.30                      ;BACKDROPbrushmap / GLOBALbrushmap
;---------------------------------------------------
BRO.05      tst.l       IRJ_OBJECTdir_configdefault+4   ;configflag
            beq.s       BRO.10                      ;nope, leave it
            movea.l     IRJ_OBJECTdir_configdefault,a1
            movea.l     IRJ_OBJECTdir,a0
            bsr         EXPANDconfigdefault
BRO.10      move.l      IRJ_OBJECTfile,d7  ;file
            move.l      IRJ_OBJECTdir,d6   ;dir
            move.l      IRJ_OBJECTpat_configdefault,d5
            move.w      IM_OBJECToutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile                  ;placed in OBJECT_output
            tst.l       d0
            beq         BRO_DONE                    ;cancel/error

            move.l      IRJ_OBJECTdir,d6            ;dir
            move.l      IRJ_OBJECTfile,d7           ;file

            bsr         SplitDirFile

            movea.l     IRJ_OBJECTdir,a3
            move.w      IM_BROWSEdir,d4
            move.l      (a4,d4.w),d0
            jsr         CopyString
            movea.l     IRJ_OBJECTfile,a3
            move.w      IM_BROWSEfile,d4
            move.l      (a4,d4.w),d0
            jsr         CopyString

            move.w      IM_OBJECToutput,d4
            movea.l     (a4,d4.w),a3                ;copy IM_objectoutput to IM_BROZoutput
            move.w      IM_BROWSEoutput,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString

            move.l      #0,IRJ_OBJECTdir_configdefault+4
            moveq       #1,d0
            bra         BRO_DONE
;-----------
BRO.30      tst.l       IRJ_BRUSHMAPSdir_configdefault+4   ;configflag
            beq.s       BRO.35                      ;nope, leave it
            movea.l     IRJ_BRUSHMAPSdir_configdefault,a1
            move.w      IM_BRUSHMAPSdir,d4
            movea.l     (a4,d4.w),a0
            bsr         EXPANDconfigdefault
BRO.35      move.w      IM_BRUSHMAPSfile,d4
            move.l      (a4,d4.w),d7                ;file
            move.w      IM_BRUSHMAPSdir,d4
            move.l      (a4,d4.w),d6                ;dir
            move.l      IRJ_BRUSHMAPSpat_configdefault,d5
            move.w      IM_BRUSHMAPSoutput,d4

            bsr         GetDirFile                  ;placed in BRSHMAP_output
            tst.l       d0
            beq.s       BRO_DONE                    ;cancel/error

            move.w      IM_BRUSHMAPSdir,d6
            move.l      (a4,d6.w),d6                ;dir
            move.w      IM_BRUSHMAPSfile,d7
            move.l      (a4,d7.w),d7                ;file

            bsr         SplitDirFile

            move.w      IM_BRUSHMAPSdir,d4
            movea.l     (a4,d4.w),a3
            move.w      IM_BROWSEdir,d4
            move.l      (a4,d4.w),d0
            jsr         CopyString
            move.w      IM_BRUSHMAPSfile,d4
            movea.l     (a4,d4.w),a3
            move.w      IM_BROWSEfile,d4
            move.l      (a4,d4.w),d0
            jsr         CopyString

            move.w      IM_BRUSHMAPSoutput,d4
            movea.l     (a4,d4.w),a3                ;copy IM_BRUSHMAPSoutput to IM_BROWSEoutput
            move.w      IM_BROWSEoutput,d4
            move.l      (a4,d4.w),d0
            bsr         CopyString

            move.l      #0,IRJ_BRUSHMAPSdir_configdefault+4
            moveq       #1,d0
            bra.s       BRO_DONE
;-----------
BRO_unknown move.l      #0,d0
BRO_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
OBJECTREQUESTER
            cmpi.l      #3,IRJ_ImagineVersion
            beq         LOADSAVE30
            cmpi.l      #4,IRJ_ImagineVersion
            beq         LOADSAVE40
            cmpi.l      #5,IRJ_ImagineVersion
            beq         LOADSAVE50
            bra         LSR_unknown
;---------------------------------------------------------------------------
LOADSAVE30
            move.l      156(a7),d0
            sub.l       IRJ_ImagineCodeBase,d0

            cmpi.l      #$64000,d0
            blt         LSR.025

            cmpi.l      #$79000,d0
            blt         LSR.045

            cmpi.l      #$7cd00,d0
            blt         LSR.055

            cmpi.l      #$7e000,d0
            blt         LSR.025

            cmpi.l      #$80200,d0
            blt         LSR.065

            cmpi.l      #$80b00,d0
            blt         LSR.025

            cmpi.l      #$82000,d0
            blt         LSR.065

            cmpi.l      #$85000,d0
            blt         LSR.025

            cmpi.l      #$b0000,d0
            blt         LSR.065

            bra         LSR_unknown
;---------------------------------------------------------------------------
LOADSAVE40
            move.l      160(a7),d0
            sub.l       IRJ_ImagineCodeBase,d0

            cmpi.l      #$64000,d0
            blt         LSR.025

            cmpi.l      #$8e000,d0
            blt         LSR.045

            cmpi.l      #$8e900,d0
            blt         LSR.055

            cmpi.l      #$8f000,d0
            blt         LSR.025

            cmpi.l      #$92000,d0
            blt         LSR.065
            cmpi.l      #$92c00,d0
            blt         LSR.025
            cmpi.l      #$93800,d0
            blt         LSR.065
            cmpi.l      #$98000,d0
            blt         LSR.025

            cmpi.l      #$b1000,d0
            blt         LSR.035

            cmpi.l      #$ce000,d0
            blt         LSR.065

            bra         LSR_unknown
;---------------------------------------------------------------------------
LOADSAVE50
            move.l      160(a7),d0
            sub.l       IRJ_ImagineCodeBase,d0

            cmpi.l      #$64000,d0
            blt         LSR.025

            cmpi.l      #$8e000,d0
            blt         LSR.045

            cmpi.l      #$92f00,d0
            blt         LSR.055

            cmpi.l      #$93800,d0
            blt         LSR.025

            cmpi.l      #$96b00,d0
            blt         LSR.065
            cmpi.l      #$97800,d0
            blt         LSR.025
            cmpi.l      #$98400,d0
            blt         LSR.065
            cmpi.l      #$9d000,d0
            blt         LSR.025

            cmpi.l      #$b7000,d0
            blt         LSR.035

            cmpi.l      #$d4000,d0
            blt         LSR.065

            bra         LSR_unknown
;---------------------------------------------------
;---------------------------------------------------
LSR.025     tst.l       IRJ_OBJECTdir_configdefault+4 ;configflag
            beq.s       LSR.030                     ;nope, leave it
            movea.l     IRJ_OBJECTdir_configdefault,a1
            movea.l     IRJ_OBJECTdir,a0
            bsr         EXPANDconfigdefault
            move.l      #0,IRJ_OBJECTdir_configdefault+4
LSR.030     move.l      IRJ_OBJECTfile,d7
            move.l      IRJ_OBJECTdir,d6
            move.l      IRJ_OBJECTpat_configdefault,d5
            bra         LOADSAVE
;-----
LSR.035     tst.l       IRJ_DXFdir_configdefault+4  ;configflag
            beq.s       LSR.040                     ;nope, leave it
            movea.l     IRJ_DXFdir_configdefault,a1
            movea.l     IRJ_DXFdir,a0
            bsr         EXPANDconfigdefault
            move.l      #0,IRJ_DXFdir_configdefault+4
LSR.040     move.l      IRJ_DXFfile,d7
            move.l      IRJ_DXFdir,d6
            move.l      IRJ_DXFpat_configdefault,d5
            bra         LOADSAVE
;-----
LSR.045     tst.l       IRJ_FORMdir_configdefault+4 ;configflag
            beq.s       LSR.050                     ;nope, leave it
            movea.l     IRJ_FORMdir_configdefault,a1
            movea.l     IRJ_FORMdir,a0
            bsr         EXPANDconfigdefault
            move.l      #0,IRJ_FORMdir_configdefault+4
LSR.050     move.l      IRJ_FORMfile,d7
            move.l      IRJ_FORMdir,d6
            move.l      IRJ_FORMpat_configdefault,d5
            bra         LOADSAVE
;-----
LSR.055     tst.l       IRJ_CYCLEdir_configdefault+4 ;configflag
            beq.s       LSR.060                     ;nope, leave it
            movea.l     IRJ_CYCLEdir_configdefault,a1
            movea.l     IRJ_CYCLEdir,a0
            bsr         EXPANDconfigdefault
            move.l      #0,IRJ_CYCLEdir_configdefault+4
LSR.060     move.l      IRJ_CYCLEfile,d7
            move.l      IRJ_CYCLEdir,d6
            move.l      IRJ_CYCLEpat_configdefault,d5
            bra         LOADSAVE
;-----
LSR.065     tst.l       IRJ_SPLINEdir_configdefault+4 ;configflag
            beq.s       LSR.070                     ;nope, leave it
            movea.l     IRJ_SPLINEdir_configdefault,a1
            movea.l     IRJ_SPLINEdir,a0
            bsr         EXPANDconfigdefault
            move.l      #0,IRJ_SPLINEdir_configdefault+4
LSR.070     move.l      IRJ_SPLINEfile,d7
            move.l      IRJ_SPLINEdir,d6
            move.l      IRJ_SPLINEpat_configdefault,d5
            bra         LOADSAVE
;---------------------------------------------------
LOADSAVE    move.w      IM_OBJECToutput,d4

            bsr         GetDirFile                  ;output = IM_OBJECToutput(a4)
            tst.l       d0
            beq         LSR_DONE                    ;cancel/error

            bsr         SplitDirFile                ;back into d6&d7

            movea.l     d6,a1
            move.w      IM_OBJECTdir,d6
            movea.l     (a4,d6.w),a2
LS.05       move.b      (a1)+,(a2)+
            bne.s       LS.05
            movea.l     d7,a1
            move.w      IM_OBJECTfile,d7
            movea.l     (a4,d7.w),a2
LS.10       move.b      (a1)+,(a2)+
            bne.s       LS.10

            moveq       #1,d0
            bra.s       LSR_DONE
;----------
LSR_unknown 
            movem.l     d0-d1/d7/a0-a1/a6,-(sp)
            move.l      d0,d7
            movea.l     _AbsExecBase,a6
            jsr         _LVOAlert(a6)
            movem.l     (sp)+,d0-d1/d7/a0-a1/a6

            move.l      #0,d0
LSR_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
REXXREQUESTER
            tst.l       IRJ_REXXdir_configdefault+4         ;configflag
            beq.s       REX.05                              ;nope, leave it
            movea.l     IRJ_REXXdir_configdefault,a1
            move.w      IM_REXXdir,d4
            movea.l     (a4,d4.w),a0
            bsr         EXPANDconfigdefault

REX.05      move.w      IM_REXXfile,d4
            move.l      (a4,d4.w),d7
            move.w      IM_REXXdir,d4
            move.l      (a4,d4.w),d6
            move.l      IRJ_REXXpat_configdefault,d5
            move.w      IM_REXXoutput,d4
            move.l      (a4,d4.w),d4

            bsr         GetDirFile
            tst.l       d0
            beq.s       REX_DONE                            ;cancel/error

            bsr         SplitDirFile

            move.l      #0,IRJ_REXXdir_configdefault+4
            moveq       #1,d0
;-----------
REX_DONE    movem.l     (sp)+,d1-d7/a0-a3/a6
            rts
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
