Take notes on the command line: Difference between revisions

Add SETL
(Omitted EasyLang)
(Add SETL)
 
(13 intermediate revisions by 10 users not shown)
Line 17:
print(File(‘notes.txt’).read(), end' ‘’)
E
V f = File(‘notes.txt’, ‘a’APPEND)
f.write(Time().format("YYYY-MM-DD hh:mm:ss\n"))
f.write("\t"(:argv[1..].join(‘ ’))"\n")</syntaxhighlight>
Line 210:
 
A:\></pre>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits <br> or android 64 bits with application Termux }}
<syntaxhighlight lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program notes64.s */
 
/************************************/
/* Constantes */
/************************************/
.include "../includeConstantesARM64.inc"
.equ BUFFERSIZE, 10000
.equ O_APPEND, 0x400
.equ GETTIME, 0xa9 // call system linux gettimeofday
 
/*******************************************/
/* Structures */
/********************************************/
/* example structure time */
.struct 0
timeval_sec: //
.struct timeval_sec + 8
timeval_usec: //
.struct timeval_usec + 8
timeval_end:
.struct 0
timezone_min: //
.struct timezone_min + 8
timezone_dsttime: //
.struct timezone_dsttime + 8
timezone_end:
/*********************************/
/* Initialized data */
/*********************************/
.data
szCarriageReturn: .asciz "\n"
szSpace: .asciz " "
szLibNoFile: .asciz "no file notes.txt in this directory\n"
szFileName: .asciz "notes.txt"
szMessAnoRead: .asciz "Error read file \n"
szMessAnoTime: .asciz "Error call time \n"
szMessAnoWrite: .asciz "Error file write \n"
szMessDate: .asciz " @/@/@ @:@:@ \n" // message time
.align 8
tbDayMonthYear: .quad 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335
.quad 366, 397, 425, 456, 486, 517, 547, 578, 609, 639, 670, 700
.quad 731, 762, 790, 821, 851, 882, 912, 943, 974,1004,1035,1065
.quad 1096,1127,1155,1186,1216,1247,1277,1308,1339,1369,1400,1430
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sZoneConv: .skip 24
stTVal: .skip timeval_end
stTZone: .skip timezone_end
sBuffer: .skip BUFFERSIZE
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
mov fp,sp // stack address
ldr x20,[fp] // load number of parameters command line
cmp x20,#1 // >1 insertion text
bgt 10f
mov x0,AT_FDCWD
ldr x1,qAdrszFileName // file name
mov x2,#O_RDONLY // flags
mov x3,#0 // mode in octal
mov x8,#OPEN // open file, create if not exist
svc 0
cmp x0,#0 // error open
ble 99f // file no exists ?
mov x19,x0 // save FD and if file exist display text
ldr x1,qAdrsBuffer // buffer address
ldr x2,#iBufferSize // buffersize
mov x8,READ
svc 0
cmp x0,#0 // error read ?
blt 98f
ldr x0,qAdrsBuffer // buffer address
bl affichageMess // and display
b 50f
10: // multiple parameters in command line
mov x0,AT_FDCWD
ldr x1,qAdrszFileName // file name
ldr x2,iFlag // flags
mov x3,#0644 // mode in octal
mov x8,#OPEN // open file, create if not exist
svc 0
cmp x0,#0 // error open
ble 96f
mov x19,x0 // save FD
ldr x0,qAdrstTVal
ldr x1,qAdrstTZone
mov x8,#GETTIME // call system function time
svc 0
cmp x0,#-1 // error ?
beq 97f
ldr x1,qAdrstTVal
ldr x0,[x1,timeval_sec] // timestamp in second
bl formatTime // format date and hour
mov x1,x0
mov x2,#0
11: // compute length of time message
ldrb w3,[x1,x2]
cmp w3,#0
beq 12f
add x2,x2,#1
b 11b
12:
mov x0,x19 // write time message
mov x8,#WRITE
svc 0
cmp x0,#0 // error ?
ble 96f
mov x5,#2 // start parameters command line
13:
mov x0,x19 // file FD
ldr x1,[fp,x5,lsl #3] // load parameter address
mov x2,#0
14: // compute parameter length
ldrb w3,[x1,x2]
cmp w3,#0
beq 15f
add x2,x2,#1
b 14b
15: // write parameter
mov x8,#WRITE
svc 0
cmp x0,#0 // error ?
ble 96f
mov x0,x19 // file FD
ldr x1,iadrszSpace // write a space betwin parameters
mov x2,#1
mov x8,#WRITE
svc 0
add x5,x5,#1 // increment indixe
cmp x5,x20 // parameters maxi ?
ble 13b // no -> loop
mov x0,x19
ldr x1,qAdrszCarriageReturn // write line end
mov x2,#1
mov x7,#WRITE
svc 0
 
50: // close the file
mov x0,x19
mov x8,CLOSE
svc 0
b 100f
 
96: // error write
ldr x0,qAdrszMessAnoWrite
bl affichageMess
b 100f
97: // error function time
ldr x0,qAdrszMessAnoTime
bl affichageMess
b 100f
98: // error read
ldr x0,qAdrszMessAnoRead
bl affichageMess
b 100f
99: // display message no file in this directory
ldr x0,qAdrszLibNoFile
bl affichageMess
100: // standard end of the program
mov x0, #0 // return code
mov x8,EXIT
svc #0 // perform the system call
qAdrszCarriageReturn: .quad szCarriageReturn
qAdrsZoneConv: .quad sZoneConv
qAdrszFileName: .quad szFileName
qAdrszLibNoFile: .quad szLibNoFile
qAdrsBuffer: .quad sBuffer
iBufferSize: .quad BUFFERSIZE
qAdrszMessAnoRead: .quad szMessAnoRead
qAdrszMessAnoTime: .quad szMessAnoTime
qAdrszMessAnoWrite: .quad szMessAnoWrite
iFlag: .quad O_RDWR|O_APPEND|O_CREAT
qAdrstTVal: .quad stTVal
qAdrstTZone: .quad stTZone
iadrszSpace: .quad szSpace
/***************************************************/
/* formatting time area */
/***************************************************/
// x0 contains time area
// x0 return address result string
formatTime:
stp x2,lr,[sp,-16]! // save registers
ldr x2,qSecJan2020
sub x3,x0,x2 // total secondes to 01/01/2020
mov x4,60
udiv x5,x3,x4
msub x6,x5,x4,x3 // compute secondes
udiv x3,x5,x4
msub x7,x3,x4,x5 // compute minutes
mov x4,24
udiv x5,x3,x4
msub x8,x5,x4,x3 // compute hours
mov x4,(365 * 4 + 1)
udiv x9,x5,x4
lsl x9,x9,2 // multiply by 4 = year1
udiv x12,x5,x4
msub x10,x12,x4,x5
ldr x11,qAdrtbDayMonthYear
mov x12,3
mov x13,12
1:
mul x14,x13,x12
ldr x15,[x11,x14,lsl 3] // load days by year
cmp x10,x15
bge 2f
sub x12,x12,1
cmp x12,0
cbnz x12,1b
2: // x12 = year2
mov x16,11
mul x15,x13,x12
lsl x15,x15,3 // * par 8
add x14,x15,x11
3:
ldr x15,[x14,x16,lsl 3] // load days by month
cmp x10,x15
bge 4f
sub x16,x16,1
cmp x16,0
cbnz x16,3b
4: // x16 = month - 1
mul x15,x13,x12
add x15,x15,x16
ldr x1,qAdrtbDayMonthYear
ldr x3,[x1,x15,lsl 3]
sub x0,x10,x3
add x0,x0,1 // final compute day
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessDate
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at first @ character
mov x2,x0
add x0,x16,1 // final compute month
ldr x1,qAdrsZoneConv
bl conversion10
mov x0,x2
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at next @ character
mov x2,x0
add x0,x9,2020
add x0,x0,x12 // final compute year = 2020 + year1 + year2
ldr x1,qAdrsZoneConv
bl conversion10
mov x0,x2
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at next @ character
mov x2,x0
mov x0,x8 // hours
ldr x1,qAdrsZoneConv
bl conversion10
mov x0,x2
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at next @ character
mov x2,x0
mov x0,x7 // minutes
ldr x1,qAdrsZoneConv
bl conversion10
mov x0,x2
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at next @ character
mov x2,x0
mov x0,x6 // secondes
ldr x1,qAdrsZoneConv
bl conversion10
mov x4,#0 // store zero final
strb w4,[x1,x0]
mov x0,x2
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at next // character
100:
ldp x2,lr,[sp],16 // restaur registers
ret
qAdrszMessDate: .quad szMessDate
qSecJan2020: .quad 1577836800
qAdrtbDayMonthYear: .quad tbDayMonthYear
 
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
.include "../includeARM64.inc"
</syntaxhighlight>
{{output}}
<pre>
~/.../rosetta/asm3 $ notes64
11/4/2023 15:16:29
initialisation
11/4/2023 15:16:45
verification
11/4/2023 15:17:15
suite modification revoir le cas
 
</pre>
=={{header|Ada}}==
{{works with|Ada 2005}}
Line 295 ⟶ 598:
f.byte('\n');
}</syntaxhighlight>
 
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="c">
/*
Take notes on the command line. Rosettacode.org
*/
#include <basico.h>
 
algoritmo
cuando ' no existe el archivo ("NOTES.txt") ' {
sys = `touch NOTES.txt`; luego limpiar 'sys'
}
si ' total argumentos es (1) '
cargar cadena desde ("NOTES.txt"); luego imprime
sino
msg=""; obtener todos los parámetros, guardar en 'msg'
#( msg = strtran("@","\n\t",msg) )
fijar separador 'NULO'
fecha y hora, "\n\t", msg, "\n\n", unir esto;
añadir al final de ("NOTES.txt")
fin si
terminar
</syntaxhighlight>
{{out}}
<pre>
:
:
$ hopper3 basica/notes.bas otra y otra y otra...@y otra
$ hopper3 basica/notes.bas
27/11/2023,23:38:28:74
iniciando estas notas con un mensaje
de prueba
 
27/11/2023,23:40:57:41
nota 2:
establecer parámetro
 
27/11/2023,23:52:22:82
nueva nota de prueba
ta es medianoche
 
27/11/2023,23:55:07:20
otra nueva nota
 
27/11/2023,23:56:21:15
otra y otra y otra...
y otra
 
$ hopper3 basica/notes.bas borrar todo de este directorio@sin asco
$ hopper3 basica/notes.bas
27/11/2023,23:38:28:74
iniciando estas notas con un mensaje
de prueba
 
27/11/2023,23:40:57:41
nota 2:
establecer parámetro
 
27/11/2023,23:52:22:82
nueva nota de prueba
ta es medianoche
 
27/11/2023,23:55:07:20
otra nueva nota
 
27/11/2023,23:56:21:15
otra y otra y otra...
y otra
 
28/11/2023,00:04:04:62
borrar todo de este directorio
sin asco
 
$
</pre>
 
=={{header|APL}}==
Line 444 ⟶ 824:
end if
end run</syntaxhighlight>
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi <br> or android 32 bits with application Termux}}
<syntaxhighlight lang ARM Assembly>
/* ARM assembly Raspberry PI or android 32 bits */
/* program notes.s */
 
/* REMARK 1 : this program use routines in a include file
see task Include a file language arm assembly
for the routine affichageMess conversion10
see at end of this program the instruction include */
/* for constantes see task include a file in arm assembly */
/************************************/
/* Constantes */
/************************************/
.include "../constantes.inc"
.equ BUFFERSIZE, 10000
.equ READ, 3 @ system call
.equ WRITE, 4 @ Linux syscall
.equ OPEN, 5 @ system call
.equ CLOSE, 6 @ system call
.equ O_RDONLY, 0
.equ O_RDWR, 0x0002 @ open for reading and writing
.equ O_APPEND, 0x400
.equ O_CREAT, 0x40
.equ GETTIME, 0x4e @ call system linux gettimeofday
 
 
/*******************************************/
/* Structures */
/********************************************/
/* example structure time */
.struct 0
timeval_sec: @
.struct timeval_sec + 4
timeval_usec: @
.struct timeval_usec + 4
timeval_end:
.struct 0
timezone_min: @
.struct timezone_min + 4
timezone_dsttime: @
.struct timezone_dsttime + 4
timezone_end:
/*********************************/
/* Initialized data */
/*********************************/
.data
szCarriageReturn: .asciz "\n"
szSpace: .asciz " "
szLibNoFile: .asciz "no file notes.txt in this directory\n"
szFileName: .asciz "notes.txt"
szMessAnoRead: .asciz "Error read file \n"
szMessAnoTime: .asciz "Error call time \n"
szMessAnoWrite: .asciz "Error file write \n"
szMessDate: .asciz " @/@/@ @:@:@ \n" @ message time
.align 4
tbDayMonthYear: .int 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335
.int 366, 397, 425, 456, 486, 517, 547, 578, 609, 639, 670, 700
.int 731, 762, 790, 821, 851, 882, 912, 943, 974,1004,1035,1065
.int 1096,1127,1155,1186,1216,1247,1277,1308,1339,1369,1400,1430
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sZoneConv: .skip 24
stTVal: .skip timeval_end
stTZone: .skip timezone_end
sBuffer: .skip BUFFERSIZE
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: @ entry of program
mov fp,sp @ stack address
ldr r4,[fp] @ load number of parameters command line
cmp r4,#1 @ >1 insertion text
bgt 10f
ldr r0,iAdrszFileName @ file name
mov r1,#O_RDONLY @ flags
mov r2,#0 @ mode in octal
mov r7,#OPEN @ oen file, create if not exist
svc 0
cmp r0,#0 @ error open
ble 99f @ file no exists ?
mov r8,r0 @ save FD @ if exist display text
ldr r1,iAdrsBuffer @ buffer address
ldr r2,#iBufferSize @ buffersize
mov r7, #READ @ read file
svc 0
cmp r0,#0 @ error read ?
blt 98f
ldr r0,iAdrsBuffer @ buffer address
bl affichageMess @ and display
b 50f
10: @ multiple parameters in command line
ldr r0,iAdrszFileName @ file name
ldr r1,iFlag @ flags
mov r2,#0644 @ mode in octal
mov r7,#OPEN @ open file, create if not exist
svc 0
cmp r0,#0 @ error open
ble 96f
mov r8,r0 @ save FD
ldr r0,iAdrstTVal
ldr r1,iAdrstTZone
mov r7,#GETTIME @ call system function time
svc 0
cmp r0,#-1 @ error ?
beq 97f
ldr r0,iAdrstTVal
bl formatTime @ format date and hour
mov r1,r0
mov r2,#0
11: @ compute length of time message
ldrb r3,[r1,r2]
cmp r3,#0
beq 12f
add r2,#1
b 11b
12:
mov r0,r8 @ write time message
mov r7,#WRITE
svc 0
cmp r0,#0 @ error ?
ble 96f
mov r5,#2 @ start parameters command line
13:
mov r0,r8 @ file FD
ldr r1,[fp,r5,lsl #2] @ load parameter address
mov r2,#0
14: @ compute parameter length
ldrb r3,[r1,r2]
cmp r3,#0
beq 15f
add r2,#1
b 14b
15: @ write parameter
mov r7,#WRITE
svc 0
cmp r0,#0 @ error ?
ble 96f
mov r0,r8 @ file FD
ldr r1,iadrszSpace @ write a space betwin parameters
mov r2,#1
mov r7,#WRITE
svc 0
add r5,#1 @ increment indixe
cmp r5,r4 @ parameters maxi ?
ble 13b @ no -> loop
mov r0,r8
ldr r1,iAdrszCarriageReturn @ write line end
mov r2,#1
mov r7,#WRITE
svc 0
 
50: @ close the file
mov r0,r8
mov r7, #CLOSE
svc 0
b 100f
 
96: @ error write
ldr r0,iAdrszMessAnoWrite
bl affichageMess
b 100f
97: @ error function time
ldr r0,iAdrszMessAnoTime
bl affichageMess
b 100f
98: @ error read
ldr r0,iAdrszMessAnoRead
bl affichageMess
b 100f
99: @ display message no file in this directory
ldr r0,iAdrszLibNoFile
bl affichageMess
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc #0 @ perform the system call
iAdrszCarriageReturn: .int szCarriageReturn
iAdrsZoneConv: .int sZoneConv
iAdrszFileName: .int szFileName
iAdrszLibNoFile: .int szLibNoFile
iAdrsBuffer: .int sBuffer
iBufferSize: .int BUFFERSIZE
iAdrszMessAnoRead: .int szMessAnoRead
iAdrszMessAnoTime: .int szMessAnoTime
iAdrszMessAnoWrite: .int szMessAnoWrite
iFlag: .int O_RDWR|O_APPEND|O_CREAT
iAdrstTVal: .int stTVal
iAdrstTZone: .int stTZone
iadrszSpace: .int szSpace
/***************************************************/
/* formatting time area */
/***************************************************/
// r0 contains time area
// r0 return address result string
formatTime:
push {r2-r12,lr} @ save registers
ldr r1,[r0,#timeval_sec] @ timestemp in second
ldr r2,iSecJan2020
sub r0,r1,r2 @ total secondes to 01/01/2020
mov r1,#60
bl division
mov r0,r2
mov r6,r3 @ compute secondes
mov r1,#60
bl division
mov r7,r3 @ compute minutes
mov r0,r2
mov r1,#24
bl division
mov r8,r3 @ compute hours
mov r0,r2
mov r11,r0
mov r1,#(365 * 4 + 1)
bl division
lsl r9,r2,#2 @ multiply by 4 = year1
mov r1,#(365 * 4 + 1)
mov r0,r11
bl division
mov r10,r3
ldr r1,iAdrtbDayMonthYear
mov r2,#3
mov r3,#12
1:
mul r11,r3,r2
ldr r12,[r1,r11,lsl #2] @ load days by year
cmp r10,r12
bge 2f
sub r2,r2,#1
cmp r2,#0
bne 1b
2: @ r2 = year2
mov r5,#11
mul r4,r3,r2
lsl r4,#2
add r4,r1
3:
ldr r12,[r4,r5,lsl #2] @ load days by month
cmp r10,r12
bge 4f
subs r5,r5,#1
bne 3b
4: @ r5 = month - 1
mul r11,r3,r2
add r11,r5
ldr r1,iAdrtbDayMonthYear
ldr r3,[r1,r11,lsl #2]
sub r0,r10,r3
 
add r0,r0,#1 @ final compute day
ldr r1,iAdrsZoneConv
bl conversion10 @ this function do not zero final
mov r4,#0 @ store zero final
strb r4,[r1,r0]
ldr r0,iAdrszMessDate
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at first @ character
mov r3,r0
add r0,r5,#1 @ final compute month
ldr r1,iAdrsZoneConv
bl conversion10
mov r4,#0 @ store zero final
strb r4,[r1,r0]
mov r0,r3
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at next @ character
mov r3,r0
ldr r11,iYearStart
add r0,r9,r11
add r0,r0,r2 @ final compute year = 2020 + year1 + year2
ldr r1,iAdrsZoneConv
bl conversion10
mov r4,#0 @ store zero final
strb r4,[r1,r0]
mov r0,r3
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at next @ character
mov r3,r0
mov r0,r8 @ hours
ldr r1,iAdrsZoneConv
bl conversion10
mov r4,#0 @ store zero final
strb r4,[r1,r0]
mov r0,r3
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at next @ character
mov r3,r0
mov r0,r7 @ minutes
ldr r1,iAdrsZoneConv
bl conversion10
mov r4,#0 @ store zero final
strb r4,[r1,r0]
mov r0,r3
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at next @ character
mov r3,r0
mov r0,r6 @ secondes
ldr r1,iAdrsZoneConv
bl conversion10
mov r4,#0 @ store zero final
strb r4,[r1,r0]
mov r0,r3
ldr r1,iAdrsZoneConv
bl strInsertAtCharInc @ insert result at next @ character
 
100:
pop {r2-r12,pc} @ restaur registers
iAdrszMessDate: .int szMessDate
iSecJan2020: .int 1577836800
iAdrtbDayMonthYear: .int tbDayMonthYear
iYearStart: .int 2020
 
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
.include "../affichage.inc"
</syntaxhighlight>
<pre>
~/.../rosetta/asm3 $ notes
10/4/2023 19:32:34
creation fichier notes
10/4/2023 19:32:53
affichage fichier
~/.../rosetta/asm3 $ notes saisie des exemples
~/.../rosetta/asm3 $ notes
10/4/2023 19:32:34
creation fichier notes
10/4/2023 19:32:53
affichage fichier
10/4/2023 19:37:58
saisie des exemples
</pre>
=={{header|Arturo}}==
 
Line 1,517 ⟶ 2,234:
=={{header|J}}==
'''Solution''':<br>
<syntaxhighlight lang="j">require 'files strings'#!/usr/bin/ijconsole
require 'files strings'
 
notes=: monad define
Line 1,531 ⟶ 2,249:
exit 0</syntaxhighlight>
 
Under OSX, replace <tt>/usr/bin/ijconsole</tt> with a version specific path such at /Applications/j602/bin/jconsole
Create a Shortcut called <tt>Notes</tt> that calls the script above using the Target:<br>
 
Under Windows (where the #! line is irrelevant), create a Shortcut called <tt>Notes</tt> that calls the script above using the Target:<br>
<tt>"c:\program files\j602\bin\jconsole.exe" path\to\script\notes.ijs</tt><br>
and Start in: <tt>.\</tt>
Line 2,218 ⟶ 2,938:
if len(sys.argv) == 1:
try:
with open('"notes.txt'", '"r'") as f:
shutil.copyfileobj(f, sys.stdout)
except IOError:
pass
else:
with open('"notes.txt'", '"a'") as f:
f.write(datetime.datetime.now().isoformat() + '"\n'")
f.write("\t%s\n" % ' '.join(sys.argv[1:]))</syntaxhighlight>
 
Line 2,310 ⟶ 3,030:
Test line 3
</pre>
 
=={{header|Refal}}==
<syntaxhighlight lang="refal">$ENTRY Go {
, <ArgList>: {
= <PrintNotes>;
e.Args = <WriteNote e.Args>;
};
};
 
ArgList {
= <ArgList 1>;
s.N, <Arg s.N>: {
= ;
e.Arg = (e.Arg) <ArgList <+ s.N 1>>;
};
};
 
PrintNotes {
, <ExistFile 'notes.txt'>: {
False = ;
True = <PrintFile 1 'notes.txt'>;
};
};
 
PrintFile {
s.Chan e.File = <Open 'r' s.Chan e.File> <PrintFile (s.Chan)>;
(s.Chan), <Get s.Chan>: {
0 = <Close s.Chan>;
e.Line = <Prout e.Line> <PrintFile (s.Chan)>;
};
};
 
WriteNote {
e.Args, <Time> '\n\t' <Join (' ') e.Args> '\n': e.Note =
<Open 'a' 2 'notes.txt'>
<Put 2 e.Note>
<Close 2>;
};
 
Join {
(e.X) = ;
(e.X) (e.1) = e.1;
(e.X) (e.1) e.2 = e.1 e.X <Join (e.X) e.2>;
};</syntaxhighlight>
{{out}}
<pre>$ ls notes.*
notes.ref notes.rsl
$ refgo notes
$ refgo notes This is a note
$ refgo notes This is another note
$ refgo notes Note that this is a note
$ refgo notes
Mon Apr 8 13:57:34 2024
This is a note
 
Mon Apr 8 13:57:38 2024
This is another note
 
Mon Apr 8 13:57:42 2024
Note that this is a note
 
$ ls notes.*
notes.ref notes.rsl notes.txt
$</pre>
 
=={{header|REXX}}==
<syntaxhighlight lang="rexx">/*REXX program implements the "NOTES" command (append text to a file from the C.L.). */
notes = 'notes.txt' /*the fileID of the 'notes' file. */
timestamp=right(date(),11,0) time() date('W') /*create a (current) date & time stamp.*/
Select
nFID = 'NOTES.TXT' /*the fileID of the "notes" file. */
When arg(1)='?' Then Do
Say "'rexx notes text' appends text to file" notes
Say "'rexx notes' displays file" notes
End
When arg()==0 Then Do /*No arguments? Then display the file.*/
Do while lines(notes)>0
Say linein(notes) /* display a line of file --> screen. */
End
End
Otherwise Do
timestamp=right(date(),11,0) time() date('W') /*create current date & time stamp */
If 'f2'x==2 Then tab='05'x /* this is an EBCDIC system. */
Else tab='09'x /* " " " ASCII " */
Call lineout notes,timestamp /*append the timestamp to "notes" file.*/
Call lineout notes,tab||arg(1) /* " " text " " " */
End
End /*stick a fork in it, we're all Done. */</syntaxhighlight>
{{out}}
<pre>
K:\>rexx notes ?
'rexx notes text' appends text to file notes.txt
'rexx notes' displays file notes.txt
 
K:\>rexx notes starting work
 
07 Aug 2023 19:39:41 Monday
if 'f2'x==2 then tab="05"x /*this is an EBCDIC system. */
starting work</pre>
else tab="09"x /* " " " ASCII " */
 
=={{header|RPL}}==
if arg()==0 then do while lines(nFID) /*No arguments? Then display the file.*/
The file is idiomatically named <code>Logbook</code> rather than <code>NOTES.TXT</code>.
say linein(Nfid) /*display a line of file ──► screen. */
« '''IFERR''' Logbook '''THEN''' "" '''END'''
end /*while*/
'''IF''' DEPTH 1 > '''THEN''' "\n" + DATE TIME TSTR else+ do'''END'''
'''WHILE''' DEPTH 1 > '''REPEAT''' "\n" + DEPTH ROLL + '''END'''
call lineout nFID,timestamp /*append the timestamp to "notes" file.*/
DUP 'Logbook' STO
call lineout nFID,tab||arg(1) /* " " text " " " */
1 DISP 7 endFREEZE
» '<span style="color:blue">NOTES</span>' STO
/*stick a fork in it, we're all done. */</syntaxhighlight>
 
=={{header|Ruby}}==
Line 2,453 ⟶ 3,261:
end if;
end func;</syntaxhighlight>
 
=={{header|SETL}}==
<syntaxhighlight lang="setl">program notes;
if #command_line = 0 then
show_notes;
else
write_note;
end if;
 
show_notes::
if (notefile := open('notes.txt', 'r')) = om then
stop;
end if;
 
loop for line in [getline notefile : until eof(notefile)] do
print(line);
end loop;
 
close(notefile);
 
write_note::
notefile := open('notes.txt', 'a');
note := (+/[' ' + a : a in command_line])(2..);
puta(notefile, date + '\n\t' + note + '\n');
close(notefile);
end program;</syntaxhighlight>
{{out}}
<pre>$ ls notes.*
notes.setl
$ setl notes.setl
$ setl notes.setl This is a note
$ setl notes.setl This is another note
$ setl notes.setl
Mon Apr 8 14:27:07 2024
This is a note
 
Mon Apr 8 14:27:11 2024
This is another note
 
$ ls notes.*
notes.setl notes.txt</pre>
 
=={{header|Sidef}}==
Line 2,569 ⟶ 3,418:
 
=={{header|uBasic/4tH}}==
{{works with|R3R4}}
The lack of built-in high level time and date functions makes it more difficult than necessary, since they have to be implemented by user defined functions.
<syntaxhighlight lang="text">If Cmd (0) > 1 Then ' if there are commandline arguments
Line 2,622 ⟶ 3,471:
g@ = g@ - FUNC(_Monthdays (c@-1, f@))
' Print a@, d@, e@, f@
Return (Join (Str(b@), FUNC(_Format (c@, Dup("-"))), FUNC(_Format (e@ - g@, Dup("-")))))
 
_TimeStr ' convert epoch to time string
Param (1)
Return (Join(Str((a@%86400)/3600), FUNC(_Format ((a@%3600)/60, Dup(":"))), FUNC(_Format (a@%60, Dup(":")))))
 
_Format Param (2) : Return (Join (Iif (a@<10, Join(b@, "0"), b@), Str (a@)))
Line 2,639 ⟶ 3,488:
Anyways, it seems this task is DONE!
</pre>
 
=={{header|UNIX Shell}}==
Bash version
Line 2,695 ⟶ 3,545:
An awkward task for Wren-cli which currently has no way of determining the current date and time.
We therefore have to ask the user to input it plus the note(s).
<syntaxhighlight lang="ecmascriptwren">import "os" for Process
import "./ioutil" for File, FileUtil
import "./date" for Date
 
var dateFormatIn = "yyyy|-|mm|-|dd|+|hh|:|MM"
2,093

edits