home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff396.lha / colorcatch / ColorCatch.asm < prev    next >
Assembly Source File  |  1990-10-29  |  9KB  |  354 lines

  1.  
  2. ;       ColorCatch V1.0
  3. ;    by Preben Nielsen.
  4. ;    Assemble it as case-sensitive.
  5. ;    OPT O+
  6. ;    OPT O1+        ;Tells when a branch could be optimised to short
  7. ;    OPT i+        ;Tells when '#' is probably missing
  8.  
  9. NL        =0
  10.  
  11. CatchID        =0            ;Gadget ID's
  12. CreateID    =1
  13. StrID        =2
  14.  
  15.  
  16.     incdir    "INCLUDE:"
  17.     include "exec/exec_lib.i"
  18.     include "graphics/view.i"
  19.     include "graphics/graphics_lib.i"
  20.     include "intuition/intuition.i"
  21.     include "intuition/intuition_lib.i"
  22.     include "libraries/dos.i"
  23.     include "libraries/dosextens.i"
  24.     include "libraries/dos_lib.i"
  25.     include "workbench/workbench.i"
  26.     include "workbench/icon_lib.i"
  27.  
  28. LoadBase    MACRO
  29.         IFNC        '\1','ExecBase'
  30.         movea.l        \1(PC),A6
  31.         ENDC
  32.         IFC        '\1','ExecBase'
  33.         movea.l        4.W,A6
  34.         ENDC
  35.         ENDM
  36. CallLib        MACRO
  37.         jsr        _LVO\1(A6)
  38.         ENDM
  39. Call        MACRO
  40.         bsr        \1
  41.         ENDM
  42. Push        MACRO
  43.         movem.l        \1,-(SP)
  44.         ENDM
  45. Pop        MACRO
  46.         movem.l        (SP)+,\1
  47.         ENDM
  48. Gadget        MACRO
  49.         dc.l        \1
  50.         dc.w        \2,\3,\4,\5,\6,\7,\8
  51.         ENDM
  52. Gadget2        MACRO
  53.         dc.l        \1,\2,\3,\4,\5
  54.         dc.w        \6
  55.         dc.l        \7
  56.         ENDM
  57. Border        MACRO
  58.         dc.w        \1,\2
  59.         dc.b        \3,\4,\5,\6
  60.         dc.l        \7,\8
  61.         ENDM
  62. IntuiText    MACRO
  63.         dc.b        \1,\2,\3,0
  64.         dc.w        \4,\5
  65.         dc.l        TxtAttr1,\6,\7
  66.         ENDM
  67.  
  68.     SECTION COLORCATCH,CODE
  69. Init        Push        D0-D7/A0-A6
  70.         LoadBase    ExecBase
  71.         suba.l        A1,A1
  72.         CallLib        FindTask        ;Find us
  73.         movea.l        D0,A2
  74.         tst.l        pr_CLI(A2)
  75.         bne.S        CLIAndWBStartup
  76. WBenchStartup    lea        pr_MsgPort(A2),A0
  77.         CallLib        WaitPort        ;wait for a message
  78.         lea        pr_MsgPort(A2),A0
  79.         CallLib        GetMsg            ;then get it
  80.         move.l        D0,WBenchMsg        ;save it for later reply
  81. CLIAndWBStartup    lea        DosName(PC),A1
  82.         CallLib        OldOpenLibrary
  83.         move.l        D0,DosBase
  84.         beq.S        Exit
  85.         lea        IntName(PC),A1
  86.         CallLib        OldOpenLibrary
  87.         move.l        D0,IntBase
  88.         beq.S        Exit
  89.         LoadBase    IntBase
  90.         lea        NW(PC),A0
  91.         CallLib        OpenWindow
  92.         move.l        D0,PWindow
  93.         movea.l        D0,A0
  94.         beq.S        Exit
  95.         lea        WinTitle(PC),A1
  96.         lea        ScrTitle(PC),A2
  97.         CallLib        SetWindowTitles
  98.         bra.S        Main
  99. Exit
  100. FreeWindow    LoadBase    IntBase
  101.         move.l        PWindow(PC),D0
  102.         beq.S        FreeIntui
  103.         movea.l        D0,A0
  104.         CallLib        CloseWindow
  105. FreeIntui    LoadBase    ExecBase
  106.         move.l        IntBase(PC),D0
  107.         beq.S        FreeDos
  108.         movea.l        D0,A1
  109.         CallLib        CloseLibrary
  110. FreeDos        move.l        DosBase(PC),D0
  111.         beq.S        ReplyWB
  112.         movea.l        D0,A1
  113.         CallLib        CloseLibrary
  114. ReplyWB        move.l        WBenchMsg(PC),D0
  115.         beq.S        AllDone
  116.         CallLib        Forbid
  117.         movea.l        D0,A1
  118.         CallLib        ReplyMsg        ;Reply WBenchMessage if we are started from WB
  119. AllDone        Pop        D0-D7/A0-A6
  120.         moveq        #0,D0
  121.         rts
  122.  
  123. Main        bra        DoCatch
  124. EventLoop    LoadBase    IntBase
  125.         lea        StrGad(PC),A0
  126.         movea.l        PWindow(PC),A1
  127.         suba.l        A2,A2
  128.         CallLib        ActivateGadget        ;Activate String-Gadget
  129. GetNextMsg    LoadBase    ExecBase
  130.         movea.l        PWindow(PC),A0
  131.         movea.l        wd_UserPort(A0),A0
  132.         CallLib        WaitPort
  133.         movea.l        PWindow(PC),A0
  134.         movea.l        wd_UserPort(A0),A0
  135.         CallLib        GetMsg
  136.         tst.l        D0
  137.         beq.S        GetNextMsg
  138. GotAMessage    movea.l        D0,A1
  139.         move.l        im_Class(A1),D7
  140.         move.l        im_IAddress(A1),D6
  141.         CallLib        ReplyMsg
  142. DecodeMessage    cmpi.l        #CLOSEWINDOW,D7
  143.         beq        Exit
  144.         cmpi.w        #GADGETUP,D7
  145.         bne.S        EventLoop
  146.  
  147. DoGadget    movea.l        D6,A1
  148.         move.w        gg_GadgetID(A1),D0
  149.         beq.S        DoCatch
  150.         subq.w        #1,D0
  151.         beq        DoChange
  152.  
  153. ;The user pressed return while the string-gadget was active
  154. ;so we now create an executable file containing the colors
  155. ;and maybe an icon
  156. DoSaveAs    lea        CharBuf(PC),A0
  157.         LoadBase    DosBase
  158.         move.l        A0,D1
  159.         move.l        #MODE_NEWFILE,D2
  160.         CallLib        Open
  161.         move.l        D0,D7
  162.         beq.S        DoneSave
  163.         move.l        D7,D1
  164.         lea        ColorExe(PC),A0
  165.         move.l        A0,D2
  166.         move.l        #EndColorExe-ColorExe,D3
  167.         CallLib        Write
  168.         move.l        D7,D1
  169.         CallLib        Close
  170.         move.l        ITxtCreate+12(PC),D0
  171.         lea        TxtCreate1(PC),A1
  172.         cmp.l        A1,D0
  173.         bne.S        DoneSave
  174.         LoadBase    ExecBase        ;Save Icon
  175.         lea        IconName(PC),A1
  176.         CallLib        OldOpenLibrary
  177.         move.l        D0,D7
  178.         beq.S        DoneSave
  179.         lea        CharBuf(PC),A0
  180.         lea        MyDiskObject(PC),A1
  181.         move.l        D7,A6
  182.         CallLib        PutIcon
  183.         LoadBase    ExecBase
  184.         move.l        D7,A1
  185.         CallLib        CloseLibrary
  186. DoneSave    bra        EventLoop
  187.  
  188. ;The user clicked the 'Catch colors' gadget
  189. DoCatch        LoadBase    IntBase
  190.         move.l        ib_FirstScreen(A6),A0    ;IntuitionBase->FirstScreen
  191.         move.l        sc_ViewPort+vp_ColorMap(A0),A0    ;Screen.ViewPort->ColorMap
  192.         move.w        cm_Count(A0),D0        ;ColorMap.Count
  193.         move.w        D0,Count
  194.         move.l        cm_ColorTable(A0),A0    ;ColorMap->ColorTable
  195.         subq.w        #1,D0
  196.         lea        ColorTab(PC),A1
  197. CopyColor    move.w        (A0)+,(A1)+
  198.         dbf        D0,CopyColor
  199.         bra        EventLoop
  200.  
  201. ;The user clicked the 'Save WITH(OUT) Icon' gadget
  202. DoChange    lea        ITxtCreate+it_IText(PC),A0
  203.         lea        TxtCreate1(PC),A1
  204.         lea        TxtCreate2(PC),A2
  205.         move.l        (A0),D0
  206.         cmp.l        A2,D0
  207.         beq.S        Change
  208.         move.l        A2,A1
  209. Change        move.l        A1,(A0)
  210.         moveq        #1,D0
  211.         lea        CreateGad(PC),A0
  212.         movea.l        PWindow(PC),A1
  213.         suba.l        A2,A2
  214.         LoadBase    IntBase
  215.         CallLib        RefreshGList
  216.         bra        EventLoop
  217.  
  218. ; Write everything between ColorExe and EndColorExe to disk
  219. ; (It will be an executable file)
  220. ColorExe    dc.l    $000003F3,$00000000,$00000001,$00000000
  221.         dc.l    $00000000,$00000043,$000003E9,$00000043
  222.         dc.l    $48E7FFFE,$2C780004,$93C94EAE,$FEDA2440
  223.         dc.l    $4AAA00AC,$661641EA,$005C4EAE,$FE8041EA
  224.         dc.l    $005C4EAE,$FE8C23C0,$00000108,$43FA006C
  225.         dc.l    $4EAEFE68,$23C00000,$0100672A,$43FA006D
  226.         dc.l    $4EAEFE68,$23C00000,$0104671A,$20402068
  227.         dc.l    $003C41E8,$002C303A,$006643FA,$00642C7A
  228.         dc.l    $00A04EAE,$FF402C78,$0004203A,$00986706
  229.         dc.l    $22404EAE,$FE62203A,$00886706,$22404EAE
  230.         dc.l    $FE62203A,$0084670A,$4EAEFF7C,$22404EAE
  231.         dc.l    $FE864CDF,$7FFF7000,$4E756772,$61706869
  232.         dc.l    $63732E6C,$69627261,$72790069,$6E747569
  233.         dc.l    $74696F6E,$2E6C6962,$72617279
  234.         dc.w    0
  235. Count        dc.w    0            ;Number of colors in ColorTab
  236. ColorTab    dcb.w    32,0            ;Array of colors
  237.         dc.l    $00000000,$00000000,$00000000,$000003EC
  238.         dc.l    $00000003,$00000000,$00000028,$00000036
  239.         dc.l    $00000046,$00000000,$000003F2
  240. EndColorExe
  241.  
  242. DosName        dc.b        'dos.library',0
  243. IntName        dc.b        'intuition.library',0
  244. IconName    dc.b        'icon.library',0
  245.  
  246.         EVEN
  247. DosBase        dc.l        0
  248. IntBase        dc.l        0
  249. WBenchMsg    dc.l        0
  250. PWindow        dc.l        0
  251.  
  252. ;--- Window and gadgets
  253. NW        dc.w        180,15,303,62
  254.         dc.b        0,1
  255.         dc.l        GADGETUP!CLOSEWINDOW,WINDOWCLOSE!WINDOWDRAG!WINDOWDEPTH!ACTIVATE!RMBTRAP!NOCAREREFRESH,GadgetList,0,0,0,0
  256.         dc.w        0,0,0,0,WBENCHSCREEN
  257.  
  258. BWIDTH        =282
  259. BHEIGHT        =11
  260. BBorder        Border        -2,-1,3,0,1,9,BVectors,NL
  261. BVectors    dc.w        2,0,BWIDTH+1,0,BWIDTH+3,2,BWIDTH+3,BHEIGHT-1,BWIDTH+1,BHEIGHT+1,2,BHEIGHT+1,0,BHEIGHT-1,0,2,2,0
  262. STRWIDTH    =219
  263. STRHEIGHT    =10
  264. StrBorder    Border        -3,-3,3,0,1,9,StrBVectors,NL
  265. StrBVectors    dc.w        2,0,STRWIDTH,0,STRWIDTH+2,2,STRWIDTH+2,STRHEIGHT,STRWIDTH,STRHEIGHT+2,2,STRHEIGHT+2,0,STRHEIGHT,0,2,2,0
  266.  
  267. GadgetList
  268. CatchGad    Gadget        StrGad,10,15,BWIDTH,BHEIGHT,GADGHCOMP,RELVERIFY,BOOLGADGET
  269.         Gadget2        BBorder,NL,ITxtCatch,NL,NL,CatchID,NL
  270. StrGad        Gadget        CreateGad,75,32,STRWIDTH,STRHEIGHT,GADGHCOMP,RELVERIFY,STRGADGET
  271.         Gadget2        StrBorder,NL,ITxtSaveAs,NL,StrInfo,StrID,NL
  272. CreateGad    Gadget        NL,10,45,BWIDTH,BHEIGHT,GADGHCOMP,RELVERIFY,BOOLGADGET
  273.         Gadget2        BBorder,NL,ITxtCreate,NL,NL,CreateID,NL
  274.  
  275. StrInfo        dc.l        CharBuf,NL
  276.         dc.w        NL,60,NL,NL,NL,NL,NL,NL
  277.         dc.l        NL,NL,NL
  278.  
  279. CharBuf        dcb.b        60,0
  280.         EVEN
  281.  
  282. ITxtCatch    IntuiText    1,0,1,4,2,TxtCatch,NL
  283. ITxtSaveAs    IntuiText    1,0,1,-65,0,TxtSaveAs,NL
  284. ITxtCreate    IntuiText    1,0,1,74,2,TxtCreate1,NL
  285.  
  286. TxtCatch    dc.b        'Catch colors from frontmost screen',0
  287. TxtSaveAs    dc.b        'Save as',0
  288. TxtCreate1    dc.b        '  Save WITH Icon ',0
  289. TxtCreate2    dc.b        'Save WITHOUT Icon',0
  290.  
  291. ScrTitle    dc.b        'ColorCatch V1.0 by Preben Nielsen in 1990. This is Public Domain',0
  292. WinTitle    dc.b        'ColorCatch V1.0',0
  293.  
  294. FontName    dc.b        'topaz.font',0
  295.         EVEN
  296.  
  297. TxtAttr1    dc.l        FontName
  298.         dc.w        TOPAZ_EIGHTY
  299.         dc.b        FS_NORMAL,FPB_ROMFONT
  300.         EVEN
  301.  
  302. ; The rest is  for the icon
  303. MyDiskObject    dc.w        WB_DISKMAGIC,WB_DISKVERSION
  304.         dc.l        0
  305.         dc.w        0,0,60,10
  306.         dc.w        GADGIMAGE!GADGHIMAGE,RELVERIFY!GADGIMMEDIATE,BOOLGADGET
  307.         dc.l        Image1,Image2,0,0,0
  308.         dc.w        0
  309.         dc.l        0
  310.         dc.b        WBTOOL,0    
  311.         dc.l        0,0,100,40,0,0,0
  312.  
  313. Image1        dc.w        0,0        ; LeftEdge, TopEdge
  314.         dc.w        60,10        ; Width, Height
  315.         dc.w        2        ; Depth
  316.         dc.l        ImageData1    ; ImageData
  317.         dc.b        3,0        ; PlanePick, PlaneOnOff
  318.         dc.l        0        ; Next Image
  319.  
  320. Image2        dc.w        0,0        ; LeftEdge, TopEdge
  321.         dc.w        60,10        ; Width, Height
  322.         dc.w        2        ; Depth
  323.         dc.l        ImageData2    ; ImageData
  324.         dc.b        3,0        ; PlanePick, PlaneOnOff
  325.         dc.l        0        ; Next Image
  326.  
  327. ImageData1    dc.w    $7fe0,$0fe0,$0000,$0000,$e070,$0c60,$0000 ;Plane 0
  328.         dc.w    $0000,$c73f,$fc6f,$ffff,$ffe0,$c7ff,$fc7f
  329.         dc.w    $fe03,$ffe0,$c63f,$fc7f,$fe39,$ffe0,$c7ff
  330.         dc.w    $fc7f,$fe3f,$ffe0,$c73f,$fc7f,$fe31,$ffe0
  331.         dc.w    $e07f,$fe1f,$fe31,$ffe0,$7fff,$ffff,$fff1
  332.         dc.w    $ffc0,$0000,$0000,$0000,$0000
  333.         dc.w    $0000,$0000,$0000,$0000,$1f80,$0380,$0000 ;Plane 1
  334.         dc.w    $0000,$38c0,$0380,$0000,$0000,$3807,$e383
  335.         dc.w    $f1fc,$3f80,$380e,$3387,$19c6,$7000,$380e
  336.         dc.w    $3387,$19c0,$3f00,$38ce,$3387,$19c0,$0380
  337.         dc.w    $1f87,$e1e3,$f1c0,$7f00,$0000,$0000,$0000
  338.         dc.w    $0000,$0000,$0000,$0000,$0000
  339.  
  340. ImageData2    dc.w    $7fe0,$0fe0,$0000,$0000,$fff0,$0fe0,$0000 ;Plane 0
  341.         dc.w    $0000,$ffff,$ffef,$ffff,$ffe0,$fff8,$1ffc
  342.         dc.w    $0fff,$c060,$fe31,$cff8,$e7ff,$8fe0,$fff1
  343.         dc.w    $cff8,$e7ff,$c0e0,$fff1,$cff8,$e7f1,$fc60
  344.         dc.w    $fff8,$1ffc,$0ff1,$80e0,$7fff,$ffff,$fff1
  345.         dc.w    $ffc0,$0000,$0000,$0000,$0000
  346.         dc.w    $0000,$0000,$0000,$0000,$1f80,$0380,$0000 ;Plane 1
  347.         dc.w    $0000,$38c0,$0380,$0000,$0000,$3807,$e383
  348.         dc.w    $f1fc,$3f80,$380e,$3387,$19c6,$7000,$380e
  349.         dc.w    $3387,$19c0,$3f00,$38ce,$3387,$19c0,$0380
  350.         dc.w    $1f87,$e1e3,$f1c0,$7f00,$0000,$0000,$0000
  351.         dc.w    $0000,$0000,$0000,$0000,$0000
  352.         END
  353.  
  354.