Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef __OS_LAYER_OS_LAYER_H
  2. #define __OS_LAYER_OS_LAYER_H
  3.  
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7.  
  8. #include<menuet/os.h>
  9. #include<stdio.h>
  10. #include<stdlib.h>
  11.  
  12. #define __FSEMU_FLAG_USED               0x00000001
  13. #define __FSEMU_FLAG_DIRECTORY          0x00000002
  14. #define __FSEMU_FLAG_DEVICE             0x00000004
  15. #define __FSEMU_FLAG_READ               0x00000008
  16. #define __FSEMU_FLAG_WRITE              0x00000010
  17. #define __FSEMU_FLAG_SEEK               0x00000020
  18. #define __FSEMU_FLAG_STDIO              0x00000040
  19.  
  20. #define __FSF(x)        __FSEMU_FLAG_##x
  21.  
  22. #define T_FSF(x,f)      ((x)&__FSF(f))
  23.  
  24. #define __FSEMU_BLOCK_SIZE              512
  25.  
  26. struct __fsemu_io_t;
  27.  
  28. typedef struct
  29. {
  30.  int (* putc)(int dev,int c);
  31.  int (* getc)(int dev,int * c);
  32.  int (* read)(struct __fsemu_io_t *,int blkno,int blkcount,char *);
  33.  int (* write)(struct __fsemu_io_t *,int blkno,int blkcount,char *);
  34. } __fsemu_stdio_t;
  35.  
  36. typedef struct __fsemu_io_t
  37. {
  38.  char * filename;
  39.  char * filebuffer;
  40.  int handle;
  41.  int pos;
  42.  int size;
  43.  int flags;
  44.  char * systree_buf;
  45.  struct systree_info * st_info;
  46.  __fsemu_stdio_t * special_ops;
  47. } __fsemu_io_t;
  48.  
  49. #define __FSEMU_MAX_FILES               64
  50.  
  51. extern __fsemu_stdio_t __fsemu_stdin_ops,
  52.                        __fsemu_stdout_ops,
  53.                        __fsemu_stderr_ops,
  54.                        __fsemu_stdprn_ops,
  55.                        __fsemu_stdaux_ops;
  56.                        
  57. #define __FSEMU_f_STDIN { "stdin",NULL,0,0,0,__FSF(USED)|__FSF(READ) \
  58.                           |__FSF(DEVICE)|__FSF(STDIO), NULL,NULL,&__fsemu_stdin_ops }
  59. #define __FSEMU_f_STDOUT { "stdout",NULL,1,0,0,__FSF(USED)|__FSF(WRITE) \
  60.                           |__FSF(DEVICE)|__FSF(STDIO), NULL,NULL,&__fsemu_stdout_ops }
  61. #define __FSEMU_f_STDERR { "stderr",NULL,2,0,0,__FSF(USED)|__FSF(WRITE) \
  62.                           |__FSF(DEVICE)|__FSF(STDIO), NULL,NULL,&__fsemu_stderr_ops }
  63. #define __FSEMU_f_STDPRN { "stdprn",NULL,3,0,0,__FSF(USED)|__FSF(WRITE) \
  64.                           |__FSF(DEVICE)|__FSF(STDIO), NULL,NULL,&__fsemu_stdprn_ops }
  65. #define __FSEMU_f_STDAUX { "stdaux",NULL,4,0,0,__FSF(USED)|__FSF(WRITE) \
  66.                           |__FSF(DEVICE)|__FSF(STDIO)|__FSF(READ), NULL,NULL,&__fsemu_stdaux_ops }
  67.  
  68. #define __FSEMU_STDIO_DECLS \
  69.     static __fsemu_io_t __fsemu_io_stdin=__FSEMU_f_STDIN; \
  70.     static __fsemu_io_t __fsemu_io_stdout=__FSEMU_f_STDOUT; \
  71.     static __fsemu_io_t __fsemu_io_stderr=__FSEMU_f_STDERR; \
  72.     static __fsemu_io_t __fsemu_io_stdprn=__FSEMU_f_STDPRN; \
  73.     static __fsemu_io_t __fsemu_io_stdaux=__FSEMU_f_STDAUX;
  74.  
  75. #define __FSEMU_STDIO_TABLE_DECLS \
  76.     &__fsemu_io_stdin, \
  77.     &__fsemu_io_stdout, \
  78.     &__fsemu_io_stderr, \
  79.     &__fsemu_io_stdprn, \
  80.     &__fsemu_io_stdaux
  81.  
  82.  
  83. extern __fsemu_stdio_t __fsemu_rd1_ops,
  84.                        __fsemu_hd1_ops,
  85.                        __fsemu_hd2_ops,
  86.                        __fsemu_hd3_ops,
  87.                        __fsemu_hd4_ops;
  88.  
  89. #define __FSEMU_f_RD1 { "/RD/1",NULL,5,0,0,__FSF(USED)|__FSF(READ)| \
  90.                         __FSF(WRITE)|__FSF(DEVICE),NULL,NULL,&__fsemu_rd1_ops }
  91. #define __FSEMU_f_HD1 { "/HD/1",NULL,6,0,0,__FSF(USED)|__FSF(READ)| \
  92.                         __FSF(DEVICE),NULL,NULL,&__fsemu_hd1_ops }
  93. #define __FSEMU_f_HD2 { "/HD/2",NULL,7,0,0,__FSF(USED)|__FSF(READ)| \
  94.                         __FSF(DEVICE),NULL,NULL,&__fsemu_hd2_ops }
  95. #define __FSEMU_f_HD3 { "/HD/3",NULL,8,0,0,__FSF(USED)|__FSF(READ)| \
  96.                         __FSF(DEVICE),NULL,NULL,&__fsemu_hd3_ops }
  97. #define __FSEMU_f_HD4 { "/HD/4",NULL,9,0,0,__FSF(USED)|__FSF(READ)| \
  98.                         __FSF(DEVICE),NULL,NULL,&__fsemu_hd4_ops }
  99.                        
  100. #define __FSEMU_DEV_DECLS \
  101.     static __fsemu_io_t __fsemu_io_rd1=__FSEMU_f_RD1; \
  102.     static __fsemu_io_t __fsemu_io_hd1=__FSEMU_f_HD1; \
  103.     static __fsemu_io_t __fsemu_io_hd2=__FSEMU_f_HD2; \
  104.     static __fsemu_io_t __fsemu_io_hd3=__FSEMU_f_HD3; \
  105.     static __fsemu_io_t __fsemu_io_hd4=__FSEMU_f_HD4;
  106.  
  107. #define __FSEMU_DEV_TABLE_DECLS \
  108.     &__fsemu_io_rd1,    \
  109.     &__fsemu_io_hd1,    \
  110.     &__fsemu_io_hd2,    \
  111.     &__fsemu_io_hd3,    \
  112.     &__fsemu_io_hd4
  113.    
  114. #define __F_READABLE(x) T_FSF(x,READ)
  115. #define __F_WRITABLE(x) T_FSF(x,WRITE)
  116. #define __F_SEEKABLE(x) T_FSF(x,SEEK)
  117.  
  118. #ifdef __cplusplus
  119. }
  120. #endif
  121.                                  
  122. #endif
  123.