mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-22 14:30:29 +00:00
7ec020a057
delimiters.
375 lines
13 KiB
Plaintext
375 lines
13 KiB
Plaintext
|
|
/*
|
|
* Copyright (c) Kopriha Software, 1990-1991
|
|
* All Rights Reserved
|
|
*
|
|
* ks.fileio.e
|
|
*
|
|
* Description: This include file contains all the generic file
|
|
* support macros from Kopriha Software.
|
|
*
|
|
*
|
|
* Table of contents:
|
|
*
|
|
* Structures:
|
|
*
|
|
* KS_FILE . . . . . . . . . Structure to abstract a file
|
|
*
|
|
* Macros:
|
|
*
|
|
* + KS_FILE_CLOSE() . . . . . . . Close a file
|
|
* + KS_FILE_CHANGE_AUXTYPE() . . . Change the aux type of a file
|
|
* + KS_FILE_CREATE() . . . . . . . Create a file (w ftype,auxtype)
|
|
* + KS_FILE_DELETE() . . . . . . . Delete a file
|
|
* + KS_FILE_GET_BUFFER_SIZE(). . . Get the input/output buffer size
|
|
* + KS_FILE_GET_DIRECTORY() . . . Get the current directory
|
|
* + KS_FILE_GET_NEXT_FILE() . . . Get next filename from a directory
|
|
* + KS_FILE_GET_VOLUME() . . . . . Get volume name from pathname
|
|
* + KS_FILE_GET_VOLUME_SPACE() . . Get the total/available space on
|
|
* the specified volume
|
|
* + KS_FILE_OPEN() . . . . . . . . Open a file
|
|
* + KS_FILE_PATH_ADD_FILE() . . . Append a filename to a path/dir
|
|
* + KS_FILE_READ() . . . . . . . . Read from a file
|
|
* KS_FILE_RENAME() . . . . . . . Rename a file (given pathnames)
|
|
* + KS_FILE_SET_BUFFER_SIZE(). . . Set the input/output buffer size
|
|
* * KS_FILE_SET_DIRECTORY() . . . Set the current directory
|
|
* + KS_FILE_WRITE() . . . . . . . Write to a file
|
|
*
|
|
* + indicates that the routine was debugged
|
|
* * indicates the routine exists but was not debugged
|
|
*
|
|
*
|
|
* Notes:
|
|
*
|
|
* History:Oct 13, 1990 Dave Created this file for basic
|
|
* I/O (read/write)
|
|
*
|
|
* Feb 25, 1991 Dave Added buffer enhancements/create.
|
|
*
|
|
* Mar 5, 1991 Dave Added directory, file, path and
|
|
* volume calls
|
|
*
|
|
* Mar 24, 1991 Dave Added delete and change aux type
|
|
*
|
|
* Jun 07, 1991 Dave Broke the ks.fileio.cc module into
|
|
* lots of pieces so we could easily
|
|
* build a library.
|
|
*
|
|
* Jun 30, 1991 Dave Added a rename function.
|
|
*
|
|
*/
|
|
|
|
#ifndef _KS_FILEIO_E_
|
|
#define _KS_FILEIO_E_
|
|
|
|
#ifndef _KS_DEFINES_
|
|
#include "ks.defines.h"
|
|
#endif
|
|
|
|
#ifndef _GSOS_
|
|
#include <gsos.h>
|
|
#endif
|
|
|
|
|
|
/*
|
|
* Buffer flag constants - used to determine if a buffer should
|
|
* be used for I/O. The idea here is that if you specify a buffer,
|
|
* then you have to read/write without specifying a byte position
|
|
* (KS_NEXT_FILE_POSITION).
|
|
*/
|
|
|
|
#define KS_FILE_NO_BUFFER ((Word) 0)
|
|
#define KS_FILE_BUFFER_IO ((Word) 1)
|
|
|
|
#define KS_NEXT_FILE_POSITION ((Word) -1)
|
|
|
|
/*
|
|
* The following are definitions that I expected to find in the
|
|
* APW 1.1/Orca/C update, but could not. I want to be able to
|
|
* recompile without worrying about hard-coding constants in my
|
|
* program, I defined the following macros:
|
|
*/
|
|
|
|
#define KS_FILE_DATA_FORK ((Word) 0) /* For GS/OS Open */
|
|
#define KS_FILE_RESOURCE_FORK ((Word) 1)
|
|
|
|
#define KS_FILE_READ_ACCESS ((Word) readEnable)
|
|
#define KS_FILE_WRITE_ACCESS ((Word) writeEnable)
|
|
|
|
#define KS_BLOCK_DEVICE ((Word) 0x0080) /* used with DInfo */
|
|
|
|
/*
|
|
* KS_FILE - generic file structure
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
KS_STRUCT_ID struct_id;/* Structure id */
|
|
Handle file_handle; /* Handle that created this structure */
|
|
Word refNum; /* Reference # (or channel #) of the file */
|
|
Word access; /* Access mode of file (read or write) */
|
|
LongWord eof; /* End of File of data fork */
|
|
LongWord resource_eof; /* End of file for resource fork */
|
|
/* Note: Not all systems support filetypes*/
|
|
Word fileType; /* Value of file's fileType attribute */
|
|
LongWord auxType; /* Auxilary file type */
|
|
|
|
LongWord data_size; /* Amount of data read/written for user */
|
|
|
|
Word end_of_file; /* TRUE==We've read to end of file */
|
|
Word end_of_dir; /* TRUE==We've read to end of directory */
|
|
|
|
Handle buffer_handle;
|
|
/* Handle to the buffer (if specified) */
|
|
LongWord buffer_size; /* Size of the buffer (NULL if not */
|
|
/* specified) */
|
|
LongWord buffer_available;
|
|
/* Number of bytes read into the buffer */
|
|
/* Typically this offset is the same as */
|
|
/* buffer_size, however end of file is a */
|
|
/* special case where the number of */
|
|
/* read bytes typically can't be the same*/
|
|
/* the size of the buffer. */
|
|
Byte *buffer; /* Pointer to the file buffer */
|
|
LongWord buffer_offset;
|
|
/* Offset of next available byte in buffer*/
|
|
|
|
} KS_FILE, *KS_FILE_PTR, **KS_FILE_HDL;
|
|
|
|
|
|
|
|
/*
|
|
* KS_FILE_CLOSE() - close a file.
|
|
*/
|
|
|
|
#define KS_FILE_CLOSE(_file_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_close( (_file_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_CREATE() - creates a file with the specified name, filetype
|
|
* and auxtype.
|
|
*/
|
|
|
|
#define KS_FILE_CREATE(_gspath_ptr, _file_type, _auxtype, _error) \
|
|
\
|
|
(_error) = ks_file_create( (_gspath_ptr), \
|
|
(_file_type), \
|
|
(_auxtype))
|
|
|
|
|
|
/*
|
|
* KS_FILE_CHANGE_AUXTYPE() - change the auxtype of an existing file.
|
|
*
|
|
* Note: This call is only works when the file is closed!
|
|
*/
|
|
|
|
#define KS_FILE_CHANGE_AUXTYPE(_gspath_ptr, _auxtype, _error) \
|
|
\
|
|
(_error) = ks_file_change_auxtype( (_gspath_ptr), \
|
|
(_auxtype))
|
|
|
|
|
|
/*
|
|
* KS_FILE_DELETE() - Deletes the specified file
|
|
*/
|
|
|
|
#define KS_FILE_DELETE(_gspath_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_delete( (_gspath_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_GET_BUFFER_SIZE() - returns the current buffer size used
|
|
*
|
|
* Note: If the buffer size can only be changed if there are no
|
|
* open files (this restriction will change in the future).
|
|
*/
|
|
|
|
#define KS_FILE_GET_BUFFER_SIZE(_buffer_size, _error) \
|
|
\
|
|
(_error) = ks_file_get_buffer_size( (_buffer_size))
|
|
|
|
|
|
/*
|
|
* KS_FILE_GET_NEXT_FILE(FILE_PTR, DirEntryRecPtrGS) - Get next
|
|
* filename from a directory
|
|
*/
|
|
|
|
#define KS_FILE_GET_NEXT_FILE(_file_ptr, _next_file_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_get_next_file( (_file_ptr), \
|
|
(_next_file_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_GET_VOLUME() - Get volume name from pathname
|
|
*/
|
|
|
|
#define KS_FILE_GET_VOLUME(_file_ptr, _volume_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_get_volume( (_file_ptr), \
|
|
(_volume_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_GET_VOLUME_SPACE() - Get the total/available space on
|
|
* the specified volume
|
|
*/
|
|
|
|
#define KS_FILE_GET_VOLUME_SPACE(_volume_ptr, _unused, _total, _error) \
|
|
\
|
|
(_error) = ks_file_get_volume_space( (_volume_ptr), \
|
|
(_unused), \
|
|
(_total))
|
|
|
|
|
|
/*
|
|
* KS_FILE_OPEN() - opens a file (either data or resource fork)
|
|
* returns a KS_FILE structure to our caller.
|
|
*/
|
|
|
|
#define KS_FILE_OPEN(_gspath_ptr, _access, _file_fork, _buf_flag, _file_ptr_ptr, _error)\
|
|
\
|
|
(_error) = ks_file_open( (_gspath_ptr), \
|
|
(_access), \
|
|
(_file_fork), \
|
|
(_buf_flag), \
|
|
(_file_ptr_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_PATH_ADD_FILE() - Append a filename to a path/dir
|
|
*/
|
|
|
|
#define KS_FILE_PATH_ADD_FILE(_path_ptr, _file_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_path_add_file( (_path_ptr), \
|
|
(_file_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_READ() - read from a file.
|
|
*/
|
|
|
|
#define KS_FILE_READ(_file_ptr, _position, _byte_size, _buffer, _error)\
|
|
\
|
|
(_error) = ks_file_read( (_file_ptr), \
|
|
(_position), \
|
|
(_byte_size), \
|
|
(_buffer))
|
|
|
|
|
|
/*
|
|
* KS_FILE_RENAME() - rename a file.
|
|
*/
|
|
|
|
#define KS_FILE_RENAME(_old_pathname, _new_pathname, _error) \
|
|
\
|
|
(_error) = ks_file_rename( (_old_pathname), \
|
|
(_new_pathname))
|
|
|
|
|
|
/*
|
|
* KS_FILE_SET_BUFFER_SIZE() - sets the current buffer size used
|
|
*
|
|
* Note: If the buffer size can only be changed if there are no
|
|
* open files (this restriction will change in the future).
|
|
*/
|
|
|
|
#define KS_FILE_SET_BUFFER_SIZE(_buffer_size, _error) \
|
|
\
|
|
(_error) = ks_file_set_buffer_size( (_buffer_size))
|
|
|
|
|
|
/*
|
|
* KS_FILE_SET_DIRECTORY() - Set the current directory
|
|
*/
|
|
|
|
#define KS_FILE_SET_DIRECTORY(_directory_ptr, _error) \
|
|
\
|
|
(_error) = ks_file_set_directory( (_directory_ptr))
|
|
|
|
|
|
/*
|
|
* KS_FILE_SET_EOF() - set the end of the specified file
|
|
*/
|
|
|
|
#define KS_FILE_SET_EOF(_file_ptr, _eof, _error) \
|
|
\
|
|
(_error) = ks_file_set_eof( (_file_ptr), \
|
|
(_eof))
|
|
|
|
|
|
/*
|
|
* KS_FILE_WRITE() - write to a file.
|
|
*/
|
|
|
|
#define KS_FILE_WRITE(_file_ptr, _position, _byte_size, _buffer, _error)\
|
|
\
|
|
(_error) = ks_file_write( (_file_ptr), \
|
|
(_position), \
|
|
(_byte_size), \
|
|
(_buffer))
|
|
|
|
|
|
|
|
/* ****************************************************************** *
|
|
* File I/O routine prototypes: *
|
|
* ****************************************************************** */
|
|
|
|
KS_E_ERROR ks_file_close(KS_FILE_PTR);
|
|
|
|
KS_E_ERROR ks_file_create(GSString255Ptr,
|
|
Word,
|
|
LongWord);
|
|
|
|
KS_E_ERROR ks_file_change_auxtype(GSString255Ptr,
|
|
LongWord);
|
|
|
|
KS_E_ERROR ks_file_get_buffer_size(LongWord *);
|
|
|
|
KS_E_ERROR ks_file_delete(GSString255Ptr);
|
|
|
|
KS_E_ERROR ks_file_get_next_file(KS_FILE_PTR,
|
|
DirEntryRecPtrGS);
|
|
|
|
KS_E_ERROR ks_file_get_volume(GSString255Ptr,
|
|
GSString255Ptr);
|
|
|
|
KS_E_ERROR ks_file_get_volume_space(GSString255Ptr,
|
|
LongWord *,
|
|
LongWord *);
|
|
|
|
KS_E_ERROR ks_file_open(GSString255Ptr,
|
|
Word,
|
|
Word,
|
|
Word,
|
|
KS_FILE_PTR *);
|
|
|
|
KS_E_ERROR ks_file_read(KS_FILE_PTR,
|
|
LongWord,
|
|
LongWord,
|
|
Pointer);
|
|
|
|
KS_E_ERROR ks_file_rename(GSString255Ptr,
|
|
GSString255Ptr);
|
|
|
|
KS_E_ERROR ks_file_path_add_file(GSString255Ptr,
|
|
GSString255Ptr);
|
|
|
|
KS_E_ERROR ks_file_set_buffer_size(LongWord);
|
|
|
|
KS_E_ERROR ks_file_set_directory(GSString255Ptr);
|
|
|
|
KS_E_ERROR ks_file_set_eof(KS_FILE_PTR,
|
|
LongWord);
|
|
|
|
KS_E_ERROR ks_file_write(KS_FILE_PTR,
|
|
LongWord,
|
|
LongWord,
|
|
Pointer);
|
|
|
|
#endif
|