home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff245.lzh / Fenster / Fenster.s < prev    next >
Text File  |  1989-09-06  |  32KB  |  1,697 lines

  1. *
  2. *   FENSTER V1.0    / 24.July.1989   2 o'clock in the morning
  3. *
  4. *   by Roger Fischlin, Steigerwaldweg 6, D-6450 Hanau 7, West Germany
  5. *      Phone. (06181) 650266
  6. *
  7. *
  8. *   FENSTER v1.0 is public domain software - So you are only allowed
  9. *   to use this code for non-commercial purposes.
  10. *
  11. *   
  12. *
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.     incdir   "vd0:include/"
  23.  
  24.     include    intuition/intuition.i
  25.     include    intuition/intuition_lib.i
  26.             include     exec/memory.i
  27.     include    exec/exec_lib.i
  28.     include    graphics/graphics_lib.i
  29.     include    graphics/text.i
  30.     include    libraries/dos_lib.i
  31.     include    libraries/dos.i
  32.  
  33.  
  34.  
  35. FontFlag    set    0
  36.  
  37. SETAPEN    macro
  38.     move.l    WindowPointer,a1
  39.     move.l    wd_RPort(a1),a1    
  40.     move.l    \1,d0
  41.     CALLGRAF    SetAPen
  42.     endm
  43.  
  44. SETBPEN    macro
  45.     move.l    WindowPointer,a1
  46.     move.l    wd_RPort(a1),a1    
  47.     move.l    \1,d0
  48.     CALLGRAF    SetBPen
  49.     endm
  50. SETDRMD    macro
  51.      move.l    WindowPointer,a1
  52.     move.l    wd_RPort(a1),a1    
  53.     move.l    \1,d0
  54.     CALLGRAF    SetDrMd
  55.     endm
  56.  
  57. RECTFILL    macro
  58.     move.l    WindowPointer,a1
  59.     move.l    wd_RPort(a1),a1    
  60.     move.l    \1,d0
  61.     move.l    \2,d1
  62.     move.l    \3,d2
  63.     move.l    \4,d3
  64.     CALLGRAF    RectFill
  65.     endm
  66.  
  67. BORDER    macro
  68.     bra.s    MakeBox_\@
  69. MakeBox2_\@    BOX    \1,\2,\3,\4,\5,0
  70. MakeBox_\@    move.l    WindowPointer,a0
  71.     move.l    wd_RPort(a0),a0
  72.     lea.l    MakeBox2_\@(pc),a1
  73.     moveq.l    #0,d0
  74.     moveq.l    #0,d1
  75.     CALLINT    DrawBorder
  76.     endm
  77.  
  78. WRITE    macro
  79.     move.l    WindowPointer,a1
  80.     move.l    wd_RPort(a1),a1
  81.     move.l    a1,a3    
  82.     move.l    \1,d0
  83.     move.l    \2,d1
  84.     CALLGRAF    Move
  85.     move.l    a3,a1    
  86.     move.l    \3,d0
  87.     CALLGRAF    SetAPen
  88.     lea.l    Write_Text\@(pc),a0
  89.     move.l    a3,a1
  90.     move.l    #Write_Ende\@-Write_Text\@,d0
  91.     CALLGRAF    Text
  92.     bra    Write_Label\@
  93. Write_Text\@    dc.b    \4
  94. Write_Ende\@    dc.b    0
  95.     even
  96. Write_Label\@    nop
  97.     endm
  98.  
  99.  
  100.  
  101. BOX    macro            ; macro to create a border structure
  102.     dc.w    0,0
  103.     dc.b    \5,0,RP_JAM1,5
  104.     dc.l    box_\@,\6
  105. box_\@    dc.w    \1,\2,\3,\2,\3,\4,\1,\4,\1,\2
  106.     endm
  107.  
  108. TEXT    macro            ; macro to create a text structure    
  109.     dc.b    2,0,RP_JAM1,0
  110.     dc.w    \1+1,\2+1
  111.     dc.l    TOPAZ_80,T_String\@,Text2_\@
  112. Text2_\@    dc.b    \3,0,RP_JAM1,0
  113.     dc.w    \1,\2
  114.     dc.l    TOPAZ_80,T_String\@,0
  115. T_String\@    dc.b    \4,0
  116.     even
  117.  
  118.  
  119.     IFEQ    FontFlag
  120.  
  121. TOPAZ_80    dc.l    T_80name
  122.     dc.w    TOPAZ_EIGHTY
  123.     dc.b    FS_NORMAL,FPF_ROMFONT
  124.     even
  125. T_80name    dc.b    "topaz.font",0
  126.  
  127. FontFlag    set    1
  128.     endc
  129.     endm
  130.  
  131.  
  132. AUTOGADGET    macro
  133. * \1,\2    x,y
  134. * \3,\4    size
  135. * \5,\6    colors (text & Box)
  136. * \7       Text
  137. * \8       ID
  138. * \9       NextGadget
  139.  
  140.     dc.l    \9
  141.     dc.w    \1,\2,\3,\4
  142.     dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  143.     dc.l    AGadget\@_Box
  144.     dc.l    0,AGadget\@_Text,0,0
  145.     dc.w    \8,0,0
  146. AGadget\@_Box    BOX    -1,-1,\3,\4,\5,0
  147.     even
  148.  
  149. AG_T_String\@    dc.b    \7,0
  150. AG_T_String\@_End    
  151.     even
  152. AGadget\@_Text    dc.b    2,0,RP_JAM1,0
  153.     dc.w    (\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2+1,((\4-8)/2)+1
  154.     dc.l    TOPAZ_80,AG_T_String\@,AG_Text2_\@
  155.  
  156. AG_Text2_\@    dc.b    \6,0,RP_JAM1,0
  157.     dc.w    (\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2),(\4-8)/2
  158.     dc.l    TOPAZ_80,AG_T_String\@,0
  159.  
  160.     
  161.     IFEQ    FontFlag
  162.  
  163. TOPAZ_80    dc.l    T_80name
  164.     dc.w    TOPAZ_EIGHTY
  165.     dc.b    FS_NORMAL,FPF_ROMFONT
  166.     even
  167. T_80name    dc.b    "topaz.font",0
  168.  
  169. FontFlag    set    1
  170.     endc
  171.     endm
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.     include    "misc/easystart.i"
  179.  
  180.  
  181. OpenThem    lea    dosname(pc),a1        ; open libs
  182.     moveq.l    #0,d0
  183.     CALLEXEC     OpenLibrary
  184.     move.l    d0,_DOSBase    
  185.     lea    intname(pc),a1                 
  186.     moveq.l    #0,d0        
  187.     CALLEXEC     OpenLibrary
  188.     move.l    d0,_IntuitionBase  
  189.     lea    grafname(pc),a1
  190.     moveq.l    #0,d0
  191.     CALLEXEC     OpenLibrary
  192.     move.l    d0,_GfxBase
  193.     jmp    Init        ; jump to end of file
  194. _DOSBase    dc.l    0
  195. dosname    DOSNAME
  196. _GfxBase    dc.l    0
  197. grafname    GRAFNAME
  198. _IntuitionBase    dc.l    0
  199. intname    INTNAME
  200.  
  201. Window1    dc.l    0
  202. Palette    dc.w    $443,$eee,$002,$f80
  203.  
  204. Start    lea.l    Screendef,a0        ; open Screen
  205.     CALLINT    OpenScreen
  206.     tst.l    d0
  207.     beq    ende
  208.     move.l    d0,ScreenPtr1
  209.  
  210.  
  211.     lea.l    Windowdef1,a0        ; open window    
  212.     CALLINT    OpenWindow
  213.     tst.l    d0
  214.     beq    QUIT2
  215.     move.l    d0,Window1
  216.  
  217.     move.l    d0,a0        ; set colours
  218.     CALLINT    ViewPortAddress
  219.     move.l    d0,a0
  220.     moveq.l    #4,d0
  221.     lea.l    Palette,a1
  222.     CALLGRAF    LoadRGB4
  223.     CALLINT    RemakeDisplay
  224.  
  225. WindowPointer set Window1        ;define Window1 as WindowPointer (for macros )
  226.  
  227.  
  228.     SETDRMD    #RP_JAM1
  229.     
  230.  
  231. ChangeScreen    SETAPEN    #0
  232.     RECTFILL    #10,#10,#270,#165
  233.  
  234.     clr.l    Mode        ; mode = select Screen
  235.     jsr    ShowScreen        ; Select Screen
  236.  
  237.     lea.l    Gadget1,a0        
  238.     move.l    Window1,a1
  239.     sub.l    a2,a2
  240.     CALLINT    RefreshGadgets
  241.  
  242.  
  243.  
  244. wait    move.l    Window1,a0        ; wait .....
  245.     move.l    wd_UserPort(a0),a0
  246.     move.l    a0,a5
  247.     CALLEXEC    WaitPort        
  248.     move.l    a5,a0
  249.     CALLEXEC    GetMsg        ; get message
  250.     move.l    d0,a1    
  251.     move.l    im_Class(a1),d4    ; get data
  252.     move.w    im_Code(a1),d5
  253.     move.l    im_IAddress(a1),a4
  254.     moveq.l    #0,d6
  255.     move.w    im_MouseY(a1),d6
  256.     CALLEXEC     ReplyMsg        ; reply message        
  257.     cmp.l    #MENUPICK,d4
  258.     beq    QUIT
  259.     cmp.l    #VANILLAKEY,d4
  260.     beq    KEY
  261.  
  262.     moveq.l    #0,d0        ; use table to get subroutine        
  263.     move.w    gg_GadgetID(a4),d0
  264.     subq    #1,d0
  265.     lsl.l    #2,d0
  266.     lea.l    Vektoren,a0
  267.     tst.l    Mode
  268.     bne    modus2    
  269.     lea.l    VektorenScreen,a0
  270. modus2    move.l    (a0,d0),a0
  271.     jmp    (a0)
  272. Vektoren    dc.l    ChangeScreen,GetWindows,KillWindow,FRONT,BACK
  273.     dc.l    CLEAR,FRAME,ALL,REFRESH,IDCMP
  274.     dc.l    ABOUT,NewLimits,NewLimits,NewLimits,NewLimits
  275.     dc.l    NewPen,MoveWindow,MoveWindow,SizeWindow,SizeWindow
  276.     dc.l    NewPen,WindowSelect,wait,wait,wait
  277.  
  278. VektorenScreen    dc.l    ChangeScreen,ChangeScreen,Error,Error,Error
  279.     dc.l    Error,Error,Error,Error,Error
  280.     dc.l    ABOUT,Error,Error,Error,Error
  281.     dc.l    Error,Error,Error,Error,Error
  282.     dc.l    Error,ScreenSelect,wait,wait
  283.     
  284. Error    move.l    ScreenPtr1,a0
  285.     CALLINT    DisplayBeep
  286.     bra    wait
  287.  
  288.  
  289.     
  290. QUIT    move.l    Window1,a0        ; bye, bye !
  291.     CALLINT    CloseWindow
  292.  
  293.     move.l    ScreenPtr1,a0
  294.     CALLINT    CloseScreen
  295.  
  296.     moveq.l    #0,d0
  297.     rts
  298.  
  299. KEY    cmp.b    #"f",d5        ; useful key pressed ?
  300.     beq    KEY2
  301.     cmp.b    #"s",d5
  302.     bne    KEY3
  303.     tst.l    Mode
  304.     beq    wait
  305.  
  306.     move.l    BILDSCHIRM,a0
  307.     CALLINT    ScreenToFront
  308.     bra    wait
  309.  
  310. KEY2    move.l    ScreenPtr1,a0
  311.     CALLINT    ScreenToFront
  312.     bra    wait
  313.  
  314. KEY3    cmp.b    #"u",d5
  315.     beq    UP
  316.     cmp.b    #"d",d5
  317.     bne    wait
  318.     move.l    Top,d0    ; move down
  319.     add.l    #17,d0
  320.     cmp.l    Anzahl,d0
  321.     bge    wait
  322.     add.l    #1,Top
  323.     bra    ShowWindow
  324.  
  325.  
  326. UP    tst.l    Top    ; move up
  327.     beq    wait
  328.     sub.l    #1,Top
  329.     bra    ShowWindow
  330.     
  331.     
  332.  
  333.  
  334. Mode    dc.l    0
  335.  
  336.  
  337. Screendef    dc.w    0,0,460-4,199,2
  338.     dc.b    0,1
  339.     dc.w    V_HIRES
  340.     dc.w    CUSTOMSCREEN
  341.     dc.l    TOPAZ_80
  342.     dc.l    S_Title,0,0
  343.     
  344.  
  345. Windowdef1    dc.w    0,0,460-4,199
  346.     dc.b    -1,-1
  347.     dc.l    GADGETUP!MENUPICK!VANILLAKEY
  348.     dc.l    WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!BACKDROP
  349.     dc.l    Gadget1
  350.     dc.l    0
  351.     dc.l    0
  352. ScreenPtr1    dc.l    0,0
  353.     dc.w    0,0,0,0,CUSTOMSCREEN
  354. S_Title    dc.b    "RF-Tools : FENSTER V1.0 by Roger Fischlin 7/1989            ",0
  355.     even
  356.  
  357. Gadget1    AUTOGADGET     280,13+0*14,165,10,3,1,<"Change Screen">,1,Gadget2
  358.     even
  359. Gadget2    AUTOGADGET     280,13+1*14,165,10,3,1,<"Update List">,2,Gadget3
  360.     even
  361. Gadget3    AUTOGADGET     280,13+2*14,165,10,3,1,<"Kill Window">,3,Gadget4
  362.     even
  363. Gadget4    AUTOGADGET     280,13+3*14,165,10,3,1,<"Window To Front">,4,Gadget5
  364.     even
  365. Gadget5    AUTOGADGET     280,13+4*14,165,10,3,1,<"Window To Back">,5,Gadget6
  366.     even
  367. Gadget6    AUTOGADGET     280,13+5*14,165,10,3,1,<"Clear Pointer">,6,Gadget7
  368.     even
  369. Gadget7    AUTOGADGET     280,13+6*14,165,10,3,1,<"Redraw Frame">,7,Gadget8
  370.     even
  371. Gadget8    AUTOGADGET     280,13+7*14,165,10,3,1,<"Kill Screen&Windows">,8,Gadget9
  372.     even
  373. Gadget9    AUTOGADGET     280,13+8*14,165,10,3,1,<"Refresh Gadgets">,9,Gadget10
  374.     even
  375. Gadget10    AUTOGADGET     280,13+9*14,165,10,3,1,<"Modify IDCMP">,10,Gadget11
  376.     even
  377. Gadget11    AUTOGADGET     280,13+10*14,165,10,1,3,<"About Fenster">,11,Gadget12
  378.     even
  379.  
  380.  
  381.  
  382. Gadget12    dc.l    Gadget13
  383.     dc.w    55,185+3,41,12
  384.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  385.     dc.l    G12_box
  386.     dc.l    0,G12_Text,0,G12_Info
  387.     dc.w    12,0,0
  388. G12_box    BOX    -5,-4,36,12,1,G12_Box2
  389.     even
  390. G12_Box2    BOX    -5,-4,-55,12,1,0
  391.     even
  392. G12_Text    TEXT    -50,0,3,<"min.X">
  393.     even
  394. G12_Info    dc.l    G12_Puffer,G12_Undo
  395.     dc.w    0,4
  396.     ds.b    si_SIZEOF
  397. G12_Puffer    ds.b    6
  398. G12_Undo    ds.b    6
  399.  
  400. Gadget13    dc.l    Gadget14
  401.     dc.w    5*8+150-45+1,185+3,41,12
  402.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  403.     dc.l    G12_box
  404.     dc.l    0,G13_Text,0,G13_Info
  405.     dc.w    13,0,0
  406.     even
  407. G13_Text    TEXT    -50,0,3,<"min.Y">
  408.     even
  409. G13_Info    dc.l    G13_Puffer,G13_Undo
  410.     dc.w    0,4
  411.     ds.b    si_SIZEOF
  412. G13_Puffer    ds.b    6
  413. G13_Undo    ds.b    6
  414.  
  415. Gadget14    dc.l    Gadget15
  416.     dc.w    5*8+250-10-45+2,185+3,41,12
  417.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  418.     dc.l    G12_box
  419.     dc.l    0,G14_Text,0,G14_Info
  420.     dc.w    14,0,0
  421.     even
  422. G14_Text    TEXT    -50,0,3,<"max.X">
  423.     even
  424. G14_Info    dc.l    G14_Puffer,G14_Undo
  425.     dc.w    0,4
  426.     ds.b    si_SIZEOF
  427. G14_Puffer    ds.b    6
  428. G14_Undo    ds.b    6
  429.  
  430. Gadget15    dc.l    Gadget16
  431.     dc.w    5*8+350-20-45+3,185+3,41,12
  432.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  433.     dc.l    G12_box
  434.     dc.l    0,G15_Text,0,G15_Info
  435.     dc.w    15,0,0
  436.     even
  437. G15_Text    TEXT    -53,0,3,<"max.Y">
  438.     even
  439. G15_Info    dc.l    G15_Puffer,G15_Undo
  440.     dc.w    0,4
  441.     ds.b    si_SIZEOF
  442. G15_Puffer    ds.b    6
  443. G15_Undo    ds.b    6
  444. Gadget16    dc.l    Gadget17
  445.     dc.w    5*8+450-30-45+4,185+3,41,12
  446.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  447.     dc.l    G16_box
  448.     dc.l    0,G16_Text,0,G16_Info
  449.     dc.w    16,0,0
  450.     even
  451. G16_box    BOX    -5,-4,35,12,1,G16_Box2
  452.     even
  453. G16_Box2    BOX    -5,-4,-55,12,1,0
  454.     even
  455. G16_Text    TEXT    -50,0,3,<"BPen">
  456.     even
  457. G16_Info    dc.l    G16_Puffer,G16_Undo
  458.     dc.w    0,3
  459.     ds.b    si_SIZEOF
  460. G16_Puffer    ds.b    6
  461. G16_Undo    ds.b    6
  462.  
  463. Gadget17    dc.l    Gadget18
  464.     dc.w    55,185+3-16,41,12
  465.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  466.     dc.l    G12_box
  467.     dc.l    0,G17_Text,0,G17_Info
  468.     dc.w    17,0,0
  469. G17_Text    TEXT    -50,0,3,<"X">
  470.     even
  471. G17_Info    dc.l    G17_Puffer,G17_Undo
  472.     dc.w    0,4
  473.     ds.b    si_SIZEOF
  474. G17_Puffer    ds.b    6
  475. G17_Undo    ds.b    6
  476.  
  477. Gadget18    dc.l    Gadget19
  478.     dc.w    5*8+150-45+1,185+3-16,41,12
  479.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  480.     dc.l    G12_box
  481.     dc.l    0,G18_Text,0,G18_Info
  482.     dc.w    18,0,0
  483.     even
  484. G18_Text    TEXT    -50,0,3,<"Y">
  485.     even
  486. G18_Info    dc.l    G18_Puffer,G18_Undo
  487.     dc.w    0,4
  488.     ds.b    si_SIZEOF
  489. G18_Puffer    ds.b    6
  490. G18_Undo    ds.b    6
  491.  
  492. Gadget19    dc.l    Gadget20
  493.     dc.w    5*8+250-10-45+2,185+3-16,41,12
  494.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  495.     dc.l    G12_box
  496.     dc.l    0,G19_Text,0,G19_Info
  497.     dc.w    19,0,0
  498.     even
  499. G19_Text    TEXT    -50,0,3,<"Width">
  500.     even
  501. G19_Info    dc.l    G19_Puffer,G19_Undo
  502.     dc.w    0,4
  503.     ds.b    si_SIZEOF
  504. G19_Puffer    ds.b    6
  505. G19_Undo    ds.b    6
  506.  
  507. Gadget20    dc.l    Gadget21
  508.     dc.w    5*8+350-20-45+3,185+3-16,41,12
  509.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  510.     dc.l    G12_box
  511.     dc.l    0,G20_Text,0,G20_Info
  512.     dc.w    20,0,0
  513.     even
  514. G20_Text    TEXT    -53,0,3,<"Height">
  515.     even
  516. G20_Info    dc.l    G20_Puffer,G20_Undo
  517.     dc.w    0,4
  518.     ds.b    si_SIZEOF
  519. G20_Puffer    ds.b    6
  520. G20_Undo    ds.b    6
  521. Gadget21    dc.l    Gadget22    
  522.     dc.w    5*8+450-30-45+4,185+3-16,41,12
  523.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  524.     dc.l    G16_box
  525.     dc.l    0,G21_Text,0,G21_Info
  526.     dc.w    21,0,0
  527.     even
  528. G21_Text    TEXT    -50,0,3,<"DPen">
  529.     even
  530. G21_Info    dc.l    G21_Puffer,G21_Undo
  531.     dc.w    0,3
  532.     ds.b    si_SIZEOF
  533. G21_Puffer    ds.b    6
  534. G21_Undo    ds.b    6
  535.     even
  536. Gadget22    dc.l    0
  537.     dc.w    10,32-6,240+16,128+8
  538.     dc.w    GADGHNONE,RELVERIFY!LONGINT,BOOLGADGET
  539.     dc.l    0
  540.     dc.l    0,0,0,0
  541.     dc.w    22,0,0
  542.     even
  543.  
  544.  
  545.  
  546.  
  547. Windowdef3    dc.w    (454-300)/2,25,300,120
  548.     dc.b    -1,-1
  549.     dc.l    GADGETUP
  550.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  551.     dc.l    GadgetAbout
  552.     dc.l    0
  553.     dc.l    W3_Title
  554.     dc.l    0,0
  555.     dc.w    0,0,0,0,CUSTOMSCREEN
  556. W3_Title    dc.b    "        » ABOUT  FENSTER «           ",0
  557.     even
  558. GadgetAbout    AUTOGADGET     20,100,260,12,3,1,<"Exit">,0,0
  559.     even
  560.  
  561.  
  562.  
  563. Window2    dc.l    0
  564.  
  565.  
  566. ABOUT    lea.l    Windowdef3,a0        ; about FENSTER
  567.     move.l    ScreenPtr1,nw_Screen(a0)    
  568.     CALLINT    OpenWindow
  569.     tst.l    d0
  570.     beq    wait
  571.     move.l    d0,Window2
  572.  
  573. WindowPointer set Window2
  574.  
  575.     SETAPEN    #2
  576.     RECTFILL    #2,#10,#297,#118
  577.  
  578.     SETDRMD    #RP_JAM1
  579.     WRITE    #6+((290-23*8)/2),#20+1,#0,<"RF-Tools : FENSTER V1.0">
  580.     WRITE    #6+((290-31*8)/2),#29+1,#0,<"This utility is public domain !">
  581.     WRITE    #6+((290-24*8)/2),#40+1,#0,<"by: Roger Fischlin  ">
  582.     WRITE    #6+((290-24*8)/2),#49+1,#0,<"    Steigerwaldweg 6">
  583.     WRITE    #6+((290-24*8)/2),#58+1,#0,<"    D-6450 Hanau 7">
  584.     WRITE    #6+((290-24*8)/2),#67+1,#0,<"    West Germany">
  585.     WRITE    #6+((290-24*8)/2),#76+1,#0,<"    Phone:(06181) 650266">
  586.     WRITE    #6+((290-33*8)/2),#86+1,#0,<"What about reading the doc file ?">
  587.  
  588.  
  589.     WRITE    #5+((290-23*8)/2),#20,#1,<"RF-Tools : FENSTER V1.0">
  590.     WRITE    #5+((290-31*8)/2),#29,#1,<"This utility is public domain !">
  591.     WRITE    #5+((290-24*8)/2),#40,#3,<"by: Roger Fischlin  ">
  592.     WRITE    #5+((290-24*8)/2),#49,#3,<"    Steigerwaldweg 6">
  593.     WRITE    #5+((290-24*8)/2),#58,#3,<"    D-6450 Hanau 7">
  594.     WRITE    #5+((290-24*8)/2),#67,#3,<"    West Germany">
  595.     WRITE    #5+((290-24*8)/2),#76,#3,<"    Phone:(06181) 650266">
  596.     WRITE    #5+((290-33*8)/2),#86,#1,<"What about reading the doc file ?">
  597.     
  598.     lea.l    GadgetAbout,a0
  599.     move.l    Window2,a1
  600.     sub.l    a2,a2
  601.     CALLINT    RefreshGadgets
  602.  
  603.  
  604.     move.l    Window2,a0        
  605.     move.l    wd_UserPort(a0),a0
  606.     CALLEXEC    WaitPort
  607.  
  608.     move.l    Window2,a0
  609.     CALLINT    CloseWindow
  610.     bra    wait
  611.  
  612.  
  613. Zeile    dc.b    "                      ... x ..     ",0
  614.  
  615.     even
  616.  
  617.  
  618. * Ask User to select screen .... 
  619.     
  620. WindowPointer set Window1
  621.  
  622.  
  623. ShowScreen    WRITE    #10,#20,#2,<"        Select Screen">
  624.     WRITE    #11,#19,#1,<"        Select Screen">
  625.     WRITE    #10,#26,#2,<"--------------------------------">
  626.     WRITE    #11,#25,#1,<"--------------------------------">
  627.     
  628.     SETAPEN    #3
  629.     moveq.l    #0,d5        ; get pointer to first screen
  630.     move.l    _IntuitionBase,a6
  631.     move.l    ib_FirstScreen(a6),a5
  632.     lea.l    Pointer,a3
  633.     clr.l    Anzahl
  634.     clr.l    Top
  635.  
  636. .SS1    move.l    sc_DefaultTitle(a5),a4    ; get screen title
  637.     lea.l    Zeile,a0        ; up to 32 characters
  638.     move.l    #31,d0
  639. .SS5    move.b    #" ",(a0)+
  640.     dbra    d0,.SS5
  641.     move.b    #"x",Zeile+59-32
  642.     lea.l    Zeile,a0
  643.  
  644. .SS2    tst.b    (a4)        ; leave out spaces
  645.     beq    .SS3
  646.     cmp.b    #" ",(a4)+
  647.     beq    .SS2
  648.     tst.b    -(a4)
  649.     beq    .SS3
  650.     move.l    #21,d0
  651. .SS4    move.b    (a4)+,d1
  652.     beq    .SS3
  653.     move.b    d1,(a0)+
  654.     dbra    d0,.SS4
  655.  
  656. .SS3    moveq.l    #0,d0        ; write screen width & height
  657.     move.w    sc_Width(a5),d0
  658.     lea.l    Zeile+54-32,a0
  659.     bsr    MakeZahl    
  660.     moveq.l    #0,d0
  661.     move.w    sc_Height(a5),d0
  662.     lea.l    Zeile+60-32,a0
  663.     bsr    MakeZahl    
  664.         
  665.  
  666.  
  667.     move.l    Window1,a1        
  668.     move.l    wd_RPort(a1),a1
  669.     move.l    #10,d0
  670.     move.l    d5,d1
  671.     lsl.l    #3,d1
  672.     add.l    #32,d1
  673.     CALLGRAF    Move
  674.     lea.l    Zeile,a0
  675.     move.l    Window1,a1
  676.     move.l    wd_RPort(a1),a1
  677.     move.l    #33,d0
  678.     CALLGRAF    Text
  679.     add.l    #1,Anzahl
  680.     
  681.     move.l    a5,(a3)+        ; any more screens ?
  682.     move.l    (a5),a5
  683.     cmp.l    #0,a5
  684.     beq    .SS6
  685.     
  686.     addq    #1,d5
  687.     cmp.w    #14,d5        ; up to 14 screens (DID YOU HAVE HAD MORE THAN 14 SCREENS ?!?)
  688.     bne    .SS1
  689. .SS6    rts
  690.  
  691. Top    dc.l    0        ; nummer of first pointer on display
  692. Anzahl    dc.l    0        ; number of pointers displayed
  693. FENSTER    dc.l    0        ; pointer to current window
  694. BILDSCHIRM    dc.l    0        ; pointer to current screen
  695. Pointer    ds.l    20*5        ; array containing the window pointers 
  696.  
  697.  
  698. MakeZahl    moveq.l    #3,d2        ; convert number (<1024)  into ASCII text 
  699.     moveq.l    #0,d3
  700.     lea.l    .Potenzen,a1
  701. .MZ1    move.b    #"0"-1,d1
  702. .MZ2    addq    #1,d1
  703.     sub.l    (a1),d0
  704.     bcc    .MZ2
  705.     add.l    (a1)+,d0
  706.     tst.b    d2
  707.     beq    .MZ3
  708.     cmp.b    #"0",d1
  709.     beq    .MZ4
  710.     moveq.l    #1,d3
  711.     bra    .MZ3
  712. .MZ4    tst.b    d3
  713.     bne    .MZ3
  714.     move.b    #" ",d1
  715. .MZ3    move.b    d1,(a0)+
  716.     dbra    d2,.MZ1
  717.     rts
  718. .Potenzen    dc.l    1000
  719.     dc.l    100
  720.     dc.l    10
  721.     dc.l    1
  722.  
  723. MakeZahl3    moveq.l    #2,d2    ; convert number (<1000)  into ASCII text
  724.     moveq.l    #0,d3
  725.     lea.l    .Potenzen,a1
  726. .MZ1    move.b    #"0"-1,d1
  727. .MZ2    addq    #1,d1
  728.     sub.l    (a1),d0
  729.     bcc    .MZ2
  730.     add.l    (a1)+,d0
  731.     tst.b    d2
  732.     beq    .MZ3
  733.     cmp.b    #"0",d1
  734.     beq    .MZ4
  735.     moveq.l    #1,d3
  736.     bra    .MZ3
  737. .MZ4    tst.b    d3
  738.     beq    .MZ5
  739. .MZ3    move.b    d1,(a0)+
  740. .MZ5    dbra    d2,.MZ1
  741.     clr.b    (a0)
  742.     rts
  743. .Potenzen    dc.l    100
  744.     dc.l    10
  745.     dc.l    1
  746.  
  747. MakeZahl2    moveq.l    #1,d2    ; convert number (<99)  into ASCII text
  748.     moveq.l    #0,d3
  749.     lea.l    .Potenzen,a1
  750. .MZ1    move.b    #"0"-1,d1
  751. .MZ2    addq    #1,d1
  752.     sub.l    (a1),d0
  753.     bcc    .MZ2
  754.     add.l    (a1)+,d0
  755.     tst.b    d2
  756.     beq    .MZ3
  757.     cmp.b    #"0",d1
  758.     beq    .MZ4
  759.     moveq.l    #1,d3
  760.     bra    .MZ3
  761. .MZ4    tst.b    d3
  762.     beq    .MZ5
  763. .MZ3    move.b    d1,(a0)+
  764. .MZ5    dbra    d2,.MZ1
  765.     clr.b    (a0)
  766.     rts
  767. .Potenzen    dc.l    10
  768.     dc.l    1
  769.  
  770. GetLine    sub.w    gg_TopEdge(a4),d6    ; calculate which screen / window was selected  
  771.     lsr.w    #3,d6
  772.     and.l    #$ffff,d6
  773.     move.l    Anzahl,d0
  774.     add.l    Top,d6
  775.     cmp.l    d0,d6
  776.     bge    .GetLine1
  777.     lea.l    Pointer,a0
  778.     lsl.l    #2,d6
  779.     move.l    (a0,d6),a0        ; a0 contains pointer
  780.     moveq.l    #0,d0
  781.     rts
  782. .GetLine1    moveq.l    #-1,d0        ; error - user selected space
  783.     rts
  784.  
  785. ScreenSelect    jsr    GetLine        ; list windows of selected screen    
  786.     tst.l    d0
  787.     bne    wait
  788.     move.l    a0,a5
  789.     move.l    a5,BILDSCHIRM
  790.     
  791.     SETAPEN    #0
  792.     RECTFILL    #10,#10,#270,#165
  793.     WRITE    #10,#26,#2,<"--------------------------------">
  794.     WRITE    #11,#25,#1,<"--------------------------------">
  795.     
  796. .SS1    move.l    sc_DefaultTitle(a5),a4    ; write screen title
  797.     lea.l    Zeile,a0
  798.     move.l    #31,d0
  799. .SS5    move.b    #" ",(a0)+
  800.     dbra    d0,.SS5
  801.     move.b    #"x",Zeile+59-32
  802.     lea.l    Zeile,a0
  803.  
  804. .SS2    tst.b    (a4)
  805.     beq    .SS3
  806.     cmp.b    #" ",(a4)+
  807.     beq    .SS2
  808.     tst.b    -(a4)
  809.     beq    .SS3
  810.     move.l    #21,d0
  811. .SS4    move.b    (a4)+,d1
  812.     beq    .SS3
  813.     move.b    d1,(a0)+
  814.     dbra    d0,.SS4
  815.  
  816. .SS3    moveq.l    #0,d0
  817.     move.w    sc_Width(a5),d0
  818.     lea.l    Zeile+54-32,a0
  819.     bsr    MakeZahl    
  820.     moveq.l    #0,d0
  821.     move.w    sc_Height(a5),d0
  822.     lea.l    Zeile+60-32,a0
  823.     bsr    MakeZahl    
  824.         
  825.  
  826.     SETAPEN    #2
  827.     move.l    Window1,a1
  828.     move.l    wd_RPort(a1),a1
  829.     move.l    #10+1,d0
  830.     move.l    #19+1,d1
  831.     CALLGRAF    Move
  832.     lea.l    Zeile,a0
  833.     move.l    Window1,a1
  834.     move.l    wd_RPort(a1),a1
  835.     move.l    #33,d0
  836.     CALLGRAF    Text
  837.     
  838.     SETAPEN    #1
  839.     move.l    Window1,a1
  840.     move.l    wd_RPort(a1),a1
  841.     move.l    #10,d0
  842.     move.l    #19,d1
  843.     CALLGRAF    Move
  844.     lea.l    Zeile,a0
  845.     move.l    Window1,a1
  846.     move.l    wd_RPort(a1),a1
  847.     move.l    #33,d0
  848.     CALLGRAF    Text
  849.  
  850.     move.l    #1,Mode
  851.  
  852.  
  853. GetWindows    SETAPEN    #0        ; storew all windows on the screen in array and print their names 
  854.     RECTFILL    #10,#28,#270,#165
  855.     move.l    BILDSCHIRM,a5
  856.     clr.l    FENSTER        
  857.     lea.l    Pointer,a1
  858.     move.l    #20*5,d0
  859.     clr.l    Top
  860.     clr.l    Anzahl
  861.     clr.l    Pointer
  862.     move.l    sc_FirstWindow(a5),a5
  863. .Loop    cmp.l    #0,a5
  864.     beq    .Loop2
  865. .Loop3    move.l    a5,(a1)+
  866.     add.l    #1,Anzahl
  867.     move.l    (a5),a5
  868.     dbra    d0,.Loop
  869. .Loop2    move.l    Pointer,FENSTER    ; define first window as already selected
  870.  
  871.     jsr    FillIn        ; Fill in the gadgets on the bottom
  872.  
  873. ShowWindow    SETAPEN    #3
  874.     SETBPEN    #0
  875.     SETDRMD    #RP_JAM2
  876.  
  877.     move.l    Window1,a1
  878.     move.l    wd_RPort(a1),a1
  879.     move.l    #10,d0
  880.     move.l    #32,d1
  881.     CALLGRAF    Move
  882.     lea.l    ClearZeile,a0
  883.     move.l    Window1,a1
  884.     move.l    wd_RPort(a1),a1
  885.     move.l    #32,d0
  886.     CALLGRAF    Text
  887.  
  888.  
  889.     moveq.l    #0,d5
  890.     lea.l    Pointer,a3
  891.     move.l    Top,d4
  892.     lsl.l    #2,d4
  893.     add.l    d4,a3
  894.  
  895. .SS1    move.l    d5,d0
  896.     add.l    Top,d0
  897.     cmp.l    Anzahl,d0
  898.     bge    .SS6
  899.     
  900.     SETBPEN    #0
  901.     move.l    (a3)+,a5
  902.     cmp.l    FENSTER,a5
  903.     bne    .SS0
  904.     SETBPEN    #2
  905.  
  906. .SS0    move.l    wd_Title(a5),a4    ; title up to 31 characters
  907.     lea.l    Zeile,a0
  908.     move.l    #31,d0
  909. .SS5    move.b    #" ",(a0)+
  910.     dbra    d0,.SS5
  911.     lea.l    Zeile,a0
  912.  
  913. .SS2    tst.b    (a4)
  914.     beq    .SS3
  915.     cmp.b    #" ",(a4)+
  916.     beq    .SS2
  917.     tst.b    -(a4)
  918.     beq    .SS3
  919.     move.l    #31,d0
  920. .SS4    move.b    (a4)+,d1
  921.     beq    .SS3
  922.     move.b    d1,(a0)+
  923.     dbra    d0,.SS4
  924.  
  925. .SS3    
  926.     move.l    Window1,a1
  927.     move.l    wd_RPort(a1),a1
  928.     move.l    #10,d0
  929.     move.l    d5,d1
  930.     lsl.l    #3,d1
  931.     add.l    #32,d1
  932.     CALLGRAF    Move
  933.     lea.l    Zeile,a0
  934.     move.l    Window1,a1
  935.     move.l    wd_RPort(a1),a1
  936.     move.l    #32,d0
  937.     CALLGRAF    Text
  938.  
  939.     addq    #1,d5
  940.     cmp.w    #17,d5
  941.     bne    .SS1
  942. .SS6    SETDRMD    #RP_JAM1
  943.     bra    wait
  944.  
  945.  
  946. ClearZeile    dc.b    "                                     "
  947.     even
  948.  
  949. WindowSelect    jsr    GetLine    ; which window was selected ?    
  950.     tst.l    d0
  951.     bne    wait
  952.     move.l    a0,FENSTER
  953.     jsr    FillIn
  954.  
  955.     bra    ShowWindow
  956.  
  957.  
  958. FRONT    move.l    FENSTER,a0    ; move window to front
  959.     cmp.l    #0,a0
  960.     beq    Error
  961.     CALLINT    WindowToFront
  962.     bra    wait
  963. BACK    move.l    FENSTER,a0    ;  "    "     " back
  964.     cmp.l    #0,a0
  965.     beq    Error
  966.     CALLINT    WindowToBack
  967.     bra    wait
  968. CLEAR    move.l    FENSTER,a0    ; clear pointer
  969.     cmp.l    #0,a0
  970.     beq    Error
  971.     CALLINT    ClearPointer
  972.     bra    wait
  973.  
  974. NewLimits    move.l    FENSTER,a0    ; define new limits
  975.     cmp.l    #0,a0
  976.     beq    Error
  977.     moveq.l    #0,d0
  978.     moveq.l    #0,d1
  979.     moveq.l    #0,d2
  980.     moveq.l    #0,d3
  981.  
  982.     move.w    G12_Info+si_LongInt+2,d0    
  983.     move.w    G13_Info+si_LongInt+2,d1    
  984.     move.w    G14_Info+si_LongInt+2,d2    
  985.     move.w    G15_Info+si_LongInt+2,d3
  986.     
  987.     CALLINT    WindowLimits
  988.     bra    wait    
  989.  
  990. NewPen    move.l    FENSTER,a0     ; define new pens
  991.     cmp.l    #0,a0
  992.     beq    Error
  993.     move.b    G16_Info+si_LongInt+3,wd_BlockPen(a0)
  994.     move.b    G21_Info+si_LongInt+3,wd_DetailPen(a0)
  995.  
  996.  
  997. FRAME    move.l    FENSTER,a0
  998.     cmp.l    #0,a0
  999.     beq    Error
  1000.     CALLINT    RefreshWindowFrame    ; use them !
  1001.     bra    wait
  1002. REFRESH    move.l    FENSTER,a1        ; refresh gadgets (if there are any to be refreshed !)
  1003.     cmp.l    #0,a1
  1004.     beq    Error
  1005.     move.l    wd_FirstGadget(a1),a0
  1006.     sub.l    a2,a2
  1007.     cmp.l    #0,a0
  1008.     beq    Error
  1009.     CALLINT    RefreshGadgets
  1010.     bra    wait
  1011.  
  1012. FillIn    move.l    FENSTER,a6        ; put data from window into longint gadgets
  1013.     cmp.l    #0,a6
  1014.     beq    .Label1
  1015.     
  1016.     lea.l    G12_Puffer,a0
  1017.     moveq.l    #0,d0
  1018.     move.w    wd_MinWidth(a6),d0
  1019.  
  1020.     move.l    d0,G12_Info+si_LongInt
  1021.  
  1022.     bsr    MakeZahl3
  1023.     
  1024.     lea.l    G13_Puffer,a0
  1025.     moveq.l    #0,d0
  1026.     move.w    wd_MinHeight(a6),d0
  1027.     move.l    d0,G13_Info+si_LongInt
  1028.  
  1029.     bsr    MakeZahl3
  1030.  
  1031.     lea.l    G14_Puffer,a0
  1032.     moveq.l    #0,d0
  1033.     move.w    wd_MaxWidth(a6),d0
  1034.     cmp.w    #999,d0
  1035.     bls    .Label3
  1036.     moveq.l    #0,d0
  1037. .Label3    move.l    d0,G14_Info+si_LongInt
  1038.  
  1039.     bsr    MakeZahl3
  1040.  
  1041.     lea.l    G15_Puffer,a0
  1042.     moveq.l    #0,d0
  1043.     move.w    wd_MaxHeight(a6),d0
  1044.     cmp.w    #999,d0
  1045.     bls    .Label4
  1046.     moveq.l    #0,d0
  1047. .Label4    move.l    d0,G15_Info+si_LongInt
  1048.  
  1049.     bsr    MakeZahl3
  1050.  
  1051.     lea.l    G17_Puffer,a0
  1052.     moveq.l    #0,d0
  1053.     move.w    wd_LeftEdge(a6),d0
  1054.     move.l    d0,G17_Info+si_LongInt
  1055.  
  1056.     bsr    MakeZahl3
  1057.  
  1058.     lea.l    G18_Puffer,a0
  1059.     moveq.l    #0,d0
  1060.     move.w    wd_TopEdge(a6),d0
  1061.     move.l    d0,G18_Info+si_LongInt
  1062.  
  1063.     bsr    MakeZahl3
  1064.  
  1065.  
  1066.     lea.l    G19_Puffer,a0
  1067.     moveq.l    #0,d0
  1068.     move.w    wd_Width(a6),d0
  1069.     move.l    d0,G19_Info+si_LongInt
  1070.  
  1071.     bsr    MakeZahl3
  1072.  
  1073.     lea.l    G20_Puffer,a0
  1074.     moveq.l    #0,d0
  1075.     move.w    wd_Height(a6),d0
  1076.     move.l    d0,G20_Info+si_LongInt
  1077.  
  1078.     bsr    MakeZahl3
  1079.  
  1080.     
  1081.     lea.l    G16_Puffer,a0
  1082.     moveq.l    #0,d0
  1083.     move.b    wd_BlockPen(a6),d0
  1084.     move.l    d0,G16_Info+si_LongInt
  1085.  
  1086.     bsr    MakeZahl2
  1087.  
  1088.     lea.l    G21_Puffer,a0
  1089.     moveq.l    #0,d0
  1090.     move.b    wd_DetailPen(a6),d0
  1091.     move.l    d0,G21_Info+si_LongInt
  1092.  
  1093.     bsr    MakeZahl2
  1094.  
  1095.     lea.l    Gadget12,a0
  1096.     move.l    Window1,a1
  1097.     sub.l    a2,a2
  1098.     CALLINT    RefreshGadgets
  1099.     rts
  1100.  
  1101. .Label1    clr.b    G12_Puffer
  1102.     clr.b    G13_Puffer
  1103.     clr.b    G14_Puffer
  1104.     clr.b    G15_Puffer
  1105.     clr.b    G16_Puffer
  1106.     clr.b    G17_Puffer
  1107.     clr.b    G18_Puffer
  1108.     clr.b    G19_Puffer
  1109.     clr.b    G20_Puffer
  1110.     clr.b    G21_Puffer
  1111.     
  1112.     lea.l    Gadget12,a0
  1113.     move.l    Window1,a1
  1114.     sub.l    a2,a2
  1115.     CALLINT    RefreshGadgets
  1116.     rts
  1117.  
  1118.  
  1119.  
  1120. Windowdef4    dc.w    (454-300)/2,45,300,80
  1121.     dc.b    -1,-1
  1122.     dc.l    GADGETUP
  1123.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1124.     dc.l    GadgetGURU
  1125.     dc.l    0
  1126.     dc.l    W4_Title
  1127.     dc.l    0,0
  1128.     dc.w    0,0,0,0,CUSTOMSCREEN
  1129. W4_Title    dc.b    "          » ERROR MESSAGE «           ",0
  1130.     even
  1131. GadgetGURU    AUTOGADGET     20,60,260,12,3,1,<"Exit">,0,0
  1132.     even
  1133.  
  1134. GURU    lea.l    Windowdef4,a0
  1135.     move.l    ScreenPtr1,nw_Screen(a0)    
  1136.     CALLINT    OpenWindow
  1137.     tst.l    d0
  1138.     beq    Undo
  1139.     move.l    d0,Window2
  1140.  
  1141. WindowPointer set Window2
  1142.  
  1143.     SETAPEN    #2
  1144.     RECTFILL    #2,#10,#297,#78
  1145.  
  1146.     SETDRMD    #RP_JAM1
  1147.     WRITE    #6+((290-32*8)/2),#20+1,#0,<"Sorry - But if I moved / resized">
  1148.     WRITE    #6+((290-29*8)/2),#30+1,#0,<"the window , the system would">
  1149.     WRITE    #6+((290-30*8)/2),#40+1,#0,<"crash !!!  Check screen size !">
  1150.  
  1151.     WRITE    #5+((290-32*8)/2),#20,#1,<"Sorry - But if I moved / resized">
  1152.     WRITE    #5+((290-29*8)/2),#30,#1,<"the window , the system would">
  1153.     WRITE    #5+((290-30*8)/2),#40,#1,<"crash !!!  Check screen size !">
  1154.  
  1155.  
  1156.     
  1157.     lea.l    GadgetGURU,a0
  1158.     move.l    Window2,a1
  1159.     sub.l    a2,a2
  1160.     CALLINT    RefreshGadgets
  1161.  
  1162.     move.l    Window2,a0        
  1163.     move.l    wd_UserPort(a0),a0
  1164.     CALLEXEC    WaitPort
  1165.  
  1166.     move.l    Window2,a0
  1167.     CALLINT    CloseWindow
  1168.  
  1169. Undo    move.l    FENSTER,a6        ; get current data (to undo illegal data) 
  1170.     lea.l    G17_Puffer,a0
  1171.     moveq.l    #0,d0
  1172.     move.w    wd_LeftEdge(a6),d0
  1173.     move.l    d0,G17_Info+si_LongInt
  1174.  
  1175.     bsr    MakeZahl3
  1176.  
  1177.     lea.l    G18_Puffer,a0
  1178.     moveq.l    #0,d0
  1179.     move.w    wd_TopEdge(a6),d0
  1180.     move.l    d0,G18_Info+si_LongInt
  1181.  
  1182.     bsr    MakeZahl3
  1183.  
  1184.  
  1185.     lea.l    G19_Puffer,a0
  1186.     moveq.l    #0,d0
  1187.     move.w    wd_Width(a6),d0
  1188.     move.l    d0,G19_Info+si_LongInt
  1189.  
  1190.     bsr    MakeZahl3
  1191.  
  1192.     lea.l    G20_Puffer,a0
  1193.     moveq.l    #0,d0
  1194.     move.w    wd_Height(a6),d0
  1195.     move.l    d0,G20_Info+si_LongInt
  1196.  
  1197.     bsr    MakeZahl3
  1198.  
  1199.     lea.l    Gadget17,a0
  1200.     move.l    Window1,a1
  1201.     sub.l    a2,a2
  1202.     CALLINT    RefreshGadgets
  1203.  
  1204.     bra    wait
  1205.  
  1206.     
  1207. WindowPointer set Window1
  1208.  
  1209.  
  1210. A
  1211. MoveWindow    move.l    FENSTER,a0        ; move window
  1212.     move.l    G17_Info+si_LongInt,d0
  1213.     move.l    G18_Info+si_LongInt,d1
  1214.  
  1215.     move.l    d0,d2
  1216.     move.l    d1,d3
  1217.  
  1218.     add.w    wd_Width(a0),d2
  1219.     add.w    wd_Height(a0),d3
  1220.  
  1221.     move.l    wd_WScreen(a0),a1
  1222.  
  1223.     cmp.w    sc_Width(a1),d2    ; check if they are possible !!!!
  1224.     bhi    GURU
  1225.     cmp.w    sc_Height(a1),d3
  1226.     bhi    GURU
  1227.     
  1228.     sub.w    wd_LeftEdge(a0),d0
  1229.     sub.w    wd_TopEdge(a0),d1
  1230.  
  1231.     CALLINT    MoveWindow
  1232.     bra    wait
  1233.  
  1234. SizeWindow    move.l    FENSTER,a0        ; re-size window
  1235.     move.l    G19_Info+si_LongInt,d0
  1236.     move.l    G20_Info+si_LongInt,d1
  1237.  
  1238.     move.l    d0,d2
  1239.     move.l    d1,d3
  1240.  
  1241.     add.w    wd_LeftEdge(a0),d2
  1242.     add.w    wd_TopEdge(a0),d3
  1243.  
  1244.     move.l    wd_WScreen(a0),a1
  1245.  
  1246.     cmp.w    sc_Width(a1),d2    ; check if they are possible !!!!
  1247.     bhi    GURU
  1248.     cmp.w    sc_Height(a1),d3
  1249.     bhi    GURU
  1250.     
  1251.     sub.w    wd_Width(a0),d0
  1252.     sub.w    wd_Height(a0),d1
  1253.  
  1254.     CALLINT    SizeWindow
  1255.     bra    wait    
  1256.     
  1257.  
  1258.  
  1259. Windowdef5    dc.w    275,30,174,100
  1260.     dc.b    -1,-1
  1261.     dc.l    GADGETUP
  1262.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1263.     dc.l    GadgetKILL1
  1264.     dc.l    0
  1265.     dc.l    W5_Title
  1266.     dc.l    0,0
  1267.     dc.w    0,0,0,0,CUSTOMSCREEN
  1268. W5_Title    dc.b    " » KILL WINDOW «     ",0
  1269.     even
  1270. GadgetKILL1    AUTOGADGET     10,60,154,12,3,1,<"YES !">,0,GadgetKILL2
  1271.     even
  1272. GadgetKILL2    AUTOGADGET     10,80,154,12,3,1,<"No - forget it !">,1,0
  1273.     even
  1274.  
  1275. KillWindow    tst.l    FENSTER
  1276.     beq    Error
  1277.  
  1278.     lea.l    Windowdef5,a0
  1279.     move.l    ScreenPtr1,nw_Screen(a0)    
  1280.     CALLINT    OpenWindow
  1281.     tst.l    d0
  1282.     beq    KILL_IT
  1283.     move.l    d0,Window2
  1284.  
  1285. WindowPointer set Window2
  1286.  
  1287.     SETAPEN    #2
  1288.     RECTFILL    #2,#10,#171,#98
  1289.  
  1290.     SETDRMD    #RP_JAM1
  1291.     WRITE    #1+((174-18*8)/2),#20+1,#0,<"Do you really want">
  1292.     WRITE    #1+((174-18*8)/2),#30+1,#0,<"to    close    the">
  1293.     WRITE    #1+((174-18*8)/2),#40+1,#0,<"     window ?     ">
  1294.  
  1295.     WRITE    #0+((174-18*8)/2),#20,#1,<"Do you really want">
  1296.     WRITE    #0+((174-18*8)/2),#30,#1,<"to    close    the">
  1297.     WRITE    #0+((174-18*8)/2),#40,#1,<"     window ?     ">
  1298.     
  1299.  
  1300.     lea.l    GadgetKILL1,a0
  1301.     move.l    Window2,a1
  1302.     sub.l    a2,a2
  1303.     CALLINT    RefreshGadgets
  1304.  
  1305.     move.l    Window2,a0        
  1306.     move.l    wd_UserPort(a0),a0
  1307.     move.l    a0,a5
  1308.     CALLEXEC    WaitPort        
  1309.     move.l    a5,a0
  1310.     CALLEXEC    GetMsg        ; get message
  1311.     move.l    d0,a1    
  1312.     move.l    im_IAddress(a1),a4
  1313.     CALLEXEC     ReplyMsg        ; reply message        
  1314.  
  1315.     tst.w    gg_GadgetID(a4)
  1316.     beq    KILL_IT
  1317.  
  1318.     move.l    Window2,a0
  1319.     CALLINT    CloseWindow
  1320.     bra    wait
  1321.  
  1322. KILL_IT    move.l    Window2,a0
  1323.     CALLINT    CloseWindow
  1324.     move.l    FENSTER,a0
  1325.     CALLINT    CloseWindow
  1326.     bra    GetWindows
  1327.  
  1328. Windowpointer    set Window1
  1329.  
  1330.  
  1331.     
  1332.  
  1333. AUTOGADGET2    macro
  1334. * \1,\2    x,y
  1335. * \3,\4    size
  1336. * \5,\6    colors (text & Box)
  1337. * \7       Text
  1338. * \8       ID
  1339. * \9       NextGadget
  1340.  
  1341.     dc.l    \9
  1342.     dc.w    \1,\2,\3,\4
  1343.     dc.w    GADGHCOMP!SELECTED,RELVERIFY!TOGGLESELECT,BOOLGADGET
  1344.     dc.l    AG2adget\@_Box
  1345.     dc.l    0,AG2adget\@_Text,0,0
  1346.     dc.w    \8,0,0
  1347. AG2adget\@_Box    BOX    -1,-1,\3,\4,\5,0
  1348.     even
  1349.  
  1350. AG2_T_String\@    dc.b    \7,0
  1351. AG2_T_String\@_End    
  1352.     even
  1353. AG2adget\@_Text    dc.b    2,0,RP_JAM1,0
  1354.     dc.w    (\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2+1,((\4-8)/2)+1
  1355.     dc.l    TOPAZ_80,AG2_T_String\@,AG2_Text2_\@
  1356.  
  1357. AG2_Text2_\@    dc.b    \6,0,RP_JAM1,0
  1358.     dc.w    (\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2),(\4-8)/2
  1359.     dc.l    TOPAZ_80,AG2_T_String\@,0
  1360.  
  1361.     
  1362.     IFEQ    FontFlag
  1363.  
  1364. TOPAZ_80    dc.l    T_80name
  1365.     dc.w    TOPAZ_EIGHTY
  1366.     dc.b    FS_NORMAL,FPF_ROMFONT
  1367.     even
  1368. T_80name    dc.b    "topaz.font",0
  1369.  
  1370. FontFlag    set    1
  1371.     endc
  1372.     endm
  1373.  
  1374.  
  1375.  
  1376.  
  1377. Windowdef6    dc.w    460-300-10,0,300,199
  1378.     dc.b    -1,-1
  1379.     dc.l    GADGETUP
  1380.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1381.     dc.l    GadgetIDCMP
  1382.     dc.l    0
  1383.     dc.l    W6_Title
  1384.     dc.l    0,0
  1385.     dc.w    0,0,0,0,CUSTOMSCREEN
  1386. W6_Title    dc.b    "          » IDCMP FLAGS «                  ",0
  1387.     even
  1388. GadgetIDCMP    AUTOGADGET2     20,20,120,10,3,1,<"SIZEVERIFY">,0,GadgetIDCMP2
  1389.     even
  1390. GadgetIDCMP2    AUTOGADGET2     20,35,120,10,3,1,<"NEWSIZE">,1,GadgetIDCMP3
  1391.     even
  1392. GadgetIDCMP3    AUTOGADGET2     20,50,120,10,3,1,<"REFRESHWINDOW">,2,GadgetIDCMP4
  1393.     even
  1394. GadgetIDCMP4    AUTOGADGET2     20,65,120,10,3,1,<"MOUSEBUTTONS">,3,GadgetIDCMP5
  1395.     even
  1396. GadgetIDCMP5    AUTOGADGET2     20,80,120,10,3,1,<"MOUSEMOVE">,4,GadgetIDCMP6
  1397.     even
  1398. GadgetIDCMP6    AUTOGADGET2     20,95,120,10,3,1,<"GADGETDOWN">,5,GadgetIDCMP7
  1399.     even
  1400. GadgetIDCMP7    AUTOGADGET2     20,110,120,10,3,1,<"GADGETUP">,6,GadgetIDCMP8
  1401.     even
  1402. GadgetIDCMP8    AUTOGADGET2     20,125,120,10,3,1,<"REQSET">,7,GadgetIDCMP9
  1403.     even
  1404. GadgetIDCMP9    AUTOGADGET2     20,140,120,10,3,1,<"MENUPICK">,8,GadgetIDCMP10
  1405.     even
  1406. GadgetIDCMP10    AUTOGADGET2     20,155,120,10,3,1,<"CLOSEWINDOW">,9,GadgetIDCMP11
  1407.     even
  1408. GadgetIDCMP11    AUTOGADGET2     20,170,120,10,3,1,<"RAWKEY">,10,GadgetIDCMP12
  1409.     even
  1410. GadgetIDCMP12    AUTOGADGET2     20,185,120,10,3,1,<"REQVERIFY">,11,GadgetIDCMP13
  1411.     even
  1412.  
  1413. GadgetIDCMP13    AUTOGADGET2     160,20,120,10,3,1,<"REQCLEAR">,12,GadgetIDCMP14
  1414.     even
  1415. GadgetIDCMP14    AUTOGADGET2     160,35,120,10,3,1,<"MENUVERIFY">,13,GadgetIDCMP15
  1416.     even
  1417. GadgetIDCMP15    AUTOGADGET2     160,50,120,10,3,1,<"NEWPREFS">,14,GadgetIDCMP16
  1418.     even
  1419. GadgetIDCMP16    AUTOGADGET2     160,65,120,10,3,1,<"DISKINSERTED">,15,GadgetIDCMP17
  1420.     even
  1421. GadgetIDCMP17    AUTOGADGET2     160,80,120,10,3,1,<"DISKREMOVED">,16,GadgetIDCMP18
  1422.     even
  1423. GadgetIDCMP18    AUTOGADGET2     160,95,120,10,3,1,<"WBENCHMESSAGE">,17,GadgetIDCMP19
  1424.     even
  1425. GadgetIDCMP19    AUTOGADGET2     160,110,120,10,3,1,<"ACTIVEWINDOW">,18,GadgetIDCMP20
  1426.     even
  1427. GadgetIDCMP20    AUTOGADGET2     160,125,120,10,3,1,<"INACTIVEWINDOW">,19,GadgetIDCMP21
  1428.     even
  1429. GadgetIDCMP21    AUTOGADGET2     160,140,120,10,3,1,<"DELTAMOVE">,20,GadgetIDCMP22
  1430.     even
  1431. GadgetIDCMP22    AUTOGADGET2     160,155,120,10,3,1,<"VANILLAKEY">,21,GadgetIDCMP23
  1432.     even
  1433. GadgetIDCMP23    AUTOGADGET2     160,170,120,10,3,1,<"INTUITICKS">,22,GadgetIDCMP_CA
  1434.     even
  1435.  
  1436. GadgetIDCMP_CA    AUTOGADGET     160,185,60,10,1,3,<"Cancel">,100,GadgetIDCMP_OK
  1437.     even
  1438.  
  1439. GadgetIDCMP_OK    AUTOGADGET     240,185,40,10,1,3,<"OK">,101,0
  1440.     even
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447. IDCMP    tst.l    FENSTER
  1448.     beq    Error
  1449.  
  1450.     move.l    FENSTER,a0
  1451.     move.l    wd_IDCMPFlags(a0),.IDCMPFlags
  1452.     move.l    wd_IDCMPFlags(a0),d1
  1453.     
  1454.  
  1455.     moveq.l    #0,d0        ; if bit is 1, set gadget selected
  1456.     lea.l    .GadgetList,a0
  1457. .Label1    move.l    (a0)+,a1
  1458.     btst    d0,d1
  1459.     bne    .Label2
  1460.     and.w    #$ffff-SELECTED,gg_Flags(a1)
  1461.     bra    .Label3
  1462. .Label2    or.w    #SELECTED,gg_Flags(a1)
  1463. .Label3    addq    #1,d0
  1464.     cmp.b    #23,d0
  1465.     bne    .Label1
  1466.  
  1467.  
  1468.     
  1469.     lea.l    Windowdef6,a0
  1470.     move.l    ScreenPtr1,nw_Screen(a0)    
  1471.     CALLINT    OpenWindow
  1472.     tst.l    d0
  1473.     beq    wait
  1474.     move.l    d0,Window2
  1475.  
  1476. WindowPointer set Window2
  1477.  
  1478.     SETAPEN    #2
  1479.     RECTFILL    #2,#10,#297,#197
  1480.  
  1481.     
  1482.     lea.l    GadgetIDCMP,a0
  1483.     move.l    Window2,a1
  1484.     sub.l    a2,a2
  1485.     CALLINT    RefreshGadgets
  1486.  
  1487.  
  1488.     
  1489.  
  1490.  
  1491. .wait    move.l    Window2,a0        
  1492.     move.l    wd_UserPort(a0),a0
  1493.     move.l    a0,a5
  1494.     CALLEXEC    WaitPort        
  1495.     move.l    a5,a0
  1496.     CALLEXEC    GetMsg        ; get message
  1497.     move.l    d0,a1    
  1498.     move.l    im_IAddress(a1),a4
  1499.     CALLEXEC     ReplyMsg        ; reply message        
  1500.  
  1501.     moveq.l    #0,d0        
  1502.     move.w    gg_GadgetID(a4),d0
  1503.  
  1504.     cmp.w    #100,d0
  1505.     beq    .Quit
  1506.     cmp.w    #101,d0
  1507.     beq    .Change
  1508.     
  1509.     move.l    .IDCMPFlags,d1
  1510.     bchg    d0,d1
  1511.     move.l    d1,.IDCMPFlags
  1512.     bra    .wait
  1513. .Change    move.l    FENSTER,a0
  1514.     move.l    .IDCMPFlags,d0
  1515.     CALLINT    ModifyIDCMP
  1516.     
  1517. .Quit    move.l    Window2,a0
  1518.     CALLINT    CloseWindow
  1519.     
  1520.     bra    wait
  1521.  
  1522. .GadgetList    dc.l    GadgetIDCMP
  1523.     dc.l    GadgetIDCMP2
  1524.     dc.l    GadgetIDCMP3
  1525.     dc.l    GadgetIDCMP4
  1526.     dc.l    GadgetIDCMP5
  1527.     dc.l    GadgetIDCMP6
  1528.     dc.l    GadgetIDCMP7
  1529.     dc.l    GadgetIDCMP8
  1530.     dc.l    GadgetIDCMP9
  1531.     dc.l    GadgetIDCMP10
  1532.     dc.l    GadgetIDCMP11
  1533.     dc.l    GadgetIDCMP12
  1534.     dc.l    GadgetIDCMP13
  1535.     dc.l    GadgetIDCMP14
  1536.     dc.l    GadgetIDCMP15
  1537.     dc.l    GadgetIDCMP16
  1538.     dc.l    GadgetIDCMP17
  1539.     dc.l    GadgetIDCMP18
  1540.     dc.l    GadgetIDCMP19
  1541.     dc.l    GadgetIDCMP20
  1542.     dc.l    GadgetIDCMP21
  1543.     dc.l    GadgetIDCMP22
  1544.     dc.l    GadgetIDCMP23
  1545.     
  1546. .IDCMPFlags    dc.l    0
  1547.  
  1548. Windowdef9    dc.w    275,30,174,100
  1549.     dc.b    -1,-1
  1550.     dc.l    GADGETUP
  1551.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1552.     dc.l    GadgetKILL1
  1553.     dc.l    0
  1554.     dc.l    W9_Title
  1555.     dc.l    0,0
  1556.     dc.w    0,0,0,0,CUSTOMSCREEN
  1557. W9_Title    dc.b    " » KILL SCREEN «     ",0    
  1558.  
  1559.  
  1560.  
  1561. ALL    lea.l    Windowdef9,a0
  1562.     move.l    ScreenPtr1,nw_Screen(a0)    
  1563.     CALLINT    OpenWindow
  1564.     tst.l    d0
  1565.     beq    KILL_ALL
  1566.     move.l    d0,Window2
  1567.  
  1568. WindowPointer set Window2
  1569.  
  1570.     SETAPEN    #2
  1571.     RECTFILL    #2,#10,#171,#98
  1572.  
  1573.     SETDRMD    #RP_JAM1
  1574.     WRITE    #1+((174-18*8)/2),#20+1,#0,<"Do you really want">
  1575.     WRITE    #1+((174-18*8)/2),#30+1,#0,<"to    close    the">
  1576.     WRITE    #1+((174-18*8)/2),#40+1,#0,<"     screen ?     ">
  1577.  
  1578.     WRITE    #0+((174-18*8)/2),#20,#1,<"Do you really want">
  1579.     WRITE    #0+((174-18*8)/2),#30,#1,<"to    close    the">
  1580.     WRITE    #0+((174-18*8)/2),#40,#1,<"     screen ?     ">
  1581.     
  1582.  
  1583.     lea.l    GadgetKILL1,a0
  1584.     move.l    Window2,a1
  1585.     sub.l    a2,a2
  1586.     CALLINT    RefreshGadgets
  1587.  
  1588.     move.l    Window2,a0        
  1589.     move.l    wd_UserPort(a0),a0
  1590.     move.l    a0,a5
  1591.     CALLEXEC    WaitPort        
  1592.     move.l    a5,a0
  1593.     CALLEXEC    GetMsg        ; get message
  1594.     move.l    d0,a1    
  1595.     move.l    im_IAddress(a1),a4
  1596.     CALLEXEC     ReplyMsg        ; reply message        
  1597.  
  1598.     tst.w    gg_GadgetID(a4)
  1599.     beq    KILL_ALL
  1600.  
  1601.     move.l    Window2,a0
  1602.     CALLINT    CloseWindow
  1603.     bra    wait
  1604.  
  1605. KILL_ALL    
  1606.     move.l    BILDSCHIRM,a5
  1607.  
  1608. .Label1    move.l    sc_FirstWindow(a5),a0    ; close window (if there are any windows left )
  1609.     cmp.l    #0,a0
  1610.     beq    .Label2
  1611.     CALLINT    CloseWindow
  1612.     bra    .Label1
  1613. .Label2    move.l    BILDSCHIRM,a0
  1614.     CALLINT    CloseScreen
  1615.     move.l    Window2,a0
  1616.     CALLINT    CloseWindow
  1617.     jmp    ChangeScreen
  1618.  
  1619.  
  1620.  
  1621. QUIT2    move.l    ScreenPtr1,a0
  1622.     CALLINT    CloseScreen
  1623.  
  1624. ende    move.l    #RECOVERY_ALERT,d0    ; error message
  1625.     move.l    #30,d1
  1626.     lea.l    ErrorText,a0
  1627.     CALLINT    DisplayAlert
  1628.     moveq.l    #0,d0
  1629.     rts
  1630.  
  1631.  
  1632. ErrorText    dc.w    60
  1633.     dc.b    17
  1634.     dc.b    "FENSTER  :   ERROR !?!    I cannot open the screen / window !"
  1635.     dc.b     0,0
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641. Windowdef    dc.w    20,20,160,10
  1642.     dc.b    -1,-1
  1643.     dc.l    MENUPICK!CLOSEWINDOW
  1644.     dc.l    WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!WINDOWDEPTH
  1645.     dc.l    0
  1646.     dc.l    0
  1647.     dc.l    W_Title
  1648.     dc.l    0,0
  1649.     dc.w    0,0,0,0,WBENCHSCREEN
  1650. W_Title    dc.b    "Fenster      ",0
  1651.     even 
  1652. WindowPtr    dc.l    0
  1653.  
  1654. Init    lea.l    Windowdef,a0        ; create window on WB    
  1655.     CALLINT    OpenWindow
  1656.     tst.l    d0
  1657.     beq    ende
  1658.     move.l    d0,WindowPtr
  1659.  
  1660.  
  1661. .wait    move.l    WindowPtr,a0        ; wait .....
  1662.     move.l    wd_UserPort(a0),a0
  1663.     move.l    a0,a5
  1664.     CALLEXEC    WaitPort        
  1665.     move.l    a5,a0
  1666.     CALLEXEC    GetMsg        ; get message
  1667.     move.l    d0,a1    
  1668.     move.l    im_Class(a1),d4    ; get data
  1669.     CALLEXEC     ReplyMsg        ; reply message        
  1670.     cmp.l    #MENUPICK,d4        ; right mouse button pressed ?
  1671.     beq    .FENSTER
  1672.     move.l    WindowPtr,a0
  1673.     CALLINT    CloseWindow
  1674.     rts
  1675. .FENSTER    jsr    Start        ; open FENSTER
  1676.     bra    .wait
  1677.  
  1678.     
  1679.     
  1680.  
  1681.  
  1682.  
  1683.  
  1684.         
  1685.  
  1686.     
  1687.  
  1688.     
  1689.  
  1690.     
  1691.     
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.