(include "sci.sh")
(use "Main")
(use "n255")
(use "Print")
(use "DIcon")
(use "n948")
(use "CueObj")
(use "SysWindow")
(use "File")
(use "View")
(use "Obj")
(script 948)


(local
    local0[50]
    local50[30]
    local80[100]
    local180[100]
    local280[100]
    local380
    local381[6] = (0 0 0 0 0 0 )
    local387
    local388 = 1
    local389
    local390
    local391
    theGSq5Win
    local393

)
(procedure (localproc_0286 param1)
    (send param1:sightAngle(proc255_1("sight angle?" 40)))
)


(procedure (localproc_029b param1)
    (var newEvent, temp1, temp2, newEventY, newEventX, newEventY_2, newEventX_2)
    proc921_0("Click left mouse button on top left corner")
    (while (<> (send ((= newEvent (Event:new()))):type) 1)
        (send newEvent:dispose())
    )
    GlobalToLocal(newEvent)
    = newEventY (send newEvent:y)
    = newEventX (send newEvent:x)
    (send newEvent:dispose())
    proc921_0("Click left mouse button on bottom right corner")
    (while (<> (send ((= newEvent (Event:new()))):type) 1)
        (send newEvent:dispose())
    )
    GlobalToLocal(newEvent)
    = newEventY_2 (send newEvent:y)
    = newEventX_2 (send newEvent:x)
    (send newEvent:dispose())
    = temp1 (+ (/ (- newEventX_2 newEventX) 2) newEventX)
    (send param1:
        x(temp1)
        y(= temp2 (+ (/ (- newEventY_2 newEventY) 2) newEventY))
        nsLeft(newEventX)
        nsTop(newEventY)
        nsBottom(newEventY_2)
        nsRight(newEventX_2)
    )
    (if (local388)
        Graph(4 newEventY newEventX newEventY newEventX_2 1 0)
        Graph(4 newEventY_2 newEventX newEventY_2 newEventX_2 1 0)
        Graph(4 newEventY newEventX newEventY_2 newEventX 1 0)
        Graph(4 newEventY newEventX_2 newEventY_2 newEventX_2 1 0)
        Graph(12 newEventY newEventX + newEventY_2 1 + newEventX_2 1 1)
    )
)


(procedure (localproc_03c6 param1)
    (var newEvent)
    (send param1:
        view(proc255_1("View?" (send gRoom:curPic)))
        loop(proc255_1("Loop?" 0))
        cel(proc255_1("Cel?" 0))
        signal(16400)
        priority(15)
        init()
    )
    (if ((send param1:respondsTo(15)))
        (send param1:illegalBits(0))
    )
    (while (<> (send ((= newEvent (Event:new()))):type) 1)
        GlobalToLocal(newEvent)
        (send param1:posn((send newEvent:x) (send newEvent:y)))
        Animate((send gCast:elements) 0)
        (send newEvent:dispose())
    )
    (send newEvent:dispose())
)


(procedure (localproc_046c param1)
    (var newEvent, newEventX, newEventY, temp3[10], temp13)
    (if ((Print:
        addText("Where should the approach point be?")
        addButton(1 "Select with mouse" 0 20)
        addButton(0 "Default to x, y" 0 34)
        init()
    )
)
        (while (<> (send ((= newEvent (Event:new()))):type) 1)
            (send newEvent:dispose())
        )
        GlobalToLocal(newEvent)
        (send param1:
            approachX(= newEventX (send newEvent:x))
            approachY(= newEventY (send newEvent:y))
        )
        (send newEvent:dispose())
        Graph(4 - newEventY 1 - newEventX 1 - newEventY 1 + newEventX 1 7)
        Graph(4 newEventY - newEventX 1 newEventY + newEventX 1 7)
        Graph(4 + newEventY 1 - newEventX 1 + newEventY 1 + newEventX 1 7)
        Graph(4 newEventY newEventX newEventY newEventX 0)
        Graph(12 - newEventY 1 - newEventX 1 + newEventY 2 + newEventX 2 1)
    )(else
        (send param1:
            approachX((send param1:x))
            approachY((send param1:y))
        )
    )
    = temp3 0
    = temp13 (Print:
            addText("How far away must ego" 0 1)
            addText("be before he tries to approach?" 0 12)
            addEdit(@temp3 5 65486 13)
            addButton(1 "Select with mouse" 0 32)
            addButton(0 "Always approach" 0 45)
            init()
        )
    (if (temp3)
        (send param1:approachDist(ReadNumber(@temp3)))
    )(else
        (if (not temp13)
            (send param1:approachDist(0))
        )(else
            (while (<> (send ((= newEvent (Event:new()))):type) 1)
                (send newEvent:dispose())
            )
            GlobalToLocal(newEvent)
            = newEventX (send newEvent:x)
            = newEventY (send newEvent:y)
            (send param1:approachDist(GetDistance((send param1:x) (send param1:y) newEventX newEventY)))
            (send newEvent:dispose())
            Graph(4 - newEventY 1 - newEventX 1 - newEventY 1 + newEventX 1 28)
            Graph(4 newEventY - newEventX 1 newEventY + newEventX 1 28)
            Graph(4 + newEventY 1 - newEventX 1 + newEventY 1 + newEventX 1 28)
            Graph(4 newEventY newEventX newEventY newEventX 52)
            Graph(12 - newEventY 1 - newEventX 1 + newEventY 2 + newEventX 2 1)
        )
    )
)


(procedure (localproc_06e6)
    = local391 (Print:
            addText("doVerb method?")
            addButton(1 "YES" 0 12)
            addButton(0 "NO" 50 12)
            init()
        )
)


(procedure (localproc_0714 param1)
    (send local393:
        name(@global42)
        writeString(param1)
        close()
    )
)


(class Class_948_0
    (properties)

    (method (doit)
        (var temp0[15], temp15, newEvent)
        (send gSQ5:setCursor(999))
        = theGSq5Win gSq5Win
        = gSq5Win wfWin
        (if (not local389)
            = temp0 0
            Format(@temp0 "%d.fea" (send gRoom:curPic))
            (if (not proc921_2(@temp0 30 "Enter path and filename"))
                return 
            )(else
                Format(@global42 @temp0)
                = local388 (Print:
                        addText("Outline Features?")
                        addTitle("Feature Write V1.0")
                        addButton(1 "YES" 0 12)
                        addButton(0 "NO" 50 12)
                        init()
                    )
                = local387 (Print:
                        addText("Display code to screen? (but not doVerb)")
                        addTitle("Feature Write V1.0")
                        addButton(0 "NO" 0 18)
                        addButton(1 "YES" 50 18)
                        init()
                    )
                = local389 1
            )
        )
        (if (not = local390 (Print:
                addText("Class?")
                addTitle("Feature Writer V1.0")
                addButton(Feature "Feature" 0 12)
                addButton(View "View" 73 12)
                addButton(Prop "Prop" 113 12)
                addButton(Actor "Actor" 153 12)
                init()
            )
)
            return 
        )
        = temp15 (send local390:new())
        = local0 0
        proc921_2(@local0 30 "Name?")
        = local50 0
        proc921_2(@local50 16 "Noun?")
        localproc_0286(temp15)
        (if (== local390 Feature)
            localproc_029b(temp15)
        )(else
            localproc_03c6(temp15)
        )
        localproc_046c(temp15)
        (if ((Print:
            addText("Z property")
            addTitle("Feature Writer V1.0")
            addButton(0 "NO" 0 12)
            addButton(1 "YES" 50 12)
            init()
        )
)
            (Print:
                addText("Click mouse on object's projection")
                addText("onto the ground" 0 12)
                init()
            )
            (while (<> (send ((= newEvent (Event:new()))):type) 1)
                (send newEvent:dispose())
            )
            GlobalToLocal(newEvent)
            (send temp15:z((- (send newEvent:y) (send temp15:y))))
            (send temp15:y((send newEvent:y)))
            (send newEvent:dispose())
        )
        localproc_06e6()
        (Class_948_1:doit(temp15))
        = gSq5Win theGSq5Win
    )

)
(class Class_948_1
    (properties)

    (method (doit param1)
        (var temp0[400], temp400[40], temp440[50], temp490, temp491, temp492[60], temp552[40], temp592[12], temp604, temp605, temp606, temp607[20], temp627, temp628)
        (asm
            pushi   2
            pushi   10
            lea     @global42
            push    
            callk   FileIO, 4
            bnt     code_0791
            pushi   3
            lea     @temp492
            push    
            lofsa   "The file '%s' already exists"
            push    
            lea     @global42
            push    
            callk   Format, 6
            pushi   #addText
            pushi   1
            lea     @temp492
            push    
            pushi   212
            pushi   4
            pushi   1
            lofsa   "Replace"
            push    
            pushi   0
            pushi   20
            pushi   212
            pushi   4
            pushi   2
            lofsa   "Append"
            push    
            pushi   73
            pushi   20
            pushi   212
            pushi   4
            pushi   0
            lofsa   "Cancel"
            push    
            pushi   133
            pushi   20
            pushi   110
            pushi   0
            class   Print
            send    46
            sat     temp491
            not     
            bnt     code_0791
            ldi     0
            ret     
code_0791:  lst     temp491
            ldi     1
            eq?     
            bnt     code_079d
            ldi     2
            jmp     code_079f
code_079d:  ldi     0
code_079f:  sat     temp490
            pushi   #name
            pushi   1
            lea     @global42
            push    
            pushi   196
            pushi   1
            lst     temp490
            pushi   #new
            pushi   0
            class   File
            send    4
            sal     local393
            send    12
            not     
            bnt     code_07e6
            pushi   3
            lea     @temp0
            push    
            lofsa   "Error opening '%s'"
            push    
            lea     @global42
            push    
            callk   Format, 6
            pushi   1
            lea     @temp0
            push    
            calle   proc921_0, 2
            pushi   #dispose
            pushi   0
            lal     local393
            send    4
            ldi     0
            ret     
code_07e6:  ldi     0
            sat     temp0
            pushi   #isMemberOf
            pushi   1
            class   Feature
            push    
            lap     param1
            send    6
            bnt     code_0a26
            pushi   6
            lea     @temp400
            push    
            lofsa   " \t\tnsLeft\t\t\t%d
\n\t\tnsTop\t\t\t\t%d
\n\t\tnsBottom\t\t\t%d
\n\t\tnsRight\t\t\t%d
\n"
            push    
            pushi   #nsLeft
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #nsTop
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #nsBottom
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #nsRight
            pushi   0
            lap     param1
            send    4
            push    
            callk   Format, 12
            pushi   3
            lea     @temp592
            push    
            lofsa   "..\msg\%d.shm"
            push    
            pushi   #curPic
            pushi   0
            lag     gRoom
            send    4
            push    
            callk   Format, 6
            pushi   #name
            pushi   1
            lea     @temp592
            push    
            lofsa   shmFile
            send    6
            pushi   #open
            pushi   1
            pushi   1
            lofsa   shmFile
            send    6
            not     
            bnt     code_0861
            ldi     0
            sat     temp604
            jmp     code_0988
code_0861:  ldi     0
            sat     temp605
code_0866:  lst     temp605
            pushi   1
            lea     @local50
            push    
            callk   StrLen, 2
            le?     
            bnt     code_08b0
            pushi   96
            pushi   2
            lea     @local50
            push    
            lst     temp605
            callk   StrAt, 4
            lt?     
            bnt     code_08ab
            pprev   
            ldi     123
            lt?     
            bnt     code_08ab
            pushi   2
            lea     @local50
            push    
            lst     temp605
            callk   StrAt, 4
            push    
            ldi     32
            sub     
            sat     temp628
            pushi   3
            lea     @local50
            push    
            lst     temp605
            lst     temp628
            callk   StrAt, 6
code_08ab:  +at     temp605
            jmp     code_0866
code_08b0:  ldi     0
            sat     temp604
code_08b5:  pushi   4
            pushi   5
            lea     @temp552
            push    
            pushi   80
            pushi   #handle
            pushi   0
            lofsa   shmFile
            send    4
            push    
            callk   FileIO, 8
            push    
            ldi     65535
            ne?     
            bnt     code_097f
            pushi   3
            lea     @temp552
            push    
            lofsa   "(define"
            push    
            pushi   6
            callk   StrCmp, 6
            not     
            bnt     code_0968
            ldi     0
            sat     temp605
code_08ee:  lst     temp605
            ldi     40
            le?     
            bnt     code_090a
            lst     temp605
            ldi     4
            add     
            lsti    temp552
            lat     temp605
            sati    temp552
            +at     temp605
            jmp     code_08ee
code_090a:  pushi   3
            lea     @temp552
            push    
            lea     @local50
            push    
            pushi   1
            lea     @local50
            push    
            callk   StrLen, 2
            push    
            callk   StrCmp, 6
            not     
            bnt     code_0968
            ldi     0
            sat     temp606
            pushi   1
            lea     @local50
            push    
            callk   StrLen, 2
            push    
            ldi     2
            div     
            push    
            ldi     1
            add     
            sat     temp605
code_093d:  lst     temp605
            ldi     20
            lt?     
            bnt     code_0959
            lat     temp605
            lsti    temp552
            lat     temp606
            sati    temp607
            +at     temp606
            +at     temp605
            jmp     code_093d
code_0959:  pushi   1
            lea     @temp607
            push    
            callk   ReadNumber, 2
            sat     temp604
            jmp     code_097f
code_0968:  pushi   2
            lea     @temp552
            push    
            lofsa   "; CASES"
            push    
            callk   StrCmp, 4
            not     
            bnt     code_08b5
            jmp     code_097f
            jmp     code_08b5
code_097f:  pushi   #close
            pushi   0
            lofsa   shmFile
            send    4
code_0988:  pushi   #new
            pushi   0
            class   Feature
            send    4
            sat     temp627
            pushi   #init
            pushi   0
            pushi   297
            pushi   1
            lea     @local0
            push    
            pushi   7
            pushi   1
            pushi   #nsLeft
            pushi   0
            lap     param1
            send    4
            push    
            pushi   6
            pushi   1
            pushi   #nsTop
            pushi   0
            lap     param1
            send    4
            push    
            pushi   8
            pushi   1
            pushi   #nsBottom
            pushi   0
            lap     param1
            send    4
            push    
            pushi   9
            pushi   1
            pushi   #nsRight
            pushi   0
            lap     param1
            send    4
            push    
            pushi   1
            pushi   1
            pushi   #x
            pushi   0
            lap     param1
            send    4
            push    
            pushi   0
            pushi   1
            pushi   #y
            pushi   0
            lap     param1
            send    4
            push    
            pushi   82
            pushi   1
            pushi   #z
            pushi   0
            lap     param1
            send    4
            push    
            pushi   55
            pushi   1
            pushi   #heading
            pushi   0
            lap     param1
            send    4
            push    
            pushi   286
            pushi   1
            pushi   #sightAngle
            pushi   0
            lap     param1
            send    4
            push    
            pushi   288
            pushi   1
            pushi   #approachX
            pushi   0
            lap     param1
            send    4
            push    
            pushi   289
            pushi   1
            pushi   #approachY
            pushi   0
            lap     param1
            send    4
            push    
            pushi   221
            pushi   1
            lst     temp604
            lat     temp627
            send    82
            jmp     code_0a4c
code_0a26:  pushi   5
            lea     @temp400
            push    
            lofsa   " \t\tview\t\t\t%d
\n\t\tloop\t\t\t%d
\n\t\tcel\t\t\t%d
\n"
            push    
            pushi   #view
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #loop
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #cel
            pushi   0
            lap     param1
            send    4
            push    
            callk   Format, 10
code_0a4c:  pushi   6
            lea     @temp440
            push    
            lofsa   " \t\tapproachX\t\t%d
\n\t\tapproachY\t\t%d
\n\t\tapproachDist\t%d
\n\t\t_approachVerbs\t$%x
\n"
            push    
            pushi   #approachX
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #approachY
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #approachDist
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #_approachVerbs
            pushi   0
            lap     param1
            send    4
            push    
            callk   Format, 12
            pushi   12
            lea     @temp0
            push    
            lofsa   " 
\n(instance %s of %s
\n\t(properties
\n\t\tx\t\t\t\t\t%d
\n\t\ty\t\t\t\t\t%d
\n\t\tz\t\t\t\t\t%d
\n\t\theading\t\t\t%d
\n%s \t\tsightAngle\t\t%d
\n%s \t\tnoun\t\t\t\t%s
\n\t)
\n"
            push    
            lea     @local0
            push    
            pushi   #name
            pushi   0
            pushi   #{-super-}
            pushi   0
            lap     param1
            send    4
            send    4
            push    
            pushi   #x
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #y
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #z
            pushi   0
            lap     param1
            send    4
            push    
            pushi   #heading
            pushi   0
            lap     param1
            send    4
            push    
            lea     @temp400
            push    
            pushi   #sightAngle
            pushi   0
            lap     param1
            send    4
            push    
            lea     @temp440
            push    
            lea     @local50
            push    
            callk   Format, 24
            lal     local387
            bnt     code_0af7
            pushi   #font
            pushi   1
            pushi   999
            pushi   205
            pushi   1
            lea     @temp0
            push    
            pushi   214
            pushi   1
            lofsa   "Feature Writer V1.0"
            push    
            pushi   110
            pushi   0
            class   Print
            send    22
code_0af7:  pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
            lal     local391
            bnt     code_0b93
            pushi   2
            lea     @temp0
            push    
            lofsa   " \t(method (doVerb theVerb)
\n\t\t(switch theVerb
\n"
            push    
            callk   Format, 4
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
            ldi     0
            lali    local180
            bnt     code_0b3b
            pushi   3
            lea     @temp0
            push    
            lofsa   " \t\t\t(LOOK
\n\t\t\t)
\n"
            push    
            lea     @local65460
            push    
            callk   Format, 6
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
code_0b3b:  ldi     0
            lali    local80
            bnt     code_0b5b
            pushi   3
            lea     @temp0
            push    
            lofsa   " \t\t\t(DO
\n\t\t\t)
\n"
            push    
            lea     @local80
            push    
            callk   Format, 6
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
code_0b5b:  ldi     0
            lali    local280
            bnt     code_0b7e
            pushi   3
            lea     @temp0
            push    
            lofsa   " \t\t\t(TALK
\n\t\t\t)
\n"
            push    
            lea     @local280
            push    
            callk   Format, 6
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
code_0b7e:  pushi   2
            lea     @temp0
            push    
            lofsa   " \t\t\t(else
\n\t\t\t\t(super doVerb: theVerb)
\n\t\t\t)
\n\t\t)
\n\t)
\n"
            push    
            callk   Format, 4
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
code_0b93:  pushi   2
            lea     @temp0
            push    
            lofsa   ")
\n"
            push    
            callk   StrCpy, 4
            pushi   1
            lea     @temp0
            push    
            call    localproc_0714, 2
            pushi   #isMemberOf
            pushi   1
            class   Feature
            push    
            lap     param1
            send    6
            bnt     code_0bbd
            pushi   #dispose
            pushi   0
            lap     param1
            send    4
            jmp     code_0bc5
code_0bbd:  pushi   #addToPic
            pushi   0
            lap     param1
            send    4
code_0bc5:  pushi   #close
            pushi   0
            pushi   111
            pushi   0
            lal     local393
            send    8
            pushi   1
            pushi   993
            callk   DisposeScript, 2
            pushi   1
            pushi   948
            callk   DisposeScript, 2
            ret     
        )
    )


    (method (writeList param1)
        (send param1:eachElementDo(96 self))
        (Class_948_0:doit())
        DisposeScript(948)
    )

)
(instance selectorI of DSelector
    (properties
        x 18
    )

    (method (handleEvent pEvent)
        (var pEventType, pEventMessage)
        (super:handleEvent(pEvent))
        = pEventType (send pEvent:type)
        = pEventMessage (send pEvent:message)
        (if (((== pEventType 1) and (send pEvent:claimed)) or ((== pEventType 4) and (== pEventMessage 32)))
            (if (== StrAt(cursor 0) 62)
                StrAt(cursor 0 32)
            )(else
                StrAt(cursor 0 62)
            )
            (self:draw())
            (send pEvent:claimed(1))
        )
        (send pEvent:claimed)
    )

)
(instance clearBut of DButton
    (properties
        state 1
        text "Clear"
    )

    (method (doit)
        (var temp0)
        = temp0 0
        (while (< temp0 6)
            StrAt(local380 * temp0 18 32)
            ++temp0
        )
        (selectorI:draw())
    )

)
(instance allBut of DButton
    (properties
        state 1
        value 2
        text "  All  "
    )

    (method (doit)
        (var temp0)
        = temp0 0
        (while (< temp0 6)
            StrAt(local380 * temp0 18 62)
            ++temp0
        )
        (selectorI:draw())
    )

)
(instance doneBut of DButton
    (properties
        value 1
        text " Done "
    )
)
(instance wfWin of Window
    (properties)
)
(instance shmFile of File
    (properties)
)
