24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

372 volume VI os16<br />

Sorgenti della libreria generale 373<br />

«<br />

«<br />

«<br />

«<br />

3470011 | cs (), ds (), ss (), es (), bp (), sp ());<br />

3470012 | printf ("edata=%04x ebss=%04x heap=%04x\n",<br />

3470013 | (int) &_edata, (int) &_end, heap_min ());<br />

3470014 |}<br />

105.12.15 lib/sys/os16/sys.s<br />

Si veda la sezione 97.37.<br />

3480001 |.global _sys<br />

3480002 |.text<br />

3480003 |;-----------------------------------------------------------------------<br />

3480004 |; Call a system call.<br />

3480005 |;<br />

3480006 |; Please remember that system calls should never be used (called) inside<br />

3480007 |; the kernel code, because system calls cannot be nested for the os16<br />

3480008 |; simple architecture!<br />

3480009 |; If a particular function is necessary inside the kernel, that usually<br />

3480010 |; is made by a system call, an appropriate k_...() function must be<br />

3480011 |; made, to avoid the problem.<br />

3480012 |;<br />

3480013 |;-----------------------------------------------------------------------<br />

3480014 |.align 2<br />

3480015 |_sys:<br />

3480016 | int #0x80<br />

3480017 | ret<br />

105.12.16 lib/sys/os16/umount.c<br />

Si veda la sezione 97.27.<br />

3490001 |#include <br />

3490002 |#include <br />

3490003 |#include <br />

3490004 |#include <br />

3490005 |#include <br />

3490006 |//----------------------------------------------------------------------<br />

3490007 |int<br />

3490008 |umount (const char *path_mnt)<br />

3490009 |{<br />

3490010 | sysmsg_umount_t msg;<br />

3490011 | //<br />

3490012 | strncpy (msg.path_mnt, path_mnt, PATH_MAX);<br />

3490013 | msg.ret = 0;<br />

3490014 | msg.errno = 0;<br />

3490015 | //<br />

3490016 | sys (SYS_UMOUNT, &msg, (sizeof msg));<br />

3490017 | //<br />

3490018 | errno = msg.errno;<br />

3490019 | errln = msg.errln;<br />

3490020 | strncpy (errfn, msg.errfn, PATH_MAX);<br />

3490021 | return (msg.ret);<br />

3490022 |}<br />

105.12.17 lib/sys/os16/z_perror.c<br />

Si veda la sezione 97.45.<br />

3500001 |#include <br />

3500002 |#include <br />

3500003 |#include <br />

3500004 |#include <br />

3500005 |//----------------------------------------------------------------------<br />

3500006 |void<br />

3500007 |z_perror (const char *string)<br />

3500008 |{<br />

3500009 | //<br />

3500010 | // If errno is zero, there is nothing to show.<br />

3500011 | //<br />

3500012 | if (errno == 0)<br />

3500013 | {<br />

3500014 | return;<br />

3500015 | }<br />

3500016 | //<br />

3500017 | // Show the string if there is one.<br />

3500018 | //<br />

3500019 | if (string != NULL && strlen (string) > 0)<br />

3500020 | {<br />

3500021 | z_printf ("%s: ", string);<br />

3500022 | }<br />

3500023 | //<br />

3500024 | // Show the translated error.<br />

3500025 | //<br />

3500026 | if (errfn[0] != 0 && errln != 0)<br />

3500027 | {<br />

3500028 | z_printf ("[%s:%u:%i] %s\n",<br />

3500029 | errfn, errln, errno, strerror (errno));<br />

3500030 | }<br />

3500031 | else<br />

3500032 | {<br />

3500033 | z_printf ("[%i] %s\n", errno, strerror (errno));<br />

3500034 | }<br />

3500035 |}<br />

105.12.18 lib/sys/os16/z_printf.c<br />

Si veda la sezione 97.45.<br />

3510001 |#include <br />

3510002 |//----------------------------------------------------------------------<br />

3510003 |int<br />

3510004 |z_printf (char *format, ...)<br />

3510005 |{<br />

3510006 | va_list ap;<br />

3510007 | va_start (ap, format);<br />

3510008 | return z_vprintf (format, ap);<br />

3510009 |}<br />

105.12.19 lib/sys/os16/z_putchar.c<br />

Si veda la sezione 97.45.<br />

3520001 |#include <br />

3520002 |//----------------------------------------------------------------------<br />

3520003 |int<br />

3520004 |z_putchar (int c)<br />

3520005 |{<br />

3520006 | sysmsg_zpchar_t msg;<br />

3520007 | msg.c = c;<br />

3520008 | sys (SYS_ZPCHAR, &msg, (sizeof msg));<br />

3520009 | return (c);<br />

3520010 |}<br />

105.12.20 lib/sys/os16/z_puts.c<br />

Si veda la sezione 97.45.<br />

3530001 |#include <br />

3530002 |//----------------------------------------------------------------------<br />

3530003 |int<br />

3530004 |z_puts (char *string)<br />

3530005 |{<br />

3530006 | unsigned int i;<br />

3530007 | for (i = 0; string[i] != 0; string++)<br />

3530008 | {<br />

3530009 | z_putchar ((int) string[i]);<br />

3530010 | }<br />

3530011 | z_putchar ((int) ’\n’);<br />

3530012 | return (1);<br />

3530013 |}<br />

105.12.21 lib/sys/os16/z_vprintf.c<br />

Si veda la sezione 97.45.<br />

3540001 |#include <br />

3540002 |//----------------------------------------------------------------------<br />

3540003 |int<br />

3540004 |z_vprintf (char *format, va_list arg)<br />

3540005 |{<br />

3540006 | int ret;<br />

3540007 | sysmsg_zpstring_t msg;<br />

3540008 | msg.string[0] = 0;<br />

3540009 | ret = vsprintf (msg.string, format, arg);<br />

3540010 | sys (SYS_ZPSTRING, &msg, (sizeof msg));<br />

3540011 | return ret;<br />

3540012 |}<br />

105.13 os16: «lib/sys/stat.h»<br />

Si veda la sezione 101.2.<br />

3550001 |#ifndef _SYS_STAT_H<br />

3550002 |#define _SYS_STAT_H 1<br />

3550003 |<br />

3550004 |#include <br />

3550005 |#include <br />

3550006 |#include // dev_t<br />

3550007 | // off_t<br />

3550008 | // blkcnt_t<br />

3550009 | // blksize_t<br />

3550010 | // ino_t<br />

3550011 | // mode_t<br />

3550012 | // nlink_t<br />

3550013 | // uid_t<br />

3550014 | // gid_t<br />

3550015 | // time_t<br />

3550016 |//----------------------------------------------------------------------<br />

3550017 |// File type.<br />

3550018 |//----------------------------------------------------------------------<br />

3550019 |#define S_IFMT 0170000 // File type mask.<br />

3550020 |//<br />

3550021 |#define S_IFBLK 0060000 // Block device file.<br />

3550022 |#define S_IFCHR 0020000 // Character device file.<br />

3550023 |#define S_IFIFO 0010000 // Pipe (FIFO) file.<br />

3550024 |#define S_IFREG 0100000 // Regular file.<br />

3550025 |#define S_IFDIR 0040000 // Directory.<br />

3550026 |#define S_IFLNK 0120000 // Symbolic link.<br />

3550027 |#define S_IFSOCK 0140000 // Unix domain socket.<br />

3550028 |//----------------------------------------------------------------------<br />

3550029 |// Owner user access permissions.<br />

3550030 |//----------------------------------------------------------------------<br />

3550031 |#define S_IRWXU 0000700 // Owner user access permissions mask.<br />

3550032 |//<br />

3550033 |#define S_IRUSR 0000400 // Owner user read access permission.<br />

3550034 |#define S_IWUSR 0000200 // Owner user write access permission.<br />

3550035 |#define S_IXUSR 0000100 // Owner user execution or cross perm.<br />

3550036 |//----------------------------------------------------------------------<br />

3550037 |// Group owner access permissions.<br />

3550038 |//----------------------------------------------------------------------<br />

3550039 |#define S_IRWXG 0000070 // Owner group access permissions mask.<br />

3550040 |//<br />

3550041 |#define S_IRGRP 0000040 // Owner group read access permission.<br />

3550042 |#define S_IWGRP 0000020 // Owner group write access permission.<br />

3550043 |#define S_IXGRP 0000010 // Owner group execution or cross perm.<br />

3550044 |//----------------------------------------------------------------------<br />

3550045 |// Other users access permissions.<br />

3550046 |//----------------------------------------------------------------------<br />

3550047 |#define S_IRWXO 0000007 // Other users access permissions mask.<br />

3550048 |//<br />

3550049 |#define S_IROTH 0000004 // Other users read access permission.<br />

3550050 |#define S_IWOTH 0000002 // Other users write access permissions.<br />

3550051 |#define S_IXOTH 0000001 // Other users execution or cross perm.<br />

3550052 |//----------------------------------------------------------------------<br />

3550053 |// S-bit: in this case there is no mask to select all of them.<br />

3550054 |//----------------------------------------------------------------------<br />

3550055 |#define S_ISUID 0004000 // S-UID.<br />

3550056 |#define S_ISGID 0002000 // S-GID.<br />

3550057 |#define S_ISVTX 0001000 // Sticky.<br />

3550058 |//----------------------------------------------------------------------<br />

3550059 |// Macro-instructions to verify the type of file.<br />

«<br />

«<br />

«<br />

«

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!