a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
system.cpp
gehe zur Dokumentation dieser Datei
1 // system.cpp : Hilfsfunktionen auf Betriebssystemebene
2 // 1995
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 
6 // FUNCTIONS:
7 // SyOpen() : Datei oeffnen (Verzeichnisfolge!)
8 // SyDat() : Datum in Textform: Wed, 24. Feb 2010 (#dt)
9 // SyTime() : Sortierbares Datum erzeugen JJJJMMTT/hh:mm:ss (#dts)
10 // SyPause() : Sekunden pausieren
11 
12 
13 
14 #include "allegro.hpp"
15 
16 // ***** system initialization
17 int SyInit()
18 {
19  int i=0;
20 
21  uift= new char[15000]; // Platz fuer UIF
22  *uift=0;
23 // Adressen alle auf ""
24  while (i<UIFMAX) uif[i++]=nil;
25 
26  extern CHAR Aextra[]; // in allegro.hpp f.d. UTF-8-Codes (u-Befehle)
27  *Aextra=0; // u-Befehle, for Unicode UTF-8 sequences, see RECORD:Ins()
28  Aextra[8000]=1; // for accent codes: need to be reversed --> utility.cpp, accent()
29  return 1; // OK
30 }
31 
32 
33 // ***** Datei oeffnen, mit Verzeichnisreihenfolge
34 
35 // open file f in mode a, looking first in database path
36 // if not found, then on current path,
37 // if not found, then in prog dir
38 // alter f accordingly
39 FILE *SyOpen(char *f, char *a, char *dbDir)
40 {
41  FILE *handle;
42  char name[PATH_SIZE], Fn[PATH_SIZE], *F0;
43 #ifndef UNIX
44  F0=(f[1]==':')?f+2:f; // f="[D:]filename" --> F0="filename"
45 #else
46  char *p;
47  F0=f;
48 #endif
49  /* // Direktes Oeffnen versuchen
50  if((handle=fopen(f,a))!=(FILE *)NULL)
51  { *Aerror=0; strcpy(Aerror+1,f); return handle;}
52  */
53 // Bei uif und avanti.con zuerst ../etc
54  if (!strncmp(f,"uif",3) || !strncmp(f,"avanti.con",10))
55  {
56  strcpy(name,dbDir);
57 #ifdef UNIX
58  p=name+strlen(name)-2;
59  while (p>name && *p!='/') --p;
60  *p=0;
61  if (p==name)
62  {
63  strcpy(p,"..");
64  p+=2;
65  }
66  sprintf(p,"/etc/%s",f);
67 #else
68  sprintf(name,"..\\etc\\%s",f);
69 #endif
70 
71 
72  if ((handle=fopen(name,a))!=(FILE *)NULL)
73  {
74  *Aerror=0;
75  strcpy(Aerror+1,name);
76  return handle;
77  }
78  }
79 // printf("file %s not found\n",name);
80 
81  strcpy(Fn,F0);
82  strcpy(name,dbDir); // Pfadtrenner steht in fsep (allegro.hpp)
83  if (name[strlen(name)-1]!=*fsep) strcat(name,fsep); // Pfadtrenner am Ende fehlt
84  strcat(name,F0);
85  if (f[1]==':') *name=*f; // now: name=D:path\filename
86 
87 
88  if ((handle=fopen(name,a))!=(FILE *)NULL)
89  {
90  *Aerror=0;
91  strcpy(Aerror+1,name);
92  return handle;
93  }
94 // Aerror+1 enthaelt den tatsaechlichen Namen der geoeffneten Datei
95  // wichtig hoechstens fuer Textzwecke!
96 
97 // unter Windows & UNIX wird ein "Aufrufpfad" ueber eine .ini-Datei der
98 // Variablen pgDir zugewiesen. Die Suche in pgDir muss daher vor dem aktuellen
99 // Verzeichnis=stets Programmdir. erfolgen
100 
101  strcpy(name,F0); // if not found: try without path: D:filename
102  if ((handle=fopen(name,a))!=(FILE*)NULL) return handle;
103 
104  // now, finally, try it on prog_dir
105  if (pgDir[strlen(pgDir)-1]!=*fsep) strcat(pgDir,fsep); // \ am Ende fehlt
106  strcpy(name,pgDir);
107  strcat(name,Fn); // f=prog_dir\filename
108 
109  return fopen(name,a);
110 }
111 
112 
113 // ***** normiertes Datum schreiben
114 void SyDat(CHAR *a) // write dates to a, German way
115 {
116  char aux[30];
117  time_t secs_now;
118  int i;
119 
120  time(&secs_now);
121 
122  strcpy(aux,ctime(&secs_now));
123  strcpy(a,aux);
124  strcpy(a+3,", ");
125  if (aux[8]!='0') strcpy(a+5,aux+8),i=7;
126  else strcpy(a+5,aux+9),i=6;
127  strcpy(a+i,". ");
128  strcpy(a+i+2,aux+4);
129  strcpy(a+i+6,aux+20);
130  a[i+10]=0;
131  return;
132 }
133 
134 
135 // Sortierbares Datum erzeugen
136 
137 void SyTime(CHAR *a) // write exact date and time to a, sortable
138 { // JJJJMMDD/hh:mm:ss
139  char *aux;
140  time_t secs_now;
141  int i;
142  char *mon[]= { "Jan01","Feb02","Mrz03","Apr04","Mai05","Jun06","Jul07",
143  "Aug08","Sep09","Okt10","Nov11","Dez12","Mar03","May05","Oct10","Dec12", "xxx99"
144  } ;
145 
146  time(&secs_now);
147 
148  aux=ctime(&secs_now);
149  strcpy(a,aux+20);
150  i=0;
151  while (strncmp(aux+4,mon[i],3) && i<16) ++i;
152  strcpy(a+4,mon[i]+3);
153  strcpy(a+6,aux+8);
154  if (a[6]==' ') a[6]='0'; // $$951008
155  strcpy(a+8,"/");
156  strcpy(a+9,aux+11);
157  a[17]=0;
158  return;
159 }
160 
161 
162 // Kommandozeilen-Option finden
163 
164 char *SyGetArg(CHAR a,int md) // scan command line options for -a
165 // a // arg option letter
166 // md // 1: srch list from start, 0: from last position
167 // return: addr of text following -a, if not found: 0
168 // z.B. -x -aABC -yz, dann SyGetArg('a') = "ABC", SyGetArg('x') = "x"
169 {
170  static int i;
171  if (md) i=1;
172 
173  while (i<ARGC)
174  {
175  if (*ARGV[i]!='-') ++i;
176  else
177  {
178  if (ARGV[i][1]==a)
179  {
180  if (ARGV[i][2])
181  return ARGV[i]+2; // -aABC : return ABC
182  else if (i+1<ARGC && *ARGV[i+1]!='-')
183  {
184  i+=1; // -a ABC : return ABC
185  return ARGV[i];
186  }
187  else return ARGV[i]+1; // a
188  }
189  ++i;
190  }
191  }
192  return 0;
193 }
194 
195 // **** n Sekunden pausieren
196 
197 void SyPause(int n)
198 {
199 #ifndef UNIX
200  _sleep(n);
201 #else
202  sleep(n);
203 #endif
204  return;
205 }
206 
207 
208 int inkey() // keyboard abfragen (DOS) OBSOLET
209 {
210  return getchar();
211 }
212 
213 /*
214  Copyright 2011 Universitätsbibliothek Braunschweig
215 
216  Licensed under the Apache License, Version 2.0 (the "License");
217  you may not use this file except in compliance with the License.
218  You may obtain a copy of the License at
219 
220  http://www.apache.org/licenses/LICENSE-2.0
221 
222  Unless required by applicable law or agreed to in writing, software
223  distributed under the License is distributed on an "AS IS" BASIS,
224  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
225  See the License for the specific language governing permissions and
226  limitations under the License.
227 */
228 
229