home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0678.ZIP / CCE_0678.PD / E_GEM135 / SOURCE / RC_OB.S < prev    next >
Text File  |  1993-11-22  |  6KB  |  427 lines

  1.  
  2.     globl ob_dostate,ob_undostate,ob_isstate
  3.     globl ob_doflag,ob_undoflag,ob_isflag
  4.     globl ob_xywh
  5.     globl ob_get_text,ob_set_text
  6.     globl ob_draw_dialog,ob_undraw_dialog
  7.  
  8.     globl rc_equal,rc_copy,rc_intersect,rc_inside,rc_grect_to_array,rc_array_to_grect
  9.     globl _center,_typetest,_dial
  10.  
  11.     globl form_center,form_dial
  12.     globl objc_draw
  13.  
  14.     globl vq_gdos
  15.  
  16. G_TEXT        = 21
  17. G_BOXTEXT    = 22
  18. G_USERDEF    = 24
  19. G_BUTTON    = 26
  20. G_STRING    = 28
  21. G_FTEXT     = 29
  22. G_FBOXTEXT    = 30
  23. G_TITLE     = 32
  24.  
  25. ATTR_TEXT    = 13
  26.  
  27. g_x         = 0
  28. g_y         = 2
  29. g_w         = 4
  30. g_h         = 6
  31.  
  32. xmin1        = -16
  33. ymin1        = -14
  34. xmin2        = -12
  35. ymin2        = -10
  36. xmax1        = -8
  37. ymax1        = -6
  38. xmax2        = -4
  39. ymax2        = -2
  40.  
  41.             TEXT
  42.  
  43. MODULE vq_gdos
  44.             pea        (a2)
  45.             moveq.l    #-2,d0
  46.             trap    #2
  47.             addq.l    #2,d0
  48.             move.l    (sp)+,a2
  49.             rts
  50. ENDMOD
  51.  
  52. MODULE ob_dostate
  53.             mulu.w    #24,d0
  54.             or.w    d1,10(a0,d0.l)
  55.             rts
  56. ENDMOD
  57.  
  58. MODULE ob_undostate
  59.             not.w    d1
  60.             mulu.w    #24,d0
  61.             and.w    d1,10(a0,d0.l)
  62.             rts
  63. ENDMOD
  64.  
  65. MODULE ob_isstate
  66.             mulu.w    #24,d0
  67.             and.w    10(a0,d0.l),d1
  68.             bne.b    flag_set
  69.  
  70.             moveq.l #0,d0
  71.             rts
  72.  
  73. flag_set:    moveq.l #1,d0
  74.             rts
  75. ENDMOD
  76.  
  77. MODULE ob_doflag
  78.             mulu.w    #24,d0
  79.             or.w    d1,8(a0,d0.l)
  80.             rts
  81. ENDMOD
  82.  
  83. MODULE ob_undoflag
  84.             not.w    d1
  85.             mulu.w    #24,d0
  86.             and.w    d1,8(a0,d0.l)
  87.             rts
  88. ENDMOD
  89.  
  90. MODULE ob_isflag
  91.             mulu.w    #24,d0
  92.             and.w    8(a0,d0.l),d1
  93.             bne.b    state_set
  94.  
  95.             moveq.l #0,d0
  96.             rts
  97.  
  98. state_set:    moveq.l #1,d0
  99.             rts
  100. ENDMOD
  101.  
  102. MODULE ob_xywh
  103.             mulu.w    #24,d0
  104.             move.l    16(a0,d0.l),(a1)+
  105.             move.l    20(a0,d0.l),(a1)
  106.             rts
  107. ENDMOD
  108.  
  109. MODULE ob_get_text
  110.             jsr     _typetest
  111.  
  112.             move.l    (a0),a0
  113.             tst.w    d1
  114.             beq.b    no_init
  115.  
  116.             clr.b    (a0)
  117. no_init:    rts
  118. ENDMOD
  119.  
  120. MODULE ob_set_text
  121.             jsr     _typetest
  122.             move.l    a1,(a0)
  123.             rts
  124. ENDMOD
  125.  
  126. MODULE _typetest
  127.             mulu.w    #24,d0
  128.             add.l    d0,a0
  129.             move.w    6(a0),d2
  130.  
  131.             cmp.b    #G_TEXT,d2
  132.             beq.b    text
  133.             cmp.b    #G_FTEXT,d2
  134.             beq.b    text
  135.             cmp.b    #G_BOXTEXT,d2
  136.             beq.b    text
  137.             cmp.b    #G_FBOXTEXT,d2
  138.             beq.b    text
  139.  
  140.             cmp.b    #G_STRING,d2
  141.             beq.b    string
  142.             cmp.b    #G_BUTTON,d2
  143.             beq.b    string
  144.             cmp.b    #G_TITLE,d2
  145.             beq.b    string
  146.  
  147.             and.w    #$7fff,d2    ; ~G_MODAL
  148.             cmp.w    #(ATTR_TEXT<<8)|G_USERDEF,d2
  149.             beq.b    userdef
  150.  
  151.             sub.l    a0,a0
  152.             addq.l    #4,sp
  153.             rts
  154.  
  155. text:        move.l    12(a0),a0
  156.             rts
  157.  
  158. string:     lea.l    12(a0),a0
  159.             rts
  160.  
  161. userdef:    move.l    12(a0),a0
  162.             move.l    4(a0),a0
  163.             rts
  164. ENDMOD
  165.  
  166.  
  167. MODULE ob_draw_dialog
  168.             link    a6,#-16
  169.             jsr     _center
  170.             clr.w    -2(a6)
  171.             bsr     _dial
  172.             move.w    -4(a6),d0
  173.             or.w    -6(a6),d0
  174.             or.w    -8(a6),d0
  175.             or.w    8(a6),d0
  176.             beq.b    no_grow
  177.  
  178.             move.w    #1,-2(a6)
  179.             jsr     _dial
  180.  
  181. no_grow:    lea.l    -16(a6),a1
  182.             move.l    (a1)+,-(sp)
  183.             move.w    (a1)+,-(sp)
  184.             move.w    (a1),d2
  185.             moveq.l #127,d1
  186.             moveq.l #0,d0
  187.             jsr     objc_draw
  188.             addq.l    #6,sp
  189.             unlk    a6
  190.             rts
  191. ENDMOD
  192.  
  193. MODULE ob_undraw_dialog
  194.             link    a6,#-16
  195.             jsr     _center
  196.             move.w    -4(a6),d0
  197.             or.w    -6(a6),d0
  198.             or.w    -8(a6),d0
  199.             or.w    8(a6),d0
  200.             beq.b    no_shrink
  201.  
  202.             move.w    #2,-2(a6)
  203.             jsr     _dial
  204.  
  205. no_shrink:    move.w    #3,-2(a6)
  206.             jsr     _dial
  207.             unlk    a6
  208.             rts
  209. ENDMOD
  210.  
  211. MODULE _center
  212.             move.w    d2,-8(a6)
  213.             move.w    d1,-6(a6)
  214.             move.w    d0,-4(a6)
  215.             pea     (a0)
  216.             lea.l    -10(a6),a1
  217.             pea     -16(a6)
  218.             pea     -14(a6)
  219.             pea     -12(a6)
  220.             jsr     form_center
  221.             lea.l    12(sp),sp
  222.             move.l    (sp)+,a0
  223.             rts
  224. ENDMOD
  225.  
  226. MODULE _dial
  227.             pea     (a0)
  228.             lea.l    -16(a6),a1
  229.             move.l    (a1)+,-(sp)
  230.             move.l    (a1),-(sp)
  231.             move.w    8(a6),-(sp)
  232.             move.w    -8(a6),-(sp)
  233.             move.w    -6(a6),d2
  234.             move.w    -4(a6),d1
  235.             move.w    -2(a6),d0
  236.             jsr     form_dial
  237.             lea.l    12(sp),sp
  238.             move.l    (sp)+,a0
  239.             rts
  240. ENDMOD
  241.  
  242. MODULE rc_equal
  243.             cmpm.l    (a0)+,(a1)+
  244.             bne.b    notequal
  245.  
  246.             cmpm.l    (a0)+,(a1)+
  247.             beq     equal
  248.  
  249. notequal:    moveq.l #0,d0
  250.             rts
  251.  
  252. equal:        moveq.l #1,d0
  253.             rts
  254. ENDMOD
  255.  
  256. MODULE rc_copy
  257.             move.l    (a0)+,(a1)+
  258.             move.l    (a0),(a1)
  259.             moveq.l    #0,d0
  260.             rts
  261. ENDMOD
  262.  
  263. MODULE rc_intersect
  264.             link    a6,#-16
  265.             move.w    g_y(a0),d0
  266.             cmp.w    g_y(a1),d0
  267.             bcc.b    skip
  268.             
  269.             move.l    g_x(a0),xmin1(a6)
  270.             
  271.             move.w    g_x(a0),d0
  272.             add.w    g_w(a0),d0
  273.             move.w    d0,xmax1(a6)
  274.             
  275.             move.w    g_y(a0),d0
  276.             add.w    g_h(a0),d0
  277.             move.w    d0,ymax1(a6)
  278.             
  279.             move.l    g_x(a1),xmin2(a6)
  280.  
  281.             move.w    g_x(a1),d0
  282.             add.w    g_w(a1),d0
  283.             move.w    d0,xmax2(a6)
  284.  
  285.             move.w    g_y(a1),d0
  286.             add.w    g_h(a1),d0
  287.             move.w    d0,ymax2(a6)
  288.             bra.b    skp
  289.  
  290. skip:        move.l    g_x(a0),xmin2(a6)
  291.  
  292.             move.w    g_x(a0),d0
  293.             add.w    g_w(a0),d0
  294.             move.w    d0,xmax2(a6)
  295.  
  296.             move.w    g_y(a0),d0
  297.             add.w    g_h(a0),d0
  298.             move.w    d0,ymax2(a6)
  299.  
  300.             move.l    g_x(a1),xmin1(a6)
  301.  
  302.             move.w    g_x(a1),d0
  303.             add.w    g_w(a1),d0
  304.             move.w    d0,xmax1(a6)
  305.  
  306.             move.w    g_y(a1),d0
  307.             add.w    g_h(a1),d0
  308.             move.w    d0,ymax1(a6)
  309.  
  310. skp:        move.w    ymin2(a6),d0
  311.             cmp.w    ymax1(a6),d0
  312.             bcc.b    ret
  313.  
  314.             move.w    xmin1(a6),d0
  315.             cmp.w    xmax2(a6),d0
  316.             bcc.b    ret
  317.  
  318.             move.w    xmin2(a6),d0
  319.             cmp.w    xmax1(a6),d0
  320.             bcc.b    ret
  321.  
  322.             move.w    xmin1(a6),d0
  323.             move.w    xmin2(a6),d1
  324.             cmp.w    d1,d0
  325.             bcc.b    (*)+4
  326.  
  327.             move.w    d1,d0
  328.             move.w    d0,g_x(a1)
  329.             
  330.             move.w    ymin1(a6),d0
  331.             move.w    ymin2(a6),d1
  332.             cmp.w    d1,d0
  333.             bcc.b    (*)+4
  334.             
  335.             move.w    d1,d0
  336.             move.w    d0,g_y(a1)
  337.             
  338.             move.w    xmax1(a6),d0
  339.             move.w    xmax2(a6),d1
  340.             cmp.w    d1,d0
  341.             bcs.b    (*)+4
  342.             
  343.             move.w    d1,d0
  344.             move.w    d0,g_w(a1)
  345.             
  346.             move.w    ymax1(a6),d0
  347.             move.w    ymax2(a6),d1
  348.             cmp.w    d1,d0
  349.             bcs.b    (*)+4
  350.  
  351.             move.w    d1,d0
  352.             move.w    d0,g_h(a1)
  353.  
  354.             move.w    g_x(a1),d0
  355.             sub.w    d0,g_w(a1)
  356.             move.w    g_y(a1),d0
  357.             sub.w    d0,g_h(a1)
  358.             
  359.             moveq.l    #1,d0
  360.             unlk    a6
  361.             rts
  362.  
  363. ret:        moveq.l    #0,d0
  364.             unlk    a6
  365.             rts
  366. ENDMOD
  367.  
  368. MODULE rc_inside
  369.             move.w    (a0)+,d2
  370.             cmp.w    d2,d0
  371.             bcs.b    outside
  372.  
  373.             add.w    2(a0),d2
  374.             cmp.w    d2,d0
  375.             bcc.b    outside
  376.  
  377.             move.w    (a0)+,d2
  378.             cmp.w    d2,d1
  379.             bcs.b    outside
  380.  
  381.             add.w    2(a0),d2
  382.             cmp.w    d2,d1
  383.             bcc.b    outside
  384.  
  385.             moveq.l #1,d0
  386.             rts
  387.  
  388. outside:    moveq.l #0,d0
  389.             rts
  390. ENDMOD
  391.  
  392. MODULE rc_grect_to_array
  393.             move.l    (a0)+,d0
  394.             move.l    d0,(a1)+
  395.  
  396.             swap    d0
  397.             add.w    (a0)+,d0
  398.             subq.w    #1,d0
  399.             move.w    d0,(a1)+
  400.  
  401.             swap    d0
  402.             add.w    (a0),d0
  403.             subq.w    #1,d0
  404.             move.w    d0,(a1)
  405.  
  406.             rts
  407. ENDMOD
  408.  
  409. MODULE rc_array_to_grect
  410.             move.l    (a0)+,d0
  411.             move.l    d0,(a1)+
  412.  
  413.             swap    d0
  414.             sub.w    (a0)+,d0
  415.             neg.w    d0
  416.             addq.w    #1,d0
  417.             move.w    d0,(a1)+
  418.  
  419.             swap    d0
  420.             sub.w    (a0),d0
  421.             neg.w    d0
  422.             addq.w    #1,d0
  423.             move.w    d0,(a1)
  424.  
  425.             rts
  426. ENDMOD
  427.