home *** CD-ROM | disk | FTP | other *** search
- ;====Uncomment these directives for MANX asm only!! Advice: Buy a good asm.
- ; far code ;so that we can use register a4, and no limit on program size.
- ; far data
-
- SMALLOBJ ;CAPE PC directive. Comment out if not using CAPE
- OBJFILE "rad:CustomList.o"
-
- ; This program opens and utilizes the requester.library in order to use
- ; the new SPECIAL_REQ flag. This flag allows us to display a list of
- ; strings in a requester with all the features of the FileIO requester.
- ; Because version 0 of the library did not support this feature, but version
- ; 1.4 now does, we must open the library with version #1. Old applications
- ; that do not know about SPECIAL_REQ will still work with this version of
- ; the library. It is backward compatible as far as the disk IO features are
- ; concerned.
-
- ; If running this program from the CLI and you specify any argument on the
- ; command (i.e. 1> TestFileIO blort ), then the window will open on a hires
- ; screen. You can then see what the requester looks like in hires.
-
- ; For Manx, ln -o TestFileIO ManxStartUp.o main.o cl32.lib
- ;
- ; For Others, Blink StartUp.o main.o amiga.lib NODEBUG to TestFileIO
-
- INCLUDE "rad:FileIO.i"
-
- ;======Amiga Library routines======
- XREF _LVOCloseLibrary,_LVOCloseScreen,_LVOCloseWindow,_LVOSetMenuStrip
- XREF _LVOOpenWindow,_LVOOpenScreen,_LVOOpenLibrary
- XREF _LVOGetMsg,_LVOReplyMsg,_LVOWait,_LVOMove,_LVOText
- XREF _LVOSetAPen,_LVOSetBPen,_LVOSetDrMd
-
- ;======From the startup code======
- XREF _SysBase,_DOSBase
-
- LIB_VERSION equ 33
-
- SECTION FileIOTestCode,CODE
-
- XDEF _main
- _main:
- movem.l d2-d7/a2-a6,-(sp)
- movea.l _SysBase,a6
- ;======Open The Intuition Library=======
- moveq #LIB_VERSION,d0
- lea IntuitionName,a1
- jsr _LVOOpenLibrary(a6)
- lea _IntuitionBase,a4
- move.l d0,(a4)+
- beq C7
- ;======Open The Graphics Library========
- moveq #LIB_VERSION,d0
- lea GfxName,a1
- jsr _LVOOpenLibrary(a6)
- move.l d0,(a4)+
- beq C6
- ;*******Open the "Brand New, Improved, Exciting" Requester library*********
- moveq #1,d0 ;version #1 please
- lea RequesterName,a1
- jsr _LVOOpenLibrary(a6)
- move.l d0,(a4)+
- beq C5
- ;=====If started from WBench, then don't open a CUSTOM screen
- movea.l _IntuitionBase,a6
- move.l 52(sp),d0
- beq.s .9
- ;=====If opened from CLI with any argument, then open CUSTOM screen
- subq.l #2,48(sp)
- bcs.s .9
- lea newScreen,a0
- jsr _LVOOpenScreen(a6)
- lea newWindow,a0
- ;-----Window's Screen = ScreenPtr
- move.l d0,30(a0)
- beq.s .9A ;If an error, forget the screen!
- ;-----Window's Type = CUSTOMSCREEN
- move.w #15,46(a0)
- ;=========Open the FileIO window==========
- .9 lea newWindow,a0
- .9A jsr _LVOOpenWindow(a6)
- move.l d0,(a4)+
- beq C2
- movea.l d0,a3
- ;---Get Window's RastPort
- move.l 50(a3),(a4)
- ;---Get a FileIO structure
- E1 movea.l _RequesterBase,a6
- jsr _LVOGetFileIO(a6)
- movea.l d0,a4
- move.l d0,d1
- beq IOe ;If NULL, then error, so exit this test program.
- ;---Set Colors and DrawMode
- moveq #1,d0
- move.b d0,FILEIO_DRAWMODE(a4)
- movea.l RastPort,a2
- movea.l a2,a1
- movea.l _GfxBase,a6
- jsr _LVOSetDrMd(a6)
- moveq #2,d0
- move.b d0,FILEIO_PENA(a4)
- movea.l a2,a1
- jsr _LVOSetAPen(a6)
- moveq #0,d0
- move.b d0,FILEIO_PENB(a4)
- movea.l a2,a1
- jsr _LVOSetBPen(a6)
- ;====VERY IMPORTANT: Indicate that we want a SPECIAL_REQ==========
- bset.b #7,(a4) ;set the SPECIAL_REQ bit of Flags
- ;====Set up the XY co-ordinates of where the requester will open====
- moveq #6,d0
- move.w d0,FILEIO_X(a4) ;x position
- moveq #11,d0
- move.w d0,FILEIO_Y(a4) ;y position
- ;===========SET UP OUR LIST OF STRINGS==========
- ;NOTE: Since our list is initially empty, we don't have to call NewEntryList
- ;first, but we will anyway to develop good habits.
- movea.l _RequesterBase,a6
- movea.l a4,a1
- jsr _LVONewEntryList(a6)
- lea StringAddr,a2
- moveq #10-1,d7 ;make a list of 10 strings
- nxtEN:
- move.l d7,d1
- addq.w #1,d1 ;ID = loopcount+1 (i.e. 1 to 10)
- movea.l a4,a1
- movea.l (a2)+,a0
- jsr _LVOAddEntry(a6)
- dbra d7,nxtEN(pc)
- ;---Set up our routine, Information(), as the custom FileIO gadget routine
- ; We don't have to set up these 2 fields, we could leave them 0 in which
- ; case the custom gadget is ignored.
- lea About,a0
- move.l a0,FILEIO_TEXT(a4)
- lea Information,a0
- move.l a0,FILEIO_ROUTINE(a4)
- ;====Create a mask of the Window's UserPort's mp_Sigbit=====
- E3 movea.l 86(a3),a0
- move.b 15(a0),d0
- moveq #0,d7
- Bset.l d0,d7
- ;=====Get the message that arrived at our UserPort====
- E4 movea.l 86(a3),a0
- movea.l _SysBase,a6
- jsr _LVOGetMsg(a6)
- move.l d0,d1
- bne.s E7
- ;===Check if we are ready to exit the program=====
- E5 Btst.b #0,Quit
- beq E15
- ;----Print out "Click Mouse to start demo....
- movea.l RastPort,a2
- moveq #5,d0
- moveq #75,d1
- movea.l a2,a1 ;our window's RastPort
- move.l a6,-(sp) ;save _SysBase
- movea.l _GfxBase,a6
- jsr _LVOMove(a6)
- moveq #36,d0 ;# of bytes to output.
- lea Click,a0
- movea.l a2,a1
- jsr _LVOText(a6)
- movea.l (sp)+,a6 ;restore _SysBase
- ;===Wait for a message sent to our Window (from Intuition)===
- E6 move.l d7,d0
- jsr _LVOWait(a6)
- bra.s E4
- ;====Copy all the info we want from the IntuiMessage====
- E7 movea.l d0,a1
- lea 20(a1),a0 ;get the address of the first field to copy.
- move.l (a0)+,d6 ;Copy the Class field to d6
- move.w (a0)+,d5 ;Copy the Code field to d5
- move.w (a0)+,d4 ;Copy the qualifier field to d4
- movea.l (a0)+,a2 ;Copy the IAddress field to a2
- move.w (a0)+,d3 ;Copy MouseX position to d3
- move.w (a0)+,d2 ;Copy MouseY position to d2
- ;====Now reply to the message so Intuition can dispose of it
- E8 ;Address of the message is in a1.
- jsr _LVOReplyMsg(a6)
- ;========switch (class)=========
- Bclr.l #9,d6 ;CLOSEWINDOW
- bne.s CW
- Bclr.l #3,d6 ;MOUSEBUTTONS
- beq E4
- ;---Make sure that it's an UP select if MOUSEBUTTONS
- subi.b #$68,d5
- beq E4 ;ignore down
- ;===The FOLLOWING ROUTINE IS OUR TEST CALL. WHEN THE USER IS DONE (in FileIO lib)
- ;===HE WILL SELECT EITHER THE CANCEL OR OK! GADGET. IF CANCEL, TestFileIO
- ;===DOES NOTHING. IF OK!, TestFileIO JUSTS PRINTS THE SELECTED STRING.
- E2 bsr TestFileIO
- bra E4
- ;=========case CLOSEWINDOW:============
- CW Bclr.b #0,Quit
- bra E4
- ;======if an error, indicate NO_MEMORY. This is a FileIO routine
- ;======and is callable even if GetFileIO() fails
- IOe movea.l a3,a0
- moveq #0,d0
- movea.l _RequesterBase,a6
- jsr _LVOAutoFileMessage(a6)
- ;========NOW BEGINS OUR EXIT ROUTINE=========
- ;ReleaseFileIO will free our list of strings
- E15 movea.l a4,a1 ;If the pointer to FileIO was NULL, then
- movea.l _RequesterBase,a6 ;ReleaseFileIO just returns, so it's safe to
- jsr _LVOReleaseFileIO(a6) ;always release any return value of GetFileIO.
- ;=====Close the Window and Screen======
- C1 movea.l _IntuitionBase,a6
- movea.l a3,a0
- jsr _LVOCloseWindow(a6)
- C2 move.l ScreenPtr,d0
- beq.s C3 ;check if we specified a screen
- movea.l d0,a0
- ; _IntuitionBase in a6
- jsr _LVOCloseScreen(a6)
- ;=====Close Whichever Libs are Open (_SysBase in a6 for ALL calls)=====
- C3 movea.l _SysBase,a6
- movea.l _RequesterBase,a1
- jsr _LVOCloseLibrary(a6)
- C5 movea.l _GfxBase,a1
- jsr _LVOCloseLibrary(a6)
- C6 movea.l _IntuitionBase,a1
- jsr _LVOCloseLibrary(a6)
- C7 movem.l (sp)+,d2-d7/a2-a6
- rts
-
- ;*******************************************
- ; This just calls the DoFileIO library routine and displays a msg on return.
- ; (GetFileIO must have been called with success first).
- ; The DoFileIO routine returns -1 if the user selected CANCEL, -2 if the
- ; library is in use by another task, or returns non-zero if OK! was selected.
- ; At this point, if the user selected OK, our FILEIO_FILENAME buffer will
- ; contain the selected string and FILEIO_FILESIZE will be the ID.
- ;
- ; TestFileIO(FileIO, window)
- ; a4 a3
-
- typename:
- ;--This shows what would happen (automatically) if the lib was in use on a
- ; call to DoFileIO(), or the requester couldn't open.
-
- XDEF TestFileIO
- TestFileIO:
- movea.l _RequesterBase,a6
- ;---DoFileIO(FileIO, window)
- movea.l a3,a1
- movea.l a4,a0
- jsr _LVODoFileIO(a6)
- move.l d0,d1
- beq.s .error
- ;must have been an error. If we were using DoFileIOWindow(), the window
- ;might not have opened. For DoFileIO(), we shouldn't see a 0 return.
- ;We could check the FileIO's ERRNO field to see what the specific error
- ;was.
- addq.l #1,d1
- beq.s .can ;If -1, user must have selected CANCEL
- addq.l #1,d1
- beq.s .error ;If -2, the library was in use
- ;---AutoMessage(string, window) Display our chosen string.
- ;Filename buffer address in d0
- movea.l a3,a0
- jsr _LVOAutoMessage(a6)
- ;---If ID = -1 then user must have typed a string not in the list
- move.l FILEIO_FILESIZE(a4),d0 ;this is the ID of the chosen field
- bpl.s out1
- movea.l a3,a0
- lea NotIn,a1
- move.l a1,d0
- jsr _LVOAutoMessage(a6)
- ;---Did our custom routine end the requester?
- out1:
- moveq #ERR_APPGADG,d0
- sub.b FILEIO_ERRNO(a4),d0
- bne.s out2
- movea.l a3,a0
- lea AppCan,a1
- move.l a1,d0
- jsr _LVOAutoMessage(a6)
- out2:
- rts
- .error:
- move.l #errmsg,d0
- prt:
- movea.l a3,a0
- jsr _LVOAutoMessage(a6)
- moveq #0,d0
- rts
- .can:
- move.l #cancel,d0
- bra.s prt
-
- ;=====================================================================
- ; Our routine for the custom FileIO gadget. Lib passes our FileIO in a2
- ; and Window in a3. This returns the BOOL value from AutoPrompt3 so that
- ; if the user selects YES (TRUE) the requester ends.
-
- XDEF Information
- Information:
- movem.l a2/a3,-(sp)
- movea.l a3,a0
- lea Msg1,a1
- lea Msg2,a2
- lea Msg3,a3
- movea.l _RequesterBase,a6
- jsr _LVOAutoPrompt3(a6)
- movem.l (sp)+,a2/a3
- rts
-
- ; SECTION MainData,DATA ;Not needed for CAPE PC relative addressing!!
-
- XDEF _IntuitionBase,_GfxBase,ScreenPtr
- XDEF _RequesterBase
- ;must be in this order
- _IntuitionBase dc.l 0
- _GfxBase dc.l 0
- _RequesterBase dc.l 0
- window dc.l 0
- RastPort dc.l 0
-
- XDEF newScreen
- newScreen:
- dc.w 0,0 ;LeftEdge, TopEdge
- dc.w 640,400 ;Width, Height
- dc.w 2 ;Depth
- dc.b 0,1 ;Detail, Block pens
- dc.w -32764 ;ViewPort Modes HIRES|LACE (must set/clr HIRES as needed)
- dc.w 15 ;CUSTOMSCREEN
- dc.l TextAttr ;Font
- dc.l ScrTitle
- dc.l 0 ;Gadgets
- dc.l 0 ;CustomBitmap
-
- XDEF newWindow
- newWindow:
- dc.w 30,30
- dc.w 306,145
- dc.b 0,1
- ;IDCMP = MOUSEBUTTONS|CLOSEWINDOW
- dc.l $208
- ;WindowFlags = WINDOWDRAG|WINDOWDEPTH|SMART_REFRESH|ACTIVATE|WINDOWSIZE
- ;(no FOLLOWMOUSE allowed as that messes up the requester when using
- ;DoFileIO(). If you need FOLLOWMOUSE, then use DoFileIOWindow() to open
- ;the req in its own window.)
- dc.l $100F
- dc.l 0
- dc.l 0
- dc.l WINTITLE
- ScreenPtr dc.l 0
- dc.l 0
- dc.w 306,145
- dc.w 600,240
- dc.w 1 ;WBENCHSCREEN
-
- TextAttr: ;Topaz 8 is a ROM font so doesn't need to be opened
- dc.l FONTNAME
- dc.w 8 ;TOPAZ_EIGHTY
- dc.b 0,0
-
- StringAddr:
- dc.l Ten
- dc.l Nine
- dc.l Eight
- dc.l Seven
- dc.l Six
- dc.l Five
- dc.l Four
- dc.l Three
- dc.l Two
- dc.l One
-
- Ten dc.b 'Ten',0
- Nine dc.b 'Nine',0
- Eight dc.b 'Eight',0
- Seven dc.b 'Seven',0
- Six dc.b 'Six',0
- Five dc.b 'Five',0
- Four dc.b 'Four',0
- Three dc.b 'Three',0
- Two dc.b 'Two',0
- One dc.b 'And this is One',0
-
- Quit dc.b 1 ;When this is a 0, the user wants to exit.
-
- ScrTitle dc.b 'Example FileIO Program Screen',0
- WINTITLE dc.b 'Example FileIO Program Window',0
- Click dc.b 'Click mouse for demo or CLOSEWINDOW.',0
- IntuitionName dc.b 'intuition.library',0
- IconName dc.b 'icon.library',0
- DOSName dc.b 'dos.library',0
- GfxName dc.b 'graphics.library',0
- RequesterName dc.b 'requester.library',0
- FONTNAME dc.b 'topaz.font',0
- errmsg dc.b 'Error in accessing the requester',0
- cancel dc.b 'The CANCEL gadget was selected.',0
- About dc.b ' About',0
- Msg1 dc.b 'An example of SPECIAL_REQ',0
- Msg2 dc.b 'by Jeff Glatt',0
- Msg3 dc.b 'dissidents',0
- NotIn dc.b 'This string is not in the list.',0
- AppCan dc.b 'Cancelled by the custom gadget.',0
-
- END
-