1228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum/* Fudge unix isatty and fileno for RISCOS */ 2228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 3e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum#include "unixstuff.h" 4228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum#include <math.h> 5e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum#include <time.h> 6e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum#include "oslib/osfile.h" 7228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 8228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossumint fileno(FILE *f) 9228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum{ return (int)f; 10228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 11228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 12228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossumint isatty(int fn) 13228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum{ return (fn==fileno(stdin)); 14228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 15228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 16228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossumbits unixtime(bits ld,bits ex) 17228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum{ ld&=0xFF; 18228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum ld-=51; 19e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum if(ex<1855547904U) ld--; 20228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum ex-=1855548004U; 21e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return ex/100+42949673U*ld-ld/25; 22228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 23228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 24228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 25e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum/* from RISC OS infozip, preserves filetype in ld */ 26e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossumint acorntime(bits *ex, bits *ld, time_t utime) 27e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum{ 28e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum unsigned timlo; /* 3 lower bytes of acorn file-time plus carry byte */ 29e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum unsigned timhi; /* 2 high bytes of acorn file-time */ 30e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum 31e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum timlo = ((unsigned)utime & 0x00ffffffU) * 100 + 0x00996a00U; 32e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum timhi = ((unsigned)utime >> 24); 33e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum timhi = timhi * 100 + 0x0000336eU + (timlo >> 24); 34e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum if (timhi & 0xffff0000U) 35e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return 1; /* calculation overflow, do not change time */ 36e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum 37e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum /* insert the five time bytes into loadaddr and execaddr variables */ 38e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum *ex = (timlo & 0x00ffffffU) | ((timhi & 0x000000ffU) << 24); 39e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum *ld = (*ld & 0xffffff00U) | ((timhi >> 8) & 0x000000ffU); 40e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum 41e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return 0; /* subject to future extension to signal overflow */ 42e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum} 43228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 44228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 45228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossumint isdir(char *fn) 46228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum{ int ob; 47e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum if(xosfile_read_stamped_no_path(fn,&ob,0,0,0,0,0)) return 0; 48228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum switch (ob) 49e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum { case osfile_IS_DIR:return 1; 50e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum case osfile_IS_IMAGE:return 1; 51228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum } 52e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return 0; 53228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 54228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 55228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossumint isfile(char *fn) 56e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum{ int ob; 57e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum if(xosfile_read_stamped_no_path(fn,&ob,0,0,0,0,0)) return 0; 58228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum switch (ob) 59e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum { case osfile_IS_FILE:return 1; 60e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum case osfile_IS_IMAGE:return 1; 61228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum } 62e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return 0; 63228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 64228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum 65e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossumint object_exists(char *fn) 66e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum{ int ob; 67e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum if(xosfile_read_stamped_no_path(fn,&ob,0,0,0,0,0)) return 0; 68228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum switch (ob) 69e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum { case osfile_IS_FILE:return 1; 70e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum case osfile_IS_DIR:return 1; 71e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum case osfile_IS_IMAGE:return 1; 72228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum } 73e877f8ba3306be0c76476c1f841d6f5388b675b7Guido van Rossum return 0; 74228d80736c39e41a6b46dad211df0ba871b0c8f8Guido van Rossum} 75