(include "sci.sh")
(use "Main")
(use "Class_255_0")
(script 990)


(local
    local0
    local1
    local2
    local3
    local4

)
(procedure public (proc990_0 param1)
    (var temp0, temp1[33], temp34[40])
    (asm
code_06fc:pushi   13
        pushi   990
        pushi   2
        pushi   66
        pushi   0
        pushi   82
        pushi   2
        lea     @temp1
        push    
        lsp     param1
        callk   StrCpy, 4
        push    
        pushi   29
        pushi   162
        lofsa   "OK"
        push    
        pushi   1
        pushi   162
        lofsa   "Cancel"
        push    
        pushi   0
        calle   Print, 26
        sat     temp0
        not     
        bnt     code_0733
        ldi     0
        ret     
code_0733:pushi   1
        lea     @temp1
        push    
        callk   StrLen, 2
        not     
        bnt     code_0747
        pushi   1
        lea     @temp1
        push    
        callk   {kernel[98]}, 2
code_0747:pushi   1
        lea     @temp1
        push    
        callk   {kernel[100]}, 2
        bnt     code_0762
        pushi   2
        lsp     param1
        lea     @temp1
        push    
        callk   StrCpy, 4
        ldi     1
        ret     
        jmp     code_06fc
code_0762:pushi   3
        pushi   4
        lea     @temp34
        push    
        pushi   990
        pushi   3
        lea     @temp1
        push    
        callk   Format, 8
        push    
        pushi   66
        pushi   0
        calle   Print, 6
        jmp     code_06fc
        ret     
    )
)


(procedure (localproc_046e)
    (var temp0[41])
    return 
        (if (== self Restore)
            0
        )(else
            (if (localproc_0784())
                1
            )(else
                (if (local2)
                    2
                )(else
                    3
                )
            )
        )
)


(procedure (localproc_0784)
    (if (< local2 20)
        kernel[99](global30)
    )
)


(class SRDialog of Dialog
    (properties
        elements 0
        size 0
        text 0
        window 0
        theItem 0
        nsTop 0
        nsLeft 0
        nsBottom 0
        nsRight 0
        time 0
        timer 0
        busy 0
    )

    (method (init param1 param2 param3)
        = local2 ((send gGame:name()) param2 param3)
        = local4 localproc_046e()
        = nsBottom 0
        (if (== local4 1)
            (editI:
                text(StrCpy(param1 param2))
                font(global23)
                setSize()
                moveTo(4 4)
            )
            (self:
                add(editI)
                setSize()
            )
        )
        (selectorI:
            text(param2)
            font(global23)
            setSize()
            moveTo(4 + nsBottom 4)
        )
        = local1 (+ (selectorI:nsRight()) 4)
        (okI:
            text(
                (switch (local4)
                    (case 0
                        ("Restore"  )
                    )
                    (case 1
                        ("  Save  "  )
                    )
                    (default 
                        ("Replace" )
                    )
                )
)
            setSize()
            moveTo(local1 (selectorI:nsTop()))
        )
        (okI:state(
            (if (== local4 3)
                0
            )(else
                3
            )
))
        (cancelI:
            setSize()
            moveTo(local1 + (okI:nsBottom()) 4)
        )
        (changeDirI:
            setSize()
            moveTo(local1 + (cancelI:nsBottom()) 4)
        )
        (self:
            add(selectorI okI cancelI changeDirI)
            setSize()
        )
        (textI:
            text(
                (switch (local4)
                    (case 0
                        ("Select the game that you would like to restore."  )
                    )
                    (case 1
                        ("Type the description of this saved game."  )
                    )
                    (default 
                        ("This directory/disk can hold no more saved games. You must replace one of your saved games or use Change Directory to save on a different directory/disk." )
                    )
                )
)
            setSize(- (- nsRight nsLeft) 8)
            moveTo(4 4)
        )
        = local1 (+ (textI:nsBottom()) 4)
        (if (== local4 1)
            (editI:move(0 local1))
        )
        (selectorI:move(0 local1))
        (okI:
            move(0 local1)
            state(& (okI:state()) $fff7)
        )
        (changeDirI:
            move(0 local1)
            state(& (changeDirI:state()) $fff7)
        )
        (cancelI:
            move(0 local1)
            state(& (cancelI:state()) $fff7)
        )
        (self:
            add(textI)
            setSize()
            center()
            open(4 15)
        )
    )


    (method (doit param1)
        (var temp0, temp1, temp2, temp3, temp4[361], temp365[21], temp386[40])
        (asm
            pushSelf
            class   Restore
            eq?     
            bnt     code_0252
            lap     paramTotal
            bnt     code_0252
            lap     param1
            bnt     code_0252
            pushi   1
            pushi   4
            lea     @temp386
            push    
            pushi   990
            pushi   0
            pushi   #name
            pushi   0
            lag     gGame
            send    4
            push    
            callk   Format, 8
            push    
            callk   FOpen, 2
            sat     temp1
            push    
            ldi     65535
            eq?     
            bnt     code_024c
            ret     
code_024c:  pushi   1
            lst     temp1
            callk   FClose, 2
code_0252:  pushi   #init
            pushi   3
            lsp     param1
            lea     @temp4
            push    
            lea     @temp365
            push    
            self    10
code_0265:  lsl     local4
            dup     
            ldi     0
            eq?     
            bnt     code_027f
            lal     local2
            bnt     code_029c
            lofsa   okI
            jmp     code_029c
            lofsa   changeDirI
            jmp     code_029c
code_027f:  dup     
            ldi     1
            eq?     
            bnt     code_028c
            lofsa   editI
            jmp     code_029c
code_028c:  dup     
            ldi     2
            eq?     
            bnt     code_0299
            lofsa   okI
            jmp     code_029c
code_0299:  lofsa   changeDirI
code_029c:  toss    
            sal     local0
            pushi   #doit
            pushi   1
            push    
            super   Dialog, 6
            sal     local1
            pushi   #indexOf
            pushi   1
            pushi   #cursor
            pushi   0
            lofsa   selectorI
            send    4
            push    
            lofsa   selectorI
            send    6
            sal     local3
            push    
            ldi     18
            mul     
            sat     temp3
            lsl     local1
            lofsa   changeDirI
            eq?     
            bnt     code_034a
            pushi   1
            lsg     global30
            call    proc990_0, 2
            bnt     code_0265
            pushi   3
            pushi   #name
            pushi   0
            lag     gGame
            send    4
            push    
            lea     @temp4
            push    
            lea     @temp365
            push    
            callk   {}, 6
            sal     local2
            lal     local4
            sat     temp0
            pushi   0
            call    localproc_046e, 0
            sal     local4
            push    
            ldi     0
            ne?     
            bnt     code_033e
            lst     temp0
            lal     local4
            ne?     
            bnt     code_0322
            pushi   #dispose
            pushi   0
            pushi   170
            pushi   3
            lsp     param1
            lea     @temp4
            push    
            lea     @temp365
            push    
            self    14
            jmp     code_033e
code_0322:  pushi   #cursor
            pushi   1
            pushi   1
            pushi   2
            lsp     param1
            lea     @temp4
            push    
            callk   StrCpy, 4
            push    
            callk   StrLen, 2
            push    
            pushi   166
            pushi   0
            lofsa   editI
            send    10
code_033e:  pushi   #draw
            pushi   0
            lofsa   selectorI
            send    4
            jmp     code_0265
code_034a:  lsl     local4
            ldi     2
            eq?     
            bnt     code_0380
            lsl     local1
            lofsa   okI
            eq?     
            bnt     code_0380
            pushi   #doit
            pushi   1
            pushi   2
            lsp     param1
            lat     temp3
            lea     @temp4
            push    
            callk   StrCpy, 4
            push    
            lofsa   GetReplaceName
            send    6
            bnt     code_0265
            lal     local3
            lati    temp365
            sat     temp2
            jmp     code_0465
            jmp     code_0265
code_0380:  lsl     local4
            ldi     1
            eq?     
            bnt     code_040b
            lsl     local1
            lofsa   okI
            eq?     
            bt      code_039a
            lsl     local1
            lofsa   editI
            eq?     
            bnt     code_040b
code_039a:  pushi   1
            lsp     param1
            callk   StrLen, 2
            push    
            ldi     0
            eq?     
            bnt     code_03b9
            pushi   4
            pushi   990
            pushi   1
            pushi   66
            pushi   0
            calle   Print, 8
            jmp     code_0265
code_03b9:  ldi     65535
            sat     temp2
            ldi     0
            sal     local1
code_03c1:  lsl     local1
            lal     local2
            lt?     
            bnt     code_03e3
            pushi   2
            lsp     param1
            lsl     local1
            ldi     18
            mul     
            lea     @temp4
            push    
            callk   StrCmp, 4
            sat     temp2
            not     
            bt      code_03e3
            +al     local1
            jmp     code_03c1
code_03e3:  lat     temp2
            not     
            bnt     code_03f1
            lal     local1
            lati    temp365
            jmp     code_0403
code_03f1:  lsl     local2
            ldi     20
            eq?     
            bnt     code_0401
            lal     local3
            lati    temp365
            jmp     code_0403
code_0401:  lal     local2
code_0403:  sat     temp2
            jmp     code_0465
            jmp     code_0265
code_040b:  lsl     local1
            lofsa   okI
            eq?     
            bnt     code_0421
            lal     local3
            lati    temp365
            sat     temp2
            jmp     code_0465
            jmp     code_0265
code_0421:  lsl     local1
            ldi     0
            eq?     
            bt      code_0432
            lsl     local1
            lofsa   cancelI
            eq?     
            bnt     code_043c
code_0432:  ldi     65535
            sat     temp2
            jmp     code_0465
            jmp     code_0265
code_043c:  lsl     local4
            ldi     1
            eq?     
            bnt     code_0265
            pushi   #cursor
            pushi   1
            pushi   1
            pushi   2
            lsp     param1
            lat     temp3
            lea     @temp4
            push    
            callk   StrCpy, 4
            push    
            callk   StrLen, 2
            push    
            pushi   166
            pushi   0
            lofsa   editI
            send    10
            jmp     code_0265
code_0465:  pushi   #dispose
            pushi   0
            self    4
            lat     temp2
            ret     
        )
    )

)
(class Restore of SRDialog
    (properties
        elements 0
        size 0
        text "Restore a Game"
        window 0
        theItem 0
        nsTop 0
        nsLeft 0
        nsBottom 0
        nsRight 0
        time 0
        timer 0
        busy 0
    )
)
(class Save of SRDialog
    (properties
        elements 0
        size 0
        text "Save a Game"
        window 0
        theItem 0
        nsTop 0
        nsLeft 0
        nsBottom 0
        nsRight 0
        time 0
        timer 0
        busy 0
    )
)
(instance GetReplaceName of Dialog
    (properties)

    (method (doit param1)
        (var temp0)
        (text1:
            setSize()
            moveTo(4 4)
        )
        (self:
            add(text1)
            setSize()
        )
        (oldName:
            text(param1)
            font(global23)
            setSize()
            moveTo(4 nsBottom)
        )
        (self:
            add(oldName)
            setSize()
        )
        (text2:
            setSize()
            moveTo(4 nsBottom)
        )
        (self:
            add(text2)
            setSize()
        )
        (newName:
            text(param1)
            font(global23)
            setSize()
            moveTo(4 nsBottom)
        )
        (self:
            add(newName)
            setSize()
        )
        (button1:
            nsLeft(0)
            nsTop(0)
            setSize()
        )
        (button2:
            nsLeft(0)
            nsTop(0)
            setSize()
        )
        (button2:moveTo((- nsRight (+ (button2:nsRight()) 4)) nsBottom))
        (button1:moveTo((- (button2:nsLeft()) (+ (button1:nsRight()) 4)) nsBottom))
        (self:
            add(button1 button2)
            setSize()
            center()
            open(0 15)
        )
        = temp0 (super:doit(newName))
        (self:dispose())
        return 
            (if (== temp0 newName)
            )(else
                == temp0 button1
            )
    )

)
(instance selectorI of DSelector
    (properties
        x 36
        y 8
    )
)
(instance editI of DEdit
    (properties
        max 35
    )
)
(instance okI of DButton
    (properties)
)
(instance cancelI of DButton
    (properties
        text " Cancel "
    )
)
(instance changeDirI of DButton
    (properties
        text "Change
\nDirectory"
    )
)
(instance textI of DText
    (properties
        font 0
    )
)
(instance text1 of DText
    (properties
        text "Replace"
        font 0
    )
)
(instance text2 of DText
    (properties
        text "with:"
        font 0
    )
)
(instance oldName of DText
    (properties)
)
(instance newName of DEdit
    (properties
        max 35
    )
)
(instance button1 of DButton
    (properties
        text "Replace"
    )
)
(instance button2 of DButton
    (properties
        text "Cancel"
    )
)
