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


(local
    local0
    local1
    local2
    local3
    local4
    local5[4] = (2830 2838 2847 2847 )
    local9[4] = (2855 2903 2944 2944 )

)
(procedure public (proc990_0 param1)
    (var temp0, temp1[33], temp34[40])
    (asm
code_07f8:pushi   13
        pushi   990
        pushi   3
        pushi   33
        pushi   0
        pushi   41
        pushi   2
        lea     @temp1
        push    
        lsp     param1
        callk   StrCpy, 4
        push    
        pushi   29
        pushi   81
        lofsa   "OK"
        push    
        pushi   1
        pushi   81
        lofsa   "Cancel"
        push    
        pushi   0
        calle   Print, 26
        sat     temp0
        not     
        bnt     code_082c
        ldi     0
        ret     
code_082c:pushi   1
        lea     @temp1
        push    
        callk   StrLen, 2
        not     
        bnt     code_0840
        pushi   1
        lea     @temp1
        push    
        callk   GetCWD, 2
code_0840:pushi   1
        lea     @temp1
        push    
        callk   ValidPath, 2
        bnt     code_085b
        pushi   2
        lsp     param1
        lea     @temp1
        push    
        callk   StrCpy, 4
        ldi     1
        ret     
        jmp     code_07f8
code_085b:pushi   3
        pushi   4
        lea     @temp34
        push    
        pushi   990
        pushi   4
        lea     @temp1
        push    
        callk   Format, 8
        push    
        pushi   33
        pushi   0
        calle   Print, 6
        jmp     code_07f8
        ret     
    )
)


(procedure (localproc_053e)
    return 
        (if (== self Restore)
            0
        )(else
            (if (localproc_087b())
                1
            )(else
                (if (local2)
                    2
                )(else
                    3
                )
            )
        )
)


(procedure (localproc_087b)
    (if (< local2 20)
        CheckFreeSpace(global29)
    )
)


(procedure (localproc_088a)
    Print("You must type a description for the game.")
)


(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
        busy 0
        caller 0
        seconds 0
        lastSeconds 0
    )

    (method (init param1 param2 param3)
        = window gSq4Win
        = nsBottom 0
        (if (== (= local2 GetSaveFiles((send global1:name) param2 param3)) -1)
            return 0
        )
        (if (== (= local4 localproc_053e()) 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)
            state(2)
        )
        = local1 (+ (selectorI:nsRight) 4)
        (okI:
            text(local5[local4])
            setSize()
            moveTo(local1 (selectorI:nsTop))
            state(
                (if (((== local4 0) and not local2) or (== local4 3))
                    0
                )(else
                    3
                )
)
        )
        (deleteI:
            setSize()
            moveTo(local1 + (okI:nsBottom) 4)
            state(
                (if (not local2)
                    0
                )(else
                    3
                )
)
        )
        (changeDirI:
            setSize()
            moveTo(local1 + (deleteI:nsBottom) 4)
            state(& (changeDirI:state) $fff7)
        )
        (cancelI:
            setSize()
            moveTo(local1 + (changeDirI:nsBottom) 4)
            state(& (cancelI:state) $fff7)
        )
        (self:
            add(selectorI okI deleteI changeDirI cancelI)
            setSize()
        )
        (textI:
            text(local9[local4])
            setSize(- (- nsRight nsLeft) 8)
            moveTo(4 4)
        )
        (self:eachElementDo(161 0 (= local1 (+ (textI:nsBottom) 4))))
        (self:
            add(textI)
            setSize()
            center()
            open(4 15)
        )
        return 1
    )


    (method (doit param1)
        (var temp0, temp1, temp2, temp3[361], temp364[21], temp385[80])
        (asm
            pushSelf
            lofsa   Restore
            eq?     
            bnt     code_021c
            lap     paramTotal
            bnt     code_021c
            lap     param1
            bnt     code_021c
            pushi   2
            pushi   0
            pushi   4
            lea     @temp385
            push    
            pushi   990
            pushi   0
            pushi   #name
            pushi   0
            lag     global1
            send    4
            push    
            callk   Format, 8
            push    
            callk   FileIO, 4
            sat     temp0
            push    
            ldi     65535
            eq?     
            bnt     code_0215
            ret     
code_0215:  pushi   2
            pushi   1
            lst     temp0
            callk   FileIO, 4
code_021c:  pushi   #init
            pushi   3
            lsp     param1
            lea     @temp3
            push    
            lea     @temp364
            push    
            self    10
            not     
            bnt     code_0235
            ldi     65535
            ret     
code_0235:  lsl     local4
            dup     
            ldi     0
            eq?     
            bnt     code_024f
            lal     local2
            bnt     code_026c
            lofsa   okI
            jmp     code_026c
            lofsa   changeDirI
            jmp     code_026c
code_024f:  dup     
            ldi     1
            eq?     
            bnt     code_025c
            lofsa   editI
            jmp     code_026c
code_025c:  dup     
            ldi     2
            eq?     
            bnt     code_0269
            lofsa   okI
            jmp     code_026c
code_0269:  lofsa   changeDirI
code_026c:  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     temp2
            lsl     local1
            lofsa   changeDirI
            eq?     
            bnt     code_02e3
            pushi   1
            lsg     global29
            call    localproc_07f6, 2
            bnt     code_0235
            pushi   3
            pushi   #name
            pushi   0
            lag     global1
            send    4
            push    
            lea     @temp3
            push    
            lea     @temp364
            push    
            callk   GetSaveFiles, 6
            sal     local2
            push    
            ldi     65535
            eq?     
            bnt     code_02cb
            ldi     65535
            sat     temp1
            jmp     code_0528
code_02cb:  pushi   #dispose
            pushi   0
            pushi   102
            pushi   3
            lsp     param1
            lea     @temp3
            push    
            lea     @temp364
            push    
            self    14
            jmp     code_0235
code_02e3:  lsl     local4
            ldi     2
            eq?     
            bnt     code_0319
            lsl     local1
            lofsa   okI
            eq?     
            bnt     code_0319
            pushi   #doit
            pushi   1
            pushi   2
            lsp     param1
            lat     temp2
            lea     @temp3
            push    
            callk   StrCpy, 4
            push    
            lofsa   GetReplaceName
            send    6
            bnt     code_0235
            lal     local3
            lati    temp364
            sat     temp1
            jmp     code_0528
            jmp     code_0235
code_0319:  lsl     local4
            ldi     1
            eq?     
            bnt     code_03cf
            lsl     local1
            lofsa   okI
            eq?     
            bt      code_0333
            lsl     local1
            lofsa   editI
            eq?     
            bnt     code_03cf
code_0333:  pushi   1
            lsp     param1
            callk   StrLen, 2
            push    
            ldi     0
            eq?     
            bnt     code_0348
            pushi   0
            call    localproc_088a, 0
            jmp     code_0235
code_0348:  ldi     65535
            sat     temp1
            ldi     0
            sal     local1
code_0350:  lsl     local1
            lal     local2
            lt?     
            bnt     code_0372
            pushi   2
            lsp     param1
            lsl     local1
            ldi     18
            mul     
            lea     @temp3
            push    
            callk   StrCmp, 4
            sat     temp1
            not     
            bt      code_0372
            +al     local1
            jmp     code_0350
code_0372:  lat     temp1
            not     
            bnt     code_0382
            lal     local1
            lati    temp364
            sat     temp1
            jmp     code_0528
code_0382:  lsl     local2
            ldi     20
            eq?     
            bnt     code_0394
            lal     local3
            lati    temp364
            sat     temp1
            jmp     code_0528
code_0394:  ldi     0
            sat     temp1
code_0398:  ldi     1
            bnt     code_0528
            ldi     0
            sal     local1
code_03a1:  lsl     local1
            lal     local2
            lt?     
            bnt     code_03b9
            lst     temp1
            lal     local1
            lati    temp364
            eq?     
            bt      code_03b9
            +al     local1
            jmp     code_03a1
code_03b9:  lsl     local1
            lal     local2
            eq?     
            bnt     code_03c4
            jmp     code_0528
code_03c4:  +at     temp1
            jmp     code_0398
            jmp     code_0528
            jmp     code_0235
code_03cf:  lsl     local1
            lofsa   deleteI
            eq?     
            bnt     code_04cf
            pushi   8
            lofsa   "Are you sure you want to
\ndelete this saved game?"
            push    
            pushi   101
            pushi   81
            lofsa   " No "
            push    
            pushi   0
            pushi   81
            lofsa   "Yes"
            push    
            pushi   1
            calle   proc940_0, 16
            not     
            bnt     code_03fb
            jmp     code_0235
code_03fb:  pushi   #name
            pushi   1
            pushi   5
            lea     @temp385
            push    
            pushi   990
            pushi   1
            lsg     global29
            pushi   #name
            pushi   0
            lag     global1
            send    4
            push    
            callk   Format, 10
            push    
            pushi   171
            pushi   1
            pushi   2
            pushi   #new
            pushi   0
            class   Class_993_0
            send    4
            sat     temp0
            send    12
            ldi     2570
            sat     temp1
            ldi     0
            sal     local1
code_0431:  lsl     local1
            lal     local2
            lt?     
            bnt     code_0475
            lsl     local1
            lal     local3
            ne?     
            bnt     code_0470
            pushi   #write
            pushi   2
            lal     local1
            lea     @temp364
            push    
            pushi   2
            lat     temp0
            send    8
            pushi   305
            pushi   #superClass
            lsl     local1
            ldi     18
            mul     
            lea     @temp3
            push    
            lat     temp0
            send    6
            pushi   #write
            pushi   2
            lea     @temp1
            push    
            pushi   1
            lat     temp0
            send    8
code_0470:  +al     local1
            jmp     code_0431
code_0475:  ldi     65535
            sat     temp1
            pushi   #write
            pushi   2
            lea     @temp1
            push    
            pushi   2
            pushi   309
            pushi   0
            pushi   103
            pushi   0
            lat     temp0
            send    16
            pushi   6
            lea     @temp385
            push    
            pushi   990
            pushi   2
            lsg     global29
            pushi   #name
            pushi   0
            lag     global1
            send    4
            push    
            lal     local3
            lsti    temp364
            callk   Format, 12
            pushi   2
            pushi   4
            lea     @temp385
            push    
            callk   FileIO, 4
            pushi   #dispose
            pushi   0
            pushi   102
            pushi   3
            lsp     param1
            lea     @temp3
            push    
            lea     @temp364
            push    
            self    14
            jmp     code_0235
code_04cf:  lsl     local1
            lofsa   okI
            eq?     
            bnt     code_04e5
            lal     local3
            lati    temp364
            sat     temp1
            jmp     code_0528
            jmp     code_0235
code_04e5:  lsl     local1
            ldi     0
            eq?     
            bt      code_04f6
            lsl     local1
            lofsa   cancelI
            eq?     
            bnt     code_0500
code_04f6:  ldi     65535
            sat     temp1
            jmp     code_0528
            jmp     code_0235
code_0500:  lsl     local4
            ldi     1
            eq?     
            bnt     code_0235
            pushi   #cursor
            pushi   1
            pushi   1
            pushi   2
            lsp     param1
            lat     temp2
            lea     @temp3
            push    
            callk   StrCpy, 4
            push    
            callk   StrLen, 2
            push    
            pushi   83
            pushi   0
            lofsa   editI
            send    10
            jmp     code_0235
code_0528:  pushi   1
            pushi   993
            callk   DisposeScript, 2
            pushi   1
            pushi   940
            callk   DisposeScript, 2
            pushi   #dispose
            pushi   0
            self    4
            lat     temp1
            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
        busy 0
        caller 0
        seconds 0
        lastSeconds 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
        busy 0
        caller 0
        seconds 0
        lastSeconds 0
    )
)
(instance GetReplaceName of Dialog
    (properties)

    (method (doit param1)
        (var temp0)
        = window gSq4Win
        (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())
        (if (not StrLen(param1))
            localproc_088a()
            = temp0 0
        )
        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 deleteI of DButton
    (properties
        text " Delete "
    )
)
(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"
    )
)
