|
|
1.1 ! root 1: /* Bootable program to list files in /. ! 2: * This is an example of an alternate bootable program. ! 3: * Here is it's Makefile entry: ! 4: * dir: dir.o $(OBJECTS) ! 5: * $(LD) -o dir $(OBJECTS) dir.o $(LIBS) ! 6: * ! 7: * Take great care in selecting routines from libc. In particular, ! 8: * you can not use ANY of the stdio functions (including sprintf()). ! 9: * Avoid anything else that might do system calls. ! 10: * ! 11: * La Monte H. Yarroll <[email protected]>, September 1991 ! 12: */ ! 13: ! 14: #include <ctype.h> ! 15: #include <canon.h> ! 16: #include <sys/types.h> ! 17: #include <sys/ino.h> ! 18: #include <sys/inode.h> ! 19: #include <sys/dir.h> ! 20: #include "tboot.h" ! 21: ! 22: main() ! 23: { ! 24: int i, j; ! 25: char outbuff[LINESIZE]; /* Buffer for outputing numbers. */ ! 26: struct inode rootinode; ! 27: struct direct dirent; ! 28: ! 29: /* Open "/" and print out the direct block file entries. */ ! 30: iopen(&rootinode, (ino_t) 2); ! 31: ! 32: /* Read each directory entry one at a time. */ ! 33: /* We are careful to print an even fraction of 80 for each ! 34: * directory entry, so that everything lines up nicely. ! 35: */ ! 36: for (i = 0; i < rootinode.i_size; i += sizeof(struct direct)) { ! 37: ! 38: iread(&rootinode, (char *) &dirent, (fsize_t) i, ! 39: (uint16) sizeof(struct direct)); ! 40: ! 41: /* NUL terminate the name. */ ! 42: strncpy(outbuff, ! 43: dirent.d_name, ! 44: DIRSIZ); ! 45: outbuff[DIRSIZ] = '\0'; ! 46: /* Print the file name. */ ! 47: puts(outbuff); ! 48: for (j = DIRSIZ - strlen(outbuff); j > 0; --j) { ! 49: putchar(' '); ! 50: } ! 51: puts(" :"); /* Bring total to 16 (80/5) characters. */ ! 52: } ! 53: ! 54: } /* main() */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.