#ifndef FILEIO_H #define FILEIO_H /* *** fileio.h ************************************************************* * * Amiga Programmers' Suite -- File IO Include File * from Book 1 of the Amiga Programmers' Suite by RJ Mical * * Copyright (C) 1986, =Robert J. Mical= * All Rights Reserved. * * Created for Amiga developers. * Any or all of this code can be used in any program as long as this * entire notice is retained, ok? Thanks. * * The Amiga Programmer's Suite Book 1 is copyrighted but freely distributable. * All copyright notices and all file headers must be retained intact. * The Amiga Programmer's Suite Book 1 may be compiled and assembled, and the * resultant object code may be included in any software product. However, no * portion of the source listings or documentation of the Amiga Programmer's * Suite Book 1 may be distributed or sold for profit or in a for-profit * product without the written authorization of the author, RJ Mical. * * HISTORY NAME DESCRIPTION * ----------- -------------- -------------------------------------------- * 20 Oct 87 - RJ Added RENAME_RAMDISK to fix what seems to * be a bug in AmigaDOS. * 27 Sep 87 RJ Removed reference to alerts.h, brought * declarations into this file * 12 Aug 86 RJ Prepare (clean house) for release * 14 Feb 86 =RJ Mical= Created this file. * 26 Sept 87 Jeff Glatt Converted C code to optimized assembly and * created a library. * *********************************************************************** */ #define MAX_NAME_LENGTH 30 #define MAX_DRAWER_LENGTH 132 #define SetFlag(v,f) ((v)|=(f)) #define ClearFlag(v,f) ((v)&=~(f)) #define ToggleFlag(v,f) ((v)^=(f)) #define FlagIsSet(v,f) ((BOOL)(((v)&(f))!=0)) struct HandlerBlock { APTR StartUpCode; APTR DiskInsertedCode; APTR GadgetCode; APTR KeyCode; APTR MouseMoveCode; }; /* === FileIO Structure ========================================== */ struct FileIO { USHORT Flags; /* After a successful call to DoFileIO(), these fields will have * the names selected by the user. You should never have to initialize * these fields, only read from them, though initializing them won't hurt. */ UBYTE FileName[MAX_NAME_LENGTH]; UBYTE Drawer[MAX_DRAWER_LENGTH]; UBYTE Disk[MAX_NAME_LENGTH]; /* If a Lock on a disk/dir was obtained, it can be found here. */ struct DOSLock *Lock; USHORT NameCount; USHORT NameStart; SHORT CurrPick; struct Remember *FileList; UBYTE *FileIOText; /* for SPECIAL_REQ */ APTR FileIORoutine; /* for SPECIAL_REQ */ SHORT MatchType; /* DiskObject Type */ UBYTE *ToolTypes; UBYTE *Extension; USHORT ExtSize; /* Don't count the terminating NULL */ struct HandlerBlock *Custom; USHORT X; USHORT Y; ULONG FreeBytes; ULONG FileSize; UBYTE *Title; UBYTE *Buffer; APTR RawCode; struct DOSLock *OriginalLock; BYTE Errno; UBYTE DrawMode; UBYTE PenA; UBYTE PenB; }; /* === User FileIO Flag Definitions === */ #define NO_CARE_REDRAW 0x0001 /* Clear if reconstructing display */ #define USE_DEVICE_NAMES 0x0002 /* Set for device instead of volume names */ #define EXTENSION_MATCH 0x0004 /* Only display those that end with a specified string */ #define DOUBLECLICK_OFF 0x0008 /* Inhibit double-clicking if set */ #define WBENCH_MATCH 0x0010 /* If set check .info files only */ #define MATCH_OBJECTTYPE 0x0020 /* If set with .info also check ObjectType */ #define MATCH_TOOLTYPE 0x0040 /* If set with .info also check ToolType */ #define INFO_SUPPRESS 0x0080 /* No info files listed */ #define CUSTOM_HANDLERS 0x0200 /* Implement custom handlers */ #define SHOW_DISK_NAMES 0x4000 /* Show disk names instead of filenames */ #define SPECIAL_REQ 0x8000 /* For displaying lists of strings */ /* === System FileIO Flag Definitions === */ #define ALLOCATED_FILEIO 0x0100 /* Not a pre-initialized FileIO struct */ #define WINDOW_OPENED 0x0400 /* DoFileIOWindow() was called */ #define TITLE_CHANGED 0x0800 /* SetTitle() called without ResetTitle() */ #define DISK_HAS_CHANGED 0x2000 /* Disk changed during DoFileIO() */ /* FileRequester GadgetIDs - Do not use these IDs for your own gadgets */ #define FILEIO_CANCEL 0x7FA0 #define FILEIO_OK 0x7FA1 #define FILEIO_NAMETEXT 0x7FA2 #define FILEIO_DRAWERTEXT 0x7FA3 #define FILEIO_DISKTEXT 0x7FA4 #define FILEIO_SELECTNAME 0x7FA5 #define FILEIO_UPGADGET 0x7FA6 #define FILEIO_DOWNGADGET 0x7FA7 #define FILEIO_PROPGADGET 0x7FA8 #define FILEIO_NEXTDISK 0x7FA9 #define FILEIO_BACKDROP 0x7FAA #define NAME_ENTRY_COUNT 7 /* These many names in the SelectName box */ #define REQTITLE_HEIGHT 8 #define REQ_LEFT 8 #define REQ_TOP 15 #define REQ_WIDTH 286 #define REQ_HEIGHT (110 + REQTITLE_HEIGHT) #define REQ_LINEHEIGHT 8 #define SELECTNAMES_LEFT 8 #define SELECTNAMES_TOP (15 + REQTITLE_HEIGHT) #define SELECTNAMES_WIDTH 122 #define SELECTNAMES_HEIGHT 60 /* ======= ERRNO numbers returned in FileIO error field ========= */ #define ERR_MANUAL 1 /* the path was entered manually via the title bar with no errors or cancellation. */ #define ERR_SUCCESS 0 /* everything went OK */ #define ERR_CANCEL -1 /* the filename procedure was CANCELED by the user */ #define ERR_WINDOW -2 /* the window couldn't open (in DoFileIOWindow()) */ #define ERR_APPGADG -3 /* the requester was CANCELED by an application gadget (via an installed CUSTOM gadget handler returning TRUE) */ /* === AutoFileMessage() Numbers ================================= */ #define ALERT_OUTOFMEM 0 #define ALERT_BAD_DIRECTORY 1 #define READ_WRITE_ERROR 2 /* Error in reading or writing file */ /* The next 3 display "YES" and "NO" prompts, returning d0=1 for yes, 0 for no */ #define FILE_EXISTS 3 /* File already exists. Overwrite? */ #define SAVE_CHANGES 4 /* Changes have been made. Save them? */ #define REALLY_QUIT 5 /* Do you really want to quit? */ /* ====================== Entry Structure ====================== */ /* Don't use sizeof on this structure. The library makes this for you when you call AddEntry. The 3rd field is a variable length string. This struc- ture has been defined simply so that you can get access to the EntryID and the EntryString. This structure is used for SPECIAL_REQ. */ struct Entry { LONG EntryID; UBYTE EntryFlags; UBYTE EntryString[1]; /* size is actually length of null-terminated string */ }; /* === Requester Library Function Declarations ===================== */ extern struct FileIO *GetFileIO(); extern UBYTE *DoFileIO(); extern UBYTE *DoFileIOWindow(); /* address = DoFileIOWindow(myFileIO, myScreen); If myScreen is NULL, then use WB screen */ extern BOOL AutoFileMessage(); /* result = AutoFileMessage(3L, myWindow); */ extern BOOL AutoMessage(), AutoMessageLen(), AutoPrompt3(); extern void ReleaseFileIO(); extern void SetWaitPointer(); /* SetWaitPointer( myWindow ); */ extern void ResetBuffer(); /* ResetBuffer( StringInfo, nullFlag ); resets the cursor back to the first char in the stringinfo's buffer. If nullFlag is TRUE, then NULLS the buffer as well. */ extern UBYTE *ParseString(); extern UBYTE *TypeFilename(); extern UBYTE *PromptUserEntry(), *UserEntry(); extern void SetTitle(), ResetTitle(); extern UWORD GetRawkey(), DecodeRawkey(); extern WORD NewEntryList(), AddEntry(), IsEntryThere(); #endif /* of FILEIO_H */