add time tool dependency (for later use)

This commit is contained in:
Kelvin Sherlock 2012-08-26 17:52:27 -04:00
parent 8b771de8d2
commit 1d8bed53a7
4 changed files with 230 additions and 27 deletions

114
main.c
View File

@ -1,6 +1,8 @@
#pragma optimize 79
#include <Locator.h>
#include <TimeTool.h>
#include <tcpip.h>
#include <stdio.h>
#include <stdlib.h>
@ -16,10 +18,44 @@
enum {
kLoaded = 1,
kStarted = 2,
kConnected = 4
kConnected = 4,
kLoadError = -1,
kVersionError = -2
};
Word StartUp(displayPtr fx)
int StartUpTZ(void)
{
Word status;
Word flags = 0;
status = tiStatus();
if (_toolErr)
{
LoadOneTool(0x38, 0x104);
if (_toolErr == toolVersionErr) return kVersionError;
if (_toolErr) return kLoadError;
status = 0;
flags |= kLoaded;
}
if (tiVersion() < 0x0104)
{
return kVersionError;
}
if (!status)
{
tiStartUp();
flags |= kStarted;
}
return flags;
}
int StartUpTCP(displayPtr fx)
{
word status;
word flags = 0;
@ -31,7 +67,8 @@ Word StartUp(displayPtr fx)
if (_toolErr)
{
LoadOneTool(54, 0x0300);
if (_toolErr) return -1;
if (_toolErr == toolVersionErr) return kVersionError;
if (_toolErr) return kLoadError;
status = 0;
flags |= kLoaded;
@ -43,14 +80,14 @@ Word StartUp(displayPtr fx)
{
if (flags & kLoaded)
UnloadOneTool(54);
return -1;
}
return kVersionError;
}
if (!status)
{
TCPIPStartUp();
if (_toolErr) return -1;
if (_toolErr) return kLoadError;
flags |= kStarted;
}
@ -64,22 +101,32 @@ Word StartUp(displayPtr fx)
return flags;
}
void ShutDown(word flags, Boolean force, displayPtr fx)
void ShutDownTZ(int flags)
{
if (flags & kConnected)
{
TCPIPDisconnect(force, fx);
if (_toolErr) return;
}
if (flags & kStarted)
{
TCPIPShutDown();
if (_toolErr) return;
}
if (flags & kLoaded)
{
UnloadOneTool(54);
}
if (flags <= 0) return;
if (flags & kStarted) tiShutDown();
if (flags & kLoaded) UnloadOneTool(0x38);
}
void ShutDownTCP(int flags, Boolean force, displayPtr fx)
{
if (flags <= 0) return;
if (flags & kConnected)
{
TCPIPDisconnect(force, fx);
if (_toolErr) return;
}
if (flags & kStarted)
{
TCPIPShutDown();
if (_toolErr) return;
}
if (flags & kLoaded)
{
UnloadOneTool(54);
}
}
@ -128,7 +175,8 @@ char *get_url_filename(const char *cp, URLComponents *components)
int main(int argc, char **argv)
{
int i;
Word mf;
int mf;
int tf;
int x;
@ -145,16 +193,29 @@ int main(int argc, char **argv)
return 1;
}
mf = StartUp(NULL);
if (mf == -1)
tf = StartUpTZ();
if (tf < 0)
{
fprintf(stderr, "Time Tool 1.0.4 or greater is required.\n");
exit(1);
}
mf = StartUpTCP(NULL);
if (mf < 0)
{
ShutDownTZ(tf);
fprintf(stderr, "Marinetti 3.0b3 or greater is required.\n");
exit(1);
}
if (argc == 1)
{
const char *url;
@ -189,7 +250,8 @@ int main(int argc, char **argv)
}
}
ShutDown(mf, false, NULL);
ShutDownTCP(mf, false, NULL);
ShutDownTZ(tf);
return 0;
}

View File

@ -1,6 +1,7 @@
CFLAGS += $(DEFINES) -v -w
OBJS = main.o gopher.o url.o connection.o readline2.o scheme.o ftype.o setftype.o \
s16debug.o common.o http.o http.utils.o dictionary.o flags.o
s16debug.o common.o http.o http.utils.o dictionary.o flags.o \
time.o
gopher: $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $@
@ -34,6 +35,8 @@ setftype.o: setftype.c
scheme.o: scheme.c url.h
ftype.o: ftype.c
time.o: time.c
s16debug.o: s16debug.c s16debug.h
# tests

View File

@ -29,4 +29,10 @@ int do_gopher(const char *url, URLComponents *components);
int do_http(const char *url, URLComponents *components);
#endif
#ifdef __TYPES__
void tiTimeRec2ISO8601(const TimeRecPtr t, char *str);
void tiTimeRec2GMTString(const TimeRecPtr t, char *str);
#endif
#endif

132
time.c Normal file
View File

@ -0,0 +1,132 @@
#pragma noroot
#pragma optimize -1
#pragma lint -1
#pragma debug 0x8000
#include <timetool.h>
#include <misctool.h>
#include <intmath.h>
/*
* From Silver Platter.
*
*/
// yyyy-mm-ddThh:mm:ssZ
void tiTimeRec2ISO8601(const TimeRecPtr t, char *str)
{
LongWord secs;
tiPrefRec tiPrefs;
TimeRec tr;
tiPrefs.pCount = 3;
tiGetTimePrefs(&tiPrefs);
secs = ConvSeconds(TimeRec2Secs, 0, (Pointer)t);
secs += tiPrefs.secOffset;
ConvSeconds(secs2TimeRec, secs, (Pointer)&tr);
str[0] = 20;
// yyyy-
Int2Dec(tr.year + 1900, &str[1], 4, 0);
str[5] = '-';
// mm-
Int2Dec(tr.month + 1, &str[6], 2, 0);
str[6] |= 0x10; // convert ' ' -> '0'
str[8] = '-';
// ddT
Int2Dec(tr.day + 1, &str[9], 2, 0);
str[9] |= 0x10; // convert ' ' -> '0'
str[11] = 'T';
// hh:
Int2Dec(tr.hour, &str[12], 2, 0);
str[12] |= 0x10; // convert ' ' -> '0'
str[14] = ':';
// mm:
Int2Dec(tr.minute, &str[15], 2, 0);
str[15] |= 0x10; // convert ' ' -> '0'
str[17] = ':';
// ss:
Int2Dec(tr.second, &str[18], 2, 0);
str[18] |= 0x10; // convert ' ' -> '0'
str[20] = 'Z';
}
void tiTimeRec2GMTString(const TimeRecPtr t, char *str)
{
static const char weekday[] = "Sun,Mon,Tue,Wed,Thu,Fri,Sat,";
static const char month[] = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ";
int i;
LongWord secs;
tiPrefRec tiPrefs;
TimeRec tr;
tiPrefs.pCount = 3;
tiGetTimePrefs(&tiPrefs);
secs = ConvSeconds(TimeRec2Secs, 0, (Pointer)t);
secs += tiPrefs.secOffset;
#if 0
//add daylight savings time...
if (ReadBParam(0x5e) & 0x02 == 0) secs += 3600;
#endif
ConvSeconds(secs2TimeRec, secs, (Pointer)&tr);
str[0] = 29;
i = (tr.weekDay - 1) << 2;
// Day of week
str[1] = weekday[i++];
str[2] = weekday[i++];
str[3] = weekday[i++];
str[4] = weekday[i++];
str[5] = ' ';
// day
Int2Dec(tr.day + 1, &str[6], 2, 0);
str[6] |= 0x10;
str[8] = ' ';
i = tr.month << 2;
str[9] = month[i++];
str[10] = month[i++];
str[11] = month[i++];
str[12] = month[i++];
// year
Int2Dec(tr.year + 1900, &str[13], 4, 0);
str[17] = ' ';
Int2Dec(tr.hour, &str[18], 2, 0);
str[18] |= 0x10;
str[20] = ':';
Int2Dec(tr.minute, &str[21], 2, 0);
str[21] |= 0x10;
str[23] = ':';
Int2Dec(tr.second, &str[24], 2, 0);
str[24] |= 0x10;
str[26] = ' ';
str[27] = 'G';
str[28] = 'M';
str[29] = 'T';
}