mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-27 20:47:11 +00:00
Too much to list all, but includes (in no particular order): - Cleanup for 64-bit builds, MSVC warnings. - Structured help - Help file compiler. - Supports volsets, writes/create work. - Support for I18n in messages, help. - Makefiles. - Initialize volume/volset - Command line editing/history Builds and works on Linux and Windows (VS). Not recently built or tested on other platforms, but not intentinonally broken.
162 lines
6.3 KiB
C
162 lines
6.3 KiB
C
/* Access.h Definitions for file access routines */
|
|
|
|
/*
|
|
* This is part of ODS2 written by Paul Nankervis,
|
|
* email address: Paulnank@au1.ibm.com
|
|
*
|
|
* ODS2 is distributed freely for all members of the
|
|
* VMS community to use. However all derived works
|
|
* must maintain comments in their source to acknowledge
|
|
* the contributions of the original author and
|
|
* subsequent contributors. This is free software; no
|
|
* warranty is offered, and while we believe it to be useful,
|
|
* you use it at your own risk.
|
|
*/
|
|
|
|
#ifndef _ACCESS_H
|
|
#define _ACCESS_H
|
|
|
|
#include "ods2.h"
|
|
#include "cache.h"
|
|
#include "f11def.h"
|
|
#include "vmstime.h"
|
|
|
|
#define EXTMAX 20
|
|
|
|
struct WCB {
|
|
struct CACHE cache;
|
|
uint32_t loblk, hiblk; /* Range of window */
|
|
uint32_t hd_basevbn; /* File blocks prior to header */
|
|
unsigned hd_seg_num; /* Header segment number */
|
|
struct fiddef hd_fid; /* Header FID */
|
|
unsigned short extcount; /* Extents in use */
|
|
uint32_t phylen[EXTMAX];
|
|
uint32_t phyblk[EXTMAX];
|
|
uint8_t rvn[EXTMAX];
|
|
}; /* Window control block */
|
|
|
|
#define VIOC_CHUNKSIZE 4
|
|
|
|
struct VIOC {
|
|
struct CACHE cache;
|
|
struct FCB *fcb; /* File this chunk is for */
|
|
unsigned wrtmask; /* Bit mask for writable blocks */
|
|
unsigned modmask; /* Bit mask for modified blocks */
|
|
char data[VIOC_CHUNKSIZE][512]; /* Chunk data */
|
|
}; /* Chunk of a file */
|
|
|
|
struct FCB {
|
|
struct CACHE cache;
|
|
struct VCB *vcb; /* Volume this file is for */
|
|
struct VIOC *headvioc; /* Index file chunk for file header */
|
|
struct HEAD *head; /* Pointer to header block */
|
|
struct WCB *wcb; /* Window control block tree */
|
|
struct VIOC *vioc; /* Virtual I/O chunk tree */
|
|
uint32_t headvbn; /* vbn for file header */
|
|
uint32_t hiblock; /* Highest block mapped */
|
|
uint32_t highwater; /* First high water block */
|
|
unsigned char status; /* FCB status bits */
|
|
#define FCB_WRITE 1 /* FCB open for write... */
|
|
#define FCB_WRITTEN 2 /* Modified */
|
|
#define FCB_RDTSET 4 /* Revision date set by create */
|
|
|
|
uint8_t rvn; /* Initial file relative volume */
|
|
}; /* File control block */
|
|
|
|
struct DIRCACHE {
|
|
struct CACHE cache;
|
|
struct fiddef parent;
|
|
struct dir$r_ent entry;
|
|
struct dir$r_rec record;
|
|
};
|
|
|
|
#define VCB_WRITE 1
|
|
struct VCBDEV {
|
|
struct DEV *dev; /* Pointer to device info */
|
|
struct FCB *idxfcb; /* Index file control block */
|
|
struct FCB *mapfcb; /* Bitmap file control block */
|
|
uint32_t clustersize; /* Cluster size of the device */
|
|
uint32_t max_cluster; /* Total clusters on the device */
|
|
uint32_t free_clusters; /* Free clusters on disk volume */
|
|
struct HOME home; /* Volume home block */
|
|
};
|
|
struct VCB {
|
|
struct VCB *next; /* Next in mounted volume list (Must be first item) */
|
|
unsigned status; /* Volume status */
|
|
unsigned devices; /* Number of volumes in set */
|
|
struct FCB *fcb; /* File control block tree */
|
|
struct DIRCACHE *dircache; /* Directory cache tree */
|
|
struct VCBDEV vcbdev[1]; /* List of volumes devices */
|
|
}; /* Volume control block */
|
|
|
|
extern struct VCB *vcb_list;
|
|
void show_volumes( void );
|
|
|
|
/* RVN_TO_DEV( vcb, rvn ) - returns device from relative volume number */
|
|
|
|
/* returns NULL if RVN illegal or device not mounted */
|
|
|
|
#define RVN_TO_DEV( vcb, rvn ) ( ( rvn < 2 ) ? \
|
|
vcb->vcbdev : \
|
|
( ( rvn <= vcb->devices ) ? \
|
|
&vcb->vcbdev[rvn - 1] : \
|
|
NULL \
|
|
) \
|
|
)
|
|
|
|
struct NEWFILE {
|
|
struct RECATTR recattr;
|
|
VMSTIME credate;
|
|
VMSTIME revdate;
|
|
VMSTIME expdate;
|
|
VMSTIME bakdate;
|
|
f11word verlimit;
|
|
f11word revision;
|
|
uint32_t fileprot;
|
|
f11long filechar;
|
|
struct UIC fileowner;
|
|
};
|
|
|
|
void fid_copy( struct fiddef *dst, struct fiddef *src, unsigned rvn );
|
|
|
|
vmscond_t dismount( struct VCB *vcb, options_t options);
|
|
vmscond_t mount( options_t flags, unsigned devices, char *devnam[], char *label[] );
|
|
|
|
vmscond_t accesserase( struct VCB *vcb, struct fiddef *fid );
|
|
vmscond_t deaccessfile( struct FCB *fcb );
|
|
vmscond_t accessfile( struct VCB *vcb, struct fiddef *fid,
|
|
struct FCB **fcb, unsigned wrtflg );
|
|
|
|
vmscond_t deaccesschunk( struct VIOC *vioc, uint32_t wrtvbn, int wrtblks, int reuse );
|
|
vmscond_t accesschunk( struct FCB *fcb, uint32_t vbn, struct VIOC **retvioc,
|
|
char **retbuff, uint32_t *retblocks, uint32_t wrtblks );
|
|
vmscond_t access_extend( struct FCB *fcb, uint32_t blocks, unsigned contig );
|
|
|
|
vmscond_t deallocfile(struct FCB *fcb);
|
|
|
|
f11word checksumn( f11word *block, int count );
|
|
f11word checksum( f11word *block );
|
|
|
|
void access_rundown( void );
|
|
|
|
/* These live in update.c, which contains the write part of access */
|
|
|
|
vmscond_t update_freecount( struct VCBDEV *vcbdev, uint32_t *retcount );
|
|
vmscond_t update_create( struct VCB *vcb, struct fiddef *did, char *filename,
|
|
struct fiddef *fid, struct NEWFILE *attrs, struct FCB **fcb );
|
|
vmscond_t update_extend( struct FCB *fcb, uint32_t blocks, unsigned contig );
|
|
|
|
vmscond_t update_truncate( struct FCB *fcb, uint32_t newsize );
|
|
|
|
/* These are used by update.c */
|
|
|
|
vmscond_t deaccesshead( struct VIOC *vioc, struct HEAD *head, uint32_t idxblk );
|
|
vmscond_t accesshead( struct VCB *vcb, struct fiddef *fid, uint32_t seg_num,
|
|
struct VIOC **vioc, struct HEAD **headbuff,
|
|
uint32_t *retidxblk, unsigned wrtflg );
|
|
vmscond_t getwindow( struct FCB * fcb, uint32_t vbn, struct VCBDEV **devptr,
|
|
uint32_t *phyblk, uint32_t *phylen, struct fiddef *hdrfid,
|
|
uint32_t *hdrseq );
|
|
|
|
#endif /* # ifndef _ACCESS_H */
|