home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / programming / winctrl / !WinCtrl / WinCtrlSrc < prev   
Encoding:
Text File  |  1994-07-21  |  4.7 KB  |  292 lines

  1. ; WinCtrl
  2. ; by Dave Thomas, © 1992-4
  3. ;
  4. ; ----------------------------------
  5. ; Source for WinCtrl v1.04 !RunImage
  6. ; ----------------------------------
  7. ; written for assembly in Eivind Hagen's extASM assembler
  8. ;
  9.  
  10. #name !RunImage
  11. #type &ff8
  12. #base &8000
  13.  
  14.    temp   r11
  15.  
  16.    swi    Hourglass_On
  17.    bl     init
  18.    bl     load_temps
  19.    ldr    r1,infohand
  20.    str    r1,subwindow
  21.    bl     bar_icon
  22.    swi    Hourglass_Off
  23.  
  24. .poll
  25.    mov    r0,#0
  26.    adr    r1,q%
  27.    swi    XWimp_Poll
  28.    cmp    r0,#0:bleq check
  29.    cmp    r0,#1:beq redraw
  30.    cmp    r0,#2:swieq XWimp_OpenWindow
  31.    cmp    r0,#3:swieq XWimp_CloseWindow
  32.    cmp    r0,#6:bleq mouse
  33.    cmp    r0,#9:bleq menu_sel
  34.    cmp    r0,#17:bleq message
  35.    cmp    r0,#18:bleq message
  36.    b      poll
  37.  
  38. .check
  39.    mov    r0,#121
  40.    mov    r1,#2
  41.    swi    XOS_Byte
  42.    cmp    r1,#2
  43.    movne  pc,r14
  44.    adr    r1,q%
  45.    swi    XWimp_GetPointerInfo
  46.    ldr    r2,[r1,#8]
  47.    cmp    r2,#4
  48.    beq    check_2
  49.    cmp    r2,#1
  50.    movne  pc,r14
  51.  
  52. .check_2
  53.    ldr    r0,[r1,#12]
  54.    str    r0,[r1]
  55.    adr    r2,dragtype
  56.    ldr    r0,[r2]
  57.    str    r0,[r1,#4]
  58.    swi    XWimp_DragBox
  59.    mov    pc,r14
  60.  
  61. .dragtype
  62.    dcd    1
  63.  
  64. .redraw
  65.    swi    Wimp_RedrawWindow
  66. ._loop
  67.    cmn    r0,#1
  68.    bne    poll
  69.    swi    Interface_Render3dWindow
  70.    swi    Wimp_GetRectangle
  71.    b      _loop
  72.  
  73. .init
  74.    mov    r0,#200
  75.    adr    r2,task
  76.    ldr    r1,[r2]
  77.    adr    r2,descript
  78.    swi    Wimp_Initialise
  79.    adr    r0,taskh
  80.    str    r1,[r0]
  81.    mov    pc,r14
  82.  
  83. .task
  84.    dcb    "TASK"
  85. .descript
  86.    dcb    "WinCtrl",0
  87.    align
  88. .taskh
  89.    dcd    0
  90.  
  91. .load_temps
  92.    adr    r1,tempfile
  93.    swi    Wimp_OpenTemplate
  94.    adr    r1,q%
  95.    adr    r2,indr_data
  96.    add    r3,r2,#222
  97.    mvn    r4,#0
  98.    adr    r5,infoname
  99.    mov    r6,#0
  100.    swi    Wimp_LoadTemplate
  101.    swi    Wimp_CreateWindow
  102.    str    r0,infohand
  103.    adr    r5,mainname
  104.    swi    Wimp_LoadTemplate
  105.    adr    r8,sprite_area
  106.    str    r8,[r1,#64]
  107.    swi    Wimp_CreateWindow
  108.    str    r0,mainhand
  109.    swi    Wimp_CloseTemplate
  110.    mov    pc,r14
  111.  
  112. .tempfile
  113.    dcb    "<WinCtrl$Dir>.Templates",0
  114. .infoname
  115.    dcb    "prog_info",0
  116.    align
  117. .mainname
  118.    dcb    "main",0,"       "
  119.    align
  120. .infohand
  121.    dcd    0
  122. .mainhand
  123.    dcd    0
  124. .indr_data
  125.    dbb    222
  126.    align
  127.  
  128. .bar_icon
  129.    adr    r1,icon_block
  130.    swi    Wimp_CreateIcon
  131.    ldr    r0,[r1]
  132.    adr    r2,icon_hand
  133.    str    r0,[r2]
  134.    mov    pc,r14
  135.  
  136. .icon_block
  137.    dcd    -1
  138.    dcd    0
  139.    dcd    0
  140.    dcd    68
  141.    dcd    68
  142.    dcd    &3002
  143.    dcb    "!winctrl",0
  144.    align
  145. .icon_hand
  146.    dcd    0
  147.    align
  148.  
  149. .mouse
  150.    ldr    r0,[r1,#8]
  151.    ldr    r2,[r1,#12]
  152.    ldr    r3,[r1,#16]
  153.    mvn    r4,#1
  154.    cmp    r4,r2
  155.    beq    click_bar
  156.    adr    r5,mainhand
  157.    ldr    r4,[r5]
  158.    cmp    r4,r2
  159.    beq    click_wind
  160.    mov    pc,r14
  161.  
  162. .click_bar
  163.    cmp    r0,#4
  164.    beq    select_bar
  165.    cmp    r0,#2
  166.    ldr    r2,[r1]
  167.    beq    menu_bar
  168.    cmp    r0,#1
  169.    beq    select_bar
  170.    mov    pc,r14
  171.  
  172. .select_bar
  173.    adr    r2,mainhand
  174.    ldr    r3,[r2]
  175.    str    r3,[r1]
  176.    swi    Wimp_GetWindowState
  177.    mvn    r4,#0
  178.    str    r4,[r1,#28]
  179.    swi    Wimp_OpenWindow
  180.    mov    pc,r14
  181.  
  182. .menu_bar
  183.    adr    r1,menu_block
  184.    sub    r2,r2,#64
  185.    mov    r3,#186
  186.    swi    Wimp_CreateMenu
  187.    mov    pc,r14
  188.  
  189. .click_wind
  190.    cmp    r0,#4
  191.    moveq  r0,#1
  192.    cmp    r0,#1
  193.    movne  pc,r14
  194.  
  195. .a_select_wind
  196.    str    r2,[r1]
  197.    str    r3,[r1,#4]
  198.    mov    r4,#1<<21
  199.    str    r4,[r1,#8]
  200.    str    r4,[r1,#12]
  201.    swi    Wimp_SetIconState
  202.  
  203. .select_wind
  204.    sub    r3,r3,#1
  205.    adr    r2,dragtype
  206.    str    r3,[r2]
  207.    mov    pc,r14
  208.  
  209. .menu_sel
  210.    ldr    r0,[r1]
  211.    cmp    r0,#1
  212.    beq    closedown
  213.    swi    Wimp_GetPointerInfo
  214.    mov    r0,#1
  215.    ldr    r2,[r1,#8]
  216.    cmp    r0,r2
  217.    beq    menu_bar
  218.    mov    pc,r14
  219.  
  220. .message
  221.    ldr    r0,[r1,#16]
  222.    cmp    r0,#0
  223.    beq    closedown
  224.    cmp    r0,#10
  225.    movne  pc,r14
  226.  
  227. .desktop_save
  228.    adr    r0,ds_dir
  229.    add    r1,r1,#256
  230.    mov    r2,#256
  231.    mov    r3,#0
  232.    mov    r4,#3
  233.    swi    OS_ReadVarVal
  234.    mov    r0,#10
  235.    str    r0,[r1,r2]
  236.    ldr    r1,[r1,#-236]
  237.    mov    r0,#"R"
  238.    swi    OS_BPut
  239.    mov    r0,#"u"
  240.    swi    OS_BPut
  241.    mov    r0,#"n"
  242.    swi    OS_BPut
  243.    mov    r0,#" "
  244.    swi    OS_BPut
  245. .ds_loop
  246.    ldrb   r0,[r2]
  247.    cmp    r0,#10
  248.    swi    OS_BPut
  249.    moveq  pc,r14
  250.    add    r2,r2,#1
  251.    b      ds_loop
  252.  
  253. .ds_dir
  254.    dcb    "WinCtrl$Dir",0
  255.    align
  256.  
  257. .closedown
  258.    adr    r4,taskh
  259.    ldr    r0,[r4]
  260.    adr    r4,task
  261.    ldr    r1,[r4]
  262.    swi    Wimp_CloseDown
  263.    swi    OS_Exit
  264.  
  265. .menu_block
  266.    dcb    "WinCtrl",0,"    " ; 12 bytes
  267.    align
  268.    dcd    &00070207
  269.    dcd    128
  270.    dcd    44
  271.    dcd    0
  272.    dcd    0
  273. .subwindow
  274.    dcd    -1
  275.    dcd    &7000001
  276.    dcb    "Info",0,"    "
  277.    align
  278.    dcd    &80
  279.    dcd    -1
  280.    dcd    &7000001
  281.    dcb    "Quit",0,"    "
  282.    align
  283.  
  284. .sprite_area
  285.    dcd   368
  286.    incbin <tmp$path>.Sprites
  287.    align
  288.  
  289. .q%
  290.    dbb    512
  291.    align
  292.