Annotation of coherent/d/conf/tboot/Examples/hello.c, revision 1.1.1.1

1.1       root        1: /* Test program for tertiary boot.
                      2:  * These are simple tests I found useful in building and
                      3:  * debugging boot library routines.
                      4:  *
                      5:  * La Monte H. Yarroll <[email protected]>, September 1991
                      6:  */
                      7: 
                      8: 
                      9: #include <ctype.h>
                     10: #include <canon.h>
                     11: #include <sys/types.h>
                     12: #include <sys/ino.h>
                     13: #include <sys/inode.h>
                     14: #include <sys/dir.h>
                     15: #include "tboot.h"
                     16: 
                     17: /* CMOS addresses */
                     18: #define LOMEM  0x15    /* Memory size below 1MB.  */
                     19: #define EXTMEM 0x17    /* Memory size avove 1MB.  */
                     20: 
                     21: main()
                     22: {
                     23:        int i, k;
                     24:        long j;
                     25:        unsigned int tmp;
                     26: 
                     27:        char letter;
                     28:        char buffer[BLOCK];
                     29:        char outbuff[LINESIZE]; /* Buffer for outputing numbers.  */
                     30:        char filename[LINESIZE]; /* Name of a file to look up.  */
                     31:        struct inode rootinode;
                     32:        struct inode myinode;
                     33:        struct direct dirent;
                     34: 
                     35:        /* Test the output routines puts() and putchar().  */
                     36:        puts("Hello world!\r\n");
                     37:        
                     38:        
                     39:        /* Open "/" and print out the direct block file entries.  */
                     40:        iopen(&rootinode, (ino_t) 2);
                     41: 
                     42:        /* Read each directory entry one at a time.  */
                     43:        for (i = 0; i < rootinode.i_size; i += sizeof(struct direct)) {
                     44: 
                     45:                iread(&rootinode, (char *) &dirent, (fsize_t) i,
                     46:                      (uint16) sizeof(struct direct));
                     47:                
                     48:                /* Canonicalize it.  */
                     49:                canino(dirent.d_ino);
                     50:                /* NUL terminate the name.  */
                     51:                strncpy(outbuff,
                     52:                        dirent.d_name,
                     53:                        DIRSIZ);
                     54:                outbuff[DIRSIZ] = '\0';
                     55:                /* Print the file name.  */
                     56:                puts(outbuff);
                     57:                puts("     ");
                     58:                /* Print the inode number in hexadecimal.  */
                     59:                itobase((int) (dirent.d_ino), outbuff, 16);
                     60:                puts(outbuff);
                     61:                putchar(':');
                     62:        }
                     63:        
                     64:        /* Get some information from the CMOS.  */
                     65:        puts("\r\nLow memory: ");
                     66:        print16(read16_cmos(LOMEM));
                     67:        puts("K\r\n");
                     68:        puts("Extended memory: ");
                     69:        print16(read_cmos(EXTMEM, &tmp, 2));
                     70:        puts("K\r\n");
                     71: 
                     72:        puts("CMOS:\r\n");
                     73:        for (i=0; i < 52; ++i) {
                     74:                print16(i);
                     75:                puts(": ");
                     76:                print16(read_cmos(i));
                     77:                puts("      ");
                     78:        }
                     79: 
                     80: 
                     81:        /* Test namei() by asking for a file name and looking it up.  */
                     82:        puts("\r\nPlease enter a file name:  ");
                     83:        gets(filename);
                     84:        puts("\r\nThe inode number for that is:  ");
                     85:        itobase((int) namei(filename), outbuff, 16);
                     86:        puts(outbuff);
                     87: 
                     88:        if (0 == iopen(&myinode, namei(filename))) {
                     89:                puts("\r\nCan't open ");
                     90:                puts(filename);
                     91:                puts(".\r\n");
                     92:        }
                     93: 
                     94:        /* Fetch selected blocks from the file.  */
                     95:        puts("\r\nPlease enter an hex offset (! to finish):  ");
                     96:        gets(outbuff);
                     97: 
                     98:        while (outbuff[0] != '!') {
                     99:                puts("\r\n");
                    100:                i = basetoi(outbuff, 16);
                    101:                iread(&myinode, buffer,
                    102:                        ((fsize_t) i * (fsize_t) BLOCK) ,
                    103:                        (short) BLOCK);
                    104:                buffer[BLOCK] = '\0';
                    105:                puts(buffer);
                    106:                puts("\r\nPlease enter an hex offset:  ");
                    107:                gets(outbuff);
                    108:        }
                    109: 
                    110:        puts("\r\nHit '!' to finish echo test.\r\n");
                    111:        /* Echo characters until we get a '!' character.
                    112:         * This tests the input routine getchar(). 
                    113:         */
                    114:        while ((char) '!' != (letter = (char) getchar())) {
                    115:                putchar(letter);
                    116:                itobase((int) letter, outbuff, 16);
                    117:                puts(outbuff);
                    118:                putchar(':');
                    119:        }
                    120: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.