Annotation of coherent/d/usr/bin/elvis/osk.c, revision 1.1

1.1     ! root        1: /* osk.c */
        !             2: 
        !             3: /* ------------------------------------------------------------------- *
        !             4:  |
        !             5:  | OS9Lib:  stat(), fstat()
        !             6:  |
        !             7:  |
        !             8:  |     Copyright (c) 1988 by Wolfgang Ocker, Puchheim,
        !             9:  |                           Ulli Dessauer, Germering and
        !            10:  |                           Reimer Mellin, Muenchen
        !            11:  |                           (W-Germany)
        !            12:  |
        !            13:  |  This  programm can  be  copied and  distributed freely  for any
        !            14:  |  non-commercial  purposes.   It can only  be  incorporated  into
        !            15:  |  commercial software with the written permission of the authors.
        !            16:  |
        !            17:  |  If you should modify this program, the authors would appreciate
        !            18:  |  a notice about the changes. Please send a (context) diff or the
        !            19:  |  complete source to:
        !            20:  |
        !            21:  |  address:     Wolfgang Ocker
        !            22:  |               Lochhauserstrasse 35a
        !            23:  |               D-8039 Puchheim
        !            24:  |               West Germany
        !            25:  |
        !            26:  |  e-mail:      [email protected], [email protected], [email protected]
        !            27:  |               pyramid!tmpmbx!recco!weo
        !            28:  |               pyramid!tmpmbx!nitmar!ud
        !            29:  |               pyramid!tmpmbx!ramsys!ram
        !            30:  |
        !            31:  * ----------------------------------------------------------------- */
        !            32: 
        !            33: #ifdef OSK
        !            34: 
        !            35: #define PATCHLEVEL 1
        !            36: 
        !            37: #ifndef VIREC
        !            38: #include <stdio.h>
        !            39: #include "osk.h"
        !            40: #include <modes.h>
        !            41: #include <errno.h>
        !            42: #endif
        !            43: #include <signal.h>
        !            44: #include <sgstat.h>
        !            45: #include <sg_codes.h>
        !            46: #include <direct.h>
        !            47: 
        !            48: /*
        !            49:  * f s t a t
        !            50:  */
        !            51: int fstat(fd, buff)
        !            52:   int         fd;
        !            53:   struct stat *buff;
        !            54: {
        !            55:   struct fildes ftmp;
        !            56:   struct tm     ttmp;
        !            57:   struct _sgr   fopt;
        !            58: 
        !            59:   if (_gs_gfd(fd, &ftmp, 16) < 0) /* 16 insteat of sizeof(struct fildes)   */
        !            60:     return(-1);                   /* used due to a bug in stupid os9net */
        !            61: 
        !            62:   if (_gs_opt(fd, &fopt) < 0)
        !            63:     return(-1);
        !            64: 
        !            65:   ttmp.tm_year  = (int) ftmp.fd_date[0];
        !            66:   ttmp.tm_mon   = (int) ftmp.fd_date[1] - 1;
        !            67:   ttmp.tm_mday  = (int) ftmp.fd_date[2];       
        !            68:   ttmp.tm_hour  = (int) ftmp.fd_date[3];
        !            69:   ttmp.tm_min   = (int) ftmp.fd_date[4];
        !            70:   ttmp.tm_sec   = 0;
        !            71:   ttmp.tm_isdst = -1;
        !            72: 
        !            73:   buff->st_atime = buff->st_mtime = mktime(&ttmp);
        !            74: 
        !            75:   ttmp.tm_year  = (int) ftmp.fd_dcr[0];
        !            76:   ttmp.tm_mon   = (int) ftmp.fd_dcr[1] - 1;
        !            77:   ttmp.tm_mday  = (int) ftmp.fd_dcr[2];        
        !            78:   ttmp.tm_hour  = ttmp.tm_min = ttmp.tm_sec = 0;
        !            79:   ttmp.tm_isdst = -1;
        !            80:   
        !            81:   buff->st_ctime = mktime(&ttmp);
        !            82: 
        !            83:   memcpy(&(buff->st_size), ftmp.fd_fsize, sizeof(long));  /* misalignment! */
        !            84:   buff->st_uid   = ftmp.fd_own[1];
        !            85:   buff->st_gid   = ftmp.fd_own[0];
        !            86:   buff->st_mode  = ftmp.fd_att;
        !            87:   buff->st_nlink = ftmp.fd_link;
        !            88: 
        !            89:   buff->st_ino   = fopt._sgr_fdpsn;
        !            90:   buff->st_dev   = fopt._sgr_dvt;
        !            91: 
        !            92:   return(0);
        !            93: }
        !            94: 
        !            95: /*
        !            96:  * s t a t
        !            97:  */    
        !            98: int stat(filename, buff)
        !            99:   char        *filename;
        !           100:   struct stat *buff;
        !           101: {
        !           102:   register int i, ret;
        !           103: 
        !           104:   if ((i = open(filename, S_IREAD)) < 0)
        !           105:     if ((i = open(filename, S_IFDIR | S_IREAD)) < 0)
        !           106:       return(-1);
        !           107: 
        !           108:   ret = fstat(i, buff);
        !           109:   close(i);
        !           110: 
        !           111:   return(ret);
        !           112: }
        !           113: 
        !           114: /*
        !           115:        unix library functions mist in OSK
        !           116:        Author: Peter Reinig
        !           117: */
        !           118: 
        !           119: /* NOTE: this version of link() is only capable of renaming files, not true
        !           120:  * UNIX-style linking.  That's okay, though, because elvis only uses it for
        !           121:  * renaming.
        !           122:  */
        !           123: link(from,to)
        !           124: char *from,*to;
        !           125: {
        !           126:        char *buffer;
        !           127:        int status;
        !           128:        char *malloc();
        !           129: 
        !           130:        if ((buffer = malloc(strlen(from) + strlen(to) + 12)) == NULL)
        !           131:                return -1;
        !           132:        sprintf(buffer,"rename %s %s\n",from,to);
        !           133:        status = system(buffer);
        !           134:        free(buffer);
        !           135:        return status;
        !           136: }
        !           137: 
        !           138: typedef (*procref)();
        !           139: #define MAX_SIGNAL 10
        !           140: 
        !           141: extern exit();
        !           142: 
        !           143: static int (*sig_table[MAX_SIGNAL])();
        !           144: static int _sig_install = 0;
        !           145: 
        !           146: sig_handler(sig)
        !           147: int sig;
        !           148: {
        !           149:        if ((int) sig_table[sig] > MAX_SIGNAL)
        !           150:                sig_table[sig](sig);
        !           151: }
        !           152: 
        !           153: procref signal(sig,func)
        !           154: int sig;
        !           155: int (*func)();
        !           156: {
        !           157:        int i, (*sav)();
        !           158: 
        !           159:        if (!_sig_install) {
        !           160:                for (i=0; i < MAX_SIGNAL; i++)
        !           161:                        sig_table[i] = exit;
        !           162:                _sig_install = 1;
        !           163:                intercept(sig_handler);
        !           164:        }       
        !           165:        sav = sig_table[sig];
        !           166:        switch ((int) func) {
        !           167:                case SIG_DFL : sig_table[sig] = exit;
        !           168:                                           break;
        !           169:                case SIG_IGN : sig_table[sig] = 0;
        !           170:                                           break;
        !           171:                default      : sig_table[sig] = func;
        !           172:                                           break;
        !           173:        }
        !           174:        return sav;
        !           175: }
        !           176: 
        !           177: perror(str)
        !           178: char *str;
        !           179: {
        !           180:        static int path = 0;
        !           181:        if (!path && (path = open("/dd/sys/Errmsg", S_IREAD)) == -1) {
        !           182:                fprintf(stderr,"Can\'t open error message file\n");
        !           183:                path = 0;
        !           184:        }
        !           185:        if (str && *str) {
        !           186:                fprintf(stderr,"%s: ",str);
        !           187:                fflush(stderr);
        !           188:        }
        !           189:        prerr(path,(short) errno);
        !           190: }
        !           191: 
        !           192: isatty(fd)
        !           193: int fd;
        !           194: {
        !           195:        struct sgbuf buffer;
        !           196:        char type;
        !           197: 
        !           198:        _gs_opt(fd,&buffer);
        !           199:        type = buffer.sg_class;
        !           200:        if (type == DT_SCF)
        !           201:                return 1;
        !           202:        else
        !           203:                return 0;
        !           204: }
        !           205: #endif /* OSK */

unix.superglobalmegacorp.com

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