Skip to content

Commit f7b7808

Browse files
author
runrevali
committed
Make basic example work
1 parent 25c6306 commit f7b7808

4 files changed

Lines changed: 44 additions & 39 deletions

File tree

libfoundation/src/foundation-file.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static bool __MCFileStreamRead(MCStreamRef p_stream, void *p_buffer, size_t p_am
150150
__MCFileStream *self;
151151
self = (__MCFileStream *)MCStreamGetExtraBytesPtr(p_stream);
152152

153-
return self -> Write(p_buffer, p_amount);
153+
return self -> Read(p_buffer, p_amount);
154154
}
155155

156156
static bool __MCFileStreamWrite(MCStreamRef p_stream, const void *p_data, size_t p_length)

libscript/src/file.mlc

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,38 @@ module com.livecode.file
66

77
public foreign type Stream binds to "kMCStreamTypeInfo"
88

9-
public foreign handler MCFileExecOpenFileForRead(in File as string) as Stream binds to "<builtin>"
10-
public foreign handler MCFileExecOpenFileForWrite(in File as string) as Stream binds to "<builtin>"
11-
public foreign handler MCFileExecOpenFileForUpdate(in File as string) as Stream binds to "<builtin>"
12-
public foreign handler MCFileExecOpenNewFile(in File as string) as Stream binds to "<builtin>"
9+
public foreign handler MCFileExecOpenFileForRead(in File as string) as optional Stream binds to "<builtin>"
10+
public foreign handler MCFileExecOpenFileForWrite(in Create as bool, in File as string) as optional Stream binds to "<builtin>"
11+
public foreign handler MCFileExecOpenFileForUpdate(in Create as bool, in File as string) as optional Stream binds to "<builtin>"
1312

14-
public foreign handler MCFileExecReadFromStream(in Amount as uint, in Source as Stream) as string binds to "<builtin>"
15-
16-
17-
public foreign handler MCFileExecDoNothingToStream(in Source as Stream) as undefined binds to "<builtin>"
13+
public foreign handler MCFileExecReadFromStream(in Amount as uint, in Source as Stream) as data binds to "<builtin>"
1814

1915
--
2016

2117
syntax OpenFileForRead is statement
2218
"open" "read" "only" "stream" "for" "file" <File: Expression>
2319
begin
24-
MCFileExecOpenFileForRead(File, output)
20+
MCFileExecOpenFileForRead(File)
2521
end syntax
2622

2723
syntax OpenFileForWrite is statement
28-
"open" "write" "only" "stream" "for" "file" <File: Expression>
24+
"open" "write" "only" "stream" "for" ("new" <Create=true> | <Create=false>) "file" <File: Expression>
2925
begin
30-
ExecOpenFileForWrite(File)
26+
MCFileExecOpenFileForWrite(Create, File)
3127
end syntax
3228

3329
syntax OpenFileForUpdate is statement
34-
"open" "read" "write" "stream" "for" "file" <File: Expression>
30+
"open" "read" "write" "stream" "for" ("new" <Create=true> | <Create=false>) "file" <File: Expression>
3531
begin
36-
ExecOpenFileForUpdate(File)
32+
MCFileExecOpenFileForUpdate(Create, File)
3733
end syntax
3834

3935
--
4036

4137
syntax ReadFromStream is statement
4238
"read" <Amount: Expression> "from" "stream" <Source: Expression>
4339
begin
44-
MCFileExecReadFromStream(Amount, Source, Result)
40+
MCFileExecReadFromStream(Amount, Source)
4541
end syntax
4642

4743
end module

libscript/src/module-file.cpp

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,54 @@
2121

2222
////////////////////////////////////////////////////////////////////////////////
2323

24-
extern "C" MC_DLLEXPORT void MCFileExecOpenFileForRead(MCStringRef p_filename, MCStreamRef& r_stream)
24+
extern "C" MC_DLLEXPORT MCStreamRef MCFileExecOpenFileForRead(MCStringRef p_filename)
2525
{
26-
if (!MCFileCreateStreamForFile(p_filename, kMCOpenFileModeRead, r_stream))
27-
return;
28-
}
29-
30-
extern "C" MC_DLLEXPORT void MCFileExecOpenFileForWrite(MCStringRef p_filename, MCStreamRef& r_stream)
31-
{
32-
if (!MCFileCreateStreamForFile(p_filename, kMCOpenFileModeWrite, r_stream))
33-
return;
26+
MCStreamRef t_stream;
27+
if (!MCFileCreateStreamForFile(p_filename, kMCOpenFileModeRead, t_stream))
28+
return nil;
29+
30+
return t_stream;
3431
}
3532

36-
extern "C" MC_DLLEXPORT void MCFileExecOpenFileForUpdate(MCStringRef p_filename, MCStreamRef& r_stream)
33+
extern "C" MC_DLLEXPORT MCStreamRef MCFileExecOpenFileForWrite(bool p_create, MCStringRef p_filename, MCStreamRef& r_stream)
3734
{
38-
if (!MCFileCreateStreamForFile(p_filename, kMCOpenFileModeUpdate, r_stream))
39-
return;
35+
MCStreamRef t_stream;
36+
if (!MCFileCreateStreamForFile(p_filename, p_create ? kMCOpenFileModeCreate : kMCOpenFileModeWrite, t_stream))
37+
return nil;
38+
39+
return t_stream;
4040
}
4141

42-
extern "C" MC_DLLEXPORT void MCFileExecOpenNewFile(MCStringRef p_filename, MCStreamRef& r_stream)
42+
extern "C" MC_DLLEXPORT MCStreamRef MCFileExecOpenFileForUpdate(bool p_create, MCStringRef p_filename, MCStreamRef& r_stream)
4343
{
44-
if (!MCFileCreateStreamForFile(p_filename, kMCOpenFileModeCreate, r_stream))
45-
return;
44+
MCStreamRef t_stream;
45+
if (!MCFileCreateStreamForFile(p_filename, p_create ? kMCOpenFileModeCreate : kMCOpenFileModeUpdate, t_stream))
46+
return nil;
47+
48+
return t_stream;
4649
}
4750

48-
extern "C" MC_DLLEXPORT MCStringRef MCFileExecReadFromStream(uindex_t p_amount, MCStreamRef p_stream)
51+
extern "C" MC_DLLEXPORT MCDataRef MCFileExecReadFromStream(uindex_t p_amount, MCStreamRef p_stream)
4952
{
5053
if (!MCStreamIsReadable(p_stream))
5154
{
5255
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason", MCSTR("stream is not readable"), nil);
53-
return;
56+
return MCValueRetain(kMCEmptyData);
5457
}
5558

56-
char t_buffer[p_amount];
59+
byte_t t_buffer[p_amount];
5760

5861
if (!MCStreamRead(p_stream, t_buffer, p_amount))
5962
{
6063
MCErrorCreateAndThrow(kMCGenericErrorTypeInfo, "reason", MCSTR("could not read from stream"), nil);
61-
return;
64+
return MCValueRetain(kMCEmptyData);
6265
}
6366

64-
MCStringCreateWithBytes((const byte_t *)t_buffer, p_amount, kMCStringEncodingUTF8, false, r_result);
67+
MCDataRef t_data;
68+
if (!MCDataCreateWithBytes(t_buffer, p_amount, t_data))
69+
return MCValueRetain(kMCEmptyData);
70+
71+
return t_data;
6572
}
6673

6774

toolchain/lc-compile/test.mlc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -732,12 +732,14 @@ end handler
732732

733733
public handler testFile(inout xResults as list)
734734
variable tStream as Stream
735-
put (open read only stream for file "/Users/alilloyd/Desktop/log.txt") into tStream
735+
open read only stream for file "/Users/alilloyd/Desktop/log.txt"
736+
put the result into tStream
736737

737-
variable tText as string
738-
read 7 from stream tStream into tText
738+
variable tData as data
739+
read 7 from stream tStream
740+
put the result into tData
739741

740-
testLog("File", "ReadFromStream", tText is "Warning", xResults)
742+
--testLog("File", "ReadFromStream", tText is "Warning", xResults)
741743
end handler
742744

743745

0 commit comments

Comments
 (0)