129 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _INCLUDE_TOOLS_H
 | |
| #define _INCLUDE_TOOLS_H 1
 | |
| 
 | |
| /* Constants describing the disk */
 | |
| #define SECTOR_SIZE	512
 | |
| #define SECTOR_SHIFT	9
 | |
| #define RATIO(b)	((b)/SECTOR_SIZE)
 | |
| #define ISO_SECTOR_SIZE	2048
 | |
| #define ISO_PVD_OFFSET	16
 | |
| #define HRATIO		(SECTOR_SIZE / HCLICK_SIZE)
 | |
| #define PARAMSEC	1	/* sector containing boot parameters */
 | |
| #define DSKBASE		0x1E	/* floppy disk parameter vector */
 | |
| #define DSKPARSIZE	11	/* there are this many bytes of parameters */
 | |
| #define ESC		'\33'	/* escape key */
 | |
| #define HEADERSEG	0x0060	/* place for an array of struct exec's */
 | |
| #define MINIXSEG	0x0080	/* MINIX loaded here (rounded up to a click) */
 | |
| #define BOOTSEG		0x07C0	/* bootstraps are loaded here */
 | |
| #define SIGNATURE	0xAA55	/* proper bootstraps have this signature */
 | |
| #define SIGNATPOS	510	/* offset within bootblock */
 | |
| #define FREESEG		0x0800	/* Memory from FREESEG to cseg is free */
 | |
| #define MSEC_PER_TICK	55	/* 18.2 ticks per second */
 | |
| 
 | |
| /* Scan codes for four different keyboards (from kernel/keyboard.c) */
 | |
| #define DUTCH_EXT_SCAN	  32	/* 'd' */
 | |
| #define OLIVETTI_SCAN	  12	/* '=' key on olivetti */
 | |
| #define STANDARD_SCAN	  13	/* '=' key on IBM */
 | |
| #define US_EXT_SCAN	  22	/* 'u' */
 | |
| 
 | |
| /* Other */
 | |
| #define ROOT_INO ((ino_t) 1)	/* Inode nr of root dir. */
 | |
| #define IM_NAME_MAX       63
 | |
| 
 | |
| /* Variables */
 | |
| #ifndef EXTERN
 | |
| #define EXTERN extern
 | |
| #endif
 | |
| 
 | |
| typedef struct vector {
 | |
|   u16_t offset;
 | |
|   u16_t segment;
 | |
| } vector;
 | |
| 
 | |
| struct image_header {
 | |
|   char name[IM_NAME_MAX + 1];	/* Null terminated. */
 | |
|   struct exec process;
 | |
| };
 | |
| 
 | |
| EXTERN vector rem_part;		/* boot partition table entry */
 | |
| EXTERN u16_t cseg, dseg;	/* code and data segment of the boot program */
 | |
| EXTERN u32_t runsize;		/* size of this program */
 | |
| EXTERN u16_t device;		/* drive being booted from */
 | |
| EXTERN u16_t heads, sectors;	/* the drive's number of heads and sectors */
 | |
| extern u16_t eqscancode;	/* Set by peek/getch() if they see a '=' */
 | |
| 
 | |
| /* Sticky attributes */
 | |
| #define E_SPECIAL	0x01	/* These are known to the program */
 | |
| #define E_DEV		0x02	/* The value is a device name */
 | |
| #define E_RESERVED	0x04	/* May not be set by user, e.g. scancode */
 | |
| #define E_STICKY	0x07	/* Don't go once set */
 | |
| 
 | |
| /* Volatile attributes */
 | |
| #define E_VAR		0x08	/* Variable */
 | |
| #define E_FUNCTION	0x10	/* Function definition */
 | |
| 
 | |
| typedef struct environment {
 | |
|   struct environment *next;
 | |
|   char flags;
 | |
|   char *name;			/* name = value */
 | |
|   char *arg;			/* name(arg) {value} */
 | |
|   char *value;
 | |
|   char *defval;			/* Safehouse for default values */
 | |
| } environment;
 | |
| 
 | |
| /* External variables */
 | |
| EXTERN environment *env;	/* Lists the environment */
 | |
| EXTERN int fsok;		/* True if the boot device contains an FS */
 | |
| EXTERN u32_t lowsec;		/* Offset to the file system on the boot dev */
 | |
| 
 | |
| #if defined(_MINIX) || defined(__minix) || defined(__ACK__)
 | |
| /* Prototypes */
 | |
| off_t r_super(void);
 | |
| void r_stat(Ino_t _inum, struct stat *_stp );
 | |
| ino_t r_readdir(char *_name );
 | |
| off_t r_vir2abs(off_t _virblk );
 | |
| ino_t r_lookup(Ino_t _cwd, char *_path );
 | |
| #endif
 | |
| 
 | |
| #ifdef _MONHEAD
 | |
| void readerr(off_t _sec, int _err );
 | |
| int numprefix(char *_s, char **_ps );
 | |
| int numeric(char *_s );
 | |
| dev_t name2dev(char *_name );
 | |
| int delay(char *_msec );
 | |
| char *unix_err(int _err );
 | |
| void init_cache(void);
 | |
| void invalidate_cache(void);
 | |
| char *b_value(char *_name );
 | |
| void raw_copy(int _doff, int _dseg, int _soff, int _sseg, int _count);
 | |
| void raw_clear(int _off, int _seg, int _count);
 | |
| void bootstrap(int _device, int _partoff, int _partseg);
 | |
| 
 | |
| long a2l(char *_a );
 | |
| char *ul2a(u32_t _n );
 | |
| char *u2a(int _n1 );
 | |
| 
 | |
| /* Functions defined in monhead.s and usable by other files. */
 | |
| void reset_video(int color);
 | |
| int dev_geometry(void);
 | |
| u16_t get_ext_memsize(void);
 | |
| u16_t get_low_memsize(void);
 | |
| u16_t get_processor(void);
 | |
| u32_t get_tick(void);
 | |
| u16_t get_video(void);
 | |
| u16_t get_word(int _off, int _seg);
 | |
| int getchar(void);
 | |
| void minix(void);
 | |
| void minix86(int _kcs, int _kds, char *_bpar, int _psize);
 | |
| void minix386(int _kcs, int _kds, char *_bpar, int _psize);
 | |
| int peekchar(void);
 | |
| void put_word(int _off, int _seg, int _word);
 | |
| int putchar(char _c);
 | |
| int readsectors(int _off, int _seg, off_t _adr, int _ct);
 | |
| void reboot(void);
 | |
| void relocate(void);
 | |
| int writesectors(int _off, int _seg, off_t _adr, int _ct);
 | |
| #endif
 | |
| 
 | |
| #endif
 | 
