Re: [BLACKBOX] Merge ASCII text files

From: Campbell, Robert (SELEX GALILEO, UK) <robert.d.campbell{([at]})nowhere.xy>
Date: Fri, 27 Jul 2012 07:56:34 +0000

----boundary-LibPST-iamunique-590092360_-_-
Content-type: text/plain

What happens if one of the files has an odd number of Bytes?

Surely it is simpler and more efficient to use the Stores.Reader's rider (ie a Files.Reader) directly?


Robert

>> -----Original Message-----
>> From: BlackBox [mailto:BLACKBOX{([at]})nowhere.xy
>> Glassberg
>> Sent: 27 July 2012 03:08
>> To: BLACKBOX{([at]})nowhere.xy
>> Subject: Re: [BLACKBOX] Merge ASCII text files
>>
>> *** WARNING ***
>>
>> This message has originated outside your organisation,
>> either from an external partner or the Global Internet.
>> Keep this in mind if you answer this message.
>>
>>
>> Hello Rainer:
>>
>> A possible simple approach might be to see if you can adapt the following single
>> file "copy" example, which requires you to use Douglas Danforth's amazing and
>> excellent subsystem ["My"] available from Howard Zinn's website CPC at
>> <http://www.zinnamturm.eu/>
>>
>> I hope Douglas Danforth doesn't object, but I adapted his "My.Files" examples of
>> separate read and write and created a single combination example for copying a
>> single file.
>>
>> You will need to adapt the following so each file to be merged is copied to a singe
>> output file in the order you wish the concatenation to occur.
>>
>> Danforth has "Open" commands provided for both input and output in his Files
>> library so you should have more flexibility in the filenames then this example. You
>> should be able to avoid the interactive file prompting of the example if you already
>> know the input and output filenames.
>>
>> There will be 1 output file which remains open until the input files have been
>> copied. Presumably after each input file is copied, it is closed, so only 1 input need
>> be open at a time.
>>
>> These are the details you would work out for yourself when you modify the
>> example.
>>
>> I have to give credit though to Professor K.N. King because there is an example of
>> concatenating input files in his book "Modula-2: A Complete Guide", available from
>> Amazon.
>>
>> I claim no credit for merging Danforth's read/write examoles and hope he doesn't
>> mind.
>>
>> Sincerely
>> Carl Glassberg
>>
>> Std encoder/decoder appears not to be working on my system, some problem with
>> extra end-of-lines, so here is the program text:
>>
>> Copyright © 2012,
>> by Douglas G. Danforth
>>
>> Version 20-Jan-2012
>>
>> This program is free software; you can redistribute it and/or modify it under the
>> terms of the "BlackBox Component Builder Open Source License".
>>
>> MODULE MyTest;
>> (* modified from Douglas Danforth's separate read/write examples by Carl
>> Glassberg *)
>>
>>     IMPORT MyFiles, Stores;
>>
>>     PROCEDURE Copy *;
>>         VAR rc: MyFiles.ReadController; rd: Stores.Reader;
>>             wc: MyFiles.WriteController; wr: Stores.Writer;
>>             ch: CHAR;
>>
>>     BEGIN
>>         rc.SetExtension("txt");
>>         IF rc.OpenDialog(rd) THEN
>>             wc.SetExtension("txt");
>>             IF wc.OpenDialog(wr) THEN
>>                 rd.ReadChar(ch);
>>                 WHILE ~rd.rider.eof DO
>>                     wr.WriteChar(ch);
>>                     rd.ReadChar(ch)
>>                 END (* while *);
>>                 wc.Close
>>             END (* if *);
>>             rc.Close
>>         END (* if *)
>>     END Copy;
>>
>> END MyTest .
>> ---------------------
>>
>>
>> >Hi all,
>> >in the near future I will have to programatically merge two or three >ASCII files
>> into one new file.
>>
>> >Does anybody have a hint how to do this in a simple manner ?
>>
>> >I had a look at the interface of module WinApi but could not find a >procedure for
>> this task.
>>
>> >Reading the files line by line into a buffer and writing the contents to >a new file
>> seems to be a bit nasty.
>>
>> >    Best regards,
>> >    Rainer
>>
>> >    ----
>>
>>
>> ----
>> To unsubscribe, send a message with body "SIGNOFF BLACKBOX" to
>> LISTSERV{([at]})nowhere.xy

SELEX Galileo Ltd
Registered Office: Sigma House, Christopher Martin Road, Basildon, Essex SS14 3EL
A company registered in England & Wales. Company no. 02426132
********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************


----
To unsubscribe, send a message with body "SIGNOFF BLACKBOX" to LISTSERV{([at]})nowhere.xy----boundary-LibPST-iamunique-590092360_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGZiaWRpcyBcZGVmZjB7XGZvbnR0YmwN
CntcZjBcZnN3aXNzXGZjaGFyc2V0MCBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7
fQ0Ke1xmMlxmbmlsXGZjaGFyc2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBD
b3VyaWVyIE5ldzt9fQ0Ke1xjb2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBc
Ymx1ZTI1NTt9DQpcdWMxXHBhcmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIFdoYXQgaGFwcGVu
cyBpZiBvbmUgb2YgdGhlIGZpbGVzIGhhcyBhbiBvZGQgbnVtYmVyIG9mIEJ5dGVzP1xwYXINClxw
YXINClN1cmVseSBpdCBpcyBzaW1wbGVyIGFuZCBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIFN0
b3Jlcy5SZWFkZXIncyByaWRlciAoaWUgYSBGaWxlcy5SZWFkZXIpIGRpcmVjdGx5P1xwYXINClxw
YXINClxwYXINClJvYmVydFxwYXINClxwYXINCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
XHBhcg0KPj4gRnJvbTogQmxhY2tCb3ggW21haWx0bzpCTEFDS0JPWEBMSVNUUy5PQkVST04uQ0hd
IE9uIEJlaGFsZiBPZiBDYXJsXHBhcg0KPj4gR2xhc3NiZXJnXHBhcg0KPj4gU2VudDogMjcgSnVs
eSAyMDEyIDAzOjA4XHBhcg0KPj4gVG86IEJMQUNLQk9YQExJU1RTLk9CRVJPTi5DSFxwYXINCj4+
IFN1YmplY3Q6IFJlOiBbQkxBQ0tCT1hdIE1lcmdlIEFTQ0lJIHRleHQgZmlsZXNccGFyDQo+PiBc
cGFyDQo+PiAgICAgICAgICAgICAgICAgICAgICoqKiBXQVJOSU5HICoqKlxwYXINCj4+IFxwYXIN
Cj4+ICBUaGlzIG1lc3NhZ2UgaGFzIG9yaWdpbmF0ZWQgb3V0c2lkZSB5b3VyIG9yZ2FuaXNhdGlv
bixccGFyDQo+PiAgIGVpdGhlciBmcm9tIGFuIGV4dGVybmFsIHBhcnRuZXIgb3IgdGhlIEdsb2Jh
bCBJbnRlcm5ldC5ccGFyDQo+PiAgICAgICBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgYW5zd2Vy
IHRoaXMgbWVzc2FnZS5ccGFyDQo+PiBccGFyDQo+PiBccGFyDQo+PiBIZWxsbyBSYWluZXI6XHBh
cg0KPj4gXHBhcg0KPj4gQSBwb3NzaWJsZSBzaW1wbGUgYXBwcm9hY2ggbWlnaHQgYmUgdG8gc2Vl
IGlmIHlvdSBjYW4gYWRhcHQgdGhlIGZvbGxvd2luZyBzaW5nbGVccGFyDQo+PiBmaWxlICJjb3B5
IiBleGFtcGxlLCB3aGljaCByZXF1aXJlcyB5b3UgdG8gdXNlIERvdWdsYXMgRGFuZm9ydGgncyBh
bWF6aW5nIGFuZFxwYXINCj4+IGV4Y2VsbGVudCBzdWJzeXN0ZW0gWyJNeSJdIGF2YWlsYWJsZSBm
cm9tIEhvd2FyZCBaaW5uJ3Mgd2Vic2l0ZSBDUEMgYXRccGFyDQo+PiA8aHR0cDovL3d3dy56aW5u
YW10dXJtLmV1Lz5ccGFyDQo+PiBccGFyDQo+PiBJIGhvcGUgRG91Z2xhcyBEYW5mb3J0aCBkb2Vz
bid0IG9iamVjdCwgYnV0IEkgYWRhcHRlZCBoaXMgIk15LkZpbGVzIiBleGFtcGxlcyBvZlxwYXIN
Cj4+IHNlcGFyYXRlIHJlYWQgYW5kIHdyaXRlIGFuZCBjcmVhdGVkIGEgc2luZ2xlIGNvbWJpbmF0
aW9uIGV4YW1wbGUgZm9yIGNvcHlpbmcgYVxwYXINCj4+IHNpbmdsZSBmaWxlLlxwYXINCj4+IFxw
YXINCj4+IFlvdSB3aWxsIG5lZWQgdG8gYWRhcHQgdGhlIGZvbGxvd2luZyBzbyBlYWNoIGZpbGUg
dG8gYmUgbWVyZ2VkIGlzIGNvcGllZCB0byBhIHNpbmdlXHBhcg0KPj4gb3V0cHV0IGZpbGUgaW4g
dGhlIG9yZGVyIHlvdSB3aXNoIHRoZSBjb25jYXRlbmF0aW9uIHRvIG9jY3VyLlxwYXINCj4+IFxw
YXINCj4+IERhbmZvcnRoIGhhcyAiT3BlbiIgY29tbWFuZHMgcHJvdmlkZWQgZm9yIGJvdGggaW5w
dXQgYW5kIG91dHB1dCBpbiBoaXMgRmlsZXNccGFyDQo+PiBsaWJyYXJ5IHNvIHlvdSBzaG91bGQg
aGF2ZSBtb3JlIGZsZXhpYmlsaXR5IGluIHRoZSBmaWxlbmFtZXMgdGhlbiB0aGlzIGV4YW1wbGUu
IFlvdVxwYXINCj4+IHNob3VsZCBiZSBhYmxlIHRvIGF2b2lkIHRoZSBpbnRlcmFjdGl2ZSBmaWxl
IHByb21wdGluZyBvZiB0aGUgZXhhbXBsZSBpZiB5b3UgYWxyZWFkeVxwYXINCj4+IGtub3cgdGhl
IGlucHV0IGFuZCBvdXRwdXQgZmlsZW5hbWVzLlxwYXINCj4+IFxwYXINCj4+IFRoZXJlIHdpbGwg
YmUgMSBvdXRwdXQgZmlsZSB3aGljaCByZW1haW5zIG9wZW4gdW50aWwgdGhlIGlucHV0IGZpbGVz
IGhhdmUgYmVlblxwYXINCj4+IGNvcGllZC4gUHJlc3VtYWJseSBhZnRlciBlYWNoIGlucHV0IGZp
bGUgaXMgY29waWVkLCBpdCBpcyBjbG9zZWQsIHNvIG9ubHkgMSBpbnB1dCBuZWVkXHBhcg0KPj4g
YmUgb3BlbiBhdCBhIHRpbWUuXHBhcg0KPj4gXHBhcg0KPj4gVGhlc2UgYXJlIHRoZSBkZXRhaWxz
IHlvdSB3b3VsZCB3b3JrIG91dCBmb3IgeW91cnNlbGYgd2hlbiB5b3UgbW9kaWZ5IHRoZVxwYXIN
Cj4+IGV4YW1wbGUuXHBhcg0KPj4gXHBhcg0KPj4gSSBoYXZlIHRvIGdpdmUgY3JlZGl0IHRob3Vn
aCB0byBQcm9mZXNzb3IgSy5OLiBLaW5nIGJlY2F1c2UgdGhlcmUgaXMgYW4gZXhhbXBsZSBvZlxw
YXINCj4+IGNvbmNhdGVuYXRpbmcgaW5wdXQgZmlsZXMgaW4gaGlzIGJvb2sgIk1vZHVsYS0yOiBB
IENvbXBsZXRlIEd1aWRlIiwgYXZhaWxhYmxlIGZyb21ccGFyDQo+PiBBbWF6b24uXHBhcg0KPj4g
XHBhcg0KPj4gSSBjbGFpbSBubyBjcmVkaXQgZm9yIG1lcmdpbmcgRGFuZm9ydGgncyByZWFkL3dy
aXRlIGV4YW1vbGVzIGFuZCBob3BlIGhlIGRvZXNuJ3RccGFyDQo+PiBtaW5kLlxwYXINCj4+IFxw
YXINCj4+IFNpbmNlcmVseVxwYXINCj4+IENhcmwgR2xhc3NiZXJnXHBhcg0KPj4gXHBhcg0KPj4g
U3RkIGVuY29kZXIvZGVjb2RlciBhcHBlYXJzIG5vdCB0byBiZSB3b3JraW5nIG9uIG15IHN5c3Rl
bSwgc29tZSBwcm9ibGVtIHdpdGhccGFyDQo+PiBleHRyYSBlbmQtb2YtbGluZXMsIHNvIGhlcmUg
aXMgdGhlIHByb2dyYW0gdGV4dDpccGFyDQo+PiBccGFyDQo+PiBDb3B5cmlnaHQgXCdhOSAyMDEy
LFxwYXINCj4+IGJ5IERvdWdsYXNcJ2EwRy5cJ2EwRGFuZm9ydGhccGFyDQo+PiBccGFyDQo+PiBW
ZXJzaW9uIDIwLUphbi0yMDEyXHBhcg0KPj4gXHBhcg0KPj4gVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIg
dGhlXHBhcg0KPj4gdGVybXMgb2YgdGhlICJCbGFja0JveCBDb21wb25lbnQgQnVpbGRlciBPcGVu
IFNvdXJjZSBMaWNlbnNlIi5ccGFyDQo+PiBccGFyDQo+PiBNT0RVTEUgTXlUZXN0O1xwYXINCj4+
ICgqIG1vZGlmaWVkIGZyb20gRG91Z2xhcyBEYW5mb3J0aCdzIHNlcGFyYXRlIHJlYWQvd3JpdGUg
ZXhhbXBsZXMgYnkgQ2FybFxwYXINCj4+IEdsYXNzYmVyZyAqKVxwYXINCj4+IFxwYXINCj4+IFwn
YTBcJ2EwXCdhMCBJTVBPUlQgTXlGaWxlcywgU3RvcmVzO1xwYXINCj4+IFxwYXINCj4+IFwnYTBc
J2EwXCdhMCBQUk9DRURVUkUgQ29weSAqO1xwYXINCj4+IFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwn
YTAgVkFSIHJjOiBNeUZpbGVzLlJlYWRDb250cm9sbGVyOyByZDogU3RvcmVzLlJlYWRlcjtccGFy
DQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwnYTBcJ2EwXCdhMCB3YzogTXlGaWxlcy5X
cml0ZUNvbnRyb2xsZXI7IHdyOiBTdG9yZXMuV3JpdGVyO1xwYXINCj4+IFwnYTBcJ2EwXCdhMCBc
J2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIGNoOiBDSEFSO1xwYXINCj4+IFxwYXINCj4+IFwnYTBc
J2EwXCdhMCBCRUdJTlxwYXINCj4+IFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgcmMuU2V0RXh0
ZW5zaW9uKCJ0eHQiKTtccGFyDQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIElGIHJjLk9w
ZW5EaWFsb2cocmQpIFRIRU5ccGFyDQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwnYTBc
J2EwXCdhMCB3Yy5TZXRFeHRlbnNpb24oInR4dCIpO1xwYXINCj4+IFwnYTBcJ2EwXCdhMCBcJ2Ew
XCdhMFwnYTAgXCdhMFwnYTBcJ2EwIElGIHdjLk9wZW5EaWFsb2cod3IpIFRIRU5ccGFyDQo+PiBc
J2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgcmQuUmVh
ZENoYXIoY2gpO1xwYXINCj4+IFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2Ew
IFwnYTBcJ2EwXCdhMCBXSElMRSB+cmQucmlkZXIuZW9mIERPXHBhcg0KPj4gXCdhMFwnYTBcJ2Ew
IFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwnYTBcJ2EwXCdhMCB3ci5X
cml0ZUNoYXIoY2gpO1xwYXINCj4+IFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBc
J2EwIFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgcmQuUmVhZENoYXIoY2gpXHBhcg0KPj4gXCdh
MFwnYTBcJ2EwIFwnYTBcJ2EwXCdhMCBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIEVORCAoKiB3
aGlsZSAqKTtccGFyDQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwnYTBcJ2EwXCdhMCBc
J2EwXCdhMFwnYTAgd2MuQ2xvc2VccGFyDQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2EwIFwn
YTBcJ2EwXCdhMCBFTkQgKCogaWYgKik7XHBhcg0KPj4gXCdhMFwnYTBcJ2EwIFwnYTBcJ2EwXCdh
MCBcJ2EwXCdhMFwnYTAgcmMuQ2xvc2VccGFyDQo+PiBcJ2EwXCdhMFwnYTAgXCdhMFwnYTBcJ2Ew
IEVORCAoKiBpZiAqKVxwYXINCj4+IFwnYTBcJ2EwXCdhMCBFTkQgQ29weTtccGFyDQo+PiBccGFy
DQo+PiBFTkQgTXlUZXN0IC5ccGFyDQo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS1ccGFyDQo+PiBc
cGFyDQo+PiBccGFyDQo+PiA+SGkgYWxsLFxwYXINCj4+ID5pbiB0aGUgbmVhciBmdXR1cmUgSSB3
aWxsIGhhdmUgdG8gcHJvZ3JhbWF0aWNhbGx5IG1lcmdlIHR3byBvciB0aHJlZSA+QVNDSUkgZmls
ZXNccGFyDQo+PiBpbnRvIG9uZSBuZXcgZmlsZS5ccGFyDQo+PiBccGFyDQo+PiA+RG9lcyBhbnli
b2R5IGhhdmUgYSBoaW50IGhvdyB0byBkbyB0aGlzIGluIGEgc2ltcGxlIG1hbm5lciA/XHBhcg0K
Pj4gXHBhcg0KPj4gPkkgaGFkIGEgbG9vayBhdCB0aGUgaW50ZXJmYWNlIG9mIG1vZHVsZSBXaW5B
cGkgYnV0IGNvdWxkIG5vdCBmaW5kIGEgPnByb2NlZHVyZSBmb3JccGFyDQo+PiB0aGlzIHRhc2su
XHBhcg0KPj4gXHBhcg0KPj4gPlJlYWRpbmcgdGhlIGZpbGVzIGxpbmUgYnkgbGluZSBpbnRvIGEg
YnVmZmVyIGFuZCB3cml0aW5nIHRoZSBjb250ZW50cyB0byA+YSBuZXcgZmlsZVxwYXINCj4+IHNl
ZW1zIHRvIGJlIGEgYml0IG5hc3R5LlxwYXINCj4+IFxwYXINCj4+ID5cJ2EwIFwnYTAgQmVzdCBy
ZWdhcmRzLFxwYXINCj4+ID5cJ2EwIFwnYTAgUmFpbmVyXHBhcg0KPj4gXHBhcg0KPj4gPlwnYTAg
XCdhMCAtLS0tXHBhcg0KPj4gXHBhcg0KPj4gXHBhcg0KPj4gLS0tLVxwYXINCj4+IFRvIHVuc3Vi
c2NyaWJlLCBzZW5kIGEgbWVzc2FnZSB3aXRoIGJvZHkgIlNJR05PRkYgQkxBQ0tCT1giIHRvXHBh
cg0KPj4gTElTVFNFUlZATElTVFMuT0JFUk9OLkNIXHBhcg0KXHBhcg0KU0VMRVggR2FsaWxlbyBM
dGRccGFyDQpSZWdpc3RlcmVkIE9mZmljZTogU2lnbWEgSG91c2UsIENocmlzdG9waGVyIE1hcnRp
biBSb2FkLCBCYXNpbGRvbiwgRXNzZXggU1MxNCAzRUxccGFyDQpBIGNvbXBhbnkgcmVnaXN0ZXJl
ZCBpbiBFbmdsYW5kICYgV2FsZXMuICBDb21wYW55IG5vLiAwMjQyNjEzMlxwYXINCioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXHBhcg0KVGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwg
dG8gdGhlIGludGVuZGVkXHBhcg0KcmVjaXBpZW50IGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2Vk
LiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWRccGFyDQpyZWNpcGllbnQgcGxlYXNlIGRlbGV0
ZSBpdCBmcm9tIHlvdXIgc3lzdGVtIGFuZCBub3RpZnkgdGhlIHNlbmRlci5ccGFyDQpZb3Ugc2hv
dWxkIG5vdCBjb3B5IGl0IG9yIHVzZSBpdCBmb3IgYW55IHB1cnBvc2Ugbm9yIGRpc2Nsb3NlIG9y
XHBhcg0KZGlzdHJpYnV0ZSBpdHMgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbi5ccGFyDQoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlxwYXINClxwYXINClxwYXINCi0tLS1ccGFyDQpUbyB1bnN1YnNjcmliZSwgc2Vu
ZCBhIG1lc3NhZ2Ugd2l0aCBib2R5ICJTSUdOT0ZGIEJMQUNLQk9YIiB0byBMSVNUU0VSVkBMSVNU
Uy5PfX0APC9hPl0gT24gQmVo
----boundary-LibPST-iamunique-590092360_-_---
Received on Fri Jul 27 2012 - 09:56:34 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:30:00 UTC