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