-
Notifications
You must be signed in to change notification settings - Fork 16
/
jBASELanguage.json
2394 lines (2394 loc) · 273 KB
/
jBASELanguage.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"Language": {
"Type": "jBASE PickBASIC",
"Keywords": [
{
"key": "$Include",
"icon": 14,
"documentation": "The $INCLUDE or $INSERT directive inserts the program/code snippet specified into the current source code.\r\nIf the optional filename is specified the code is read from that file.",
"detail": "$INCLUDE programname\r\n$INCLUDE filename programname\r\n$INSERT programname\r\n$INSERT filename programname"
},
{
"key": "@Am",
"icon": 21,
"documentation": "Inserts an attribute mark CHAR(254).",
"detail": "@AM"
},
{
"key": "@Account",
"icon": 21,
"documentation": "Returns the name of the current jBASE user account.",
"detail": "@ACCOUNT"
},
{
"key": "@Application.Id",
"icon": 21,
"documentation": "@ID Dataname used to reference the record-id in a query language statement.",
"detail": "@APPLICATION.ID"
},
{
"key": "@Callstack",
"icon": 21,
"documentation": "For DEBUG purposes - returns the callstack if used in a subroutine.",
"detail": "@CALLSTACK"
},
{
"key": "@Codepage",
"icon": 21,
"documentation": "Returns the current JBASE_CODEPAGE setting when in I18N mode.",
"detail": "@CODEPAGE"
},
{
"key": "@Command",
"icon": 21,
"documentation": "See @SENTENCE.",
"detail": "@COMMAND"
},
{
"key": "@CR",
"icon": 21,
"documentation": "Inserts a carriage return CHAR(13).",
"detail": "@CR"
},
{
"key": "@Data",
"icon": 21,
"documentation": "Returns the data stack or input queue.",
"detail": "@DATA"
},
{
"key": "@Date",
"icon": 21,
"documentation": "Returns the internal date – on some systems, this differs from the DATE function in that the variable is set when program execution starts, whereas the function reflects the current date.",
"detail": "@DATE"
},
{
"key": "@Day",
"icon": 21,
"documentation": "Returns the day of the month from @DATE.",
"detail": "@DAY"
},
{
"key": "@Eof",
"icon": 21,
"documentation": "Returns the End of File character from the TTY characteristics.",
"detail": "@EOF"
},
{
"key": "@Esc",
"icon": 21,
"documentation": "Inserts a escape character CHAR(27).",
"detail": "@ESC"
},
{
"key": "@False",
"icon": 21,
"documentation": "Inserts a zero.",
"detail": "@FALSE"
},
{
"key": "@Ff",
"icon": 21,
"documentation": "Inserts a form feed chacater for printing CHAR(12).",
"detail": "@FF"
},
{
"key": "@Filename",
"icon": 21,
"documentation": "Returns the current filename, used in I-types.",
"detail": "@FILENAME"
},
{
"key": "@Fm",
"icon": 21,
"documentation": "Inserts an attribute/field mark CHAR(254).",
"detail": "@FM"
},
{
"key": "@Id",
"icon": 21,
"documentation": "Returns the current Item ID, used in I-types.",
"detail": "@ID"
},
{
"key": "@Im",
"icon": 21,
"documentation": "Inserts an item mark CHAR(255).",
"detail": "@IM"
},
{
"key": "@Level",
"icon": 21,
"documentation": "Returns the EXECUTE nesting level.",
"detail": "@LEVEL"
},
{
"key": "@Lf",
"icon": 21,
"documentation": "Inserts a line feed CHAR(10).",
"detail": "@LF"
},
{
"key": "@Locale",
"icon": 21,
"documentation": "Returns the current JBASE_LOCALE setting.",
"detail": "@LOCALE"
},
{
"key": "@Logname",
"icon": 21,
"documentation": "Returns the current operating system user name.",
"detail": "@LOGNAME"
},
{
"key": "@Lptrhigh",
"icon": 21,
"documentation": "Returns the number of lines on the device to which you are printing (terminal or printer).",
"detail": "@LPTRHIGH"
},
{
"key": "@Month",
"icon": 21,
"documentation": "Returns the number of the current month from @DATE.",
"detail": "@MONTH"
},
{
"key": "@Parasentence",
"icon": 21,
"documentation": "The last sentence or paragraph that invoked the current process.",
"detail": "@PARASENTENCE"
},
{
"key": "@Path",
"icon": 21,
"documentation": "Current working directory.",
"detail": "@PATH"
},
{
"key": "@Pid",
"icon": 21,
"documentation": "Current Process ID.",
"detail": "@PID"
},
{
"key": "@Record",
"icon": 21,
"documentation": "Returns the current record, used in I-types.",
"detail": "@RECORD"
},
{
"key": "@Rm",
"icon": 21,
"documentation": "Inserts a record mark CHAR(255).",
"detail": "@TM"
},
{
"key": "@Selected",
"icon": 21,
"documentation": "Returns the item count from the active select.",
"detail": "@SELECTED"
},
{
"key": "@Sentence",
"icon": 21,
"documentation": "The last sentence or paragraph that invoked the current process.",
"detail": "@SENTENCE"
},
{
"key": "@Sm",
"icon": 21,
"documentation": "Inserts a subvalue mark CHAR(252).",
"detail": "@SM"
},
{
"key": "@Svm",
"icon": 21,
"documentation": "Inserts a subvalue mark CHAR(252).",
"detail": "@SVM"
},
{
"key": "@Tab",
"icon": 21,
"documentation": "Inserts a tab character CHAR(9).",
"detail": "@TAB"
},
{
"key": "@Time",
"icon": 21,
"documentation": "Returns the current time in internal format.",
"detail": "@TIME"
},
{
"key": "@Timezone",
"icon": 21,
"documentation": "Returns the current JBASE_TIMEZONE setting.",
"detail": "@TIMEZONE"
},
{
"key": "@Tm",
"icon": 21,
"documentation": "Inserts a text mark CHAR(251).",
"detail": "@TM"
},
{
"key": "@True",
"icon": 21,
"documentation": "Inserts a one.",
"detail": "@TRUE"
},
{
"key": "@Tty",
"icon": 21,
"documentation": "Returns the current terminal device.",
"detail": "@TTY"
},
{
"key": "@Udtno",
"icon": 21,
"documentation": "Returns the current jBASE port number.",
"detail": "@UDTNO"
},
{
"key": "@Uid",
"icon": 21,
"documentation": "Returns the operating system user ID.",
"detail": "@UID"
},
{
"key": "@User",
"icon": 21,
"documentation": "Returns the operating system login name.",
"detail": "@USER"
},
{
"key": "@Userno",
"icon": 21,
"documentation": "Returns the jBASE port number.",
"detail": "@USERNO"
},
{
"key": "@Userstats",
"icon": 21,
"documentation": "Returns the current user statistics.",
"detail": "@USERSTATS"
},
{
"key": "@Vm",
"icon": 21,
"documentation": "Inserts a value mark CHAR(253).",
"detail": "@VM"
},
{
"key": "@Who",
"icon": 21,
"documentation": "Returns the name of the current jBASE account name.",
"detail": "@WHO"
},
{
"key": "@Year",
"icon": 21,
"documentation": "Returns the current two-digit year number.",
"detail": "@YEAR"
},
{
"key": "Abort",
"icon": 14,
"documentation": "The ABORT statement terminates the running program as well as the program that called it.\r\nThe optional message.number provided with the statement must be a numeric value, which corresponds to a record key in the jBASE error message file.\r\nA single expression or a list of expression(s) may follow the message.number.\r\nWhere more than one expression is listed, they must be delimited by use of the comma character.\r\nThe expression(s) correspond to the parameters that need to be passed to the error file record to print it.\r\nThe optional message.number and expression(s) given with the command are parameters or resultants provided as variables, literal strings, expressions, or functions.",
"detail": "ABORT {message.number{, expression ...}}"
},
{
"key": "Abs",
"icon": 3,
"documentation": "The ABS function will return the mathematical absolute of the ()expression.\r\nexpression can be an expression of any form that should evaluate to a numeric.\r\nThe ABS function will then return the mathematical absolute of the expression.\r\nThis will convert any negative number into a positive result.",
"detail": "ABS(expression)"
},
{
"key": "Abss",
"icon": 3,
"documentation": "Use the ABSS function to return the absolute values of all the elements in a dynamic array.\r\nIf an element in the dynamic array is null, it returns null for that element.",
"detail": "ABSS(dynamic array)"
},
{
"key": "Adds",
"icon": 3,
"documentation": "The ADDS function returns a dynamic array, the content of which is derived by adding corresponding elements from two dynamic arrays supplied as arguments.\r\nDynArr1 and DynArr2 represent dynamic arrays.",
"detail": "ADDS(DynArr1, DynArr2)"
},
{
"key": "Alpha",
"icon": 3,
"documentation": "The ALPHA function will check that the expression consists entirely of alphabetic characters.\r\nThe expression can return a result of any type. The ALPHA function will then return TRUE (1) if the expression consists entirely of alphabetic characters.\r\nIf any character in expression is non alphabetic then the function returns FALSE (0).",
"detail": "ALPHA(expression)"
},
{
"key": "Ands",
"icon": 3,
"documentation": "Use the ANDS function to create a dynamic array of the logical AND of corresponding elements from two dynamic arrays.\r\nEach element of the new dynamic array is the logical AND of the corresponding elements of array1 and array2.\r\nIf an element of one dynamic array has no corresponding element in the other dynamic array, it returns a false (0) for that element.\r\nIf both corresponding elements of array1 and array2 are null, it returns null for those elements.\r\nIf one element is a null value and the other is zero or an empty string, it returns false for those elements.",
"detail": "ANDS(Array1, Array2)"
},
{
"key": "Ascii",
"icon": 3,
"documentation": "The ASCII function converts all the characters in the expression from the EBCDIC character set to the ASCII character set.\r\nThe expression may return a data string of any form. The function will then assume that the characters are all members of the EBCDIC character set and translate them using a character map.\r\nThe original expression is unchanged while the returned result of the function is now the ASCII equivalent.",
"detail": "ASCII(expression)"
},
{
"key": "Assigned",
"icon": 3,
"documentation": "The ASSIGNED function returns a Boolean TRUE or FALSE result depending on whether a variable has been assigned a value or not.\r\nASSIGNED returns TRUE if the variable named has been assigned a value before the execution of this statement.\r\nIf the variable has never been assigned a value then the function returns FALSE.",
"detail": "ASSIGNED(variable)"
},
{
"key": "Begin Case",
"icon": 14,
"documentation": "The CASE structure is bounded by the BEGIN CASE and END CASE statements.",
"detail": "BEGIN CASE\r\n\r\n...\r\nEND CASE"
},
{
"key": "Bitand",
"icon": 3,
"documentation": "Use the BITAND function to perform the bitwise AND comparison of two integers specified by numeric expressions\r\nThe bitwise AND operation compares two integers bit by bit.\r\nIt returns a bit of 1 if both bits are 1; else, it returns a bit of 0.\r\nIf either expression1 or expression2 evaluates to a null value, null is returned.\r\nNon integer values are truncated before the operation is performed.\r\nThe BITAND operation is performed on a 32-bit twos-complement word.",
"detail": "BITAND(expression1, expression2)"
},
{
"key": "Bitchange",
"icon": 3,
"documentation": "BITCHANGE toggles the state of a specified bit in the local bit table, and return the original value of the bit.\r\n\r\ntable_no specifies the position in the table of the bit to be changed.\r\nA unique table of 128 bits (numbered 1 to 128) is maintained for each process. Each bit in the table is treated as a two-state flag - the value returned will always be 0 (zero) or 1.\r\nBITCHANGE returns the value of the bit before it was changed.\r\nIt is therefore possible to check and set (or reset) a flag in one step.\r\nSome special functions ara available if one of the following table_no values is used:r\n-1 toggles (enables/disables) the BREAK key Inhibit bit.\r\n-2 toggles (enables/disables) the Command Level Restart feature.\r\n-3 toggles (enables/disables) the Break/End Restart feature.",
"detail": "BITCHANGE(table_no)"
},
{
"key": "Bitcheck",
"icon": 3,
"documentation": "BITCHECK returns the current value of a specified bit from the local bit table.\r\ntable_no specifies the position in the table of the bit to be checked.\r\nA unique table of 128 bits (numbered 1 to 128) is maintained for each process. Each bit in the table is treated as a two-state flag - the value returned will always be 0 (zero) or 1.\r\nBITCHECK also provides some special functions if one of the following table_no values is used:\r\n-1 returns the setting of the BREAK key Inhibit bit.\r\n-2 returns the setting of the Command Level Restart feature.\r\n-3 returns the setting of the Break/End Restart feature.",
"detail": "BITCHECK(table_no)"
},
{
"key": "Bitload",
"icon": 3,
"documentation": "BITLOAD assigns all values in the local bit table, or retrieves all the values.bit-string is an ASCII string of characters which represent a hexadecimal value.\r\nIt is interpreted as a bit pattern and used to assign values to the table from left to right. Assignment stops at the end of the string or when a non-hexadecimal character is found.\r\nIf the string represents less than 128 bits, the remaining bits in the table are reset to 0 (zero).\r\nIf bit-string is omitted or evaluates to null, an ASCII hex character string is returned, which defines the value of the table. Trailing zeroes in the string are truncated.",
"detail": "BITLOAD(bit_string)"
},
{
"key": "Bitnot",
"icon": 3,
"documentation": "BITNOT returns the bitwise negation of an integer specified by any numeric expression.\r\nIf expression evaluates to the null value, null is returned.\r\nIf bit# evaluates to the null value, the BITNOT function fails and the program terminates with a run-time error message.\r\nNon integer values are truncated before the operation is performed.",
"detail": "BITNOT(expression, bit#)"
},
{
"key": "Bitor",
"icon": 3,
"documentation": "BITOR performs the bitwise OR comparison of two integers specified by numeric expressions.\r\nThe bitwise OR operation compares two integers bit by bit. It returns the bit 1 if the bit in either or both numbers is 1; else, it returns the bit 0.\r\nIf either expression1 or expression2 evaluates to the null value, null is returned.\r\nNon integer values are truncated before the operation is performed.",
"detail":"BITOR(expression1, expression2)"
},
{
"key": "Bitreset",
"icon": 3,
"documentation": "BITRESET resets the value of a specified bit in the local bit table to 0 and returns the value of the bit before it was changed.\r\ntable_no specifies the position in the table of the bit to be reset. If table_no evaluates to zero, all elements in the table are reset to 0 (zero) and the returned value is zero.\r\nA unique table of 128 bits (numbered 1 to 128) is maintained for each process.\r\nEach bit in the table is treated as a two-state flag - the value returned will always be 0 (zero) or 1.",
"detail":"BITRESET(table_no)"
},
{
"key": "Bitset",
"icon": 3,
"documentation": "BITSET sets the value of a specified bit in the bit table to 1 and returns the value of the bit before it was changed.\r\ntable_no specifies the bit to be SET. If table_no evaluates to zero, all elements in the table are set to 1 (one) and the returned value is one.\r\nA unique table of 128 bits (numbered 1 to 128) is maintained for each process. Each bit in the table is treated as a two-state flag - the value returned will always be 0 (zero) or 1.",
"detail":"BITSET(table_no)"
},
{
"key": "Bittest",
"icon": 3,
"documentation": "BITTEST tests the bit number of the integer specified by an expression.\r\nThe function returns 1 if the bit is set; it returns 0 if it is not; Bits are counted from right to left.\r\nThe number of the rightmost bit is 0.\r\nIf expression evaluates to the null value, null is returned. If bit# evaluates to null, the BITTEST function fails and the program terminates with a run-time error message.\r\nNon integer values are truncated before the operation is performed.",
"detail":"BITTEST(expression, bit#)"
},
{
"key": "Bitxor",
"icon": 3,
"documentation": "BITXOR performs the bitwise XOR comparison of two integers specified by numeric expressions.\r\nThe bitwise XOR operation compares two integers bit by bit.\r\nIt returns a bit 1 if only one of the two bits is 1; else, it returns a bit 0.\r\nIf either expression1 or expression2 evaluates to the null value, null is returned.\r\nNon integer values are truncated before the operation is performed.",
"detail":"BITXOR(expression1, expression2)"
},
{
"key": "Break",
"icon": 14,
"documentation": "The BREAK statement allows the break key to be configured.\r\nWhen used with an expression, or the keywords ON or OFF the BREAK statement enables or disables the BREAK key for the current process. In UNIX terms the BREAK key is more commonly known as the interrupt sequence intr defined by the stty command.\r\nUsed as a standalone statement, BREAK will terminate the currently executing loop. The EXIT statement is functionally equivalent to the BREAK statement used without arguments.",
"detail":"BREAK\r\nBREAK ON\r\nBREAK OFF\r\nBREAK expression"
},
{
"key": "Bytelen",
"icon": 3,
"documentation": "The BYTELEN function will return the length of the expression as the number of bytes rather than the number of characters.\r\nThe expression can return a result of any type.\r\nThe BYTELEN function will then return the byte count of the expression.",
"detail":"BYTELEN(expression)"
},
{
"key": "Call",
"icon": 14,
"documentation": "The CALL statement transfers program execution to the subroutine called subroutine.name, which can be any valid string either quoted or unquoted.\r\nThe CALL @ variant of this statement assumes that subroutine.name is a variable that contains the name of the subroutine to call.\r\nThe CALL statement may optionally pass a number of parameters to the target subroutine.\r\nThese parameters can consist of any valid expression or variable name.\r\nIf a variable name is used then the called program may return a value to the variable by changing the value of the equivalent variable in its own parameter list.",
"detail": "CALL {@}subroutine.name {(argument {, argument ... })}"
},
{
"key": "Callc",
"icon": 14,
"documentation": "The CALLC statement is used to invoke user supplied C functions compiled and built into standard libraries.\r\nCfunction must correspond to a valid C function name in an associated C source.\r\nargument must correspond to a valid variable name\r\nVariable must correspond to a valid variable name which contains the name of the C function to invoke.\r\nThe indirect, '@', form of the statement expects the specified variable to contain the name of the 'C' function to be invoked.\r\nAll arguments to be passed to and from the calling program to the 'C' function must be of type VAR and the 'C' function coded accordingly, the 'C' function should also be coded to return a result of type VAR.\r\nRefer to the jsystem.h header file and jBASE 'C' programming for more information on the jBASE VAR type.\r\nThe 'C' functions should be coded in a separate source, then compiled and built into a shared library and made available to the calling program similar to subroutines",
"detail": "CALLC Cfunction{(argument{,...})}\r\nor\r\nCALLC @Variable{(argument {, argument ... })}"
},
{
"key": "Calldotnet",
"icon": 14,
"documentation": "The CALLdotNET command allows jBASE BASIC to call any .NET assembly and is useful when using third party applications.\r\nNameSpaceAndClassName The “full” NameSpace (e.g., myNameSpace.myClass)\r\nmethodName The name of the .NET in this class (e.g., “myMethod”)\r\nParam Any parameter (e.g. DynArray)",
"detail": "CALLdotNET NameSpaceAndClassName, methodName, param SETTING ret [ON ERROR errStatment]"
},
{
"key": "Callj",
"icon": 14,
"documentation": "The CALLJ statement allows a jBC program to call a Java method.\r\npackageAndClassName The “full” class name (e.g., com.jbase.util.utilClass).\r\nmethodName The name of the Java method in this class (e,g., “myMethod”). If the method is static, you must include a ‘$’ before the name. This ‘$’ will be removed from the method name before calling it.\r\nparam Any parameter (e.g. DynArray)",
"detail": "CALLJ packageAndClassName, [$]methodName, param SETTING ret [ON ERROR] statements"
},
{
"key": "Callonexit",
"icon": 3,
"documentation": "The CALLONEXIT function call allows you to specify the name of a SUBROUTINE to call when the program terminates.\r\nThe subroutine definition would look like this\r\n\r\nSUBROUTINE CALLONEXIT(parm1)\r\n\r\nYou can add parameters to the error subroutine by adding multi-values to the parameter to CALLONEXIT, which are passed to the called subroutine in the first parameter.\r\nIf you execute CALLONEXIT multiple times with the same subroutine name, it discards other calls.\r\nIf you execute CALLONEXIT multiple times with a different subroutine name, then upon exit multiple subroutines will be called in the order that CALLONEXIT was called.",
"detail": "rc = CALLONEXIT('ErrorExit')"
},
{
"key": "Case",
"icon": 14,
"documentation": "The CASE statement allows the programmer to execute a particular sequence of instructions based upon the results of a series of test expressions.\r\nThe CASE structure is bounded by the BEGIN CASE and END CASE statements.\r\nWithin this block, an arbitrary number of CASE expression statements may exist followed by any number of jBC statements.\r\nThe expression should evaluate to a TRUE or FALSE result.\r\nAt execution time, each expression is evaluated in order.\r\nIf the expression returns a TRUE result, then the statements beneath it are executed.\r\nOn completion of the associated statements, execution will resume at the first statement following the END CASE.",
"detail": "CASE expression\r\nstatement(s)\r\nCASE expression\r\nstatement(s)\r\n.....\r\nEND CASE"
},
{
"key": "Cats",
"icon": 3,
"documentation": "The CATS function concatenates the corresponding elements in two dynamic arrays.\r\nDynArr1 and DynArr2 represent dynamic arrays.\r\nIf one dynamic array supplied to the CATS function is null then the result of the CATS function is the non-null dynamic array.",
"detail": "CATS(DynArr1, DynArr2)"
},
{
"key": "Chain",
"icon": 14,
"documentation": "The CHAIN statement exits the current program and transfers process control to the program defined by the expression.\r\nProcess control will never return to the originating program.\r\nThe expression should evaluate to a valid UNIX or Windows command (this may be another jBC program).\r\nThe command string may be suffixed with the (I option, which will cause any COMMON variables in the current program to be inherited by the new program (providing it is a jBC program).",
"detail": "CHAIN expression {(I}"
},
{
"key": "Change",
"icon": 3,
"documentation": "The CHANGE function operates on a variable and replaces all occurrences of one string with another.\r\nexpression1 may evaluate to any result and is the string of characters that will be replaced.\r\nexpression2 may also evaluate to any result and is the string of characters that will replace expression1.\r\nThe variable may be any previously assigned variable in the program.\r\nEither string can be of any length and is not required to be the same length.\r\nSee also the SWAP function.\r\nThe jBC language also supports the CHANGE statement.",
"detail": "CHANGE( variable, expression1, expression2 )"
},
{
"key": "Change",
"icon": 14,
"documentation": "The CHANGE statement operates on a variable and replaces all occurrences of one string with another.\r\nexpression1 may evaluate to any result and is the string of characters that will be replaced,\r\nexpression2 may also evaluate to any result and is the string of characters that will replace expression1,\r\nvariable may be any previously assigned variable in the program.\r\nThere is no requirement that strings be of the same length. ",
"detail": "CHANGE expression1 TO expression2 IN variable"
},
{
"key": "Changetimestamp",
"icon": 3,
"documentation": "Use CHANGETIMESTAMP to adjust existing timestamp to return new timestamp value.\r\nThe CHANGETIMESTAMP function generates a new timestamp by adjusting an existing timestamp value using the elements specified in the dynamic array.\r\nThe format of the adjustment array is as follows:\r\nYears^Months^Weeks^Days^Hours^Minutes^Seconds^Milliseconds",
"detail": "CHANGETIMESTAMP(Timestamp, Array)"
},
{
"key": "Char",
"icon": 3,
"documentation": "The CHAR function returns the ASCII character specified by the expression.\r\nThe expression must evaluate to a numeric argument in the range 0-255.\r\n\r\nInternational Mode\r\nThe CHAR function will return Unicode values encoded as UTF-8 byte sequences as follows:\r\nExpression values 0 – 127 return UTF-8 single byte characters equivalent to ASCII.\r\nExpression values 127 – 248 return UTF-8 double byte character sequences.\r\nExpression values 249 – 255 return system delimiters 0xf8 – 0xff\r\nExpression values > 255 return UTF-8 multi byte character sequences\r\nWhen system delimiter values are not specifically required, generate UTF-8 byte sequences using the UTF8 function. i.e. X = UTF8(@AM) will generate a UTF-8 byte sequence in variable X for the system delimiter equating to Unicode value 0x000000fe.",
"detail": "CHAR(expression)"
},
{
"key": "Chars",
"icon": 3,
"documentation": "The CHARS function accepts a dynamic array of numeric expressions and returns a dynamic array of the corresponding ASCII characters\r\nEach element of DynArr must evaluate to a numeric argument in the range 0-255.\r\nIf any of the dynamic array elements are non-numeric, a run-time error will occur.\r\nSee also CHAR().",
"detail": "CHARS(DynArr)"
},
{
"key": "Chdir",
"icon": 3,
"documentation": "The CHDIR function allows the current working directory, as seen by the process environment, to be changed.\r\nThe expression should evaluate to a valid path name within the file system.\r\nThe function returns a Boolean TRUE result if the CHDIR succeeded and a Boolean FALSE result if it failed.",
"detail": "CHDIR(expression)"
},
{
"key": "Checksum",
"icon": 3,
"documentation": "The CHECKSUM function returns a simple numeric checksum of a character string.\r\nThe expression may evaluate to any result but will usually be a string.\r\nThe function then scans every character in the string and returns a numeric addition of the characters within the string.\r\nThe function calculates the checksum by summing the product of the ASCII value of each character and its position within the string.",
"detail": "CHECKSUM(expression)"
},
{
"key": "Clear",
"icon": 14,
"documentation": "The CLEAR statement will initialize all variables to numeric 0.\r\nCLEAR can be used at any time during the execution of the program.",
"detail": "CLEAR"
},
{
"key": "Clearcommon",
"icon": 14,
"documentation": "The CLEARCOMMON statement initializes all unnamed common variables to a value of zero.",
"detail": "CLEARCOMMON"
},
{
"key": "Cleardata",
"icon": 14,
"documentation": "The CLEARDATA statement clears data that has been stacked by the DATA statement.",
"detail": "CLEARDATA"
},
{
"key": "Clearfile",
"icon": 14,
"documentation": "The CLEARFILE statement is used to clear all the data from a file previously opened with the OPEN statement.\r\nThe variable must have been the subject of an OPEN statement before the execution of CLEARFILE upon it.\r\nIf the variable is omitted from the CLEARFILE statement, then the default file variable is assumed as per the OPEN statement.\r\nThe CLEARFILE statement will remove every database record on the file it is executed against. It should therefore be used with great care.\r\nIf the variable argument does not describe a previously opened file, the program will enter the debugger with an appropriate message.",
"detail": "CLEARFILE {variable} {SETTING setvar} {ON ERROR statements}"
},
{
"key": "Clearinput",
"icon": 14,
"documentation": "The CLEARINPUT statement clears the type-ahead buffer to allow the next INPUT statement to force a response from the user.\r\nCLEARINPUT only clears the type-ahead buffer.\r\nIt does not clear data stacked with the DATA statement.\r\nThe CLEARINPUT statement is synonymous with INPUTCLEAR.",
"detail": "CLEARINPUT"
},
{
"key": "Clearselect",
"icon": 14,
"documentation": "The CLEARSELECT statement is used to clear specific active select lists.\r\nCListName must evaluate to a jBC list variable.\r\nListNumber is one of the numbered lists in the range 0 to 11.\r\nIf neither ListName or ListNumber are specified then the default list (0) is cleared.",
"detail": "CLEARSELECT {ListName | ListNumber}"
},
{
"key": "Close",
"icon": 14,
"documentation": "The statement is used to CLOSE a previously opened file when it is no longer needed.\r\nItem locks and file locks are released.\r\nThe variable list should contain previously opened file variables that are no longer needed.\r\nThe variables will be cleared and may be reused as ordinary variables.",
"detail": "CLOSE variable{, variable ...}"
},
{
"key": "Closeseq",
"icon": 14,
"documentation": "The statement is used to CLOSE a file previously opened for sequential access.\r\nFileVar contains the file descriptor of the previously opened sequential file",
"detail": "CLOSESEQ FileVar"
},
{
"key": "Col1",
"icon": 3,
"documentation": "The function is used in conjunction with the FIELD function to determine the character position 1 position before the last field that was located.\r\nWhen a field has been located in a string, it is sometimes useful to know its exact position within the string to manipulate either it, or the rest of the string. COL1() will return the position of the character immediately before the last field located.",
"detail": "COL1()"
},
{
"key": "Col2",
"icon": 3,
"documentation": "The function is used in conjunction with the FIELD function to determine the character position 1 position after the last field that was located.\r\nCOL2() will return the position of the character immediately after the end of the last field located. Together with COL1(), they can then be used to manipulate the string.",
"detail": "COL2()"
},
{
"key": "Collectdata",
"icon": 14,
"documentation": "The COLLECTDATA statement is used to retrieve data passed from the PASSDATA clause of an EXECUTE statement.\r\nvariable is the name of the variable which is to store the retrieved data.\r\nThe COLLECTDATA statement can be used in any program which is EXECUTEd (or PERFORMed) by another program where the calling program uses a PASSDATA clause.\r\nThe EXECUTEd program uses a COLLECTDATA statement to retrieve the passed data.\r\nIf a PASSDATA clause is not in effect, variable will be assigned a value of null.",
"detail": "COLLECTDATA variable"
},
{
"key": "Common",
"icon": 14,
"documentation": "The COMMON statement declares a list of variables and matrices that can be shared among various programs.\r\nThere can be many common areas including a default, unnamed common area.\r\nThe list of variables should not have been declared or referenced previously in the program file.\r\nThe compiler will detect any bad declarations and display suitable warning or error messages.\r\nIf the common area declared with the statement is to be named then the first entry in the list should be a string, delimited by the / character.",
"detail": "COMMON {/CommonName/} variable{, variable ... }"
},
{
"key": "Compare",
"icon": 3,
"documentation": "The COMPARE function compares two strings and returns a value indicating whether or not they are equal.\r\nexpression1 is the first string for comparison\r\nexpression2 is the second string for comparison\r\njustification specifies how the strings are to be compared.\r\n\"L\" indicates a left justified comparison.\r\n\"R\" indicates a right justified comparison.\r\nThe default is left justification.",
"detail": "COMPARE(expression1, expression2{, justification})"
},
{
"key": "Continue",
"icon": 14,
"documentation": "The CONTINUE statement is the complimentary statement to the BREAK statement without arguments.\r\nThe statement is used within a loop to skip the remaining code in the current iteration and proceed directly to the next iteration.\r\nSee also: BREAK, EXIT\r\nThe compiler will issue a warning message and ignore the statement if it is found outside an iterative loop such as FOR...NEXT, LOOP...REPEAT.",
"detail": "CONTINUE"
},
{
"key": "Convert",
"icon": 3,
"documentation": "This is the function form of the CONVERT statement.\r\nIt performs exactly the same function, but may also operate on an expression rather than being restricted to variables.\r\nexpression1 is the string to which the conversion will apply.\r\nexpression2 is the list of all characters to translate in expression1.\r\nexpression3 is the list of characters that will be converted to.\r\n\r\nFor Prime, Universe and Unidata emulations:\r\nexpression1 is the list of all characters to translate in expression1.\r\nexpression2 is the list of characters that will be converted to.\r\nexpression3 is the string to which the conversion will apply.",
"detail": "CONVERT(expression1, expression2, expression3)"
},
{
"key": "Convert",
"icon": 14,
"documentation": "The CONVERT statement converts one or more characters in a string to their corresponding replacement characters.\r\nexpression1 is the list of all characters to translate in expression3.\r\nexpression2 is the list of characters that will be converted to.\r\nexpression3 is the string to which the conversion will apply.",
"detail": "CONVERT expression1 TO expression2 IN expression3"
},
{
"key": "Cos",
"icon": 3,
"documentation": "The COS function calculates the cosine of any angle using floating point arithmetic, then rounds to the precision implied by the jBC program. This makes it very accurate.\r\nThe expression must evaluate to a numeric result or a runtime error will occur.",
"detail": "COS(expression)"
},
{
"key": "Count",
"icon": 3,
"documentation": "The COUNT function returns the number of times that one string occurs in another.\r\nBoth expression1 and expression2 may evaluate to any data type but logically they will evaluate to character strings.\r\nThe count is made on overlapping occurrences as a pattern match from each character in expression1.\r\nThis means that the string jjj occurs 3 times in the string jjjjj.",
"detail": "COUNT(expression1, expression2)"
},
{
"key": "Counts",
"icon": 3,
"documentation": "The COUNTS function counts the number of times a substring is repeated in each element of a dynamic array.\r\nThe result is a new dynamic array whose elements are the counts corresponding to the elements in the dynamic array.\r\ndynamic.array specifies the dynamic array whose elements are to be searched.\r\nsubstring is an expression that evaluates to the substring to be counted. substring can be a character string, a constant, or a variable. Each character in an element is matched to substring only once.\r\nTherefore, when substring is longer than one character and a match is found, the search continues with the character following the matched substring.\r\nNo part of the matched element is recounted toward another match.\r\nIf substring does not appear in an element, a 0 value is returned. If substring is an empty string, the number of characters in the element is returned.\r\nIf substring is null, the COUNTS function fails and the program terminates with a run-time error message.\r\nIf any element in dynamic.array is null, null is returned.",
"detail": "COUNTS(dynamic array, substring)"
},
{
"key": "Create",
"icon": 14,
"documentation": "Use the CREATE statement after an OPENSEQ statement to create a record in a jBASE directory file or to create a UNIX or DOS file.\r\nCREATE creates the record or file if the OPENSEQ statement fails.\r\nAn OPENSEQ statement for the specified file.variable must be executed before the CREATE statement to associate the pathname or record ID of the file to be created with the file.variable.\r\nIf file.variable is null, the CREATE statement fails and the program enters the debugger.\r\nUse the CREATE statement when OPENSEQ cannot find a record or file to open and the next operation is to be a READSEQ or READBLK.\r\nIf the first file operation is a WRITESEQ, WRITESEQ creates the record or file if it does not exist.\r\nIf the record or file is created, it executes the THEN statements; if no record or file is created, it executes the ELSE statements.",
"detail": "CREATE file.variable {THEN statements [ELSE statements] | ELSE statements}"
},
{
"key": "Crt",
"icon": 14,
"documentation": "The CRT statement sends data directly to the terminal, even if a PRINTER ON statement is currently active.\r\n\r\nAn expression can evaluate to any data type.\r\nThe CRT statement will convert the result to a string type for printing.\r\nExpressions separated by commas will be sent to the screen separated by a tab character.\r\nThe CRT statement will append a newline sequence to the final expression unless it is terminated with a colon \":\" character.",
"detail": "CRT expression {, expression..} {:}"
},
{
"key": "Data",
"icon": 14,
"documentation": "The DATA statement stacks the series of expressions on an input FIFO stack.\r\nTerminal input statements will then treat this data as if it were typed in at the keyboard\r\nThe expression may evaluate to any data type.\r\nEach comma separated expression will be viewed as one line of terminal input.\r\nThe DATA statement cannot be used to send input to the jBC IN statement in that the IN statement reads from a different location than the INPUT statement.\r\nThe INPUT statement reads from stdin and IN reads from the 'raw' device (normally the keyboard). ",
"detail": "DATA expression {, expression ...}"
},
{
"key": "Date",
"icon": 3,
"documentation": "The DATE() function returns the date in internal system form. This date is expressed as the number of days before or after December 31, 1967.\r\nThe system and any programs should manipulate date fields in internal form.\r\nThey can then be converted to a readable format of your choice using the OCONV() function and the date conversion codes.\r\nSee also: TIMEDATE()",
"detail": "DATE()"
},
{
"key": "Dcount",
"icon": 3,
"documentation": "The DCOUNT() function counts the number of field elements in a string that are separated by a specified delimiter.\r\nexpression1 evaluates to a string in which fields are to be counted.\r\nexpression2 evaluates to the delimiter string that will be used to count the fields.\r\nThe delimiter string may consist of more than 1 character.\r\nIf expression1 is a NULL string, then the function will return a value of 0.\r\nThe delimiter string may consist of any character, including system delimiters such as field marks or value marks.\r\nSee also COUNT.",
"detail": "DCOUNT(expression1, expression2)"
},
{
"key": "Debug",
"icon": 14,
"documentation": "The DEBUG statement causes the executing program to enter the jBC debugger.",
"detail": "DEBUG"
},
{
"key": "Decrypt",
"icon": 3,
"documentation": "The DECRYPT function decodes a string encrypted by the ENCRYPT function.\r\nstring specifies the string to be decrypted.\r\nkey is the value used to decrypt the string. It's use depends on method.\r\nmethod is a number which indicates the decryption mechanism to use:\r\n0\tGeneral purpose encryption scheme.\r\n\tThis method will decrypt the string using the key value supplied.\r\n1\tSimple ROT13 algorithm.\r\n\tkey not used.\r\n2\tXOR MOD11 algorithm.\r\n\tThe first character of key is used as a seed value.\r\nSee also ENCRYPT.",
"detail": "DECRYPT(string, key, method)"
},
{
"key": "Defc",
"icon": 14,
"documentation": "The DEFC statement is used to declare an external C function to the jBC compiler and define its arguments and return types.\r\nFuncType and ArgType are selected from one of INT, FLOAT or VAR.\r\nFuncType specifies the type of result that the function will return.\r\nIf FuncType is omitted then INT will be assumed.\r\nThe optional list of ArgTypes specifies the argument types that the C function will expect.\r\nThe compiler must know this in advance as it will automatically perform type conversions on these arguments.",
"detail": "DEFC {FuncType} FuncName ({ArgType {, ArgType ...}})"
},
{
"key": "Defce",
"icon": 14,
"documentation": "The DEFCE statement should be used, rather than the DEFC statement, for calling external C programs, which are pure ‘C’ code and do not use the jBASE library macros and functions.\r\nThe arguments passed can only be of type INT, FLOAT and STRING.",
"detail": "DEFCE {FuncType} FuncName ({ArgType {, ArgType ...}})"
},
{
"key": "Deffun",
"icon": 14,
"documentation": "The DEFFUN statement is used to declare an external jBC function to the jBC compiler and optionally define its arguments.\r\nDEFFUN is used in the program that calls the function.\r\nFuncName is the name used to define the function.\r\nIt must be the same as the source file name.\r\nArgument specifies a value that is passed to the function by the calling program.\r\nTo pass an array, the keyword MAT must be used before the argument name.\r\nThese parameters are entirely optional (as indicated in the Command Syntax), but can be specified for clarity.\r\nNote that if the arguments are not initialized somewhere in the program you will receive a compiler warning.\r\nThe DEFFUN statement identifies a user-written function to the jBC compiler.\r\nIt must be present in each program that calls the function, before the function is called.\r\nA hidden argument is passed to the function so that a value can be returned to the calling program.\r\nThe return value is set in the function using the RETURN (value) statement.\r\nIf the RETURN statement specifies no value then an empty string is returned by the function.",
"detail": "DEFFUN FuncName ({ {MAT} Argument1, {MAT} Argument2...})"
},
{
"key": "Del",
"icon": 3,
"documentation": "The DEL statement or legacy DELETE function is used to remove a specified element from a dynamic array.\r\nThe variable can be any previously assigned variable or matrix element.\r\nThe expressions must evaluate to a numeric value or a runtime error will occur.\r\nexpression1 specifies the field in the array to operate upon and must be present.\r\nexpression2 specifies the multivalue within the field to operate upon and is an optional parameter.\r\nexpression3 is optionally present when expression2 has been included.\r\nIt specifies which subvalue to delete within the specified multivalue.",
"detail": "DEL variable<expression1{, expression2{, expression3}}>\r\nDELETE(variable,expression1{, expression2{, expression3})"
},
{
"key": "Delete",
"icon": 14,
"documentation": "The DELETE statement is used to delete a record from a jBASE file.\r\nIf specified, variable should have been the subject of a previous OPEN statement.\r\nIf variable is omitted then the default file variable is assumed.\r\nThe expression should evaluate to the name of a record stored in the open file.",
"detail": "DELETE {variable,} expression {SETTING setvar} {ON ERROR statements}"
},
{
"key": "Deletelist",
"icon": 14,
"documentation": "The DELETELIST statement will delete the previously stored list named by the expression.\r\nThe expression should evaluate to the name of a list that has been stored either with the WRITELIST statement or the SAVE-LIST command from the shell.",
"detail": "DELETELIST expression"
},
{
"key": "Deleteseq",
"icon": 14,
"documentation": "DELETESEQ deletes an operating system file.\r\nExpression specifies the explicit path of an operating system file to delete.\r\nExpression, Filename Filename is a file that resides in the directory path specified by Expression\r\nStatements conditional jBC statements",
"detail": "DELETESEQ Expression {SETTING setvar} {ON ERROR statements} {LOCKED statements} THEN | ELSE statements\r\nor\r\nDELETESEQ Expression, Filename {SETTING setvar} {ON ERROR statements} {LOCKED statements} THEN | ELSE statements"
},
{
"key": "Deleteu",
"icon": 14,
"documentation": "Use the DELETEU statement to delete a record without releasing the update record lock set by a previous READU statement.\r\nIf no file variable is specified in the DELETEU statement, the statement applies to the default file.",
"detail": "DELETEU {variable,} expression {SETTING setvar} {ON ERROR statements}"
},
{
"key": "Dim",
"icon": 14,
"documentation": "The DIM statement is used to declare arrays to the compiler before they are referenced.\r\nThe variable may be any valid variable name that has not already been used or declared.\r\nThe numbers define the size of each dimension and must be either constants or the subject of an EQUATE statement.\r\nA number of arrays may be declared by a single DIM statement by separating their declarations with a comma.\r\nThe array must be declared before it is referenced in the program source (compilation as opposed to execution).\r\nThe compiler will display an error message if a variable is used as a dimensioned array before it has been declared.\r\nThe array variable may not be used as a normal variable or dynamic array before being dimensioned and the compiler will detect this as an error.\r\nA dimension size may not be specified as 1 as this has no logical meaning.\r\nThe compiler will detect this as a warning.\r\nWhen arrays are referenced directly as in A = Array(7), the compiler will optimize the reference as if it was a single undimensioned variable.\r\nIf the emulation option 'resize_array=true' is set, then the array may be dimensioned with a variable.\r\nIt can also be resized (i.e. redimensioned).",
"detail": "DIM{ENSION} variable(number{, number... }){, variable(number {,number...}) ...}"
},
{
"key": "Dimension",
"icon": 14,
"documentation": "The DIMENSION statement is used to declare arrays to the compiler before they are referenced.\r\nThe variable may be any valid variable name that has not already been used or declared.\r\nThe numbers define the size of each dimension and must be either constants or the subject of an EQUATE statement.\r\nA number of arrays may be declared by a single DIM statement by separating their declarations with a comma.\r\nThe array must be declared before it is referenced in the program source (compilation as opposed to execution).\r\nThe compiler will display an error message if a variable is used as a dimensioned array before it has been declared.\r\nThe array variable may not be used as a normal variable or dynamic array before being dimensioned and the compiler will detect this as an error.\r\nA dimension size may not be specified as 1 as this has no logical meaning.\r\nThe compiler will detect this as a warning.\r\nWhen arrays are referenced directly as in A = Array(7), the compiler will optimize the reference as if it was a single undimensioned variable.\r\nIf the emulation option 'resize_array=true' is set, then the array may be dimensioned with a variable.\r\nIt can also be resized (i.e. redimensioned).",
"detail": "DIMENSION variable(number{, number... }){, variable(number {,number...}) ...}"
},
{
"key": "Dir",
"icon": 3,
"documentation": "The DIR function returns information about a file.The filename is a string argument representing the path and filename of a file.\r\nThis function returns a dynamic array with four attributes.\r\nAttribute\tDescription\r\n1\tFile size in Bytes\r\n2\tLast modified date (in internal format)\r\n3\tLast modified time (in internal format)\r\n4\t'D' if the filename is a directory, blank if the filename is a file",
"detail": "DIR(filename)"
},
{
"key": "Display",
"icon": 14,
"documentation": "The DISPLAY statement sends data directly to the terminal, even if a PRINTER ON statement is currently active.\r\nAn expression can evaluate to any data type.\r\nThe DISPLAY statement will convert the result to a string type for printing.\r\nExpressions separated by commas will be sent to the screen separated by a tab character.\r\nThe DISPLAY statement will append a newline sequence to the final expression unless it is terminated with a colon \":\" character.\r\nAs the expression can be any valid expression, it may have output formatting applied to it.\r\nA jBC program is normally executed using buffered output mode.\r\nThis means that data is not flushed to the terminal screen unless a newline sequence is printed or terminal input is requested and makes it very efficient.\r\nHowever you can force output to be flushed to the terminal by printing a null character 'CHAR(0)'.\r\nThis has the same effect as a newline sequence but without affecting screen output.",
"detail": "DISPLAY expression {, expression..} {:}"
},
{
"key": "Div",
"icon": 3,
"documentation": "The DIV function calculates the value of the quotient after division of the dividend by the divisor.\r\nThe dividend and divisor expressions can evaluate to any numeric value.\r\nThe only exception is that the divisor cannot be zero.\r\nIf either dividend or divisor evaluates to null, it returns null.",
"detail": "DIV(dividend, divisor)"
},
{
"key": "Divs",
"icon": 3,
"documentation": "The DIVS function returns a dynamic array, the content of which is derived by dividing each element of the first dynamic array argument by the corresponding element of the second dynamic array argument.\r\nDynArr1 and DynArr2 represent dynamic arrays.\r\nNull elements of argument arrays are treated as zero.\r\nOtherwise, a non-numeric element in an argument array will cause a run-time error.\r\nIf a zero value element in DynArr2 has a corresponding element in DynArr1, then a run-time error will occur.\r\nIf a zero value element in DynArr2 does not have a corresponding element in DynArr1, then the corresponding element in the result array will be zero.",
"detail": "DIVS(DynArr1, DynArr2)"
},
{
"key": "Downcase",
"icon": 3,
"documentation": "DOWNCASE converts all uppercase characters in an expression to lowercase characters.\r\nexpression in a string containing alphabetic characters.\r\nNon-alphabetic characters are ignored.\r\nThe function LOWCASE is synonymous with DOWNCASE.",
"detail": "DOWNCASE(expression)"
},
{
"key": "Dquote",
"icon": 3,
"documentation": "The function will put double quotation mark at the beginning and end of a string.\r\nexpression may be any expression that is valid in the JBC language.",
"detail": "DQUOTE(Expression)"
},
{
"key": "Dround",
"icon": 3,
"documentation": "The DROUND( ) function performs double-precision rounding on a value.\r\nexpression1 is the value to round.\r\nexpression2 is the optional precision.\r\nDouble-precision rounding uses 2 words to store a number.\r\nIf a precision is not specified as the second expression, DROUND() uses whatever precision is set at the time of the calculation.\r\nIf no PRECISION statement was issued then the default precision of 4 is used.\r\nThe specified precision (either with the PRECISION statement or with the optional precision parameter) to be greater than or equal to the rounding digit, otherwise the calculation will truncate the value to the whatever precision is 'active' at the time of the calculation.",
"detail": "DROUND(expression1{, expression2})"
},
{
"key": "Dtx",
"icon": 3,
"documentation": "The DTX function will return the hexadecimal representation of a numeric expression.\r\nexpression must evaluate to a decimal numeric value or a runtime error will occur.",
"detail": "DTX(expression)"
},
{
"key": "Dyntoxml",
"icon": 3,
"documentation": "The DYNTOXML function converts a dynamic array to XML.\r\nConvert an array to XML using the optional xsl to transform\r\nTakes the contents of the dynamic array and returns a generic XML representation of that array or an error",
"detail": "DYNTOXML(array,xsl,result)"
},
{
"key": "Ebcdic",
"icon": 3,
"documentation": "The EBCDIC function converts all the characters in an expression from the ASCII character set to the EBCDIC character set.\r\nexpression may contain a data string of any form.\r\nThe function will convert it to a character string, assuming that the characters are all members of the ASCII set and translate them using a character map.\r\nThe original expression is unchanged while the result of the function is now the EBCDIC equivalent.",
"detail": "EBCDIC(expression)"
},
{
"key": "Echo",
"icon": 14,
"documentation": "The ECHO statement will turn on or off the echoing of characters typed at the keyboard.\r\nThe statement may be used with the keywords ON and OFF to specify echoing or not.\r\nIf used with an expression, then the expression should evaluate to a Boolean TRUE or FALSE result.\r\nIf TRUE then echoing will be turned on, and if FALSE, echoing will be turned off.\r\nThe SYSTEM function can be used to determine the current state of character echoing.\r\nIf echoing is enabled then SYSTEM(24) will return Boolean TRUE and if disabled it will return Boolean FALSE.",
"detail": "ECHO ON\r\nECHO OFF\r\nECHO expression"
},
{
"key": "Encrypt",
"icon": 3,
"documentation": "The ENCRYPT function encrypts a string.\r\nstring specifies the string to be encrypt.\r\nkey is the value used to encrypt the string. It's use depends on method.\r\nmethod is a number which indicates the encryption mechanism to use:\r\n0\tGeneral purpose encryption scheme.\r\n\tThis method will encrypt the string using the key value supplied.\r\n1\tSimple ROT13 algorithm.\r\n\tkey not used.\r\n2\tXOR MOD11 algorithm.\r\n\tThe first character of key is used as a seed value.\r\nSee also DECRYPT.",
"detail": "ENCRYPT(string, key, method)"
},
{
"key": "End",
"icon": 14,
"documentation": "The END statement is used to terminate a program or to conclude a set of jBC statements bounded by a condition.\r\nThe END statement is not required in a jBC program.\r\nIf the compiler encounters an END statement that is not the conclusion to a conditional block, then no statements can follow it.",
"detail": "END"
},
{
"key": "End Case",
"icon": 14,
"documentation": "The END CASE statement terminates a CASE block. There should be a corresponding END CASE for each BEGIN CASE.",
"detail": "END CASE"
},
{
"key": "End Else",
"icon": 14,
"documentation": "The END ELSE terminates the THEN portion and begin the ELSE portion of a code block",
"detail": "END ELSE"
},
{
"key": "Enter",
"icon": 14,
"documentation": "The ENTER statement unconditionally passes control to another executable program.\r\nprogram_name is the name of the program to be executed.\r\nThe use of single or double quotes to surround program_name is optional.\r\n@ specifies that the program name is contained in a named variable.\r\nvariable_name is the name of the variable which contains the program name.\r\nThe jBC COMMON data area can be passed to another jBC program by specifying the \"(I\" option after the program name.\r\nNote that the program must be compiled with 'enter_keeps_common_data = true' set in the '$JBCRELEASEDIR/config/Config_EMULATE' file (under the appropriate emulation section).\r\nThe COMMON data area can only be passed to another jBC program.\r\nENTER can be used to execute any type of program.\r\nIf the program which contains the ENTER command (the current program) was called from a jCL program, and the program to be executed (the target program) is another jBC program, control will return to the original jCL program when the target program terminates.\r\nIf the target program is a jCL program, control will return to the command shell when the jCL program terminates.",
"detail": "ENTER program_name\r\nENTER @variable_name"
},
{
"key": "Eqs",
"icon": 3,
"documentation": "The EQS function tests if elements in one dynamic array are equal to the elements of another dynamic array.\r\nThis function compares each element of array 1 with the corresponding element of array 2 and returns a one if the two elements are equal in the corresponding element of a dynamic array.\r\nIt returns a zero if the two elements are not equal.\r\nIt returns zero if an element of one dynamic array does not have a corresponding element in the other dynamic array.\r\nIf either element of a corresponsing pair is null, it returns null for that element.",
"detail": "EQS(array1, array2)"
},
{
"key": "Equate",
"icon": 14,
"documentation": "EQUATE is used to declare a symbol equivalent to a literal, variable or simple expression.\r\nsymbol is the name of the symbol to use.\r\nCan be any name that would be valid for a variable.\r\nexpression can be a literal, a variable or a simple expression.",
"detail": "EQU{ATE} symbol TO expression"
},
{
"key": "Ereplace",
"icon": 3,
"documentation": "The EREPLACE function replaces a substring in an expression with another substring.\r\noccurrence specifies the number of occurrences of substring to replace.\r\nTo replace all occurrences, specify occurrence as a number less than 1.\r\nbegin specifies the first occurrence to replace.\r\nIf begin is omitted or less than one, it defaults to one.\r\nIf substring is an empty string, replacement is prefixed to expression.\r\nIf replacement is an empty string, it removes all occurrences of substring.\r\nIf expression evaluates to null, it returns null.\r\nIf substring, replacement, occurrence, or begin evaluates to null, the EREPLACE function fails and the program terminates with a run-time error message.\r\nThe EREPLACE function behaves like the CHANGE function except when substring evaluates to an empty string.",
"detail": "EREPLACE(expression, substring, replacement [, occurrence [, begin]])"
},
{
"key": "Execute",
"icon": 14,
"documentation": "The EXECUTE or PERFORM statement allows the currently executing program to pause and execute any other UNIX/Windows program, including another jBC program or a jBASE command.\r\nThe expression to be EXECUTEd can be formed from any jBASE construct.\r\nThe system will not verify that the command exists before executing it.\r\nThe command is executed by a new Bourne Shell (sh) by default.\r\nThe shell type can be changed by preceding the command with a CHAR(255) (or equivalently, @IM) concatenated with either \"k\", \"c\", or \"s\" to signify the Korn shell, C shell or Bourne Shell.\r\nVariables used to pass data to the executed program should have been assigned a value before they are used.\r\nAny variable name may be used to receive data.\r\n\r\nCAPTURING variable\r\nThe capturing clause will capture any output that the executing program would normally send to the terminal screen and place it in the variable specified. Every newline normally sent to the terminal is replaced with a field mark in the variable.\r\nRETURNING variable or SETTING variable\r\nThe returning and setting clauses are identical. Both clauses will capture the output associated with any error messages the executing program issues. The first field of the variable will be set to the exit code of the program.\r\nPASSLIST variable\r\nThe PASSLIST clause allows jBASE programs to exchange lists or dynamic arrays between them. The variable should contain the list that the program wishes to pass to the jBASE program it is executing. The program to be executed should be able to process lists, otherwise the list will just be ignored. If the variable name is not specified then the clause will pass the default select list to the executing program.\r\nRTNLIST variable\r\nIf the program executed sets up a list then the RTNLIST clause may be used to place that list into a specified variable. If the variable is omitted then the list is placed in the default list variable.\r\nPASSDATA variable\r\nThe data in the specified variable is passed to another jBC program. The executing jBC program should retrieve the data using the COLLECTDATA statement.\r\nRTNDATA variable\r\nThe RTNDATA statement returns any data passed from an executing jBC program in the specified variable. The executing jBC program should use the RTNDATA statement to pass data back to the calling program.\r\nThe clauses may be specified in any order within the statement but only one of each clause may exist.",
"detail": "EXECUTE expression {CAPTURING variable} {RETURNING|SETTING variable}\r\n{PASSLIST expression} {RTNLIST {variable}}\r\n{PASSDATA variable} {RTNDATA variable}"
},
{
"key": "Exit",
"icon": 14,
"documentation": "The EXIT statement is used to halt the execution of a program and return a numeric exit code to the parent process.\r\nFor compatibility with older versions of the language the EXIT statement may be used without an expression. In this case it is synonymous with the BREAK statement.\r\nAny expression provided must be parenthesized and must evaluate to a numeric result.\r\nThe numeric result is used as the UNIX or Windows exit code, which is returned to the parent process by the C function exit().\r\nIf the expression does not evaluate to a numeric then the program will enter the debugger with a suitable error message.",
"detail": "EXIT (expression)\r\nEXIT"
},
{
"key": "Exp",
"icon": 3,
"documentation": "The EXP function returns the mathematical constant e to the specified power.\r\nThe expression may consist of any form of jBC expression but should evaluate to a numeric argument or a runtime error will occur and the program will enter the debugger.\r\nThe function will return a value that is accurate to as many decimal places as are specified by the PRECISION of the program.",
"detail": "EXP(expression)"
},
{
"key": "Extract",
"icon": 3,
"documentation": "The EXTRACT function is an alternative method of accessing values in a dynamic array.\r\nexpression1 specifies the dynamic array to work with and will normally be a previously assigned variable.\r\nexpressions 2 through 4 should all return a numeric value or a runtime error will occur and the program will enter the debugger.\r\nexpression2 specifies the field to extract,\r\nexpression3 the value to extract and expression4 the sub-value to extract.",
"detail": "EXTRACT(expression1, expression2 {, expression3 {, expression4}})"
},
{
"key": "Fadd",
"icon": 3,
"documentation": "The FADD function performs the floating point addition of two numeric values.\r\nBoth expression1 and expression 2 must evaluate to non-null numeric values.\r\nIf either of the arguments is not numeric, a runtime 'non-numeric' error will occur.",
"detail": "FADD(expression1, expression2)"
},
{
"key": "Fdiv",
"icon": 3,
"documentation": "The FDIV function performs the floating point division of two numeric values.\r\nBoth expression1 and expression 2 must evaluate to non-null numeric values.\r\nIf either of the arguments evaluates to null then a run time 'non-numeric' error will occur.\r\nIf the second argument evaluates to zero then a run time 'divide by zero' error will occur.\r\nThe calculation is not subject to the PRECISION setting.",
"detail": "FDIV(expression1, expression2)"
},
{
"key": "Field",
"icon": 3,
"documentation": "The FIELD function will return a multi-character delimited field from within a string.\r\nstring specifies the string from which the field(s) are to be extracted.\r\ndelimiter specifies the character or characters that delimit the fields within the dynamic array.\r\noccurrence should evaluate to an integer of value 1 or higher.\r\n\tIt specifies the delimiter used as the starting point for the extraction.\r\nextractCount is an integer that specifies the number of fields to extract.\r\n\tIf omitted, 1 is assumed.\r\nIf the emulation option 'jbase_field' is set, then the field delimiter may consist of more than a single character, allowing fields to be delimited by complex codes.\r\nIf extractCount is greater than 1 then only the first character of delimiter is used, regardless of the setting of jbase_field.",
"detail": "FIELD(string, delimiter, occurrence{, extractCount})"
},
{
"key": "Fields",
"icon": 3,
"documentation": "The FIELDS function is an extension of the FIELD function.\r\nIt returns a dynamic array of multi-character delimited fields from a dynamic array of strings.\r\nDynArr should evaluate to a dynamic array.\r\nDelimiter specifies the character or characters that delimit the fields within the dynamic array.\r\nOccurrence should evaluate to an integer of value 1 or higher.\r\n\tIt specifies the delimiter used as the starting point for the extraction.\r\nExtractCount is an integer that specifies the number of fields to extract.\r\n\tIf omitted, 1 is assumed.\r\nIf the emulation option 'jbase_field' is set, then the field delimiter may consist of more than a single character, allowing fields to be delimited by complex codes.\r\nIf extractCount is greater than 1 then only the first character of delimiter is used, regardless of the setting of jbase_field.",
"detail": "FIELDS(DynArr, Delimiter, Occurrence{, ExtractCount})"
},
{
"key": "Fileinfo",
"icon": 3,
"documentation": "The FILEINFO function returns information about a specified file variable.\r\nThis function is currently limited to return values to determine if the file variable is a valid file descriptor variable",
"detail": "FILEINFO(file.variable, key)"
},
{
"key": "Filelock",
"icon": 14,
"documentation": "When the FILELOCK statement is executed, it will attempt to take an exclusive lock on the specified file.\r\nWhen the FILELOCK statement is executed, it will attempt to take an exclusive lock on the entire file.\r\nIf there are any locks currently outstanding on the file, then the statement will block until there are no more locks on the file.\r\nThe use of the LOCKED clause allows the application to perform an unblocked operation.\r\nWhen the FILELOCK statement is blocked waiting for a lock, other processes may continue to perform database operations on that file, including the removal of record locks and also the taking of record locks.\r\nOnce the FILELOCK is taken, it will block ALL database access to the file whether or not the access involves record locks. i.e. a READ will block once a FILELOCK has been executed, as will READU, READL, WRITE, CLEARFILE and so on.\r\nThe lock continues until either the file is closed, the program terminates or a FILEUNLOCK statement is executed",
"detail": "FILELOCK filevar {LOCKED statements} {ON ERROR statements}"
},
{
"key": "Fileunlock",
"icon": 14,
"documentation": "FILEUNLOCK is used to release a specified file lock set by the FILELOCK statement.",
"detail": "FILEUNLOCK filevar {ON ERROR statements}"
},
{
"key": "Find",
"icon": 14,
"documentation": "The FIND statement allows the location of a specified string within a dynamic array.\r\nexpression1 evaluates to the string to compare every element of the dynamic array with.\r\nVar1 is the dynamic array that will be searched.\r\nThe FIND command will normally find the first occurrence of expression1 unless expression2 is specified.\r\nIf specified then expression2 will cause a specific occurrence of expression1 to be located.\r\nThe three variables Var2, Var3, Var4 are used to record the Field, Value and Sub-Value positions in which expression1 was found.\r\nIf expression1 is found in any element of Var1 then Vars 2, 3 and 4 are set to the position in which it was found and any THEN clause of the statement is executed.\r\nIf expression1 is not found within any element of the dynamic array then Vars 2, 3 and 4 are undefined and the ELSE clause of the statement is executed.\r\nThe statement may omit either the THEN clause or the ELSE clause but may not omit both.",
"detail": "FIND expression1 IN Var1 {, expression2} SETTING Var2 {, Var3 {, Var4}} THEN | ELSE statement(s)"
},
{
"key": "Findstr",
"icon": 14,
"documentation": "The FINDSTR statement is used to locate a string as a substring of a dynamic array element.\r\nIt is similar in operation to the FIND statement.\r\neexpression1 evaluates to the string to search every element of the dynamic array with.\r\nVar1 is the actual dynamic array that will be searched.\r\nFINDSTR will normally locate the first occurrence of expression1 unless expression2 is specified.\r\nIf specified then expression2 will cause a specific occurrence of expression1 to be located.\r\nThe three variables Var2, Var3, Var4 are used to record the Field, Value and Sub-Value positions in which expression1 was found.\r\nIf expression1 is found as a substring of any element of Var1 then Vars 2, 3 and 4 are set to the position in which it was found and the THEN clause of the statement is executed if it is present.\r\nIf expression1 is not found within any element of the dynamic array then Vars 2,3 and 4 are undefined and the ELSE clause of the statement is executed.\r\nThe statement may omit either the THEN clause or the ELSE clause but may not omit both.",
"detail": "FINDSTR expression1 IN Var1 {, expression2} SETTING Var2 {,Var3 {, Var4}} THEN | ELSE statement(s)"
},
{
"key": "Fmt",
"icon": 3,
"documentation": "Performs formatting of output data values for use with PRINT and CRT commands.\r\nMaskExpression -> Numeric Mask Codes: [j][n][m][Z][,][c][$][Fill Character][Length]",
"detail": "FMT(Variable, MaskExpression)"
},
{
"key": "Fmts",
"icon": 3,
"documentation": "Performs formatting of the elements of a dynamic array for output.\r\nEach element of the array is independently acted upon and returned as an element in a new dynamic array.\r\nformat is an expression that evaluates to a string of formatting codes. The Syntax of the format expression is:\r\n[width] [background/fill] justification [edit] [mask]\r\nThe format expression specifies the width of the output field, the placement of background or fill characters, line justification, editing specifications, and format masking.\r\nIf dynamic.array evaluates to null, it returns null.\r\nIf format evaluates to null, the FMTS function fails and the program enters the debugger.",
"detail": "FMTS(dynamic.array, format)"
},
{
"key": "Fmul",
"icon": 3,
"documentation": "The FMUL function performs the floating point multiplication of two numeric values.\r\nBoth expression1 and expression 2 must evaluate to non-null numeric value.\r\nIf either of the arguments evaluates to null then a run time 'non-numeric' error will occur.\r\nThe calculation is not subject to the PRECISION setting.",
"detail": "FMUL(expression1, expression2)"
},
{
"key": "Fold",
"icon": 3,
"documentation": "The FOLD function re-delimits a string by replacing spaces with attribute marks at positions defined by a length parameter.\r\nexpression1 evaluates a string to be re-delimited.\r\nexpression2 evaluates to a positive integer that represents the maximum number of characters between delimiters in the resultant string.\r\nThe FOLD function creates a number of sub-strings such that the length of each sub-string does not exceed the length value in expression2.\r\nSpaces are converted to attribute marks except when in enclosed in sub-strings.\r\nExtraneous spaces are removed.",
"detail": "FOLD(expression1, expression2)"
},
{
"key": "Footing",
"icon": 14,
"documentation": "The FOOTING statement causes all subsequent output to the terminal to be halted at the end of each output page.\r\nThe expression should evaluate to a string that will be printed at the bottom of every page of output.\r\nThe string may contain a number of special characters that are interpreted and replaced in the string before it is printed.",
"detail": "FOOTING expression"
},
{
"key": "For",
"icon": 14,
"documentation": "The FOR statement allows the programming of looping constructs within the program.\r\nThe loop is controlled by a counting variable and may be terminated early by expressions tested after every iteration.\r\nvar is the counting variable used to control the loop.\r\nThe first time the loop is entered var is assigned the value of expression1, which must evaluate to a numeric value.\r\nAfter every iteration of the loop var is automatically incremented by 1.\r\nexpression2 must also evaluate to a numeric value as it causes the loop to terminate when the value of var is greater than the value of this expression.\r\nexpression2 is evaluated at the start of every iteration of the loop and compared with the value of expression1.\r\nIf the STEP expression3 clause is included within the statement, var will automatically be incremented by the value of expression3 after each iteration of the loop. expression3 is evaluated at the start of each iteration. expression3 may be negative, in which case the loop will terminate when var is less than expression2.\r\nThe statement may optionally include either a WHILE or UNTIL clause (not both), which will be evaluated before each iteration of the loop.\r\nWhen the WHILE clause is specified, the loop will only continue with the next iteration if expression4 evaluates to Boolean TRUE.\r\nWhen the UNTIL clause is specified the loop will only continue with the next iteration if expression4 evaluates to Boolean FALSE.\r\nBecause expression2 and expression3 must be evaluated upon each iteration of the loop, complex expressions should only be coded here if they may change within each iteration.\r\nIf the values they yield will not change then the value of these expressions should be assigned to a variable before coding the loop statement.\r\nExpressions 3 and 4 should then be replaced with these variables.\r\nThis can offer large performance increases where complex expressions are being used.",
"detail": "FOR var = expression1 TO expression2 {STEP expression3}\r\n\r\n{WHILE | UNTIL expression4}\r\nNEXT {var}"
},
{
"key": "FormList",
"icon": 14,
"documentation": "The FORMLIST statement creates an active select list from a dynamic array.\r\nvariable1 specifies the dynamic array from which the active select list is to be created\r\nIf variable2 is specified then the newly created list will be placed in the variable.\r\nAlternatively, a select list number in the range 0 to 10 can be specified with listnum.\r\nIf neither variable2 nor listnum is specified then the default list variable will be assumed.",
"detail": "FORMLIST variable1 {TO variable2 | listnum}"
},
{
"key": "Fsub",
"icon": 3,
"documentation": "The FSUB function performs the floating point subtraction of two numeric values.\r\nBoth expression1 and expression 2 must evaluate to non-null numeric values.\r\nIf either of the arguments evaluates to null then a run time 'non-numeric' error will occur.",
"detail": "FSUB(expression1, expression2)"
},
{
"key": "Function",
"icon": 14,
"documentation": "Identifies a user-defined function which can be invoked by other jBC programs.\r\nArguments to the function can optionally be declared.\r\nname is the name by which the function is invoked.\r\nvariable is an expression used to pass values between the calling program and the function.\r\nThe FUNCTION statement is used to identify user-written source code functions.\r\nEach function must be coded in separate records and the record Id must match that of the Function Name, which in turn should match the reference in the calling program.\r\nThe optional comma separated variable list can be a number of expressions that pass values between the calling programs and the function.\r\nTo pass an array the variable name must be preceded by the MAT keyword.\r\nWhen a user-written function is called, the calling program must specify the same number of variables as are specified in the FUNCTION statement.\r\nAn extra 'hidden' variable is used to return a value from the user-written function.\r\nThe value to be returned can be specified within the Function by the RETURN (value) statement.\r\nIf the RETURN statement is used without a value then by default an empty string is returned.\r\nThe calling program must specify a DEFFUN or DEFB statement to describe the function to be called and the function source must be cataloged and locatable similar to subroutines.",
"detail": "FUNCTION name {({MAT} variable, {MAT} variable...) }"
},
{
"key": "Ges",
"icon": 3,
"documentation": "The GES function performs a comparison of corresponding elements in two dynamic arrays.\r\nIf an element from the first dynamic array is greater than or equal to the corresponding element in the second dynamic array ,then a 1 is placed in the corresponding element of the resultant dynamic array.\r\nIf an element from the first dynamic array is less than the corresponding element in the second dynamic array, then a 0 is placed in the corresponding element of the resultant dynamic array.",
"detail": "GES(DynArr1, DynArr2)"
},
{
"key": "Get",
"icon": 14,
"documentation": "The GET statement reads a block of data directly from a device.\r\nVar is the variable in which to place the input (from the previously open Device).\r\nIf length is specified, it limits the number of characters read from the input device.\r\nIf the optional Count option is used, it returns the number of characters actually read from the device.\r\nDevice is the file variable associated with the result from a successful OPENSEQ or OPENSER command.\r\nTermChars specifies one or more characters that will terminate input.\r\nTermChar The actual character that terminated input.\r\nTimeout is the number of seconds to wait for input.\r\nIf no input is present when the timeout period expires, the ELSE clause (if specified) is executed.\r\nThe GET statement does no pre-or post-processing of the input data stream - nor does it handle any terminal echo characteristics.\r\nIt is assumed that if this is desired the application - or device drive - will handle it.\r\nIf the length and timeout expressions are not specified, the default input length is one (1) character.\r\nIf no length is specified, but TermChars are, there is no limit to the number of characters input.\r\nThe GET syntax requires that either a THEN or ELSE clause, or both, be specified.\r\nIf the data is received without error, the THEN clause is executed.\r\nIf the data cannot be received (or a timeout occurs), the ELSE clause is executed.",
"detail": "GET Var {,length} {SETTING Count} FROM Device {UNTIL TermChars} {RETURNING TermChar} {WAITING Timeout} THEN | ELSE statements"
},
{
"key": "Getx",
"icon": 14,
"documentation": "The GETX statement reads a block of data (in ASCII hexadecimal format) directly from a device.\r\nVar is the variable in which to place the input (from the previously open Device).\r\nIf length is specified, it limits the number of characters read from the input device.\r\nIf the optional Count option is used, it returns the number of characters actually read from the device.\r\nDevice is the file variable associated with the result from a successful OPENSEQ or OPENSER command.\r\nTermChars specifies one or more characters that will terminate input.\r\nTermChar The actual character that terminated input.\r\nTimeout is the number of seconds to wait for input.\r\nIf no input is present when the timeout period expires, the ELSE clause (if specified) is executed.\r\nThe GETX statement does no pre-or post-processing of the input data stream - nor does it handle any terminal echo characteristics.\r\nIt is assumed that if this is desired the application - or device drive - will handle it.\r\nIf the length and timeout expressions are not specified, the default input length is one (1) character.\r\nIf no length is specified, but TermChars are, there is no limit to the number of characters input.\r\nThe GETX syntax requires that either a THEN or ELSE clause, or both, be specified.\r\nIf the data is received without error, the THEN clause is executed.\r\nIf the data cannot be received (or a timeout occurs), the ELSE clause is executed.\r\nGETX will convert all input into ASCII hexadecimal format after input.",
"detail": "GETX Var {,length} {SETTING Count} FROM Device {UNTIL TermChars} {RETURNING TermChar} {WAITING Timeout} THEN | ELSE statements"
},
{
"key": "Getcwd",
"icon": 3,
"documentation": "The GETCWD function allows a jBC program to determine the current working directory of the program.\r\nThis will normally be the directory from which the program was executed but may have been changed with the CHDIR function.\r\nWhen executed the Var will be set to the name of the current working directory.\r\nThe function itself returns a Boolean TRUE or FALSE value indicating whether the command was successful or not.\r\nRefer to your UNIX or Windows documentation (sh is a good place to start), for more information on the concept of the current working directory.",
"detail": "GETCWD(Var)"
},
{
"key": "Getenv",
"icon": 3,
"documentation": "The GETENV function allows a jBC program to determine the value of any of the environment variables associated with it.\r\nThe expression should evaluate to the name of the environment variable whose value is to be returned.\r\nThe function will then assign the value of the environment variable to variable.\r\nThe function itself returns a Boolean TRUE or FALSE value indicating the success or failure of the function.",
"detail": "GETENV(expression, variable)"
},