|
|
1.1 ! root 1: /* ! 2: ! 3: Copyright 1991,1992 Eric R. Smith. All rights reserved. ! 4: ! 5: */ ! 6: ! 7: ! 8: ! 9: #ifndef _filesys_h ! 10: ! 11: #define _filesys_h ! 12: ! 13: ! 14: ! 15: struct filesys; /* forward declaration */ ! 16: ! 17: struct devdrv; /* ditto */ ! 18: ! 19: ! 20: ! 21: typedef struct f_cookie { ! 22: ! 23: struct filesys *fs; /* filesystem that knows about this cookie */ ! 24: ! 25: ushort dev; /* device info (e.g. Rwabs device number) */ ! 26: ! 27: ushort aux; /* extra data that the file system may want */ ! 28: ! 29: long index; /* this+dev uniquely identifies a file */ ! 30: ! 31: } fcookie; ! 32: ! 33: ! 34: ! 35: #define TOS_NAMELEN 13 ! 36: ! 37: ! 38: ! 39: typedef struct dtabuf { ! 40: ! 41: short index; /* index into arrays in the PROC struct */ ! 42: ! 43: long magic; ! 44: ! 45: #define SVALID 0x1234fedc /* magic for a valid search */ ! 46: ! 47: #define EVALID 0x5678ba90 /* magic for an exhausted search */ ! 48: ! 49: ! 50: ! 51: char dta_pat[TOS_NAMELEN+1]; /* pointer to pattern, if necessary */ ! 52: ! 53: char dta_sattrib; /* attributes being searched for */ ! 54: ! 55: /* this stuff is returned to the user */ ! 56: ! 57: char dta_attrib; ! 58: ! 59: short dta_time; ! 60: ! 61: short dta_date; ! 62: ! 63: long dta_size; ! 64: ! 65: char dta_name[TOS_NAMELEN]; ! 66: ! 67: } DTABUF; ! 68: ! 69: ! 70: ! 71: /* structure for opendir/readdir/closedir */ ! 72: ! 73: typedef struct dirstruct { ! 74: ! 75: fcookie fc; /* cookie for this directory */ ! 76: ! 77: ushort index; /* index of the current entry */ ! 78: ! 79: ushort flags; /* flags (e.g. tos or not) */ ! 80: ! 81: #define TOS_SEARCH 0x01 ! 82: ! 83: char fsstuff[60]; /* anything else the file system wants */ ! 84: ! 85: /* NOTE: this must be at least 45 bytes */ ! 86: ! 87: } DIR; ! 88: ! 89: ! 90: ! 91: /* structure for getxattr */ ! 92: ! 93: typedef struct xattr { ! 94: ! 95: ushort mode; ! 96: ! 97: /* file types */ ! 98: ! 99: #define S_IFMT 0170000 /* mask to select file type */ ! 100: ! 101: #define S_IFCHR 0020000 /* BIOS special file */ ! 102: ! 103: #define S_IFDIR 0040000 /* directory file */ ! 104: ! 105: #define S_IFREG 0100000 /* regular file */ ! 106: ! 107: #define S_IFIFO 0120000 /* FIFO */ ! 108: ! 109: #define S_IMEM 0140000 /* memory region or process */ ! 110: ! 111: #define S_IFLNK 0160000 /* symbolic link */ ! 112: ! 113: ! 114: ! 115: /* special bits: setuid, setgid, sticky bit */ ! 116: ! 117: #define S_ISUID 04000 ! 118: ! 119: #define S_ISGID 02000 ! 120: ! 121: #define S_ISVTX 01000 ! 122: ! 123: ! 124: ! 125: /* file access modes for user, group, and other*/ ! 126: ! 127: #define S_IRUSR 0400 ! 128: ! 129: #define S_IWUSR 0200 ! 130: ! 131: #define S_IXUSR 0100 ! 132: ! 133: #define S_IRGRP 0040 ! 134: ! 135: #define S_IWGRP 0020 ! 136: ! 137: #define S_IXGRP 0010 ! 138: ! 139: #define S_IROTH 0004 ! 140: ! 141: #define S_IWOTH 0002 ! 142: ! 143: #define S_IXOTH 0001 ! 144: ! 145: #define DEFAULT_DIRMODE (0777) ! 146: ! 147: #define DEFAULT_MODE (0666) ! 148: ! 149: long index; ! 150: ! 151: ushort dev; ! 152: ! 153: ushort reserved1; ! 154: ! 155: ushort nlink; ! 156: ! 157: ushort uid; ! 158: ! 159: ushort gid; ! 160: ! 161: long size; ! 162: ! 163: long blksize; ! 164: ! 165: long nblocks; ! 166: ! 167: short mtime, mdate; ! 168: ! 169: short atime, adate; ! 170: ! 171: short ctime, cdate; ! 172: ! 173: short attr; ! 174: ! 175: /* defines for TOS attribute bytes */ ! 176: ! 177: #ifndef FA_RDONLY ! 178: ! 179: #define FA_RDONLY 0x01 ! 180: ! 181: #define FA_HIDDEN 0x02 ! 182: ! 183: #define FA_SYSTEM 0x04 ! 184: ! 185: #define FA_LABEL 0x08 ! 186: ! 187: #define FA_DIR 0x10 ! 188: ! 189: #define FA_CHANGED 0x20 ! 190: ! 191: #endif ! 192: ! 193: short reserved2; ! 194: ! 195: long reserved3[2]; ! 196: ! 197: } XATTR; ! 198: ! 199: ! 200: ! 201: typedef struct fileptr { ! 202: ! 203: short links; /* number of copies of this descriptor */ ! 204: ! 205: ushort flags; /* file open mode and other file flags */ ! 206: ! 207: long pos; /* position in file */ ! 208: ! 209: long devinfo; /* device driver specific info */ ! 210: ! 211: fcookie fc; /* file system cookie for this file */ ! 212: ! 213: struct devdrv *dev; /* device driver that knows how to deal with this */ ! 214: ! 215: struct fileptr *next; /* link to next fileptr for this file */ ! 216: ! 217: } FILEPTR; ! 218: ! 219: ! 220: ! 221: struct flock { ! 222: ! 223: short l_type; /* type of lock */ ! 224: ! 225: #define F_RDLCK 0 ! 226: ! 227: #define F_WRLCK 1 ! 228: ! 229: #define F_UNLCK 3 ! 230: ! 231: short l_whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ ! 232: ! 233: long l_start; /* start of locked region */ ! 234: ! 235: long l_len; /* length of locked region */ ! 236: ! 237: short l_pid; /* pid of locking process ! 238: ! 239: (F_GETLK only) */ ! 240: ! 241: }; ! 242: ! 243: ! 244: ! 245: /* structure for internal kernel locks */ ! 246: ! 247: typedef struct ilock { ! 248: ! 249: struct flock l; /* the actual lock */ ! 250: ! 251: struct ilock *next; /* next lock in the list */ ! 252: ! 253: long reserved[4]; /* reserved for future expansion */ ! 254: ! 255: } LOCK; ! 256: ! 257: ! 258: ! 259: typedef struct devdrv { ! 260: ! 261: long (*open) P_((FILEPTR *f)); ! 262: ! 263: long (*write) P_((FILEPTR *f, const char *buf, long bytes)); ! 264: ! 265: long (*read) P_((FILEPTR *f, char *buf, long bytes)); ! 266: ! 267: long (*lseek) P_((FILEPTR *f, long where, int whence)); ! 268: ! 269: long (*ioctl) P_((FILEPTR *f, int mode, void *buf)); ! 270: ! 271: long (*datime) P_((FILEPTR *f, short *timeptr, int rwflag)); ! 272: ! 273: long (*close) P_((FILEPTR *f, int pid)); ! 274: ! 275: long (*select) P_((FILEPTR *f, long proc, int mode)); ! 276: ! 277: void (*unselect) P_((FILEPTR *f, long proc, int mode)); ! 278: ! 279: } DEVDRV; ! 280: ! 281: ! 282: ! 283: typedef struct filesys { ! 284: ! 285: struct filesys *next; /* link to next file system on chain */ ! 286: ! 287: long fsflags; ! 288: ! 289: #define FS_KNOPARSE 0x01 /* kernel shouldn't do parsing */ ! 290: ! 291: #define FS_CASESENSITIVE 0x02 /* file names are case sensitive */ ! 292: ! 293: #define FS_NOXBIT 0x04 /* if a file can be read, it can be executed */ ! 294: ! 295: ! 296: ! 297: long (*root) P_((int drv, fcookie *fc)); ! 298: ! 299: long (*lookup) P_((fcookie *dir, const char *name, fcookie *fc)); ! 300: ! 301: long (*creat) P_((fcookie *dir, const char *name, unsigned mode, ! 302: ! 303: int attrib, fcookie *fc)); ! 304: ! 305: DEVDRV *(*getdev) P_((fcookie *fc, long *devspecial)); ! 306: ! 307: long (*getxattr) P_((fcookie *file, XATTR *xattr)); ! 308: ! 309: long (*chattr) P_((fcookie *file, int attr)); ! 310: ! 311: long (*chown) P_((fcookie *file, int uid, int gid)); ! 312: ! 313: long (*chmode) P_((fcookie *file, unsigned mode)); ! 314: ! 315: long (*mkdir) P_((fcookie *dir, const char *name, unsigned mode)); ! 316: ! 317: long (*rmdir) P_((fcookie *dir, const char *name)); ! 318: ! 319: long (*remove) P_((fcookie *dir, const char *name)); ! 320: ! 321: long (*getname) P_((fcookie *relto, fcookie *dir, char *pathname)); ! 322: ! 323: long (*rename) P_((fcookie *olddir, char *oldname, ! 324: ! 325: fcookie *newdir, const char *newname)); ! 326: ! 327: long (*opendir) P_((DIR *dirh, int tosflag)); ! 328: ! 329: long (*readdir) P_((DIR *dirh, char *name, int namelen, fcookie *fc)); ! 330: ! 331: long (*rewinddir) P_((DIR *dirh)); ! 332: ! 333: long (*closedir) P_((DIR *dirh)); ! 334: ! 335: long (*pathconf) P_((fcookie *dir, int which)); ! 336: ! 337: long (*dfree) P_((fcookie *dir, long *buf)); ! 338: ! 339: long (*writelabel) P_((fcookie *dir, const char *name)); ! 340: ! 341: long (*readlabel) P_((fcookie *dir, char *name, int namelen)); ! 342: ! 343: long (*symlink) P_((fcookie *dir, const char *name, const char *to)); ! 344: ! 345: long (*readlink) P_((fcookie *dir, char *buf, int len)); ! 346: ! 347: long (*hardlink) P_((fcookie *fromdir, const char *fromname, ! 348: ! 349: fcookie *todir, const char *toname)); ! 350: ! 351: long (*fscntl) P_((fcookie *dir, const char *name, int cmd, long arg)); ! 352: ! 353: long (*dskchng) P_((int drv)); ! 354: ! 355: long zero; ! 356: ! 357: } FILESYS; ! 358: ! 359: ! 360: ! 361: /* ! 362: ! 363: * this is the structure passed to loaded file systems to tell them ! 364: ! 365: * about the kernel ! 366: ! 367: */ ! 368: ! 369: ! 370: ! 371: struct kerinfo { ! 372: ! 373: short maj_version; /* kernel version number */ ! 374: ! 375: short min_version; /* minor kernel version number */ ! 376: ! 377: ushort default_perm; /* default file permissions */ ! 378: ! 379: short reserved1; /* room for expansion */ ! 380: ! 381: ! 382: ! 383: /* OS functions */ ! 384: ! 385: Func *bios_tab; /* pointer to the BIOS entry points */ ! 386: ! 387: Func *dos_tab; /* pointer to the GEMDOS entry points */ ! 388: ! 389: ! 390: ! 391: /* media change vector */ ! 392: ! 393: void (*drvchng) P_((unsigned)); ! 394: ! 395: ! 396: ! 397: /* Debugging stuff */ ! 398: ! 399: void (*trace) P_((const char *, ...)); ! 400: ! 401: void (*debug) P_((const char *, ...)); ! 402: ! 403: void (*alert) P_((const char *, ...)); ! 404: ! 405: EXITING void (*fatal) P_((const char *, ...)); ! 406: ! 407: ! 408: ! 409: /* memory allocation functions */ ! 410: ! 411: void * (*kmalloc) P_((long)); ! 412: ! 413: void (*kfree) P_((void *)); ! 414: ! 415: void * (*umalloc) P_((long)); ! 416: ! 417: void (*ufree) P_((void *)); ! 418: ! 419: ! 420: ! 421: /* utility functions for string manipulation */ ! 422: ! 423: int (*strnicmp) P_((const char *, const char *, int)); ! 424: ! 425: int (*stricmp) P_((const char *, const char *)); ! 426: ! 427: char * (*strlwr) P_((char *)); ! 428: ! 429: char * (*strupr) P_((char *)); ! 430: ! 431: int (*sprintf) P_((char *, const char *, ...)); ! 432: ! 433: ! 434: ! 435: /* utility functions for manipulating time */ ! 436: ! 437: void (*millis_time) P_((unsigned long, short *)); ! 438: ! 439: long (*unixtim) P_((unsigned, unsigned)); ! 440: ! 441: long (*dostim) P_((long)); ! 442: ! 443: ! 444: ! 445: /* utility functions for dealing with pauses, or for putting processes ! 446: ! 447: * to sleep ! 448: ! 449: */ ! 450: ! 451: void (*nap) P_((unsigned)); ! 452: ! 453: void (*sleep) P_((int que, long cond)); ! 454: ! 455: void (*wake) P_((int que, long cond)); ! 456: ! 457: void (*wakeselect) P_((long param)); ! 458: ! 459: ! 460: ! 461: /* file system utility functions */ ! 462: ! 463: int (*denyshare) P_((FILEPTR *, FILEPTR *)); ! 464: ! 465: ! 466: ! 467: /* reserved for future use */ ! 468: ! 469: LOCK * (*denylock) P_((LOCK *, LOCK *)); ! 470: ! 471: long res2[9]; ! 472: ! 473: }; ! 474: ! 475: ! 476: ! 477: /* flags for open() modes */ ! 478: ! 479: #define O_RWMODE 0x03 /* isolates file read/write mode */ ! 480: ! 481: # define O_RDONLY 0x00 ! 482: ! 483: # define O_WRONLY 0x01 ! 484: ! 485: # define O_RDWR 0x02 ! 486: ! 487: # define O_EXEC 0x03 /* execute file; used by kernel only */ ! 488: ! 489: ! 490: ! 491: /* 0x04 is for future expansion */ ! 492: ! 493: #define O_APPEND 0x08 /* all writes go to end of file */ ! 494: ! 495: ! 496: ! 497: #define O_SHMODE 0x70 /* isolates file sharing mode */ ! 498: ! 499: # define O_COMPAT 0x00 /* compatibility mode */ ! 500: ! 501: # define O_DENYRW 0x10 /* deny both read and write access */ ! 502: ! 503: # define O_DENYW 0x20 /* deny write access to others */ ! 504: ! 505: # define O_DENYR 0x30 /* deny read access to others */ ! 506: ! 507: # define O_DENYNONE 0x40 /* don't deny any access to others */ ! 508: ! 509: ! 510: ! 511: #define O_NOINHERIT 0x80 /* private file (not passed to child) */ ! 512: ! 513: ! 514: ! 515: #define O_NDELAY 0x100 /* don't block for i/o on this file */ ! 516: ! 517: #define O_CREAT 0x200 /* create file if it doesn't exist */ ! 518: ! 519: #define O_TRUNC 0x400 /* truncate file to 0 bytes if it does exist */ ! 520: ! 521: #define O_EXCL 0x800 /* fail open if file exists */ ! 522: ! 523: ! 524: ! 525: #define O_USER 0x0fff /* isolates user-settable flag bits */ ! 526: ! 527: ! 528: ! 529: #define O_GLOBAL 0x1000 /* for opening a global file */ ! 530: ! 531: ! 532: ! 533: /* kernel mode bits -- the user can't set these! */ ! 534: ! 535: #define O_TTY 0x2000 ! 536: ! 537: #define O_HEAD 0x4000 ! 538: ! 539: #define O_LOCK 0x8000 ! 540: ! 541: ! 542: ! 543: /* GEMDOS file attributes */ ! 544: ! 545: ! 546: ! 547: /* macros to be applied to FILEPTRS to determine their type */ ! 548: ! 549: #define is_terminal(f) (f->flags & O_TTY) ! 550: ! 551: ! 552: ! 553: /* lseek() origins */ ! 554: ! 555: #define SEEK_SET 0 /* from beginning of file */ ! 556: ! 557: #define SEEK_CUR 1 /* from current location */ ! 558: ! 559: #define SEEK_END 2 /* from end of file */ ! 560: ! 561: ! 562: ! 563: /* The requests for Dpathconf() */ ! 564: ! 565: #define DP_IOPEN 0 /* internal limit on # of open files */ ! 566: ! 567: #define DP_MAXLINKS 1 /* max number of hard links to a file */ ! 568: ! 569: #define DP_PATHMAX 2 /* max path name length */ ! 570: ! 571: #define DP_NAMEMAX 3 /* max length of an individual file name */ ! 572: ! 573: #define DP_ATOMIC 4 /* # of bytes that can be written atomically */ ! 574: ! 575: #define DP_TRUNC 5 /* file name truncation behavior */ ! 576: ! 577: # define DP_NOTRUNC 0 /* long filenames give an error */ ! 578: ! 579: # define DP_AUTOTRUNC 1 /* long filenames truncated */ ! 580: ! 581: # define DP_DOSTRUNC 2 /* DOS truncation rules in effect */ ! 582: ! 583: #define DP_CASE 6 ! 584: ! 585: # define DP_CASESENS 0 /* case sensitive */ ! 586: ! 587: # define DP_CASECONV 1 /* case always converted */ ! 588: ! 589: # define DP_CASEINSENS 2 /* case insensitive, preserved */ ! 590: ! 591: #define DP_MAXREQ 6 /* highest legal request */ ! 592: ! 593: ! 594: ! 595: /* Dpathconf and Sysconf return this when a value is not limited ! 596: ! 597: (or is limited only by available memory) */ ! 598: ! 599: ! 600: ! 601: #define UNLIMITED 0x7fffffffL ! 602: ! 603: ! 604: ! 605: /* various character constants and defines for TTY's */ ! 606: ! 607: #define MiNTEOF 0x0000ff1a /* 1a == ^Z */ ! 608: ! 609: ! 610: ! 611: /* defines for tty_read */ ! 612: ! 613: #define RAW 0 ! 614: ! 615: #define COOKED 0x1 ! 616: ! 617: #define NOECHO 0 ! 618: ! 619: #define ECHO 0x2 ! 620: ! 621: #define ESCSEQ 0x04 /* cursor keys, etc. get escape sequences */ ! 622: ! 623: ! 624: ! 625: /* constants for Fcntl calls */ ! 626: ! 627: #define F_DUPFD 0 /* handled by kernel */ ! 628: ! 629: #define F_GETFD 1 /* handled by kernel */ ! 630: ! 631: #define F_SETFD 2 /* handled by kernel */ ! 632: ! 633: # define FD_CLOEXEC 1 /* close on exec flag */ ! 634: ! 635: ! 636: ! 637: #define F_GETFL 3 /* handled by kernel */ ! 638: ! 639: #define F_SETFL 4 /* handled by kernel */ ! 640: ! 641: #define F_GETLK 5 ! 642: ! 643: #define F_SETLK 6 ! 644: ! 645: ! 646: ! 647: /* more constants for various Fcntl's */ ! 648: ! 649: #define FSTAT (('F'<< 8) | 0) /* handled by kernel */ ! 650: ! 651: #define FIONREAD (('F'<< 8) | 1) ! 652: ! 653: #define FIONWRITE (('F'<< 8) | 2) ! 654: ! 655: #define TIOCGETP (('T'<< 8) | 0) ! 656: ! 657: #define TIOCSETP (('T'<< 8) | 1) ! 658: ! 659: #define TIOCSETN TIOCSETP ! 660: ! 661: #define TIOCGETC (('T'<< 8) | 2) ! 662: ! 663: #define TIOCSETC (('T'<< 8) | 3) ! 664: ! 665: #define TIOCGLTC (('T'<< 8) | 4) ! 666: ! 667: #define TIOCSLTC (('T'<< 8) | 5) ! 668: ! 669: #define TIOCGPGRP (('T'<< 8) | 6) ! 670: ! 671: #define TIOCSPGRP (('T'<< 8) | 7) ! 672: ! 673: #define TIOCFLUSH (('T'<< 8) | 8) ! 674: ! 675: #define TIOCSTOP (('T'<< 8) | 9) ! 676: ! 677: #define TIOCSTART (('T'<< 8) | 10) ! 678: ! 679: #define TIOCGWINSZ (('T'<< 8) | 11) ! 680: ! 681: #define TIOCSWINSZ (('T'<< 8) | 12) ! 682: ! 683: #define TIOCGXKEY (('T'<< 8) | 13) ! 684: ! 685: #define TIOCSXKEY (('T'<< 8) | 14) ! 686: ! 687: #define TIOCIBAUD (('T'<< 8) | 18) ! 688: ! 689: #define TIOCOBAUD (('T'<< 8) | 19) ! 690: ! 691: #define TIOCCBRK (('T'<< 8) | 20) ! 692: ! 693: #define TIOCSBRK (('T'<< 8) | 21) ! 694: ! 695: #define TIOCGFLAGS (('T'<< 8) | 22) ! 696: ! 697: #define TIOCSFLAGS (('T'<< 8) | 23) ! 698: ! 699: ! 700: ! 701: #define PPROCADDR (('P'<< 8) | 1) ! 702: ! 703: #define PBASEADDR (('P'<< 8) | 2) ! 704: ! 705: #define PCTXTSIZE (('P'<< 8) | 3) ! 706: ! 707: #define PSETFLAGS (('P'<< 8) | 4) ! 708: ! 709: #define PGETFLAGS (('P'<< 8) | 5) ! 710: ! 711: ! 712: ! 713: #define SHMGETBLK (('M'<< 8) | 0) ! 714: ! 715: #define SHMSETBLK (('M'<< 8) | 1) ! 716: ! 717: ! 718: ! 719: /* terminal control constants (tty.sg_flags) */ ! 720: ! 721: #define T_CRMOD 0x0001 ! 722: ! 723: #define T_CBREAK 0x0002 ! 724: ! 725: #define T_ECHO 0x0004 ! 726: ! 727: /* #define T_XTABS 0x0008 unimplemented*/ ! 728: ! 729: #define T_RAW 0x0010 ! 730: ! 731: /* #define T_LCASE 0x0020 unimplemented */ ! 732: ! 733: ! 734: ! 735: #define T_NOFLSH 0x0040 /* don't flush buffer when signals ! 736: ! 737: are received */ ! 738: ! 739: #define T_TOS 0x0080 ! 740: ! 741: #define T_TOSTOP 0x0100 ! 742: ! 743: #define T_XKEY 0x0200 /* Fread returns escape sequences for ! 744: ! 745: cursor keys, etc. */ ! 746: ! 747: /* 0x0400 and 0x0800 still available */ ! 748: ! 749: #define T_TANDEM 0x1000 ! 750: ! 751: #define T_RTSCTS 0x2000 ! 752: ! 753: #define T_EVENP 0x4000 /* EVENP and ODDP are mutually exclusive */ ! 754: ! 755: #define T_ODDP 0x8000 ! 756: ! 757: ! 758: ! 759: #define TF_FLAGS 0xF000 ! 760: ! 761: ! 762: ! 763: /* some flags for TIOC[GS]FLAGS */ ! 764: ! 765: #define TF_STOPBITS 0x0003 ! 766: ! 767: #define TF_1STOP 0x0001 ! 768: ! 769: #define TF_15STOP 0x0002 ! 770: ! 771: #define TF_2STOP 0x0003 ! 772: ! 773: ! 774: ! 775: #define TF_CHARBITS 0x000C ! 776: ! 777: #define TF_8BIT 0 ! 778: ! 779: #define TF_7BIT 0x4 ! 780: ! 781: #define TF_6BIT 0x8 ! 782: ! 783: #define TF_5BIT 0xC ! 784: ! 785: ! 786: ! 787: /* the following are terminal status flags (tty.state) */ ! 788: ! 789: /* (the low byte of tty.state indicates a part of an escape sequence still ! 790: ! 791: * hasn't been read by Fread, and is an index into that escape sequence) ! 792: ! 793: */ ! 794: ! 795: #define TS_ESC 0x00ff ! 796: ! 797: #define TS_HOLD 0x1000 /* hold (e.g. ^S/^Q) */ ! 798: ! 799: #define TS_COOKED 0x8000 /* interpret control chars */ ! 800: ! 801: ! 802: ! 803: /* structures for terminals */ ! 804: ! 805: struct tchars { ! 806: ! 807: char t_intrc; ! 808: ! 809: char t_quitc; ! 810: ! 811: char t_startc; ! 812: ! 813: char t_stopc; ! 814: ! 815: char t_eofc; ! 816: ! 817: char t_brkc; ! 818: ! 819: }; ! 820: ! 821: ! 822: ! 823: struct ltchars { ! 824: ! 825: char t_suspc; ! 826: ! 827: char t_dsuspc; ! 828: ! 829: char t_rprntc; ! 830: ! 831: char t_flushc; ! 832: ! 833: char t_werasc; ! 834: ! 835: char t_lnextc; ! 836: ! 837: }; ! 838: ! 839: ! 840: ! 841: struct sgttyb { ! 842: ! 843: char sg_ispeed; ! 844: ! 845: char sg_ospeed; ! 846: ! 847: char sg_erase; ! 848: ! 849: char sg_kill; ! 850: ! 851: ushort sg_flags; ! 852: ! 853: }; ! 854: ! 855: ! 856: ! 857: struct winsize { ! 858: ! 859: short ws_row; ! 860: ! 861: short ws_col; ! 862: ! 863: short ws_xpixel; ! 864: ! 865: short ws_ypixel; ! 866: ! 867: }; ! 868: ! 869: ! 870: ! 871: struct xkey { ! 872: ! 873: short xk_num; ! 874: ! 875: char xk_def[8]; ! 876: ! 877: }; ! 878: ! 879: ! 880: ! 881: struct tty { ! 882: ! 883: short pgrp; /* process group of terminal */ ! 884: ! 885: short state; /* terminal status, e.g. stopped */ ! 886: ! 887: short use_cnt; /* number of times terminal is open */ ! 888: ! 889: short res1; /* reserved for future expansion */ ! 890: ! 891: struct sgttyb sg; ! 892: ! 893: struct tchars tc; ! 894: ! 895: struct ltchars ltc; ! 896: ! 897: struct winsize wsiz; ! 898: ! 899: long rsel; /* selecting process for read */ ! 900: ! 901: long wsel; /* selecting process for write */ ! 902: ! 903: char *xkey; /* extended keyboard table */ ! 904: ! 905: long resrvd[3]; /* for future expansion */ ! 906: ! 907: }; ! 908: ! 909: ! 910: ! 911: /* Dcntl constants and types */ ! 912: ! 913: #define DEV_NEWTTY 0xde00 ! 914: ! 915: #define DEV_NEWBIOS 0xde01 ! 916: ! 917: #define DEV_INSTALL 0xde02 ! 918: ! 919: ! 920: ! 921: struct dev_descr { ! 922: ! 923: DEVDRV *driver; ! 924: ! 925: short dinfo; ! 926: ! 927: short flags; ! 928: ! 929: struct tty *tty; ! 930: ! 931: long reserved[4]; ! 932: ! 933: }; ! 934: ! 935: ! 936: ! 937: /* external variables */ ! 938: ! 939: ! 940: ! 941: #define NUM_DRIVES 32 ! 942: ! 943: extern FILESYS *drives[NUM_DRIVES]; ! 944: ! 945: ! 946: ! 947: #define BIOSDRV ('V'-'A') ! 948: ! 949: #define PIPEDRV ('Q'-'A') ! 950: ! 951: #define PROCDRV ('X'-'A') ! 952: ! 953: #define UNIDRV ('U'-'A') ! 954: ! 955: ! 956: ! 957: #define PSEUDODRVS ((1L<<BIOSDRV)|(1L<<PIPEDRV)|(1L<<PROCDRV)|(1L<<UNIDRV)) ! 958: ! 959: ! 960: ! 961: #define PROC_BASE_DEV 0xA000 ! 962: ! 963: #define SHMDEVICE 0xB000 ! 964: ! 965: ! 966: ! 967: extern struct tty default_tty; ! 968: ! 969: extern char follow_links[]; ! 970: ! 971: ! 972: ! 973: #endif /* _filesys_h */ ! 974:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.