home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / util / changeicon-1.0.lha / ChangeIcon / src / ChangeIcon.asm
Encoding:
Assembly Source File  |  1994-03-12  |  59.6 KB  |  2,869 lines

  1. DEBUGBOOL    =    0    ; (TRUE for debug-mode)
  2. ;;    *****************************************************************
  3.     *    Programm:    ChangeIcon V1.0                *
  4.     *            (AppIcon/Window/Menu gesteuerter    *
  5.     *             Icon-Creator/Changer using the        *
  6.     *             whatis.library)            *
  7.     *    Copyright:    Freeware (C)opyright by Hanns Holger    *
  8.     *            Rutz                    *
  9.     *    Date:        02.-17. Februar 1994            *
  10.     *            25./26. Februar 1994 - GTLV_MakeVisible    *
  11.     *                works now for OS3; fixed bug in    *
  12.     *                IDCMP-handling routines;    *
  13.     *            27. Februar 1994 - Types without the    *
  14.     *                ICONNAME keyword do not appear    *
  15.     *                in the listview any longer    *
  16.     *                                *
  17.     *    Notes:        ASM-One V1.02                *
  18.     *            Needs OS2.04 or better            *
  19.     *            (WB2.1 recommended)            *
  20.     *    To do:        - Shell-Startup possible(?)        *
  21.     *            - File-selection via Requester(?)    *
  22.     *****************************************************************
  23.  
  24. ;;-- Includes ---------------------------------------------
  25.  
  26.         incdir    'work:pax/asm/inc/'
  27.         include    'dos/dosextens.i'
  28.         include    'dos/dostags.i'
  29.         include    'exec/memory.i'
  30.         include    'intuition/intuition.i'
  31.         include    'libraries/gadtools.i'
  32.         include    'libraries/locale.i'
  33.         include    'libraries/whatisbase.i'
  34.         include    'private/intuition_lib.i'
  35.         include    'private/dos_lib.i'
  36.         include    'private/gadtools_lib.i'
  37.         include    'private/gfx_lib.i'
  38.         include    'private/icon_lib.i'
  39.         include    'private/locale_lib.i'
  40.         include    'private/macros.i'
  41.         include    'private/whatis_lib.i'
  42.         include    'private/workbench_lib.i'
  43.         include    'workbench/workbench.i'
  44.         include    'workbench/startup.i'
  45.  
  46. ;;-- Konstanten -------------------------------------------
  47.  
  48. MYIDCMP        set    LISTVIEWIDCMP!CHECKBOXIDCMP!STRINGIDCMP!BUTTONIDCMP
  49. MYIDCMP        set    MYIDCMP!IDCMP_VANILLAKEY!IDCMP_RAWKEY
  50. MYIDCMP        set    MYIDCMP!IDCMP_CLOSEWINDOW!IDCMP_MENUPICK
  51.  
  52. PTR_HEIGHT    =    16
  53. PTR_WIDTH    =    16
  54. PTR_XOFFSET    =    -6
  55. PTR_YOFFSET    =    0
  56.  
  57. RAW_CURSORUP        =    $4C
  58. RAW_CURSORDOWN        =    $4D
  59. IEQUALIFIER_SHIFT    =    IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT
  60. IEQUALIFIER_ALT        =    IEQUALIFIER_LALT!IEQUALIFIER_RALT
  61.  
  62. WA_Dummy        =    TAG_USER+99
  63. WA_NewLookMenus        =    WA_Dummy+$30    ; OS3.0 values
  64. WA_BusyPointer        =    WA_Dummy+$35
  65. GTMN_NewLookMenus    =    GT_TagBase+67
  66. GTCB_Scaled        =    GT_TagBase+68
  67. GTLV_MakeVisible    =    GT_TagBase+78
  68. _LVOSetWindowPointerA    =    -816    ; (win,taglist)(a0/a1)
  69.  
  70. PathBufferLen        =    257
  71. DefToolStrLen        =    257
  72.  
  73.     ENUM
  74.     EITEM    MSG_REQ_TITLE
  75.     EITEM    MSG_ABORT
  76.     EITEM    MSG_OKAY
  77.     EITEM    MSG_RETRY_CANCEL
  78.     EITEM    MSG_LIBRARY_MISSING
  79.     EITEM    MSG_SHELL_START
  80.     EITEM    MSG_NEED_ICON
  81.     EITEM    MSG_NO_PORT
  82.     EITEM    MSG_NO_TYPES
  83.     EITEM    MSG_NO_APP
  84.     EITEM    MSG_NO_WIN
  85.     EITEM    MSG_EDITOR_FAILED
  86.     EITEM    MSG_NO_MEM
  87.     EITEM    MSG_TYPES
  88.     EITEM    MSG_AUTOTYPE
  89.     EITEM    MSG_DEFAULT_TOOL
  90.     EITEM    MSG_APPICON
  91.     EITEM    MSG_APPMENUITEM
  92.     EITEM    MSG_QUIT
  93.     EITEM    MSG_DROP_BOX
  94.     EITEM    MSG_PROJECT
  95.     EITEM    MSG_REPARSE
  96.     EITEM    MSG_EDIT
  97.     EITEM    MSG_ABOUT
  98.     EITEM    MSG_INFORMATION
  99.     EITEM    MSG_SIZEOF
  100.  
  101.     ENUM
  102.         EITEM    ID_LISTVIEW
  103.         EITEM    ID_DEFTOOLCHK
  104.         EITEM    ID_DEFTOOLSTR
  105.         EITEM    ID_APPOBJECT
  106.         EITEM    ID_QUIT
  107.         EITEM    ID_AUTOTYPE
  108.     EITEM    ID_PROJECT
  109.     EITEM    ID_REPARSE
  110.     EITEM    ID_EDIT
  111.     EITEM    ID_ABOUT
  112.  
  113.     STRUCTURE GadgetInfo,0
  114.     STRUCT    ggi_Node,LN_SIZE    ; LN_NAME = &ggi_UnderScore
  115.     UWORD    ggi_UnderScore        ; UBYTE Char + NULLByte
  116.     UWORD    ggi_GadgetID
  117.     APTR    ggi_Gadget
  118.     LABEL ggi_SIZEOF
  119.  
  120.     STRUCTURE FileTypeInfo,0
  121.     STRUCT    fti_Node,LN_SIZE    ; LN_NAME = &TypeName
  122.     ULONG    fti_Type
  123.     LABEL fti_SIZEOF
  124.  
  125.     STRUCTURE Globals,0
  126.     APTR    gl_DOSBase
  127.     APTR    gl_GToolsBase
  128.     APTR    gl_GfxBase
  129.     APTR    gl_IconBase
  130.     APTR    gl_IntuiBase
  131.     APTR    gl_LocaleBase
  132.     APTR    gl_WBenchBase
  133.     APTR    gl_WhatIsBase
  134.  
  135.     APTR    gl_Process
  136.     UBYTE    gl_Return
  137.     ALIGNWORD
  138.     ULONG    gl_Result2
  139.     APTR    gl_WBMsg
  140.     BOOL    gl_OS3
  141.  
  142.     APTR    gl_Locale
  143.     APTR    gl_Catalog
  144.     APTR    gl_Window
  145.     APTR    gl_OldProcWin    ; = pr_WindowPtr
  146.     APTR    gl_Request    ; used to block Gadget-access
  147.     APTR    gl_PubScreen
  148.     APTR    gl_VisualInfo
  149.     APTR    gl_AppPort
  150.     APTR    gl_AppObject    ; &AppIcon/MenuItem/Window
  151.  
  152.     APTR    gl_FirstGad        ; &FirstGG (GadTools)
  153.     STRUCT    gl_GadList,LH_SIZE    ; &GadgetInfo
  154.     STRUCT    gl_TypeList,LH_SIZE    ; &FileTypeInfo
  155.     WORD    gl_NumType
  156.     BYTE    gl_FreezeCnt
  157.     ALIGNWORD
  158.     APTR    gl_Pointer
  159.     APTR    gl_MenuStrings
  160.     APTR    gl_MenuStrip
  161.     STRUCT    gl_TopazAttr,ta_SIZEOF
  162.  
  163.     UWORD    gl_Type
  164.     BOOL    gl_AutoType
  165.     BOOL    gl_DefTool
  166.     APTR    gl_PathBuffer
  167.     APTR    gl_DefToolStr    ; to be FreeVec()ed as gl_PathBuffer!!
  168.     APTR    gl_IconDir
  169.  
  170.     BOOL    gl_PopUp
  171.     BOOL    gl_Mode        ; FALSE = Icon, TRUE = Menu
  172.     APTR    gl_AppIcon    ; (struct DiskObject *) !!
  173.     LONG    gl_IconX
  174.     LONG    gl_IconY
  175.     APTR    gl_AppName    ; (STRPTR) Name für Icon & MenuItem
  176.     APTR    gl_Editor    ; "<EditorName> S:FileTypes"
  177.     UWORD    gl_EditorLen    ; strlen( "<EditorName>" )
  178.     LABEL gl_SIZEOF
  179.  
  180. ;;-- Macros -----------------------------------------------
  181.  
  182. ;-- asks for a locale-string --
  183. ; In:  Arg1 = StringID, [Arg2 = TargetRegister (defaults to a0)]
  184. ; Out: d0.l/a0.l are trashed; TargetRegister/a0.l = &String (ReadOnly!)
  185. getstr        MACRO
  186.     IF \1<128
  187.         moveq.l    #\1,d0
  188.     ELSE
  189.         move.l    #\1,d0
  190.     ENDC
  191.         bsr.w    _GetCatString
  192.     IF NARG>1
  193.         move.l    a0,\2
  194.     ENDC
  195.         ENDM
  196.  
  197. ;;-- Code Beginn ------------------------------------------
  198.  
  199.         section    Text,code
  200.  
  201. _Start        moveq.l    #gl_SIZEOF/2-1,d0
  202. .ClearLoop    clr.w    -(sp)
  203.         dbra    d0,.ClearLoop
  204.         movea.l    sp,gl
  205.  
  206.         move.b    #RETURN_FAIL,gl_Return(gl)
  207.         exec
  208.         moveq.l    #0,d0
  209.         cmpi.w    #39,LIB_VERSION(lb)
  210.         sge.b    d0
  211.         move.w    d0,gl_OS3(gl)
  212.         movea.l    ThisTask(lb),a2
  213.         move.l    a2,gl_Process(gl)
  214.         tst.l    pr_CLI(a2)
  215.         beq.b    .WBench
  216.  
  217. .Shell        bsr.w    _OpenLibs
  218.         slib    DOS,d0
  219.         beq.b    .ShellNoDOS
  220.         movea.l    d0,lb
  221.         getstr    MSG_SHELL_START,d1
  222.         fjsr    PutStr
  223. .ShellNoDOS    bra.w    _CleanUp
  224.  
  225. .WBench        IF ~DEBUGBOOL
  226.             lea.l    pr_MsgPort(a2),a0
  227.             fjsr    WaitPort
  228.             lea.l    pr_MsgPort(a2),a0
  229.             fjsr    GetMsg
  230.             move.l    d0,gl_WBMsg(gl)
  231.         ENDC
  232.         bsr.w    _OpenLibs
  233.         beq.b    _CleanUp
  234.         IF DEBUGBOOL
  235.             move.w    #-1,gl_Mode(gl)
  236.             move.w    #-1,gl_PopUp(gl)
  237.             movea.l    gl_Process(gl),a0
  238.             move.l    LN_NAME(a0),gl_AppName(gl)
  239.             exec
  240.             moveq.l    #.Y-.X,d0
  241.             moveq.l    #MEMF_PUBLIC,d1
  242.             fjsr    AllocVec
  243.             move.l    d0,gl_IconDir(gl)
  244.             movea.l    d0,a1
  245.             lea.l    .X(pc),a0
  246. .W            move.b    (a0)+,(a1)+
  247.             bne.b    .W
  248.             bra.b    .Z
  249. .X            dc.b    'Work:Gfx/Icons/',0
  250. .Y            even
  251. .Z
  252.         ELSE
  253.             bsr.w    _GetArgs    ; ToolTypes auswerten etc.
  254.             beq.b    _CleanUp
  255.         ENDC
  256.         bsr.w    _InitOther        ; MsgPort etc.
  257.         beq.b    _CleanUp
  258.  
  259. ;;-- Main stuff -------------------------------------------
  260.  
  261. _Main        bsr.w    _AllocTypes        ; create List for ListView
  262.         beq.b    _CleanUp
  263.         bsr.w    _OpenApp        ; show AppIcon/MenuItem/Window
  264.         beq.b    _CleanUp
  265.  
  266. .WaitLoop    exec
  267.         movea.l    gl_AppPort(gl),a0
  268.         move.b    MP_SIGBIT(a0),d1
  269.         moveq.l    #0,d0
  270.         bset.l    d1,d0
  271.         move.l    gl_Window(gl),d1
  272.         beq.b    .WaitCont
  273.         movea.l    d1,a0
  274.         move.l    wd_UserPort(a0),d1
  275.         beq.b    .WaitCont
  276.         movea.l    d1,a0
  277.         move.b    MP_SIGBIT(a0),d1
  278.         bset.l    d1,d0
  279. .WaitCont    fjsr    Wait
  280.  
  281.         bsr.w    _ProcessGTools        ; handle Gadgets and stuff
  282.         beq.b    _CleanUp        ; ..Error
  283.         bgt.b    .MainDone        ; ..User selected "Quit"
  284. .AppLoop    exec
  285.         movea.l    gl_AppPort(gl),a0
  286.         fjsr    GetMsg
  287.         tst.l    d0
  288.         beq.b    .WaitLoop
  289.         movea.l    d0,a1
  290.         bsr.w    _ProcessApp        ; handle AppMessages
  291.         slt.b    d2
  292.         sgt.b    d3
  293.         fjsr    ReplyMsg
  294.         tst.b    d2
  295.         bne.b    .AppLoop        ; ..Okay
  296.         tst.b    d3
  297.         beq.b    _CleanUp        ; ..Error
  298.  
  299. .MainDone    clr.b    gl_Return(gl)
  300.  
  301. ;;-- Aufräumen --------------------------------------------
  302.  
  303. _CleanUp    bsr.w    _CloseAll
  304.  
  305.         exec
  306.         move.l    gl_WBMsg(gl),d0
  307.         beq.b    .MsgEnd
  308.         movea.l    d0,a1
  309.         fjsr    Forbid
  310.         fjsr    ReplyMsg
  311. .MsgEnd
  312.         moveq.l    #0,d0
  313.         move.b    gl_Return(gl),d0
  314.         beq.b    _Quit
  315.         movea.l    gl_Process(gl),a0
  316.         move.l    gl_Result2(gl),pr_Result2(a0)
  317. _Quit        lea.l    gl_SIZEOF(sp),sp
  318.         rts
  319.  
  320.         dc.b    '$VER: ChangeIcon 1.0 (26-Feb-94)',0
  321. _WBPubName    dc.b    'Workbench',0
  322. _FileTypes    dc.b    'S:FileTypes',0
  323. FileTypesLen    =    *-_FileTypes
  324.         even
  325.  
  326. ;;-- Libraries & Catalog öffnen ---------------------------
  327. ;  Out: cc=eq, wenn Fehler
  328.  
  329. _OpenLibs    push
  330.  
  331.         exec
  332.         lea.l    .IntuiName(pc),a1
  333.         moveq.l    #36,d0
  334.         fjsr    OpenLibrary
  335.         move.l    d0,gl_IntuiBase(gl)
  336.         beq.w    .Error
  337.  
  338.         lea.l    .LocaleName(pc),a1
  339.         moveq.l    #38,d0
  340.         fjsr    OpenLibrary
  341.         move.l    d0,gl_LocaleBase(gl)
  342.         beq.b    .LocCont
  343.         movea.l    d0,lb
  344.         suba.l    a0,a0
  345.         fjsr    OpenLocale
  346.         move.l    d0,gl_Locale(gl)
  347.         movea.l    d0,a0
  348.         lea.l    .CatName(pc),a1
  349.         clr.l    -(sp)
  350.         clr.l    -(sp)
  351.         pea.l    .BuiltIn(pc)
  352.         move.l    #OC_BuiltInLanguage,-(sp)
  353.         movea.l    sp,a2
  354.         fjsr    OpenCatalogA
  355.         move.l    d0,gl_Catalog(gl)
  356.         lea.l    4*4(sp),sp
  357. .LocCont
  358.         exec
  359.         lea.l    .DOSName(pc),a2
  360.         movea.l    a2,a1
  361.         moveq.l    #37,d0
  362.         fjsr    OpenLibrary
  363.         move.l    d0,gl_DOSBase(gl)
  364.         beq.b    .PrintErr
  365.         lea.l    .GToolsName(pc),a2
  366.         movea.l    a2,a1
  367.         moveq.l    #37,d0
  368.         fjsr    OpenLibrary
  369.         move.l    d0,gl_GToolsBase(gl)
  370.         beq.b    .PrintErr
  371.         lea.l    .GfxName(pc),a2
  372.         movea.l    a2,a1
  373.         moveq.l    #36,d0
  374.         fjsr    OpenLibrary
  375.         move.l    d0,gl_GfxBase(gl)
  376.         beq.b    .PrintErr
  377.         lea.l    .IconName(pc),a2
  378.         movea.l    a2,a1
  379.         moveq.l    #36,d0
  380.         fjsr    OpenLibrary
  381.         move.l    d0,gl_IconBase(gl)
  382.         beq.b    .PrintErr
  383.         lea.l    .WBenchName(pc),a2
  384.         movea.l    a2,a1
  385.         moveq.l    #36,d0
  386.         fjsr    OpenLibrary
  387.         move.l    d0,gl_WBenchBase(gl)
  388.         beq.b    .PrintErr
  389.         lea.l    .WhatIsName(pc),a2
  390.         movea.l    a2,a1
  391.         moveq.l    #2,d0
  392.         fjsr    OpenLibrary
  393.         move.l    d0,gl_WhatIsBase(gl)
  394.         beq.b    .PrintErr
  395.  
  396. .Exit        pull
  397.         rts
  398.  
  399. ; In: a2 = &LibName
  400. .PrintErr    getstr    MSG_ABORT,a1
  401.         getstr    MSG_LIBRARY_MISSING ; a0
  402.         movea.l    a2,-(sp)
  403.         movea.l    sp,a2
  404.         bsr.w    _EasyReq
  405.         addq.l    #4,sp
  406.         ;||
  407. .Error        moveq.l    #ERROR_INVALID_RESIDENT_LIBRARY,d0
  408.         move.l    d0,gl_Result2(gl)
  409.         clr.b    d0
  410.         bra.b    .Exit
  411.  
  412. .DOSName    dc.b    'dos.library',0
  413. .GToolsName    dc.b    'gadtools.library',0
  414. .GfxName    dc.b    'graphics.library',0
  415. .IconName    dc.b    'icon.library',0
  416. .IntuiName    dc.b    'intuition.library',0
  417. .LocaleName    dc.b    'locale.library',0
  418. .WBenchName    dc.b    'workbench.library',0
  419. .WhatIsName    dc.b    'whatis.library',0
  420. .CatName    dc.b    'changeicon.catalog',0
  421. .BuiltIn    dc.b    'english',0
  422.         even
  423.  
  424. ;;-- Close all stuff --------------------------------------
  425. ; MUSS AUF OS1.3 LAUFEN!
  426.  
  427. _CloseAll    push
  428.         bsr.w    _FreeTypes
  429.         bsr.w    _CloseApp
  430.  
  431.         exec
  432.         move.l    gl_AppPort(gl),d0
  433.         beq.b    .PortCont        ; maybe some 1.3-Users around..
  434.         movea.l    d0,a0
  435.         fjsr    DeleteMsgPort
  436. .PortCont
  437.         move.l    gl_AppIcon(gl),d0
  438.         beq.b    .IconCont
  439.         slib    Icon
  440.         movea.l    d0,a0
  441.         fjsr    FreeDiskObject
  442. .IconCont
  443.         exec
  444.         move.l    gl_PathBuffer(gl),d0
  445.         beq.b    .BufCont
  446.         movea.l    d0,a1
  447.         fjsr    FreeVec
  448. .BufCont    move.l    gl_Editor(gl),d0
  449.         beq.b    .EditorCont
  450.         movea.l    d0,a1
  451.         fjsr    FreeVec
  452. .EditorCont    move.l    gl_IconDir(gl),d0
  453.         beq.b    .DirCont
  454.         movea.l    d0,a1
  455.         fjsr    FreeVec
  456. .DirCont    move.l    gl_Request(gl),d0
  457.         beq.b    .ReqCont
  458.         movea.l    d0,a1
  459.         moveq.l    #rq_SIZEOF,d0
  460.         fjsr    FreeMem
  461. .ReqCont
  462.         slib    Locale
  463.         move.l    gl_Catalog(gl),d0
  464.         beq.b    .CatCont
  465.         movea.l    d0,a0
  466.         fjsr    CloseCatalog
  467. .CatCont    move.l    gl_Locale(gl),d0
  468.         beq.b    .LocCont
  469.         movea.l    d0,a0
  470.         fjsr    CloseLocale
  471. .LocCont
  472.         exec
  473.         movea.l    gl_WhatIsBase(gl),d0
  474.         beq.b    .LibCont1
  475.         movea.l    d0,a1
  476.         fjsr    CloseLibrary
  477. .LibCont1    movea.l    gl_WBenchBase(gl),d0
  478.         beq.b    .LibCont2
  479.         movea.l    d0,a1
  480.         fjsr    CloseLibrary
  481. .LibCont2    movea.l    gl_LocaleBase(gl),d0
  482.         beq.b    .LibCont3
  483.         movea.l    d0,a1
  484.         fjsr    CloseLibrary
  485. .LibCont3    movea.l    gl_IntuiBase(gl),d0
  486.         beq.b    .LibCont4
  487.         movea.l    d0,a1
  488.         fjsr    CloseLibrary
  489. .LibCont4    movea.l    gl_IconBase(gl),d0
  490.         beq.b    .LibCont5
  491.         movea.l    d0,a1
  492.         fjsr    CloseLibrary
  493. .LibCont5    movea.l    gl_GfxBase(gl),d0
  494.         beq.b    .LibCont6
  495.         movea.l    d0,a1
  496.         fjsr    CloseLibrary
  497. .LibCont6    movea.l    gl_GToolsBase(gl),d0
  498.         beq.b    .LibCont7
  499.         movea.l    d0,a1
  500.         fjsr    CloseLibrary
  501. .LibCont7    movea.l    gl_DOSBase(gl),d0
  502.         beq.b    .LibCont
  503.         movea.l    d0,a1
  504.         fjsr    CloseLibrary
  505. .LibCont
  506.         pull
  507.         rts
  508.  
  509. ;;-- Icon lesen & Args auswerten --------------------------
  510. ;  Out: cc=eq, wenn Fehler
  511.  
  512. _GetArgs    push
  513.  
  514.         movea.l    gl_WBMsg(gl),a2
  515.         movea.l    sm_ArgList(a2),a2
  516.         slib    DOS
  517.         move.l    wa_Lock(a2),d1
  518.         fjsr    CurrentDir
  519.         slib    Icon
  520.         movea.l    wa_Name(a2),a0
  521.         move.l    a0,gl_AppName(gl)    ; default AppName
  522.         fjsr    GetDiskObject
  523.         move.l    d0,gl_AppIcon(gl)    ; default AppIcon
  524.         beq.w    .Error
  525.         movea.l    d0,a3
  526.         movea.l    do_ToolTypes(a3),a3
  527.  
  528.         moveq.l    #FileTypesLen,d0
  529.         lea.l    .EditorTxt(pc),a0
  530.         bsr.w    .GetToolType
  531.         move.l    a0,gl_Editor(gl)
  532.         moveq.l    #0,d0
  533.         lea.l    .IconDirTxt(pc),a0
  534.         bsr.w    .GetToolType
  535.         move.l    a0,gl_IconDir(gl)
  536.  
  537.         movea.l    a3,a0
  538.         lea.l    .PopUpTxt(pc),a1
  539.         ;slib    Icon
  540.         fjsr    FindToolType
  541.         tst.l    d0
  542.         beq.b    .PopUpCont        ; default PopUp = No
  543.         movea.l    d0,a0
  544.         lea.l    .YesTxt(pc),a1
  545.         fjsr    MatchToolValue
  546. .PopUpCont    move.w    d0,gl_PopUp(gl)
  547.  
  548.         movea.l    a3,a0
  549.         lea.l    .ModeTxt(pc),a1
  550.         ;slib    Icon
  551.         fjsr    FindToolType
  552.         tst.l    d0
  553.         beq.b    .ModeCont        ; default Mode = Icon
  554.         movea.l    d0,a0
  555.         lea.l    .MenuTxt(pc),a1
  556.         fjsr    MatchToolValue
  557. .ModeCont    move.w    d0,gl_Mode(gl)
  558.         beq.b    .IconMode
  559.  
  560. .MenuMode    movea.l    a3,a0
  561.         lea.l    .MenuNameTxt(pc),a1
  562.         ;slib    Icon
  563.         fjsr    FindToolType
  564.         tst.l    d0
  565.         beq.b    .MMCont
  566.         move.l    d0,gl_AppName(gl)
  567. .MMCont        bra.w    .Okay
  568.  
  569. .IconMode    movea.l    a3,a0
  570.         lea.l    .IconXTxt(pc),a1
  571.         ;slib    Icon
  572.         fjsr    FindToolType
  573.         move.l    d0,d1
  574.         beq.b    .IMNoXPos
  575.         slib    DOS
  576.         lea.l    gl_IconX(gl),a0
  577.         move.l    a0,d2
  578.         fjsr    StrToLong
  579.         addq.l    #1,d0
  580.         bne.b    .IMGetYPos
  581. .IMNoXPos    move.l    #NO_ICON_POSITION,gl_IconX(gl)    ; default Icon_X
  582. .IMGetYPos
  583.         movea.l    a3,a0
  584.         lea.l    .IconYTxt(pc),a1
  585.         slib    Icon
  586.         fjsr    FindToolType
  587.         move.l    d0,d1
  588.         beq.b    .IMNoYPos
  589.         slib    DOS
  590.         lea.l    gl_IconY(gl),a0
  591.         move.l    a0,d2
  592.         fjsr    StrToLong
  593.         addq.l    #1,d0
  594.         bne.b    .IMGetIcon
  595. .IMNoYPos    move.l    #NO_ICON_POSITION,gl_IconY(gl)    ; default Icon_Y
  596. .IMGetIcon
  597.         slib    Icon
  598.         movea.l    a3,a0
  599.         lea.l    .IconNameTxt(pc),a1
  600.         fjsr    FindToolType
  601.         move.l    d0,d4
  602.         beq.b    .IMCont
  603.         slib    DOS
  604.         move.l    d4,d1
  605.         fjsr    FilePart
  606.         move.l    d0,d3
  607.         movea.l    d3,a0
  608.         moveq.l    #0,d2
  609. .IMLoop        addq.l    #1,d2            ; strlen( ICONNAME ) + 1
  610.         tst.b    (a0)+
  611.         bne.b    .IMLoop
  612.         exec            ; d4=&FullName, d3=&FileName, d2=Length
  613.         move.l    d2,d0
  614.         moveq.l    #MEMF_PUBLIC,d1
  615.         fjsr    AllocMem
  616.         movea.l    d3,a0
  617.         move.l    d0,d3
  618.         beq.b    .IMCopyCont
  619.         movea.l    d3,a1
  620. .IMLoop2    move.b    (a0)+,(a1)+        ; strcpy( ICONNAME )
  621.         bne.b    .IMLoop2
  622. .IMCopyCont
  623.         slib    Icon
  624.         movea.l    d4,a0
  625.         fjsr    GetDiskObject
  626.         move.l    d0,d4
  627.         beq.b    .IMSwapCont
  628.         movea.l    gl_AppIcon(gl),a0
  629.         fjsr    FreeDiskObject        ; exchange
  630.         move.l    d4,gl_AppIcon(gl)    ; ..AppIcon
  631. .IMSwapCont
  632.         tst.l    d3
  633.         beq.b    .IMCont            ; ..kein Name allokiert
  634.         movea.l    gl_AppIcon(gl),a0
  635.         lea.l    do_SIZEOF(a0),a0    ; &FreeList
  636.         movea.l    d3,a1
  637.         movea.l    d2,a2
  638.         fjsr    AddFreeList        ; add ICONNAME to FreeList
  639.         tst.w    d0
  640.         beq.b    .IMFreeName
  641.         move.l    d3,gl_AppName(gl)
  642. .IMCont        bra.b    .Okay
  643.  
  644. .IMFreeName    exec
  645.         movea.l    d3,a1            ; Name couldn't be added
  646.         move.l    d2,d0
  647.         fjsr    FreeMem            ; ..we'll free it again
  648.         ;||
  649. .Okay        moveq.l    #-1,d0
  650.  
  651. .Exit        pull
  652.         rts
  653.  
  654. .Error        slib    DOS
  655.         fjsr    IoErr
  656.         move.l    d0,gl_Result2(gl)
  657.         suba.l    a2,a2
  658.         getstr    MSG_ABORT,a1
  659.         getstr    MSG_NEED_ICON ; a0
  660.         bsr.w    _EasyReq
  661.         ;clr.b    d0
  662.         bra.b    .Exit
  663.  
  664. ;-- FindToolType(), alloc buffer and copy type --
  665. ; In:  a0 = &TypeString, d0.l = ExtraSize to alloc (Bytes), a3 = &ToolTypeArray
  666. ; Out: a0 = &Buffer or NULL (AllocVec()ed)
  667.  
  668. .GetToolType    push    d0-d7/a1-a7
  669.  
  670.         movea.l    a0,a1
  671.         movea.l    a3,a0
  672.         slib    Icon
  673.         fjsr    FindToolType
  674.         movea.l    d0,a0
  675.         move.l    d0,d2
  676.         beq.b    .GTTExit
  677.  
  678.         move.l    (sp),d0
  679. .GTTLoop    addq.l    #1,d0
  680.         tst.b    (a0)+
  681.         bne.b    .GTTLoop
  682.         exec
  683.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  684.         fjsr    AllocVec
  685.         movea.l    d0,a0
  686.         tst.l    d0
  687.         beq.b    .GTTExit
  688.  
  689.         movea.l    d2,a1
  690.         movea.l    a0,a2
  691. .GTTLoop2    move.b    (a1)+,(a2)+
  692.         bne.b    .GTTLoop2
  693. .GTTExit    pull    d0-d7/a1-a7
  694.         rts
  695.  
  696. .ModeTxt    dc.b    'MODE',0
  697. .MenuTxt    dc.b    'MENU',0
  698. .MenuNameTxt    dc.b    'MENUNAME',0
  699. .IconXTxt    dc.b    'ICON_X',0
  700. .IconYTxt    dc.b    'ICON_Y',0
  701. .IconNameTxt    dc.b    'ICONNAME',0
  702. .PopUpTxt    dc.b    'POPUP',0
  703. .YesTxt        dc.b    'YES',0
  704. .EditorTxt    dc.b    'EDITOR',0
  705. .IconDirTxt    dc.b    'ICONDIR',0
  706.         even
  707.  
  708. ;;-- MsgPort einrichten etc. -----------------------------
  709. ;  Out: cc=eq, wenn Fehler
  710.  
  711. _InitOther    push
  712.  
  713.         exec
  714.         fjsr    CreateMsgPort
  715.         move.l    d0,gl_AppPort(gl)
  716.         beq.w    .PortErr
  717.  
  718.         tst.w    gl_Mode(gl)
  719.         bne.b    .IconCont
  720.         movea.l    gl_AppIcon(gl),a0
  721.         move.l    gl_IconX(gl),do_CurrentX(a0)
  722.         move.l    gl_IconY(gl),do_CurrentY(a0)
  723. .IconCont
  724.         lea.l    gl_TypeList(gl),a0
  725.         NEWLIST    a0
  726.         lea.l    gl_GadList(gl),a0
  727.         NEWLIST    a0
  728.         IF DEBUGBOOL
  729.             move.l    #_Ptr,d0
  730.         ELSE
  731.             move.l    _Start-4(pc),d0
  732.             lsl.l    #2,d0            ; BPTR >> APTR
  733.             addq.l    #4,d0
  734.         ENDC
  735.         move.l    d0,gl_Pointer(gl)
  736.  
  737.         moveq.l    #~0,d0            ; some defaults
  738.         move.w    d0,gl_AutoType(gl)
  739.         move.w    d0,gl_Type(gl)
  740.         clr.w    gl_DefTool(gl)
  741.  
  742.         tst.l    gl_Editor(gl)
  743.         bne.w    .EdJoin
  744.         slib    DOS
  745.         clr.w    -(sp)
  746.         lea.l    .VarName(pc),a0
  747.         move.l    a0,d1
  748.         move.l    sp,d2
  749.         moveq.l    #2,d3
  750.         moveq.l    #0,d4
  751.         fjsr    GetVar
  752.         addq.l    #2,sp
  753.         addq.l    #1,d0
  754.         beq.b    .EdDefault
  755.         fjsr    IoErr
  756.         addq.l    #1,d0
  757.         move.l    d0,d3
  758.         addi.l    #FileTypesLen,d0
  759.         moveq.l    #MEMF_PUBLIC,d1
  760.         exec
  761.         fjsr    AllocVec
  762.         move.l    d0,gl_Editor(gl)
  763.         beq.b    .EdDefault
  764.         slib    DOS
  765.         lea.l    .VarName(pc),a0
  766.         move.l    a0,d1
  767.         move.l    d0,d2
  768.         fjsr    GetVar
  769.         addq.l    #1,d0
  770.         beq.b    .EdRetry
  771.         fjsr    IoErr
  772.         addq.l    #1,d0
  773.         cmp.l    d0,d3
  774.         beq.b    .EdJoin
  775. .EdRetry    exec
  776.         movea.l    gl_Editor(gl),a1
  777.         clr.l    gl_Editor(gl)
  778.         fjsr    FreeVec
  779. .EdDefault
  780.         exec
  781.         moveq.l    #FileTypesLen+.DefEditorLen,d0
  782.         moveq.l    #MEMF_PUBLIC,d1
  783.         fjsr    AllocVec
  784.         move.l    d0,gl_Editor(gl)
  785.         beq.b    .EdCont
  786.         movea.l    d0,a1
  787.         lea.l    .DefEditor(pc),a0
  788. .EdDefLoop    move.b    (a0)+,(a1)+
  789.         bne.b    .EdDefLoop
  790. .EdJoin
  791.         moveq.l    #-1,d0
  792.         movea.l    gl_Editor(gl),a1
  793. .EdJoinLoop    addq.w    #1,d0
  794.         tst.b    (a1)+
  795.         bne.b    .EdJoinLoop
  796.         move.w    d0,gl_EditorLen(gl)
  797.         lea.l    _FileTypes(pc),a0
  798. .EdJoinLoop2    move.b    (a0)+,(a1)+
  799.         bne.b    .EdJoinLoop2
  800. .EdCont
  801.         exec
  802.         move.l    #PathBufferLen+DefToolStrLen,d0
  803.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  804.         fjsr    AllocVec
  805.         move.l    d0,gl_PathBuffer(gl)
  806.         beq.b    .MemErr
  807.         addi.l    #PathBufferLen,d0
  808.         move.l    d0,gl_DefToolStr(gl)
  809.  
  810.         exec
  811.         moveq.l    #rq_SIZEOF,d0
  812.         moveq.l    #MEMF_PUBLIC,d1
  813.         fjsr    AllocMem
  814.         move.l    d0,gl_Request(gl)
  815.         beq.b    .MemErr
  816.  
  817.         lea.l    .TopazName(pc),a1        ; Topaz8-TextAttr maken
  818.         move.l    a1,gl_TopazAttr+ta_Name(gl)
  819.         move.w    #8,gl_TopazAttr+ta_YSize(gl)
  820.         move.b    #FS_NORMAL,gl_TopazAttr+ta_Style(gl)
  821.         move.b    #FPF_ROMFONT!FPF_DESIGNED,gl_TopazAttr+ta_Flags(gl)
  822.  
  823.         moveq.l #-1,d0
  824. .Exit        pull
  825.         rts
  826.  
  827. .MemErr        moveq.l    #ERROR_NO_FREE_STORE,d0
  828.         move.l    d0,gl_Result2(gl)
  829.         getstr    MSG_NO_MEM ; a0
  830.         bra.b    .Error
  831.  
  832. .PortErr    getstr    MSG_NO_PORT ; a0
  833. ; In: a0 = &WhyText
  834. .Error        move.l    a0,-(sp)
  835.         suba.l    a2,a2
  836.         getstr    MSG_ABORT,a1
  837.         movea.l    (sp)+,a0
  838.         bsr.w    _EasyReq
  839.         ;clr.b    d0
  840.         bra.b    .Exit
  841.  
  842. .DefEditor    dc.b    'C:Ed',0
  843. .DefEditorLen    =    *-.DefEditor
  844. .VarName    dc.b    'EDITOR',0
  845. .TopazName    dc.b    'topaz.font',0
  846.         even
  847.  
  848. ;;-- AppIcon/MenuItem/Window anzeigen/öffnen --------------
  849. ;  Out: cc=eq, wenn Fehler
  850.  
  851. _OpenApp    push
  852.  
  853.         tst.w    gl_PopUp(gl)
  854.         bne.b    .WinMode
  855.         tst.w    gl_Mode(gl)
  856.         beq.b    .IconMode
  857.  
  858. .MenuMode    slib    WBench
  859.         moveq.l    #0,d0
  860.         moveq.l    #0,d1
  861.         movea.l    gl_AppName(gl),a0
  862.         movea.l    gl_AppPort(gl),a1
  863.         suba.l    a2,a2
  864.         fjsr    AddAppMenuItemA
  865.         move.l    d0,gl_AppObject(gl)
  866.         beq.b    .Error
  867.         bra.b    .Okay
  868.  
  869. .IconMode    slib    WBench
  870.         moveq.l    #0,d0
  871.         moveq.l    #0,d1
  872.         movea.l    gl_AppName(gl),a0
  873.         movea.l    gl_AppPort(gl),a1
  874.         suba.l    a2,a2
  875.         movea.l    gl_AppIcon(gl),a3
  876.         suba.l    a4,a4
  877.         fjsr    AddAppIconA
  878.         move.l    d0,gl_AppObject(gl)
  879.         beq.b    .Error
  880.         bra.b    .Okay
  881.  
  882. .WinMode    bsr.w    _OpenWindow
  883.         beq.b    .Exit            ; (Requester schon abgefragt)
  884.         slib    WBench
  885.         moveq.l    #0,d0
  886.         moveq.l    #0,d1
  887.         movea.l    gl_Window(gl),a0
  888.         movea.l    gl_AppPort(gl),a1
  889.         suba.l    a2,a2
  890.         fjsr    AddAppWindowA
  891.         move.l    d0,gl_AppObject(gl)
  892.         beq.b    .Error
  893. .Okay        moveq.l    #-1,d0
  894.  
  895. .Exit        pull
  896.         bgt.b    _OpenApp        ; User selected "Retry"
  897.         rts
  898.  
  899. .Error        bsr.b    _CloseApp        ; evtl. Window schließen etc.
  900.         suba.l    a2,a2
  901.         getstr    MSG_RETRY_CANCEL,a1
  902.         getstr    MSG_NO_APP ; a0
  903.         bsr.w    _EasyReq
  904.         ;tst.l    d0            ; gt = Retry, eq = Cancel
  905.         bra.b    .Exit
  906.  
  907. ;;-- AppIcon/Window/MenuItem entfernen etc. ---------------
  908. ; MUSS AUF OS1.3 LAUFEN!
  909.  
  910. _CloseApp    push
  911.  
  912.         move.l    gl_AppObject(gl),d0
  913.         beq.b    .AppCont
  914.         movea.l    d0,a0
  915.         clr.l    gl_AppObject(gl)
  916.         slib    WBench
  917.         tst.w    gl_PopUp(gl)
  918.         bne.b    .WinMode
  919.         tst.w    gl_Mode(gl)
  920.         beq.b    .IconMode
  921.  
  922. .MenuMode    fjsr    RemoveAppMenuItem
  923.         bra.b    .AppCont
  924. .IconMode    fjsr    RemoveAppIcon
  925.         bra.b    .AppCont
  926. .WinMode    fjsr    RemoveAppWindow
  927. .AppCont
  928.         tst.l    gl_AppPort(gl)
  929.         beq.b    .AppCont2
  930.         exec
  931. .AppLoop    movea.l    gl_AppPort(gl),a0
  932.         fjsr    GetMsg
  933.         tst.l    d0
  934.         beq.b    .AppCont2
  935.         movea.l    d0,a1
  936.         fjsr    ReplyMsg
  937.         bra.b    .AppLoop
  938. .AppCont2
  939.         move.l    gl_Window(gl),d0
  940.         beq.b    .WinCont
  941.         movea.l    gl_Process(gl),a0
  942.         move.l    gl_OldProcWin(gl),pr_WindowPtr(a0)
  943.         slib    Intui
  944.         movea.l    d0,a0
  945.         fjsr    ClearMenuStrip
  946. .WinLoop    tst.b    gl_FreezeCnt(gl)
  947.         ble.b    .WinCont2
  948.         moveq.l    #0,d0
  949.         bsr.w    _FreezeWin
  950.         bra.b    .WinLoop
  951. .WinCont2    movea.l    gl_Window(gl),a0
  952.         clr.l    gl_Window(gl)
  953.         fjsr    CloseWindow
  954. .WinCont
  955.         move.l    gl_FirstGad(gl),d0
  956.         beq.b    .GadCont
  957.         bsr.w    _CopyStrBuf
  958.         clr.l    gl_FirstGad(gl)
  959.         movea.l    d0,a0
  960.         slib    GTools
  961.         fjsr    FreeGadgets
  962. .GadCont
  963.         move.l    gl_MenuStrip(gl),d0
  964.         beq.b    .MenuCont
  965.         clr.l    gl_MenuStrip(gl)
  966.         movea.l    d0,a0
  967.         slib    GTools
  968.         fjsr    FreeMenus
  969. .MenuCont    move.l    gl_MenuStrings(gl),d0
  970.         beq.b    .MenuCont2
  971.         clr.l    gl_MenuStrings(gl)
  972.         movea.l    d0,a1
  973.         exec
  974.         fjsr    FreeVec
  975. .MenuCont2
  976.         exec
  977.         movea.l    gl_GadList+LH_HEAD(gl),a2
  978. .GadLoop    move.l    ggi_Node+LN_SUCC(a2),d2
  979.         beq.b    .GadCont2
  980.         movea.l    a2,a1
  981.         REMOVE
  982.         movea.l    a2,a1
  983.         moveq.l    #ggi_SIZEOF,d0
  984.         fjsr    FreeMem
  985.         movea.l    d2,a2
  986.         bra.b    .GadLoop
  987. .GadCont2
  988.         move.l    gl_VisualInfo(gl),d0
  989.         beq.b    .VICont
  990.         clr.l    gl_VisualInfo(gl)
  991.         movea.l    d0,a0
  992.         slib    GTools
  993.         fjsr    FreeVisualInfo
  994. .VICont
  995.         move.l    gl_PubScreen(gl),d0
  996.         beq.b    .ScrCont
  997.         clr.l    gl_PubScreen(gl)
  998.         movea.l    d0,a1
  999.         suba.l    a0,a0
  1000.         slib    Intui
  1001.         fjsr    UnlockPubScreen
  1002. .ScrCont
  1003.         pull
  1004.         rts
  1005.  
  1006. ;;-- Copy contents of the DefTool-StringGG ----------------
  1007.  
  1008. _CopyStrBuf    push
  1009.         tst.l    gl_FirstGad(gl)
  1010.         beq.b    .Exit
  1011.  
  1012.         moveq.l    #ID_DEFTOOLSTR,d0
  1013.         bsr.w    _GetGadget
  1014.         move.l    a0,d0
  1015.         beq.b    .Exit
  1016.         movea.l    gg_SpecialInfo(a0),a0
  1017.         movea.l    si_Buffer(a0),a0
  1018.         movea.l    gl_DefToolStr(gl),a1
  1019. .Loop        move.b    (a0)+,(a1)+
  1020.         bne.b    .Loop
  1021.  
  1022. .Exit        pull
  1023.         rts
  1024.  
  1025. ;;-- Gadgets erzeugen, Fenster öffnen etc. ----------------
  1026. ;  Out: cc=eq, wenn Fehler
  1027.  
  1028.     STRUCTURE OWLocals,0
  1029.     APTR    ow_PrevGad
  1030.     APTR    ow_TempRPort
  1031.     APTR    ow_TextFont
  1032.     BOOL    ow_FontRetry            ; if TRUE: try with Topaz 8!
  1033.     WORD    ow_MaxWidth        ; \
  1034.     WORD    ow_MaxHeight        ; /
  1035.     APTR    ow_TextAttr
  1036.  
  1037.     WORD    ow_ListViewLeft        ; \
  1038.     WORD    ow_ListViewTop        ;  \
  1039.     WORD    ow_ListViewWidth    ;  /
  1040.     WORD    ow_ListViewHeight    ; /
  1041.  
  1042.     WORD    ow_DefToolChkLeft
  1043.     WORD    ow_DefToolChkTop
  1044.     WORD    ow_DefToolChkWidth
  1045.     WORD    ow_DefToolChkHeight
  1046.  
  1047.     WORD    ow_DefToolStrLeft
  1048.     WORD    ow_DefToolStrTop
  1049.     WORD    ow_DefToolStrWidth
  1050.     WORD    ow_DefToolStrHeight
  1051.  
  1052.     WORD    ow_AppObjectLeft
  1053.     WORD    ow_AppObjectTop
  1054.     WORD    ow_AppObjectWidth
  1055.     WORD    ow_AppObjectHeight
  1056.     LABEL ow_SIZEOF
  1057.  
  1058. _OpenWindow    push
  1059.         moveq.l    #ow_SIZEOF/2-1,d0
  1060. .ClearLoop    clr.w    -(sp)
  1061.         dbra    d0,.ClearLoop
  1062.         movea.l    sp,lo
  1063. .Restart    moveq.l    #0,d7
  1064.  
  1065.         slib    Intui
  1066.         lea.l    _WBPubName(pc),a0
  1067.         fjsr    LockPubScreen
  1068.         move.l    d0,gl_PubScreen(gl)
  1069.         bne.b    .GetPubCont
  1070.         suba.l    a0,a0
  1071.         fjsr    LockPubScreen
  1072.         move.l    d0,gl_PubScreen(gl)
  1073.         beq.w    .Error
  1074. .GetPubCont
  1075.         slib    GTools
  1076.         movea.l    gl_PubScreen(gl),a0
  1077.         lea.l    .EmptyTags(pc),a1
  1078.         fjsr    GetVisualInfoA
  1079.         move.l    d0,gl_VisualInfo(gl)
  1080.         lea.l    gl_FirstGad(gl),a0
  1081.         fjsr    CreateContext
  1082.         move.l    d0,ow_PrevGad(lo)
  1083.         beq.w    .Error
  1084.         clr.l    ow_MaxWidth(lo)
  1085.  
  1086.         exec
  1087.         moveq.l    #rp_SIZEOF,d0
  1088.         move.l    #MEMF_CLEAR!MEMF_PUBLIC,d1
  1089.         fjsr    AllocVec
  1090.         move.l    d0,ow_TempRPort(lo)
  1091.         beq.w    .Error
  1092.         slib    Gfx
  1093.         movea.l    d0,a1
  1094.         fjsr    InitRastPort
  1095.  
  1096.         movea.l    gl_PubScreen(gl),a0
  1097.         movea.l    sc_Font(a0),a0            ; &TextAttr
  1098.         tst.w    ow_FontRetry(lo)
  1099.         beq.b    .RetryCont
  1100.         lea.l    gl_TopazAttr(gl),a0        ; &TopazAttr (retry)
  1101. .RetryCont    move.l    a0,ow_TextAttr(lo)
  1102.         fjsr    OpenFont
  1103.         move.l    d0,ow_TextFont(lo)
  1104.         beq.w    .FontError
  1105.         movea.l    ow_TempRPort(lo),a1
  1106.         movea.l    d0,a0
  1107.         fjsr    SetFont
  1108.  
  1109.         movea.l    ow_TextFont(lo),a2
  1110.         moveq.l    #16,d0            ; 16
  1111.         moveq.l    #12,d1
  1112.         add.w    tf_YSize(a2),d1        ; 12+FH
  1113.         move.w    tf_XSize(a2),d2
  1114.         lsl.w    #4,d2
  1115.         addi.w    #32,d2            ; 32+FW*16
  1116.         move.w    tf_YSize(a2),d3
  1117.         addq.w    #2,d3
  1118.         mulu.w    #7,d3
  1119.         addq.w    #6,d3            ; 6+(FH+2)*7
  1120.         movem.w    d0-d3,ow_ListViewLeft(lo)
  1121.         lea.l    .ListViewGG(pc),a0
  1122.     pea.l    .ListViewTags(pc)
  1123.     move.l    #TAG_MORE,-(sp)
  1124.     pea.l    gl_TypeList(gl)
  1125.     move.l    #GTLV_Labels,-(sp)
  1126.     move.w    gl_Type(gl),d4
  1127.     ext.l    d4
  1128.     move.l    d4,-(sp)
  1129.     move.l    #GTLV_Selected,-(sp)
  1130.     tst.l    d4
  1131.     bge.b    .LVCont
  1132.     moveq.l    #0,d4
  1133. .LVCont    move.l    d4,-(sp)
  1134.     move.l    #GTLV_Top,-(sp)
  1135.     movea.l    sp,a1
  1136.         bsr.w    .CreateGad
  1137.     lea.l    8*4(sp),sp
  1138.         beq.w    .Error
  1139.  
  1140.         move.w    .DefToolChkGG+4(pc),d0
  1141.         bsr.w    .GetLength
  1142.         addi.w    #24,d0            ; 24+len(DefaultTool)
  1143.         move.w    ow_ListViewTop(lo),d1
  1144.         addq.w    #6-1,d1
  1145.         add.w    ow_ListViewHeight(lo),d1 ; bottom(ListView)+6
  1146.         moveq.l    #26,d2            ; 26
  1147.         move.w    tf_YSize(a2),d3
  1148.         addq.w    #3,d3            ; 3+FH
  1149.         movem.w    d0-d3,ow_DefToolChkLeft(lo)
  1150.         lea.l    .DefToolChkGG(pc),a0
  1151.     pea.l    .DefToolChkTags(pc)
  1152.     move.l    #TAG_MORE,-(sp)
  1153.     move.w    gl_DefTool(gl),-(sp)
  1154.     clr.w    -(sp)
  1155.     move.l    #GTCB_Checked,-(sp)
  1156.     move.w    gl_AutoType(gl),-(sp)
  1157.     clr.w    -(sp)
  1158.     move.l    #GA_Disabled,-(sp)
  1159.     movea.l    sp,a1
  1160.         bsr.w    .CreateGad
  1161.     lea.l    6*4(sp),sp
  1162.         beq.w    .Error
  1163.  
  1164.         move.w    ow_DefToolChkLeft(lo),d0
  1165.         addq.w    #9-1,d0
  1166.         add.w    ow_DefToolChkWidth(lo),d0 ; right(DefToolChk)+9
  1167.         move.w    ow_ListViewTop(lo),d1
  1168.         addq.w    #5-1,d1
  1169.         add.w    ow_ListViewHeight(lo),d1 ; bottom(ListView)+5
  1170.         move.w    tf_XSize(a2),d2
  1171.         mulu.w    #25,d2
  1172.         addi.w    #12,d2            ; 12+FW*25
  1173.         moveq.l    #6,d3
  1174.         add.w    tf_YSize(a2),d3        ; 6+FH
  1175.         movem.w    d0-d3,ow_DefToolStrLeft(lo)
  1176.         lea.l    .DefToolStrGG(pc),a0
  1177.     pea.l    .DefToolStrTags(pc)
  1178.     move.l    #TAG_MORE,-(sp)
  1179.     move.l    gl_DefToolStr(gl),-(sp)
  1180.     move.l    #GTST_String,-(sp)
  1181.     movea.l    sp,a1
  1182.         bsr.w    .CreateGad
  1183.     lea.l    4*4(sp),sp
  1184.         beq.w    .Error
  1185.  
  1186.         move.w    ow_DefToolStrTop(lo),d1
  1187.         addi.w    #13-1,d1
  1188.         add.w    ow_DefToolStrHeight(lo),d1 ;(TOP) bottom(DefToolStr)+13
  1189.         lea.l    .AppIconGG(pc),a0
  1190.         tst.w    gl_Mode(gl)
  1191.         beq.b    .MenuModeCont
  1192.         lea.l    .AppMenuItemGG(pc),a0
  1193. .MenuModeCont    move.w    4(a0),d0
  1194.         bsr.w    .GetLength
  1195.         move.w    d0,d2
  1196.         addi.w    #36,d2            ; len(AppObject)+36
  1197.         moveq.l    #16,d0            ; (LEFT) 16
  1198.         moveq.l    #6,d3
  1199.         add.w    tf_YSize(a2),d3        ; (HEIGHT) 6+FH
  1200.         movem.w    d0-d3,ow_AppObjectLeft(lo)
  1201.         lea.l    .AppObjectTags(pc),a1
  1202.         bsr.w    .CreateGad
  1203.         beq.w    .Error
  1204.  
  1205.         move.w    .QuitGG+4(pc),d0
  1206.         bsr.w    .GetLength
  1207.         addi.w    #36,d0
  1208.         move.w    d0,d2            ; (WIDTH) len(Quit)+36
  1209.         neg.w    d0
  1210.         add.w    ow_DefToolStrLeft(lo),d0 ; (LEFT) right(DefToolStr)
  1211.         add.w    ow_DefToolStrWidth(lo),d0 ; ..-width(Quit)
  1212.         move.w    ow_AppObjectTop(lo),d1    ; top(AppObject)
  1213.         move.w    ow_AppObjectHeight(lo),d3 ; (HEIGHT) height(AppObject)
  1214.         lea.l    .QuitGG(pc),a0
  1215.         lea.l    .QuitTags(pc),a1
  1216.         bsr.w    .CreateGad
  1217.         beq.w    .Error
  1218.  
  1219.         moveq.l    #-25-1,d0
  1220.         add.w    ow_DefToolStrLeft(lo),d0
  1221.         add.w    ow_DefToolStrWidth(lo),d0 ; right(DefToolStr)-25
  1222.         moveq.l    #6,d1            ; 6
  1223.         moveq.l    #26,d2            ; 26
  1224.         move.w    tf_YSize(a2),d3
  1225.         addq.w    #3,d3            ; FH+3
  1226.         lea.l    .AutoTypeGG(pc),a0
  1227.     pea.l    .AutoTypeTags(pc)
  1228.     move.l    #TAG_MORE,-(sp)
  1229.     move.w    gl_AutoType(gl),-(sp)
  1230.     clr.w    -(sp)
  1231.     move.l    #GTCB_Checked,-(sp)
  1232.     movea.l    sp,a1
  1233.         bsr.w    .CreateGad
  1234.     lea.l    4*4(sp),sp
  1235.         beq.w    .Error
  1236.  
  1237.         movea.l    sp,a2
  1238.         clr.l    -(sp)
  1239.         pea.l    .QuitMN(pc)
  1240.         pea.l    .BarMN(pc)
  1241.         pea.l    .AboutMN(pc)
  1242.         pea.l    .BarMN(pc)
  1243.         lea.l    .AppIconMN(pc),a0
  1244.         tst.w    gl_Mode(gl)
  1245.         beq.b    .MenuModeCont2
  1246.         lea.l    .AppMenuItemMN(pc),a0
  1247. .MenuModeCont2    move.l    a0,-(sp)
  1248.         tst.l    gl_Editor(gl)
  1249.         beq.b    .DisEdit
  1250.         pea.l    .EditMN(pc)            ; Editor available
  1251.         bra.b    .EditCont
  1252. .DisEdit    pea.l    .DisEditMN(pc)            ; no way, disable it
  1253. .EditCont    pea.l    .ReparseMN(pc)
  1254.         pea.l    .ProjectMN(pc)
  1255.         movea.l    sp,a0
  1256.         bsr.w    .CreateMenu
  1257.         movea.l    a2,sp
  1258.         beq.w    .Error
  1259.  
  1260.         slib    Intui
  1261.         movea.l    gl_PubScreen(gl),a0
  1262.         movea.l    sp,a2
  1263.         pea.l    .WinTags(pc)
  1264.         move.l    #TAG_MORE,-(sp)
  1265.         move.l    a0,-(sp)
  1266.         move.l    #WA_PubScreen,-(sp)
  1267.         move.l    gl_FirstGad(gl),-(sp)
  1268.         move.l    #WA_Gadgets,-(sp)
  1269.         move.l    gl_AppName(gl),-(sp)
  1270.         move.l    #WA_Title,-(sp)
  1271.         moveq.l    #0,d2
  1272.         move.b    sc_WBorRight(a0),d2
  1273.         ext.w    d2
  1274.         add.w    ow_MaxWidth(lo),d2
  1275.         move.l    d2,-(sp)        ; \
  1276.         move.l    #WA_MinWidth,-(sp)    ;  \
  1277.         addi.w    #16,d2            ;   \
  1278.         move.l    d2,-(sp)        ;    \
  1279.         move.l    #WA_Width,-(sp)        ;     \
  1280.         moveq.l    #0,d3            ;      \
  1281.         move.b    sc_WBorBottom(a0),d3    ;    \
  1282.         ext.w    d3            ;    /
  1283.         add.w    ow_MaxHeight(lo),d3    ;      /
  1284.         move.l    d3,-(sp)        ;     /
  1285.         move.l    #WA_MinHeight,-(sp)    ;    /
  1286.         addq.w    #8,d3            ;   /
  1287.         move.l    d3,-(sp)        ;  /
  1288.         move.l    #WA_Height,-(sp)    ; /
  1289.         move.l    d2,d0
  1290.         lsr.w    #1,d0
  1291.         move.w    d3,d1
  1292.         lsr.w    #3,d1
  1293.         mulu.w    #7,d1
  1294.         neg.w    d0
  1295.         neg.w    d1
  1296.         add.w    sc_MouseX(a0),d0
  1297.         add.w    sc_MouseY(a0),d1
  1298.         neg.w    d2
  1299.         neg.w    d3
  1300.         add.w    sc_Width(a0),d2
  1301.         add.w    sc_Height(a0),d3
  1302.         cmp.w    d2,d0
  1303.         ble.b    .LeftCont
  1304.         move.w    d2,d0
  1305. .LeftCont    cmp.w    d3,d1
  1306.         ble.b    .TopCont
  1307.         move.w    d3,d1
  1308. .TopCont    tst.w    d0
  1309.         bge.b    .LeftCont2
  1310.         moveq.l    #0,d0
  1311. .LeftCont2    tst.w    d1
  1312.         bge.b    .TopCont2
  1313.         moveq.l    #0,d1
  1314. .TopCont2    cmp.w    d2,d0
  1315.         ble.b    .LeftCont3
  1316.         move.l    7*4(sp),5*4(sp)        ; Width = MitWidth
  1317. .LeftCont3    cmp.w    d3,d1
  1318.         ble.b    .TopCont3
  1319.         move.l    3*4(sp),1*4(sp)        ; Height = MinHeight
  1320. .TopCont3    move.l    d0,-(sp)
  1321.         move.l    #WA_Left,-(sp)
  1322.         move.l    d1,-(sp)
  1323.         move.l    #WA_Top,-(sp)
  1324.         suba.l    a0,a0
  1325.         movea.l    sp,a1
  1326.         fjsr    OpenWindowTagList
  1327.         movea.l    a2,sp
  1328.         move.l    d0,gl_Window(gl)
  1329.         beq.w    .FontError
  1330.  
  1331.     clr.b    gl_FreezeCnt(gl)
  1332.     moveq.l    #-1,d0
  1333.     bsr.w    _FreezeWin
  1334.         movea.l    gl_Process(gl),a1
  1335.         move.l    pr_WindowPtr(a1),gl_OldProcWin(gl)
  1336.         movea.l    gl_Window(gl),a0
  1337.         move.l    a0,pr_WindowPtr(a1)
  1338.         movea.l    gl_MenuStrip(gl),a1
  1339.         fjsr    SetMenuStrip
  1340.         tst.w    d0
  1341.         beq.w    .Error
  1342.         slib    GTools
  1343.         movea.l    gl_Window(gl),a0
  1344.         suba.l    a1,a1
  1345.         fjsr    GT_RefreshWindow
  1346.  
  1347.     getstr    MSG_DROP_BOX ; a0
  1348.         move.w    ow_ListViewLeft(lo),d0
  1349.         add.w    ow_ListViewWidth(lo),d0
  1350.         addi.w    #17-1,d0        ; right(ListView)+17
  1351.         move.w    d0,d2
  1352.         move.w    ow_ListViewTop(lo),d1
  1353.         addq.w    #4,d1            ; top(ListView)+4
  1354.         neg.w    d2
  1355.         add.w    ow_DefToolStrLeft(lo),d2
  1356.         add.w    ow_DefToolStrWidth(lo),d2 ; right(DefTStr)-right(LV)-16
  1357.         move.w    ow_ListViewHeight(lo),d3
  1358.         subq.w    #8,d3            ; height(ListView)-8
  1359.         bsr.w    .DrawIconBox
  1360.         moveq.l    #NG_HIGHLABEL,d4
  1361.         bsr.w    .PrintText
  1362.  
  1363.     moveq.l    #0,d0
  1364.     bsr.w    _FreezeWin
  1365.         moveq.l    #-1,d7            ; Okay
  1366.  
  1367. ; In: d7.b = ReturnCode
  1368. .CleanUp    exec
  1369.         movea.l    ow_TempRPort(lo),a1
  1370.         clr.l    ow_TempRPort(lo)
  1371.         fjsr    FreeVec
  1372.  
  1373.         move.l    ow_TextFont(lo),d0
  1374.         beq.b    .CUCont
  1375.         clr.l    ow_TextFont(lo)
  1376.         slib    Gfx
  1377.         movea.l    d0,a1
  1378.         fjsr    CloseFont
  1379. .CUCont
  1380.         tst.b    d7
  1381.         bgt.w    .Restart
  1382.         lea.l    ow_SIZEOF(sp),sp
  1383.         pull
  1384.         rts
  1385.  
  1386. .FontError    tst.w    ow_FontRetry(lo)
  1387.         bne.b    .Error            ; ..already tried Topaz 8
  1388.         move.w    #-1,ow_FontRetry(lo)
  1389.         moveq.l    #1,d7
  1390.         bsr.w    _CloseApp
  1391.         bra.b    .CleanUp
  1392.  
  1393. .Error        bsr.w    _CloseApp
  1394.         clr.w    ow_FontRetry(lo)
  1395.         suba.l    a2,a2
  1396.         getstr    MSG_RETRY_CANCEL,a1
  1397.         getstr    MSG_NO_WIN ; a0
  1398.         bsr.w    _EasyReq
  1399.         move.l    d0,d7
  1400.         bra.b    .CleanUp
  1401.  
  1402. ;-- CreateGadgetA aufrufen --
  1403. ; In: a0 = (struct { ULONG Kind, UWORD TextID, UWORD GadgetID, ULONG Flags } *)
  1404. ;     a1 = &TagList, d0/d1/d2/d3.w = Left/Top/Width/Height
  1405. ; Out: cc=eq, wenn Fehler; ow_PrevGad will be updated
  1406.  
  1407. .CreateGad    push
  1408.  
  1409.         slib    GTools
  1410.         movea.l    a1,a2            ; &TagList
  1411.         movea.l    gl_PubScreen(gl),a1
  1412.         move.b    sc_WBorLeft(a1),d4
  1413.         ext.w    d4
  1414.         add.w    d4,d0
  1415.         move.b    sc_WBorTop(a1),d4
  1416.         ext.w    d4
  1417.         addq.w    #1,d4
  1418.         movea.l    sc_Font(a1),a1
  1419.         add.w    ta_YSize(a1),d4
  1420.         add.w    d4,d1
  1421.  
  1422.         clr.l    -(sp)            ; ng_UserData
  1423.         movea.l    gl_VisualInfo(gl),-(sp)    ; ng_VisualInfo
  1424.         move.l    8(a0),-(sp)        ; ng_Flags
  1425.         move.w    6(a0),-(sp)        ; ng_GadgetID
  1426.         movea.l    ow_TextAttr(lo),-(sp)    ; ng_TextAttr
  1427.         clr.l    -(sp)            ; ng_GadgetText
  1428.         movem.w    d0-d3,-(sp)         ; ng_LeftEdge/TopEdge/Width/Height
  1429.         movea.l    sp,a1            ; &NewGad
  1430.         move.l    (a0),d1
  1431.         moveq.l    #0,d0
  1432.         move.w    4(a0),d0
  1433.         blt.b    .CGGCont
  1434.         bsr.w    _GetCatString
  1435.         move.l    a0,gng_GadgetText(a1)
  1436. .CGGCont    move.l    d1,d0            ; Kind
  1437.         movea.l    ow_PrevGad(lo),a0    ; &PreviousGG
  1438.         fjsr    CreateGadgetA
  1439.         move.l    d0,ow_PrevGad(lo)    ; cc = ?
  1440.         beq.b    .CGGExit
  1441.  
  1442.         movem.w    gng_LeftEdge(sp),d0/d1
  1443.         add.w    gng_Width(sp),d0
  1444.         add.w    gng_Height(sp),d1
  1445.         cmp.w    ow_MaxWidth(lo),d0
  1446.         blt.b    .CGGWidthCont
  1447.         move.w    d0,ow_MaxWidth(lo)
  1448. .CGGWidthCont    cmp.w    ow_MaxHeight(lo),d1
  1449.         blt.b    .CGGHeightCont
  1450.         move.w    d1,ow_MaxHeight(lo)
  1451. .CGGHeightCont
  1452.         exec
  1453.         moveq.l    #ggi_SIZEOF,d0
  1454.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1455.         fjsr    AllocMem
  1456.         tst.l    d0
  1457.         beq.b    .CGGExit
  1458.         movea.l    d0,a1
  1459.         move.l    ow_PrevGad(lo),ggi_Gadget(a1)
  1460.         move.w    gng_GadgetID(sp),ggi_GadgetID(a1)
  1461.         move.l    gng_GadgetText(sp),d0
  1462.         beq.b    .CGGInfoCont
  1463.         movea.l    d0,a0
  1464.         bsr.w    .GetUnderScore
  1465. .CGGInfoCont    lea.l    ggi_UnderScore(a1),a0
  1466.         move.b    d0,(a0)
  1467.         move.l    a0,ggi_Node+LN_NAME(a1)
  1468.         lea.l    gl_GadList(gl),a0
  1469.         ADDTAIL
  1470.  
  1471.         moveq.l    #-1,d0
  1472. .CGGExit    lea.l    gng_SIZEOF(sp),sp
  1473.         pull
  1474.         rts
  1475.  
  1476. ;-- MenuStrip erstellen --
  1477. ; In: a0 = &ArrayOfPtrn (STRUCT {UBYTE Type,UWORD LabelID,UWORD ID,UWORD Flax})
  1478. ;       (terminated by NULL-Ptr)
  1479. ; Out: cc=eq, wenn Fehler, gl_MenuStrip = &MenuStrip (layoutet)
  1480. ;               gl_MenuStrings will be updated
  1481.  
  1482. .CreateMenu    push
  1483.         moveq.l    #0,d7
  1484.         ;moveq.l #0,d3
  1485.         movea.l    a0,a2
  1486.  
  1487.         moveq.l    #0,d1
  1488.         moveq.l    #1,d2            ; (AllocV needs at least1 byte)
  1489.         movea.l    a2,a1
  1490. .CMCntLoop    addq.l    #1,d1
  1491.         move.l    (a1)+,d0
  1492.         beq.b    .CMCntDone
  1493.         movea.l    d0,a0
  1494.         moveq.l    #0,d0
  1495.         move.w    2(a0),d0
  1496.         blt.b    .CMCntLoop        ; ..BarLabel
  1497.         bsr.w    _GetCatString
  1498.         addq.l    #3,d2            ; NULL-Byte, 2 Chars 4 ShortCut
  1499. .CMCntLoop2    move.b    (a0)+,d0
  1500.         beq.b    .CMCntLoop
  1501.         cmpi.b    #'_',d0
  1502.         beq.b    .CMCntLoop2
  1503.         addq.l    #1,d2
  1504.         bra.b    .CMCntLoop2
  1505. .CMCntDone            ; d1= NumberOfNewMenus, d2 = SizeOfStrings
  1506.         exec
  1507.         move.l    d1,d0
  1508.         mulu.w    #gnm_SIZEOF,d0
  1509.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1510.         fjsr    AllocVec
  1511.         move.l    d0,d3
  1512.         beq.w    .CMCleanUp
  1513.         move.l    d2,d0
  1514.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1515.         fjsr    AllocVec
  1516.         move.l    d0,gl_MenuStrings(gl)
  1517.         beq.w    .CMCleanUp
  1518.  
  1519.         movea.l    d0,a3            ; a3 = &Strings
  1520.         movea.l    d3,a1            ; a1 = &NewMenus
  1521. .CMMakLoop    move.l    (a2)+,d0        ; a2 = &ArrayOfPtrn
  1522.         beq.b    .CMMakDone
  1523.         movea.l    d0,a0
  1524.         move.w    0(a0),gnm_Type(a1)    ; nm_Type, nm_PAD
  1525.         move.l    #NM_BARLABEL,gnm_Label(a1) ; defaults to BarLabel
  1526.         move.w    6(a0),gnm_Flags(a1)    ; nm_Flags
  1527.         ;clr.l    gnm_MutualExclude(a1)    ; nm_MutualExclude
  1528.         move.w    4(a0),gnm_UserData+2(a1) ; nm_UserData
  1529.         moveq.l    #0,d0
  1530.         move.w    2(a0),d0
  1531.         blt.b    .CMMakNext        ; ..BarLabel
  1532.         bsr.w    _GetCatString
  1533.         bsr.w    .GetUnderScore
  1534.         move.l    a3,gnm_Label(a1)    ; nm_Label
  1535. .CMMakLoop2    move.b    (a0)+,d1
  1536.         cmpi.b    #'_',d1
  1537.         beq.b    .CMMakLoop2        ; ..skip Underscores
  1538.         move.b    d1,(a3)+        ; copy Label
  1539.         bne.b    .CMMakLoop2
  1540.         move.b    d0,(a3)            ; copy Underscore
  1541.         beq.b    .CMMakCont        ; ..(no ShortCut)
  1542.         move.l    a3,gnm_CommKey(a1)    ; nm_CommKey
  1543. .CMMakCont    addq.l    #2,a3
  1544. .CMMakNext    lea.l    gnm_SIZEOF(a1),a1
  1545.         bra.b    .CMMakLoop
  1546. .CMMakDone    ;move.b    #NM_END,gnm_Type(a1)    ; mark end of array
  1547.  
  1548.         clr.l    -(sp)
  1549.         clr.l    -(sp)
  1550.         moveq.l    #-1,d0
  1551.         move.l    d0,-(sp)
  1552.         move.l    #GTMN_NewLookMenus,-(sp)
  1553.         slib    GTools
  1554.         movea.l    d3,a0
  1555.         movea.l    sp,a1
  1556.         fjsr    CreateMenusA
  1557.         lea.l    4*4(sp),sp
  1558.         move.l    d0,gl_MenuStrip(gl)
  1559.         beq.b    .CMCleanUp
  1560.         lea.l    -4*4(sp),sp        ; reuse TagList
  1561.         movea.l    d0,a0
  1562.         movea.l    gl_VisualInfo(gl),a1
  1563.         movea.l    sp,a2
  1564.         fjsr    LayoutMenusA
  1565.         lea.l    4*4(sp),sp
  1566.         tst.w    d0
  1567.         beq.b    .CMCleanUp
  1568.         
  1569.         moveq.l    #-1,d7
  1570. .CMCleanUp    exec
  1571.         movea.l    d3,a1
  1572.         fjsr    FreeVec
  1573.         tst.b    d7
  1574.         pull
  1575.         rts
  1576.  
  1577. ;-- Länge eines Locale-Strings in Pixeln ermitteln --
  1578. ; In: d0.w = StringID (limited to 64 chars!)
  1579. ; Out: d0.w = Length
  1580.  
  1581. .GetLength    push    d1-d7/a0-a7
  1582.         lea.l    -64(sp),sp
  1583.  
  1584.         slib    Gfx
  1585.         ext.l    d0
  1586.         bsr.w    _GetCatString
  1587.         movea.l    a0,a1
  1588.         movea.l    sp,a2
  1589.         moveq.l    #0,d0
  1590. .GLLoop        cmpi.b    #'_',(a1)+
  1591.         beq.b    .GLLoop            ; ..skip Underscores
  1592.         move.b    -1(a1),(a2)+
  1593.         beq.b    .GLCont
  1594.         addq.w    #1,d0
  1595.         cmpi.b    #64,d0
  1596.         blt.b    .GLLoop
  1597. .GLCont        movea.l    ow_TempRPort(lo),a1
  1598.         fjsr    TextLength
  1599.  
  1600.         lea.l    64(sp),sp
  1601.         pull    d1-d7/a0-a7
  1602.         rts
  1603.  
  1604. ;-- UnderScore ermitteln --
  1605. ;  In: a0 = &GadgetText
  1606. ;  Out: d0.b = uppercase Char (NULL = no UnderScore)
  1607.  
  1608. .GetUnderScore    push    d1-d7/a0-a7
  1609.         moveq.l    #0,d0
  1610.  
  1611. .GUSLoop    move.b    (a0)+,d0
  1612.         beq.b    .GUSExit
  1613.         cmpi.b    #'_',d0
  1614.         bne.b    .GUSLoop
  1615.         move.b    (a0),d0            ; UnderScore-Char
  1616.         beq.b    .GUSExit
  1617.         bsr.w    _UpperCase
  1618.  
  1619. .GUSExit    pull    d1-d7/a0-a7
  1620.         rts
  1621.  
  1622. ;-- IconDropBox zeichen --
  1623. ; In: d0/d1/d2/d3.w = Left/Top/Width/Height
  1624.  
  1625. .DrawIconBox    push
  1626.         movea.l    sp,a2
  1627.  
  1628.         slib    GTools
  1629.         movea.l    gl_PubScreen(gl),a0
  1630.         move.b    sc_WBorLeft(a0),d4
  1631.         ext.w    d4
  1632.         add.w    d4,d0
  1633.         move.b    sc_WBorTop(a0),d4
  1634.         ext.w    d4
  1635.         addq.w    #1,d4
  1636.         movea.l    sc_Font(a0),a0
  1637.         add.w    ta_YSize(a0),d4
  1638.         add.w    d4,d1
  1639.  
  1640.         movea.l    gl_Window(gl),a0
  1641.         movea.l    wd_RPort(a0),a0
  1642.         clr.l    -(sp)
  1643.         clr.l    -(sp)
  1644.         move.l    gl_VisualInfo(gl),-(sp)
  1645.         move.l    #GT_VisualInfo,-(sp)
  1646.         movea.l    sp,a1
  1647.         push    d0-d3/a0
  1648.         fjsr    DrawBevelBoxA
  1649.         pull    d0-d3/a0
  1650.         addq.w    #4,d0
  1651.         addq.w    #2,d1
  1652.         subq.w    #8,d2
  1653.         subq.w    #4,d3
  1654.         move.l    #-1,-(sp)
  1655.         move.l    #GTBB_Recessed,-(sp)
  1656.         movea.l    sp,a1
  1657.         fjsr    DrawBevelBoxA
  1658.  
  1659.         movea.l    a2,sp
  1660.         pull
  1661.         rts
  1662.  
  1663. ;-- Text ausgeben --
  1664. ; In: d0/d1/d2/d3.w = Left/Top/Width/Height
  1665. ;     a0 = &Text, d4.l = Flags (only NG_HIGHLABEL supported yet)
  1666.  
  1667. .PrintText    push
  1668.         lsr.w    #1,d2
  1669.         lsr.w    #1,d3
  1670.         add.w    d0,d2                ; d2.w = LeftMiddle
  1671.         add.w    d1,d3                ; d3.w = TopMiddle
  1672.         movea.l    a0,a2
  1673.         movea.l    gl_Window(gl),a3
  1674.         movea.l    wd_RPort(a3),a3
  1675.  
  1676.         movea.l    ow_TextFont(lo),a0
  1677.         movea.l    a3,a1
  1678.         slib    Gfx
  1679.         fjsr    SetFont
  1680.         moveq.l    #RP_JAM1,d0
  1681.         movea.l    a3,a1
  1682.         fjsr    SetDrMd
  1683.  
  1684.         movea.l    gl_PubScreen(gl),a0
  1685.         move.b    sc_WBorLeft(a0),d0
  1686.         ext.w    d0
  1687.         add.w    d0,d2
  1688.         move.b    sc_WBorTop(a0),d0
  1689.         ext.w    d0
  1690.         addq.w    #1,d0
  1691.         movea.l    sc_Font(a0),a0
  1692.         add.w    ta_YSize(a0),d0
  1693.         add.w    d0,d3
  1694.  
  1695.         movea.l    gl_PubScreen(gl),a0        
  1696.         slib    Intui
  1697.         fjsr    GetScreenDrawInfo
  1698.         movea.l    d0,a1
  1699.         movea.l    dri_Pens(a1),a0
  1700.         moveq.l    #TEXTPEN*2,d0
  1701.         andi.l    #NG_HIGHLABEL,d4
  1702.         beq.b    .PTColorCont
  1703.         moveq.l    #HIGHLIGHTTEXTPEN*2,d0
  1704. .PTColorCont    move.w    (a0,d0.w),d4            ; d4.w = TextColor
  1705.         movea.l    gl_PubScreen(gl),a0
  1706.         fjsr    FreeScreenDrawInfo
  1707.         move.b    d4,d0
  1708.         movea.l    a3,a1
  1709.         slib    Gfx
  1710.         fjsr    SetAPen
  1711.  
  1712.         movea.l    ow_TextFont(lo),a0
  1713.         movea.l    a2,a1
  1714.         moveq.l    #-2,d0
  1715. .PTLinesNew    add.w    tf_YSize(a0),d0
  1716.         addq.w    #2,d0
  1717. .PTLinesLoop    move.b    (a1)+,d1
  1718.         beq.b    .PTLinesCont
  1719.         cmpi.b    #$0A,d1
  1720.         bne.b    .PTLinesLoop
  1721.         bra.b    .PTLinesNew
  1722. .PTLinesCont    lsr.w    #1,d0
  1723.         sub.w    d0,d3
  1724.         add.w    tf_Baseline(a0),d3        ; d3.w = RealTopEdge
  1725.  
  1726. .PTPrintLoop    movea.l    a2,a0
  1727.         movea.l    a3,a1
  1728.         moveq.l    #-1,d0
  1729. .PTPrintLoop2    addq.w    #1,d0
  1730.         move.b    (a2)+,d1
  1731.         beq.b    .PTPrintCont
  1732.         cmpi.b    #$0A,d1
  1733.         bne.b    .PTPrintLoop2
  1734. .PTPrintCont     push    d0/a0/a1
  1735.         fjsr    TextLength
  1736.         asr.w    #1,d0
  1737.         neg.w    d0
  1738.         add.w    d2,d0
  1739.         move.w    d3,d1
  1740.         movea.l    a3,a1
  1741.         fjsr    Move ;Any Mountain; The Shamen r cool...
  1742.         pull    d0/a0/a1
  1743.         fjsr    Text
  1744.         movea.l    ow_TextFont(lo),a0
  1745.         add.w    tf_YSize(a0),d3
  1746.         addq.w    #2,d3
  1747.         tst.b    -1(a2)
  1748.         bne.b    .PTPrintLoop
  1749.  
  1750.         pull
  1751.         rts
  1752.  
  1753. ;- - - - - - - - - - - - - - - - - - -
  1754.  
  1755. .EmptyTags    dc.l    TAG_DONE,0
  1756.  
  1757. .ListViewGG    dc.l    LISTVIEW_KIND        ; GadTools-Kind
  1758.         dc.w    MSG_TYPES,ID_LISTVIEW    ; ng_GadgetTextID, ng_GadgetID
  1759.         dc.l    PLACETEXT_ABOVE!NG_HIGHLABEL    ; ng_Flags
  1760. .ListViewTags    dc.l    GTLV_ReadOnly,0
  1761.         dc.l    GTLV_ShowSelected,0
  1762.         dc.l    GTLV_ScrollWidth,20
  1763.         dc.l    LAYOUTA_Spacing,2
  1764.         dc.l    TAG_DONE,0
  1765.  
  1766. .DefToolChkGG    dc.l    CHECKBOX_KIND
  1767.         dc.w    MSG_DEFAULT_TOOL,ID_DEFTOOLCHK
  1768.         dc.l    PLACETEXT_LEFT
  1769. .DefToolChkTags    dc.l    GT_Underscore,'_'
  1770.         dc.l    GTCB_Scaled,-1
  1771.         dc.l    TAG_DONE,0
  1772.  
  1773. .DefToolStrGG    dc.l    STRING_KIND
  1774.         dc.w    -1,ID_DEFTOOLSTR
  1775.         dc.l    0
  1776. .DefToolStrTags    dc.l    GTST_MaxChars,DefToolStrLen-1
  1777.         dc.l    GA_TabCycle,0        ; we have only one Gadget
  1778.         dc.l    TAG_DONE,0
  1779.  
  1780. .AppIconGG    dc.l    BUTTON_KIND
  1781.         dc.w    MSG_APPICON,ID_APPOBJECT
  1782.         dc.l    PLACETEXT_IN
  1783. .AppMenuItemGG    dc.l    BUTTON_KIND
  1784.         dc.w    MSG_APPMENUITEM,ID_APPOBJECT
  1785.         dc.l    PLACETEXT_IN
  1786. .AppObjectTags    dc.l    GT_Underscore,'_'
  1787.         dc.l    TAG_DONE,0
  1788.  
  1789. .QuitGG        dc.l    BUTTON_KIND
  1790.         dc.w    MSG_QUIT,ID_QUIT
  1791.         dc.l    PLACETEXT_IN
  1792. .QuitTags    dc.l    GT_Underscore,'_'
  1793.         dc.l    TAG_DONE,0
  1794.  
  1795. .AutoTypeGG    dc.l    CHECKBOX_KIND
  1796.         dc.w    MSG_AUTOTYPE,ID_AUTOTYPE
  1797.         dc.l    PLACETEXT_LEFT
  1798. .AutoTypeTags    dc.l    GT_Underscore,'_'
  1799.         dc.l    GTCB_Scaled,-1
  1800.         dc.l    TAG_DONE,0
  1801.  
  1802. .ProjectMN    dc.b    NM_TITLE,0        ; nm_Type, PAD
  1803.         dc.w    MSG_PROJECT,ID_PROJECT    ; nm_LabelID, nm_UserData (=ID)
  1804.         dc.w    0            ; nm_Flags
  1805.  
  1806. .ReparseMN    dc.b    NM_ITEM,0
  1807.         dc.w    MSG_REPARSE,ID_REPARSE
  1808.         dc.w    0
  1809.  
  1810. .EditMN        dc.b    NM_ITEM,0
  1811.         dc.w    MSG_EDIT,ID_EDIT
  1812.         dc.w    0
  1813.  
  1814. .DisEditMN    dc.b    NM_ITEM,0
  1815.         dc.w    MSG_EDIT,ID_EDIT
  1816.         dc.w    NM_ITEMDISABLED
  1817.  
  1818. .AppIconMN    dc.b    NM_ITEM,0
  1819.         dc.w    MSG_APPICON,ID_APPOBJECT
  1820.         dc.w    0
  1821.  
  1822. .AppMenuItemMN    dc.b    NM_ITEM,0
  1823.         dc.w    MSG_APPMENUITEM,ID_APPOBJECT
  1824.         dc.w    0
  1825.  
  1826. .BarMN        dc.b    NM_ITEM,0
  1827.         dc.w    -1,-1
  1828.         dc.w    0
  1829.  
  1830. .AboutMN    dc.b    NM_ITEM,0
  1831.         dc.w    MSG_ABOUT,ID_ABOUT
  1832.         dc.w    0
  1833.  
  1834. .QuitMN        dc.b    NM_ITEM,0
  1835.         dc.w    MSG_QUIT,ID_QUIT
  1836.         dc.w    0
  1837.  
  1838. .WinTags    dc.l    WA_DragBar,-1
  1839.         dc.l    WA_DepthGadget,-1
  1840.         dc.l    WA_CloseGadget,-1
  1841.         dc.l    WA_Activate,-1
  1842.         dc.l    WA_SmartRefresh,-1
  1843. *        dc.l    WA_RMBTrap,-1
  1844.         dc.l    WA_PubScreenFallBack,-1
  1845.         dc.l    WA_AutoAdjust,0
  1846.         dc.l    WA_MaxWidth,~0
  1847.         dc.l    WA_MaxHeight,~0
  1848.         dc.l    WA_NewLookMenus,-1
  1849.         dc.l    TAG_DONE,0
  1850.  
  1851. ;;-- Zeichen in Großbuchstaben umwandeln -------------------
  1852. ;  In: d0.b = Char
  1853. ;  Out: d0.b = UpperCase( Char )
  1854.  
  1855. _UpperCase    push    d1-d7/a0-a7
  1856.  
  1857.         move.l    gl_Locale(gl),d1
  1858.         beq.b    .NoLocale
  1859.         slib    Locale
  1860.         movea.l    d1,a0
  1861.         andi.l    #$FF,d0
  1862.         fjsr    ConvToUpper
  1863.         bra.b    .Exit
  1864.  
  1865. .NoLocale    cmpi.b    #'a',d0
  1866.         blt.b    .Exit
  1867.         cmpi.b    #'z',d0
  1868.         bgt.b    .Exit
  1869.         bclr.l    #5,d0            ; nice ToUpper method :-)
  1870.  
  1871. .Exit        pull    d1-d7/a0-a7
  1872.         rts
  1873.  
  1874. ;;-- Nodes für Typen allokieren, in Liste verankern -------
  1875. ;  Out: cc=eq, wenn Fehler
  1876.  
  1877. _AllocTypes    push
  1878.         bsr.w    _FreeTypes        ; Make sure that List is empty
  1879.  
  1880.         slib    WhatIs
  1881.         fjsr    FirstType
  1882.         move.l    d0,d2
  1883. .Loop        slib    WhatIs
  1884.         movea.l    d2,a0
  1885.         fjsr    NextType
  1886.         move.l    d0,d2
  1887.         beq.w    .Done
  1888.         cmpi.l    #TYPE_UNKNOWNFILETYPE,d2
  1889.         beq.b    .Done
  1890.         movea.l    d2,a0
  1891.         fjsr    GetIconName
  1892.         tst.l    d0
  1893.         beq.b    .Loop            ; ..no ICONNAME keyword
  1894.         movea.l    d2,a0
  1895.         fjsr    GetIDString
  1896.         movea.l    d0,a2
  1897.         exec
  1898.         moveq.l    #fti_SIZEOF,d0
  1899.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1900.         fjsr    AllocMem
  1901.         tst.l    d0
  1902.         beq.b    .Error
  1903.  
  1904.         movea.l    d0,a1
  1905.         move.l    a2,fti_Node+LN_NAME(a1)
  1906.         move.l    d2,fti_Type(a1)
  1907.         movea.l    gl_TypeList+LH_HEAD(gl),a0
  1908. .AlphaLoop    move.l    fti_Node+LN_SUCC(a0),d3
  1909.         beq.b    .AlphaCont
  1910.         movea.l    fti_Node+LN_NAME(a0),a2
  1911.         movea.l    fti_Node+LN_NAME(a1),a3
  1912. .AlphaLoop2    move.b    (a2)+,d0
  1913.         beq.b    .AlphaNext
  1914.         move.b    (a3)+,d1
  1915.         beq.b    .AlphaCont
  1916.         ori.b    #$20,d0
  1917.         ori.b    #$20,d1
  1918.         cmp.b    d0,d1
  1919.         beq.b    .AlphaLoop2
  1920.         blt.b    .AlphaCont
  1921. .AlphaNext    movea.l    d3,a0
  1922.         bra.b    .AlphaLoop
  1923. .AlphaCont    move.l    a0,fti_Node+LN_SUCC(a1)        ; insert new before old
  1924.         movea.l    fti_Node+LN_PRED(a0),a2
  1925.         move.l    a2,fti_Node+LN_PRED(a1)
  1926.         move.l    a1,fti_Node+LN_PRED(a0)
  1927.         move.l    a1,fti_Node+LN_SUCC(a2)
  1928.         addq.w    #1,gl_NumType(gl)
  1929.         bra.w    .Loop
  1930.  
  1931. .Done        moveq.l    #-1,d0
  1932. .Exit        pull
  1933.         bgt.w    _AllocTypes            ; ..Retry
  1934.         rts
  1935.  
  1936. .Error        suba.l    a2,a2
  1937.         getstr    MSG_RETRY_CANCEL,a1
  1938.         getstr    MSG_NO_TYPES ; a0
  1939.         bsr.w    _EasyReq
  1940.         ;tst.l    d0
  1941.         bra.b    .Exit
  1942.  
  1943. ;;-- Typen-Nodes freigeben --------------------------------
  1944.  
  1945. _FreeTypes    push
  1946.  
  1947.         exec
  1948.         movea.l    gl_TypeList+LH_HEAD(gl),a2
  1949. .Loop        move.l    fti_Node+LN_SUCC(a2),d2
  1950.         beq.b    .Done
  1951.         movea.l    a2,a1
  1952.         REMOVE
  1953.         movea.l    a2,a1
  1954.         moveq.l    #fti_SIZEOF,d0
  1955.         fjsr    FreeMem
  1956.         movea.l    d2,a2
  1957.         bra.b    .Loop
  1958. .Done
  1959.         clr.w    gl_NumType(gl)
  1960.         pull
  1961.         rts
  1962.  
  1963. ;;-- GadTools/IDCMP-Messages auswerten --------------------
  1964. ;  Out: cc=eq, wenn Fehler (OpenWindow() and stuff)
  1965. ;       cc=gt, wenn "Quit" gewählt
  1966. ; Handles case that no window opened!
  1967.  
  1968. _ProcessGTools    push
  1969.  
  1970.         move.l    gl_Window(gl),d0
  1971.         beq.b    .Okay
  1972.         movea.l    d0,a0
  1973.         move.l    wd_UserPort(a0),d0
  1974.         beq.b    .Okay
  1975.         movea.l    d0,a4
  1976. .MsgLoop    slib    GTools
  1977.         movea.l    a4,a0
  1978.         fjsr    GT_GetIMsg
  1979.         movea.l    d0,a1
  1980.         tst.l    d0
  1981.         beq.b    .Okay                ; ..no more messys
  1982.         move.l    im_Class(a1),d0
  1983.         move.w    im_Code(a1),d1
  1984.         move.w    im_Qualifier(a1),d2
  1985.         move.l    im_IAddress(a1),a0
  1986.     push    d0/d1/a0
  1987.         fjsr    GT_ReplyIMsg
  1988.     pull    d0/d1/a0
  1989.         cmpi.l    #IDCMP_CLOSEWINDOW,d0
  1990.         beq.b    .Quit
  1991.         cmpi.l    #IDCMP_GADGETUP,d0
  1992.         beq.b    .GadgetUp
  1993.         cmpi.l    #IDCMP_MENUPICK,d0
  1994.         beq.w    .MenuPick
  1995.         cmpi.l    #IDCMP_VANILLAKEY,d0
  1996.         beq.w    .VanillaKey
  1997.         cmpi.l    #IDCMP_RAWKEY,d0
  1998.         beq.w    .RawKey
  1999.         bra.b    .MsgLoop
  2000.  
  2001. .Okay        moveq.l    #-1,d7
  2002. .Exit        tst.b    d7
  2003.         pull
  2004.         rts
  2005.  
  2006. .Quit        moveq.l    #1,d7
  2007.         bra.b    .Exit
  2008.  
  2009. .AppObject    bsr.w    _CloseApp
  2010.         clr.w    gl_PopUp(gl)
  2011.         bsr.w    _OpenApp
  2012.         sne.b    d7
  2013.         bra.b    .Exit
  2014.  
  2015. .GadgetUp    move.w    gg_GadgetID(a0),d3
  2016.         cmpi.w    #ID_APPOBJECT,d3
  2017.         beq.b    .AppObject
  2018.         cmpi.w    #ID_QUIT,d3
  2019.         beq.b    .Quit
  2020.         pea.l    .MsgLoop(pc)
  2021.         cmpi.w    #ID_LISTVIEW,d3
  2022.         beq.b    .ListView
  2023.         cmpi.w    #ID_DEFTOOLCHK,d3
  2024.         beq.b    .DefToolChk
  2025.         cmpi.w    #ID_DEFTOOLSTR,d3
  2026.         beq.w    .DefToolStr
  2027.         cmpi.w    #ID_AUTOTYPE,d3
  2028.         beq.w    .AutoType
  2029.         rts
  2030.  
  2031. ; In: d1.w = SelectID
  2032. .ListView    move.w    d1,gl_Type(gl)
  2033.         moveq.l    #ID_DEFTOOLCHK,d0
  2034.         bsr.w    _GetGadget
  2035.         movea.l    gl_Window(gl),a1
  2036.         suba.l    a2,a2
  2037.         clr.l    -(sp)
  2038.         clr.l    -(sp)
  2039.         clr.l    -(sp)
  2040.         move.l    #GTCB_Checked,-(sp)
  2041.         movea.l    sp,a3
  2042.     move.l    a0,-(sp)
  2043.         slib    GTools
  2044.         fjsr    GT_SetGadgetAttrsA
  2045.     movea.l    (sp)+,a0
  2046.         lea.l    4*4(sp),sp
  2047.         bsr.b    .DefToolChk
  2048.         moveq.l    #ID_AUTOTYPE,d0
  2049.         bsr.w    _GetGadget
  2050.         movea.l    gl_Window(gl),a1
  2051.         suba.l    a2,a2
  2052.         clr.l    -(sp)
  2053.         clr.l    -(sp)
  2054.         clr.l    -(sp)
  2055.         move.l    #GTCB_Checked,-(sp)
  2056.         movea.l    sp,a3
  2057.     move.l    a0,-(sp)
  2058.         slib    GTools
  2059.         fjsr    GT_SetGadgetAttrsA
  2060.     movea.l    (sp)+,a0
  2061.         lea.l    4*4(sp),sp
  2062.         bra.b    .AutoType
  2063.  
  2064. ; In: a0 = &Gadget
  2065. .DefToolChk    move.w    gg_Flags(a0),d0
  2066.         andi.w    #GFLG_SELECTED,d0
  2067.         move.w    d0,gl_DefTool(gl)
  2068.         beq.b    .DTCExit
  2069.         moveq.l    #ID_DEFTOOLSTR,d0
  2070.         bsr.w    _GetGadget
  2071.         slib    Intui
  2072.         movea.l    gl_Window(gl),a1
  2073.         suba.l    a2,a2
  2074.         fjsr    ActivateGadget
  2075. .DTCExit    rts
  2076.  
  2077. .DefToolStr    moveq.l    #ID_DEFTOOLCHK,d0
  2078.         bsr.w    _GetGadget
  2079.         move.w    gg_Flags(a0),d0
  2080.         andi.w    #GFLG_DISABLED,d0
  2081.         bne.b    .DTSExit
  2082.         movea.l    gl_Window(gl),a1
  2083.         suba.l    a2,a2
  2084.         clr.l    -(sp)
  2085.         clr.l    -(sp)
  2086.         moveq.l    #-1,d0
  2087.         move.w    d0,gl_DefTool(gl)
  2088.         move.l    d0,-(sp)
  2089.         move.l    #GTCB_Checked,-(sp)
  2090.         movea.l    sp,a3
  2091.         slib    GTools
  2092.         fjsr    GT_SetGadgetAttrsA
  2093.         lea.l    4*4(sp),sp
  2094. .DTSExit    rts
  2095.  
  2096. ; In: a0 = &Gadget
  2097. .AutoType    clr.l    -(sp)
  2098.         clr.l    -(sp)
  2099.         move.w    gg_Flags(a0),d0
  2100.         andi.w    #GFLG_SELECTED,d0
  2101.         move.w    d0,gl_AutoType(gl)
  2102.         beq.b    .AutoOff
  2103. .AutoOn        clr.w    gl_DefTool(gl)
  2104.         clr.l    -(sp)
  2105.         move.l    #GTCB_Checked,-(sp)
  2106.         moveq.l    #-1,d0
  2107.         move.l    d0,-(sp)
  2108.         move.l    #GA_Disabled,-(sp)
  2109.         moveq.l    #24,d2
  2110. .AutoAction    moveq.l    #ID_DEFTOOLCHK,d0
  2111.         bsr.w    _GetGadget
  2112.         movea.l    gl_Window(gl),a1
  2113.         suba.l    a2,a2
  2114.         movea.l    sp,a3
  2115.     move.l    a0,-(sp)
  2116.         slib    GTools
  2117.         fjsr    GT_SetGadgetAttrsA
  2118.     movea.l    (sp)+,a0
  2119.         lea.l    (sp,d2.w),sp
  2120.         bra.w    .DefToolChk
  2121. .AutoOff    clr.l    -(sp)
  2122.         move.l    #GA_Disabled,-(sp)
  2123.         moveq.l    #16,d2
  2124.         bra.b    .AutoAction
  2125.  
  2126. .RawKey        pea.l    .MsgLoop(pc)
  2127.         tst.b    d1
  2128.         blt.b    .RawKeyExit            ; key released
  2129.         cmpi.w    #RAW_CURSORUP,d1
  2130.         beq.b    .CursorUp
  2131.         cmpi.w    #RAW_CURSORDOWN,d1
  2132.         beq.b    .CursorDown
  2133. .RawKeyExit    rts
  2134.  
  2135. .CursorDown    moveq.l    #1,d1
  2136.         move.w    d2,d0
  2137.         andi.w    #IEQUALIFIER_SHIFT,d0
  2138.         beq.b    .CDCont
  2139.         moveq.l    #6,d1
  2140.         tst.w    gl_Type(gl)
  2141.         bge.b    .CDCont
  2142.         addq.w    #1,d1
  2143. .CDCont        andi.w    #IEQUALIFIER_ALT,d2
  2144.         beq.b    .CDCont2
  2145.         move.w    #$4000,d1
  2146. .CDCont2    bra.b    .CursorAction
  2147.  
  2148. .CursorUp    moveq.l    #-1,d1
  2149.         move.w    d2,d0
  2150.         andi.w    #IEQUALIFIER_SHIFT,d0
  2151.         beq.b    .CUCont
  2152.         moveq.l    #-6,d1
  2153. .CUCont        andi.w    #IEQUALIFIER_ALT,d2
  2154.         beq.b    .CUCont2
  2155.         move.w    #$8001,d1
  2156. .CUCont2
  2157. ; In: d1.w = TypeAdd
  2158. .CursorAction    add.w    gl_Type(gl),d1
  2159.         bge.b    .CACont
  2160.         moveq.l    #0,d1
  2161. .CACont        cmp.w    gl_NumType(gl),d1
  2162.         blt.b    .CACont2
  2163.         move.w    gl_NumType(gl),d1
  2164.         beq.b    .CACont2
  2165.         subq.w    #1,d1
  2166. .CACont2    moveq.l    #ID_LISTVIEW,d0
  2167.         bsr.w    _GetGadget
  2168.         movea.l    gl_Window(gl),a1
  2169.         suba.l    a2,a2
  2170.         clr.l    -(sp)
  2171.         clr.l    -(sp)
  2172.         move.w    d1,-(sp)
  2173.         clr.w    -(sp)
  2174.         move.l    #GTLV_Selected,-(sp)
  2175.         move.w    d1,-(sp)
  2176.         clr.w    -(sp)
  2177.         move.l    #GTLV_Top,d0
  2178.         tst.w    gl_OS3(gl)
  2179.         beq.b    .CACont3
  2180.         move.l    #GTLV_MakeVisible,d0
  2181. .CACont3    move.l    d0,-(sp)        ; OS3.0+ = MakeVisible, OS2=Top
  2182.         movea.l    sp,a3
  2183.         slib    GTools
  2184.     move.w    d1,-(sp)
  2185.         fjsr    GT_SetGadgetAttrsA
  2186.     move.w    (sp)+,d1
  2187.         lea.l    6*4(sp),sp
  2188.         bra.w    .ListView
  2189.  
  2190. .VanillaKey    cmpi.b    #' ',d1
  2191.         beq.w    .VKSpace
  2192.         move.b    d1,d0
  2193.         bsr.w    _UpperCase
  2194.         lsl.w    #8,d0
  2195.         move.w    d0,-(sp)
  2196.         exec
  2197.         movea.l    sp,a1
  2198.         lea.l    gl_GadList(gl),a0
  2199.         fjsr    FindName
  2200.         addq.l    #2,sp
  2201.         tst.l    d0
  2202.         beq.w    .MsgLoop
  2203.  
  2204.         movea.l    d0,a0
  2205.         move.w    ggi_GadgetID(a0),d3
  2206.         movea.l    ggi_Gadget(a0),a0
  2207.         cmpi.w    #ID_APPOBJECT,d3
  2208.         beq.w    .AppObject
  2209.         cmpi.w    #ID_QUIT,d3
  2210.         beq.w    .Quit
  2211.         pea.l    .MsgLoop(pc)
  2212.         cmpi.w    #ID_DEFTOOLCHK,d3
  2213.         beq.b    .VKDefToolChk
  2214.         cmpi.w    #ID_AUTOTYPE,d3
  2215.         beq.b    .VKAutoType
  2216.         rts
  2217.  
  2218. .VKDefToolChk    move.w    gg_Flags(a0),d0
  2219.         andi.w    #GFLG_DISABLED,d0
  2220.         bne.b    .VKDTCExit
  2221.         movea.l    gl_Window(gl),a1
  2222.         suba.l    a2,a2
  2223.         clr.l    -(sp)
  2224.         clr.l    -(sp)
  2225.         moveq.l    #0,d0
  2226.         tst.w    gl_DefTool(gl)
  2227.         seq.b    d0
  2228.         move.l    d0,-(sp)
  2229.         move.l    #GTCB_Checked,-(sp)
  2230.         movea.l    sp,a3
  2231.         slib    GTools
  2232.     move.l    a0,-(sp)
  2233.         fjsr    GT_SetGadgetAttrsA
  2234.     movea.l    (sp)+,a0
  2235.         lea.l    4*4(sp),sp
  2236.         bra.w    .DefToolChk
  2237. .VKDTCExit    rts
  2238.  
  2239. ; In: a0 = &Gadget
  2240. .VKAutoType    movea.l    gl_Window(gl),a1
  2241.         suba.l    a2,a2
  2242.         clr.l    -(sp)
  2243.         clr.l    -(sp)
  2244.         moveq.l    #0,d0
  2245.         tst.w    gl_AutoType(gl)
  2246.         seq.b    d0
  2247.         move.l    d0,-(sp)
  2248.         move.l    #GTCB_Checked,-(sp)
  2249.         movea.l    sp,a3
  2250.         slib    GTools
  2251.     move.l    a0,-(sp)
  2252.         fjsr    GT_SetGadgetAttrsA
  2253.     movea.l    (sp)+,a0
  2254.         lea.l    4*4(sp),sp
  2255.         bra.w    .AutoType
  2256.  
  2257. .VKSpace    moveq.l    #ID_DEFTOOLSTR,d0
  2258.         bsr.w    _GetGadget
  2259.         slib    Intui
  2260.         movea.l    gl_Window(gl),a1
  2261.         suba.l    a2,a2
  2262.         fjsr    ActivateGadget
  2263.         bra.w    .MsgLoop
  2264.  
  2265. .MenuPick    move.b    d1,d0
  2266.         andi.b    #$1F,d0
  2267.         cmpi.b    #NOMENU,d0
  2268.         beq.w    .MsgLoop
  2269.         move.w    d1,d0
  2270.         lsr.w    #5,d0
  2271.         andi.b    #$3F,d0
  2272.         cmpi.b    #NOITEM,d0
  2273.         beq.w    .MsgLoop
  2274.         move.w    d1,d0
  2275.         movea.l    gl_MenuStrip(gl),a0
  2276.         slib    Intui
  2277.         fjsr    ItemAddress
  2278.         tst.l    d0
  2279.         beq.w    .MsgLoop
  2280.  
  2281.         movea.l    d0,a0
  2282.         move.w    mi_SIZEOF+2(a0),d3
  2283.         cmpi.w    #ID_QUIT,d3
  2284.         beq.w    .Quit
  2285.         cmpi.w    #ID_APPOBJECT,d3
  2286.         beq.w    .AppObject
  2287.         cmpi.w    #ID_ABOUT,d3
  2288.         beq.b    .About
  2289.         cmpi.w    #ID_REPARSE,d3
  2290.         beq.b    .Reparse
  2291.         cmpi.w    #ID_EDIT,d3
  2292.         beq.w    .Edit
  2293.         bra.w    .MsgLoop
  2294.  
  2295. .About        suba.l    a2,a2
  2296.         getstr    MSG_OKAY,a1
  2297.         getstr    MSG_INFORMATION ; a0
  2298.         bsr.w    _EasyReq
  2299.         bra.w    .Okay
  2300.  
  2301. .Reparse    moveq.l    #~0,d0
  2302.         bsr.b    .ReRefresh            ; detach items
  2303.         moveq.l    #-1,d0
  2304.         bsr.w    _FreezeWin
  2305.         bsr.w    _FreeTypes
  2306.         slib    WhatIs
  2307.         moveq.l    #-1,d0                ; BOOL Now
  2308.         fjsr    AskReparse
  2309.         tst.l    d0
  2310.         beq.b    .ReCont
  2311.         bsr.w    _Beep
  2312. .ReCont        bsr.w    _AllocTypes
  2313.         sne.b    d7
  2314.         moveq.l    #0,d0
  2315.         bsr.w    _FreezeWin
  2316.         tst.b    d7
  2317.         beq.w    .Exit                ; ..AllocTypes failed
  2318.         lea.l    gl_TypeList(gl),a0
  2319.         move.l    a0,d0
  2320.         bsr.b    .ReRefresh            ; re-install items
  2321.  
  2322.         clr.w    gl_AutoType(gl)
  2323.         moveq.l    #ID_AUTOTYPE,d0
  2324.         bsr.w    _GetGadget
  2325.         bsr.w    .VKAutoType            ; Auto-Type on!
  2326.         moveq.l    #ID_LISTVIEW,d0
  2327.         bsr.w    _GetGadget
  2328.         movea.l    gl_Window(gl),a1
  2329.         suba.l    a2,a2
  2330.         clr.l    -(sp)
  2331.         clr.l    -(sp)
  2332.         moveq.l    #~0,d0
  2333.         move.w    d0,gl_Type(gl)
  2334.         move.l    d0,-(sp)
  2335.         move.l    #GTLV_Selected,-(sp)
  2336.         movea.l    sp,a3
  2337.         slib    GTools
  2338.         fjsr    GT_SetGadgetAttrsA        ; no selection
  2339.         lea.l    4*4(sp),sp
  2340.         bra.w    .Exit
  2341.  
  2342. ; In: d0 = &LabelList or ~0
  2343. .ReRefresh    push
  2344.         moveq.l    #ID_LISTVIEW,d0
  2345.         bsr.w    _GetGadget
  2346.         movea.l    gl_Window(gl),a1
  2347.         suba.l    a2,a2
  2348.         clr.l    -(sp)
  2349.         clr.l    -(sp)
  2350.         move.l    8(sp),-(sp)
  2351.         move.l    #GTLV_Labels,-(sp)
  2352.         movea.l    sp,a3
  2353.         slib    GTools
  2354.         fjsr    GT_SetGadgetAttrsA        ; detach items
  2355.         lea.l    4*4(sp),sp
  2356.         pull
  2357.         rts
  2358.  
  2359. .Edit        moveq.l    #-1,d0
  2360.         bsr.w    _FreezeWin
  2361.         slib    DOS
  2362.         movea.l    gl_Editor(gl),a2
  2363.         move.w    gl_EditorLen(gl),d3
  2364.         clr.b    (a2,d3.w)
  2365.         move.l    a2,d1
  2366.         moveq.l    #ACCESS_READ,d2
  2367.         fjsr    Lock
  2368.         move.l    d0,d4
  2369.         beq.b    .EdError
  2370.         clr.l    -(sp)
  2371.         clr.l    -(sp)
  2372.         move.l    a2,d1
  2373.         move.b    #' ',(a2,d3.w)
  2374.         move.l    sp,d2
  2375.         slib    DOS
  2376.         fjsr    SystemTagList
  2377.         addq.l    #8,sp
  2378.         move.l    d0,d2
  2379.         moveq.l    #RETURN_ERROR,d0
  2380.         cmp.l    d0,d2
  2381.         blo.b    .EdCont
  2382.         bsr.w    _Beep
  2383. .EdCont        move.l    d4,d1
  2384.         fjsr    UnLock
  2385.         moveq.l    #0,d0
  2386.         bsr.w    _FreezeWin
  2387.         tst.l    d2
  2388.         beq.w    .Reparse
  2389.         bra.w    .Okay
  2390.  
  2391. ; In: a2 = &terminated gl_Editor
  2392. .EdError    getstr    MSG_OKAY,a1
  2393.         getstr    MSG_EDITOR_FAILED ; a0
  2394.         move.l    a2,-(sp)
  2395.         movea.l    sp,a2
  2396.         bsr.w    _EasyReq
  2397.         movea.l    (sp)+,a2
  2398.         bra.b    .EdCont
  2399.  
  2400. ;-- Gadget-Adresse besorgen -------------------------------
  2401. ;  In: d0.w = GadgetID
  2402. ;  Out: a0 = &GGAddress or NULL
  2403.  
  2404. _GetGadget    push    d0-d7/a1-a7
  2405.  
  2406.         movea.l    gl_GadList+LH_HEAD(gl),a1
  2407. .GGLoop        move.l    ggi_Node+LN_SUCC(a1),a0
  2408.         move.l    a0,d1
  2409.         beq.b    .GGExit
  2410.         exg.l    a0,a1
  2411.         cmpi.w    ggi_GadgetID(a0),d0
  2412.         movea.l    ggi_Gadget(a0),a0
  2413.         bne.b    .GGLoop
  2414.  
  2415. .GGExit        pull    d0-d7/a1-a7
  2416.         rts
  2417.  
  2418. ;;-- AppMessage bearbeiten --------------------------------
  2419. ;  In: a1 = &AppMsg
  2420. ;  Out: cc=eq, wenn Fehler (OpenWindow() etc.)
  2421.  
  2422. _ProcessApp    push
  2423.         move.l    am_NumArgs(a1),d2
  2424.         movea.l    am_ArgList(a1),a2
  2425.  
  2426.         move.w    am_Type(a1),d0
  2427.         cmpi.w    #MTYPE_APPWINDOW,d0
  2428.         beq.b    .GoodMsg
  2429.         cmpi.w    #MTYPE_APPMENUITEM,d0
  2430.         beq.b    .GoodMsg
  2431.         cmpi.w    #MTYPE_APPICON,d0
  2432.         bne.b    .Okay                ; ..Msg uninteressant
  2433. .GoodMsg
  2434.         tst.l    d2
  2435.         ble.b    .PopUp
  2436.         moveq.l    #-1,d0
  2437.         bsr.w    _FreezeWin
  2438.         bsr.w    _CopyStrBuf
  2439.         tst.w    gl_AutoType(gl)
  2440.         bne.b    .CIAutoType
  2441.  
  2442.         moveq.l    #0,d3
  2443.         move.w    gl_Type(gl),d0
  2444.         move.l    gl_TypeList+LH_HEAD(gl),d1
  2445. .CITypeLoop    movea.l    d1,a0
  2446.         move.l    LN_SUCC(a0),d1
  2447.         beq.b    .CITypeErr        ; ..well, shouldn't happen
  2448.         dbra    d0,.CITypeLoop
  2449.         movea.l    fti_Type(a0),a0
  2450.         slib    WhatIs
  2451.         fjsr    GetIconName
  2452.         tst.l    d0
  2453.         beq.b    .CITypeErr
  2454.         movea.l    d0,a0
  2455.         bsr.b    .GetIcon        ; GetDiskObject() with paths
  2456.         move.l    d0,d3
  2457.         beq.b    .CITypeErr
  2458.         movea.l    a2,a1
  2459.         movea.l    d3,a0
  2460. .CITypeLoop2    bsr.w    .PerformChange
  2461.         addq.l    #wa_SIZEOF,a1
  2462.         subq.l    #1,d2
  2463.         bgt.b    .CITypeLoop2
  2464.         bra.b    .CITypeFree
  2465. .CITypeErr    bsr.w    _Beep
  2466. .CITypeFree    tst.l    d3
  2467.         beq.b    .CIDone
  2468.         movea.l    d3,a0
  2469.         slib    Icon
  2470.         fjsr    FreeDiskObject
  2471.         bra.b    .CIDone
  2472.  
  2473. .CIAutoType    suba.l    a0,a0
  2474.         movea.l    a2,a1
  2475. .CIAutoLoop    bsr.w    .PerformChange
  2476.         addq.l    #wa_SIZEOF,a1
  2477.         subq.l    #1,d2
  2478.         bgt.b    .CIAutoLoop
  2479.  
  2480. .CIDone        moveq.l    #0,d0
  2481.         bsr.w    _FreezeWin
  2482.         ;||
  2483. .Okay        moveq.l    #-1,d0
  2484. .Exit        pull
  2485.         rts
  2486.  
  2487. .PopUp        tst.w    gl_PopUp(gl)
  2488.         bne.b    .Exit                ; ..already popped up
  2489.         bsr.w    _CloseApp
  2490.         move.w    #-1,gl_PopUp(gl)
  2491.         bsr.w    _OpenApp            ; (cc gesetzt)
  2492.         bra.b    .Exit
  2493.  
  2494. ;-- GetDiskObject() in several paths --
  2495. ; In: a0 = &Name
  2496. ; Out: d0 = &DiskObject or NULL
  2497.  
  2498. .GetIcon    push    d1-d7/a0-a7
  2499.         movea.l    a0,a2
  2500.  
  2501.         move.l    gl_IconDir(gl),d1
  2502.         beq.b    .GICont
  2503.         bsr.b    .GITry                ; 1) check IconDir
  2504.         bne.b    .GIExit
  2505. .GICont        slib    Icon
  2506.         movea.l    a2,a0
  2507.         fjsr    GetDiskObject            ; 2) check current dir
  2508.         tst.l    d0
  2509.         bne.b    .GIExit
  2510.         lea.l    .GIDef1(pc),a0
  2511.         move.l    a0,d1
  2512.         bsr.b    .GITry                ; 3) check ENV:Sys/
  2513.         bne.b    .GIExit
  2514.         lea.l    .GIDef2(pc),a0
  2515.         move.l    a0,d1
  2516.         bsr.b    .GITry                ; 4) check ENVARC:Sys/
  2517.  
  2518. .GIExit        pull    d1-d7/a0-a7
  2519.         rts
  2520.  
  2521. ; In: d1 = &DirName, a2 = &IconName
  2522. ; Out: cc=d0 = &DiskObject or NULL
  2523. .GITry        push    d1-d7/a0-a7
  2524.         moveq.l    #ACCESS_READ,d2
  2525.         slib    DOS
  2526.         fjsr    Lock
  2527.         move.l    d0,d2
  2528.         beq.b    .GITExit
  2529.         move.l    d2,d1
  2530.         fjsr    CurrentDir
  2531.         move.l    d0,d3
  2532.         slib    Icon
  2533.         movea.l    a2,a0
  2534.         fjsr    GetDiskObject
  2535.         move.l    d0,-(sp)
  2536.         slib    DOS
  2537.         move.l    d3,d1
  2538.         fjsr    CurrentDir
  2539.         move.l    d2,d1
  2540.         fjsr    UnLock
  2541.         move.l    (sp)+,d0
  2542. .GITExit    pull    d1-d7/a0-a7
  2543.         rts
  2544.  
  2545. ;-- Icon wechseln --
  2546. ; In: a0 = &DiskObject or NULL (then AutoType MUST BE TRUE), a1 = &WBArg
  2547. .PerformChange    push
  2548.         move.l    a0,d4
  2549.         movea.l    a1,a2
  2550.  
  2551.         move.l    gl_PathBuffer(gl),d2
  2552.         movea.l    d2,a0
  2553.         move.l    #PathBufferLen-1,d0        ; they didn't say that
  2554. .PCClearLoop    clr.b    (a0)+                ; AddPart() puts a
  2555.         dbra    d0,.PCClearLoop            ; NULL-Byte at the end!
  2556.         slib    DOS
  2557.         move.l    wa_Lock(a2),d1
  2558.         move.l    #PathBufferLen-5,d3        ; noch Platz für "disk"
  2559.         fjsr    NameFromLock            ; get full path-name
  2560.         tst.w    d0
  2561.         beq.w    .PCIoErr
  2562.         move.l    d2,d1
  2563.         move.l    wa_Name(a2),d2
  2564.         ; d3 is still valid
  2565.         fjsr    AddPart                ; add file-name
  2566.         tst.w    d0
  2567.         beq.w    .PCIoErr
  2568.  
  2569.         tst.l    d4
  2570.         bne.b    .PCAutoCont
  2571.         slib    WhatIs
  2572.         movea.l    gl_PathBuffer(gl),a0
  2573.         lea.l    .WhatIsTags(pc),a1
  2574.         fjsr    WhatIs                ; (DEEP-Mode)
  2575.         tst.l    d0
  2576.         beq.b    .PCErr
  2577.         cmpi.l    #TYPE_UNKNOWNFILETYPE,d0
  2578.         beq.b    .PCErr
  2579.         movea.l    d0,a0
  2580.         fjsr    GetIconName
  2581.         tst.l    d0
  2582.         beq.b    .PCErr
  2583.         movea.l    d0,a0
  2584.         bsr.w    .GetIcon
  2585.         move.l    d0,d4
  2586.         beq.b    .PCIoErr
  2587. .PCAutoCont
  2588.         move.l    gl_PathBuffer(gl),d0
  2589.         movea.l    d0,a0
  2590. .PCSeekLoop    tst.b    (a0)+
  2591.         bne.b    .PCSeekLoop
  2592.         subq.l    #1,a0
  2593.         cmp.l    a0,d0
  2594.         beq.b    .PCVolume
  2595.         cmpi.b    #':',-1(a0)
  2596.         beq.b    .PCVolume
  2597.         cmpi.b    #'/',-(a0)
  2598.         bne.b    .PCNameCont
  2599.         clr.b    (a0)                ; delete "/"
  2600.         bra.b    .PCNameCont
  2601. .PCVolume    move.b    #'d',(a0)+
  2602.         move.b    #'i',(a0)+
  2603.         move.b    #'s',(a0)+
  2604.         move.b    #'k',(a0)+
  2605.         clr.b    (a0)
  2606. .PCNameCont
  2607.         slib    Icon
  2608.         movea.l    gl_PathBuffer(gl),a0
  2609.         movea.l    d4,a1
  2610.         tst.w    gl_DefTool(gl)
  2611.         beq.b    .PCPutCont
  2612.         move.l    gl_DefToolStr(gl),do_DefaultTool(a1)
  2613. .PCPutCont    fjsr    PutDiskObject
  2614.         tst.w    d0
  2615.         bne.b    .PCCont
  2616. .PCIoErr    slib    DOS
  2617.         fjsr    IoErr
  2618.         move.l    d0,gl_Result2(gl)
  2619. .PCErr        bsr.w    _Beep
  2620. .PCCont
  2621.         tst.w    gl_AutoType(gl)
  2622.         beq.b    .PCExit
  2623.         tst.l    d4
  2624.         beq.b    .PCExit
  2625.         movea.l    d4,a0
  2626.         slib    Icon
  2627.         fjsr    FreeDiskObject
  2628.  
  2629. .PCExit        pull
  2630.         rts
  2631.  
  2632. .WhatIsTags    dc.l    WI_Deep,DEEPTYPE
  2633.         dc.l    TAG_DONE,0
  2634.  
  2635. .GIDef1        dc.b    'ENV:Sys/',0
  2636. .GIDef2        dc.b    'ENVARC:Sys/',0
  2637.         even
  2638.  
  2639. ;;-- Window "einfrieren" und "auftauen" -------------------
  2640. ;  In: d0.b = Freeze (TRUE = einfrieren, FALSE = auftauen)
  2641. ; Handles case that there's no window!
  2642.  
  2643. _FreezeWin    push
  2644.         tst.l    gl_Window(gl)
  2645.         beq.w    .Exit
  2646.         slib    Intui
  2647.  
  2648.         tst.b    d0
  2649.         beq.b    .Tauen
  2650. .Frieren    tst.b    gl_FreezeCnt(gl)
  2651.         bne.b    .FrCont
  2652.         movea.l    gl_Request(gl),a0
  2653.         fjsr    InitRequester
  2654.         movea.l    gl_Request(gl),a0
  2655.         movea.l    gl_Window(gl),a1
  2656.         fjsr    Request
  2657.         movea.l    gl_Window(gl),a0
  2658.         tst.w    gl_OS3(gl)
  2659.         bne.b    .FrOS3
  2660. .FrOld        movea.l    gl_Pointer(gl),a1
  2661.         moveq.l    #PTR_HEIGHT,d0
  2662.         moveq.l    #PTR_WIDTH,d1
  2663.         moveq.l    #PTR_XOFFSET,d2
  2664.         moveq.l    #PTR_YOFFSET,d3
  2665.         fjsr    SetPointer            ; SetPointer()
  2666.         bra.b    .FrCont2
  2667. .FrOS3        clr.l    -(sp)
  2668.         clr.l    -(sp)
  2669.         moveq.l    #-1,d0
  2670.         move.l    d0,-(sp)
  2671.         move.l    #WA_BusyPointer,-(sp)
  2672.         movea.l    sp,a1
  2673.         fjsr    SetWindowPointerA        ; OS3.0+: SetWinPtrA()
  2674.         lea.l    4*4(sp),sp
  2675. .FrCont2    movea.l    gl_Window(gl),a0
  2676.         moveq.l    #0,d0
  2677.         fjsr    ModifyIDCMP
  2678. .FrCont        addq.b    #1,gl_FreezeCnt(gl)
  2679.         bra.b    .Exit
  2680.  
  2681. .Tauen        subq.b    #1,gl_FreezeCnt(gl)
  2682.         bne.b    .TaCont
  2683.         movea.l    gl_Window(gl),a0
  2684.         tst.w    gl_OS3(gl)
  2685.         bne.b    .TaOS3
  2686. .TaOld        fjsr    ClearPointer            ; ClearPointer()
  2687.         bra.b    .TaCont2
  2688. .TaOS3        clr.l    -(sp)
  2689.         clr.l    -(sp)
  2690.         movea.l    sp,a1
  2691.         fjsr    SetWindowPointerA        ; OS3.0+: SetWinPtrA()
  2692.         addq.l    #8,sp
  2693. .TaCont2    movea.l    gl_Request(gl),a0
  2694.         movea.l    gl_Window(gl),a1
  2695.         fjsr    EndRequest
  2696.         movea.l    gl_Window(gl),a0
  2697.         move.l    #MYIDCMP,d0
  2698.         fjsr    ModifyIDCMP        ; sorry, zu faul, um hier noch
  2699. .TaCont                        ;   Error-Handling einzubauen!
  2700. .Exit        pull
  2701.         rts
  2702.  
  2703. ;;-- DisplayBeep()en --------------------------------------
  2704.  
  2705. _Beep        push
  2706.  
  2707.         slib    Intui
  2708.         move.l    gl_PubScreen(gl),d0
  2709.         beq.b    .NoScreen
  2710.         movea.l    d0,a0
  2711.         fjsr    DisplayBeep
  2712.  
  2713. .Exit        pull
  2714.         rts
  2715.  
  2716. .NoScreen    lea.l    _WBPubName(pc),a0
  2717.         fjsr    LockPubScreen
  2718.         move.l    d0,-(sp)
  2719.         movea.l    d0,a0
  2720.         fjsr    DisplayBeep        ; evtl. alle Screens flashen
  2721.         movea.l    (sp)+,a1
  2722.         suba.l    a0,a0
  2723.         fjsr    UnlockPubScreen
  2724.         bra.b    .Exit
  2725.  
  2726. ;;-- EasyRequester öffnen ---------------------------------
  2727. ;  In:  a0 = &TextFormat, a1 = &GadgetFormat, a2 = &ArgList
  2728. ;  Out: cc=d0.l = EasyRequest()
  2729.  
  2730. _EasyReq    push    d0-d7/a0-a7
  2731.         moveq.l    #-1,d0
  2732.         bsr.w    _FreezeWin
  2733.  
  2734.         slib    Intui
  2735.         move.l    a1,-(sp)        ; es_GadgetFormat
  2736.         move.l    a0,-(sp)        ; es_TextFormat
  2737.         getstr    MSG_REQ_TITLE ; a0
  2738.         move.l    a0,-(sp)        ; es_Title
  2739.         clr.l    -(sp)            ; es_Flags
  2740.         moveq.l    #es_SIZEOF,d0
  2741.         move.l    d0,-(sp)        ; es_StructSize
  2742.         movea.l    gl_Window(gl),a0
  2743.         movea.l    sp,a1
  2744.         movea.l    a2,a3
  2745.         suba.l    a2,a2
  2746.         fjsr    EasyRequestArgs
  2747.         lea.l    es_SIZEOF(sp),sp
  2748.         move.l    d0,(sp)
  2749.  
  2750.         moveq.l    #0,d0
  2751.         bsr.w    _FreezeWin
  2752.         pull    d0-d7/a0-a7
  2753.         tst.l    d0
  2754.         rts
  2755.  
  2756. ;;-- GetCatString (called by getstr macro) ----------------
  2757. ;  In:  d0.l = StringID
  2758. ;  Out: a0   = &String (READ ONLY!)
  2759.  
  2760. _GetCatString    push    d0-d7/a1-a7
  2761.  
  2762.         lea.l    .DS(pc),a1
  2763.         move.l    d0,d1
  2764.         add.l    d1,d1
  2765.         adda.w    (a1,d1.w),a1
  2766.         move.l    a1,a0        ; &DefString, if LocaleBase = NULL
  2767.         slib    Locale,d1
  2768.         beq.b    .Exit
  2769.         movea.l    d1,lb
  2770.         movea.l    gl_Catalog(gl),a0
  2771.         fjsr    GetCatalogStr
  2772.         movea.l    d0,a0
  2773.  
  2774. .Exit        pull    d0-d7/a1-a7
  2775.         rts
  2776.  
  2777. .DS    dc.w    .MSG_REQ_TITLE-.DS
  2778.     dc.w    .MSG_ABORT-.DS
  2779.     dc.w    .MSG_OKAY-.DS
  2780.     dc.w    .MSG_RETRY_CANCEL-.DS
  2781.     dc.w    .MSG_LIBRARY_MISSING-.DS
  2782.     dc.w    .MSG_SHELL_START-.DS
  2783.     dc.w    .MSG_NEED_ICON-.DS
  2784.     dc.w    .MSG_NO_PORT-.DS
  2785.     dc.w    .MSG_NO_TYPES-.DS
  2786.     dc.w    .MSG_NO_APP-.DS
  2787.     dc.w    .MSG_NO_WIN-.DS
  2788.     dc.w    .MSG_EDITOR_FAILED-.DS
  2789.     dc.w    .MSG_NO_MEM-.DS
  2790.     dc.w    .MSG_TYPES-.DS
  2791.     dc.w    .MSG_AUTOTYPE-.DS
  2792.     dc.w    .MSG_DEFAULT_TOOL-.DS
  2793.     dc.w    .MSG_APPICON-.DS
  2794.     dc.w    .MSG_APPMENUITEM-.DS
  2795.     dc.w    .MSG_QUIT-.DS
  2796.     dc.w    .MSG_DROP_BOX-.DS
  2797.     dc.w    .MSG_PROJECT-.DS
  2798.     dc.w    .MSG_REPARSE-.DS
  2799.     dc.w    .MSG_EDIT-.DS
  2800.     dc.w    .MSG_ABOUT-.DS
  2801.     dc.w    .MSG_INFORMATION-.DS
  2802.  
  2803. .MSG_REQ_TITLE        dc.b    'ChangeIcon message',0
  2804. .MSG_ABORT        dc.b    'Abort',0
  2805. .MSG_OKAY        dc.b    'Okay',0
  2806. .MSG_RETRY_CANCEL    dc.b    'Retry|Cancel',0
  2807. .MSG_LIBRARY_MISSING    dc.b    "Can't open",$0A,'"%s"!',0
  2808. .MSG_SHELL_START    dc.b    'Please start me from the Workbench!',$0A,0
  2809. .MSG_NEED_ICON        dc.b    "Can't get access",$0A,'to my own Icon!',0
  2810. .MSG_NO_PORT        dc.b    'Unable to create',$0A,'Message Port!',0
  2811. .MSG_NO_TYPES        dc.b    'Not enough memory',$0A
  2812.             dc.b    'to get all File-types!',0
  2813. .MSG_NO_APP        dc.b    'Unable to register',$0A
  2814.             dc.b    'as Workbench Application!',0
  2815. .MSG_NO_WIN        dc.b    'Failed to lock Screen,',$0A
  2816.             dc.b    'create Gadgets and Menus',$0A
  2817.             dc.b    'or open Window!',0
  2818. .MSG_EDITOR_FAILED    dc.b    "Can't start your editor",$0A,'"%s"!',0
  2819. .MSG_NO_MEM        dc.b    'Not enough free memory!',0
  2820.  
  2821. .MSG_TYPES        dc.b    'Types',0
  2822. .MSG_AUTOTYPE        dc.b    'Auto _type',0
  2823. .MSG_DEFAULT_TOOL    dc.b    '_DefaultTool',0
  2824. .MSG_APPICON        dc.b    '_AppIcon',0
  2825. .MSG_APPMENUITEM    dc.b    '_AppMenuItem',0
  2826. .MSG_QUIT        dc.b    '_Quit',0
  2827. .MSG_DROP_BOX        dc.b    'Drop',$0A,'Icons',$0A,'into',$0A,'this',$0A
  2828.             dc.b    'Box',0
  2829.  
  2830. .MSG_PROJECT        dc.b    'Project',0
  2831. .MSG_REPARSE        dc.b    '_Reparse types',0
  2832. .MSG_EDIT        dc.b    '_Edit types',0
  2833. .MSG_ABOUT        dc.b    'About...',0
  2834. .MSG_INFORMATION    dc.b    'ChangeIcon V1.0  is a  Freeware  program',$0A
  2835.             dc.b    '(C)opyright by Hanns Holger Rutz. If you',$0A
  2836.             dc.b    'have  bugreports,  suggestions  or  just',$0A
  2837.             dc.b    'want to contact me, then write to:',$0A,$0A
  2838.             dc.b    '  Hanns Holger Rutz',$0A
  2839.             dc.b    '  Auf dem Godenstedter Berg 17',$0A
  2840.             dc.b    '  D-27404 Zeven',$0A
  2841.             dc.b    '  GERMANY',$0A,$0A
  2842.             dc.b    'Please consult the Doc-File  for further',$0A
  2843.             dc.b    'information.',$0A
  2844.             dc.b    '                               - Holgi -',0
  2845.         even
  2846.  
  2847. ;;-- ChipData ---------------------------------------------
  2848.  
  2849.         section    Daten,data_c
  2850.  
  2851. _Ptr        dc.w    0,0
  2852.         dc.w    %0000010000000000,%0000011111000000
  2853.         dc.w    %0000000000000000,%0000011111000000
  2854.         dc.w    %0000000100000000,%0000001110000000
  2855.         dc.w    %0000000000000000,%0000011111100000
  2856.         dc.w    %0000011111000000,%0001111111111000
  2857.         dc.w    %0001111111110000,%0011111111101100
  2858.         dc.w    %0011111111111000,%0111111111011110
  2859.         dc.w    %0011111111111000,%0111111110111110
  2860.         dc.w    %0111111111111100,%1111111101111111
  2861.         dc.w    %0111111011111100,%1111111111111111
  2862.         dc.w    %0111111111111100,%1111111111111111
  2863.         dc.w    %0011111111111000,%0111111111111110
  2864.         dc.w    %0011111111111000,%0111111111111110
  2865.         dc.w    %0001111111110000,%0011111111111100
  2866.         dc.w    %0000011111000000,%0001111111111000
  2867.         dc.w    %0000000000000000,%0000011111100000
  2868.         dc.w    0,0
  2869.