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 />
«