-
Notifications
You must be signed in to change notification settings - Fork 1
/
builtin.azr
1188 lines (1049 loc) · 33.3 KB
/
builtin.azr
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
//未実装:azv2json, json2azv, sprintf
int abspath()
{// Argument0: ファイル名 ※akari.dllと同じディレクトリ前提の模様
// Result: 絶対パス
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _abspath(REQ["ARGS"][0]) ;
return 1 ;
}
int acos()
{// Argument0: 余弦 ※-1~1
// Result: 角度(rad)
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _acos((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int arystr()
{// ※引数形式注意※
// ※欺瞞(arystr未使用)※
// Argument0: 文字列
// Argument1: 区切り字(省略時「,」)
// Result : 文字列から区切り字を取り去った文字列
string sep ;
if((string)REQ["ARGS"][1] != "") sep = REQ["ARGS"][1] ;
RES["RESULT"] = _strreplace(REQ["ARGS"][0] , sep , "") ;
return 1 ;
}
int aryvn()
{// ※引数形式注意※
// Argument0: 文字列
// Argument1: 区切り字(省略時「,」)
// Result : 文字列を区切り字で分割した時にできる区間の数
string sep ;
if((string)REQ["ARGS"][1] != "") sep = REQ["ARGS"][1] ;
RES["RESULT"] = _aryvn(_strsplit(REQ["ARGS"][0] , sep)) ;
return 1 ;
}
int asin()
{// Argument0: 正弦 ※-1~1
// Result: 角度(rad)
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _asin((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int atan()
{// Argument0: 正接
// Result : 角度(rad)
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _atan((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int atan2()
{// Argument0: 正接分母(y座標)
// Argument1: 正接分子(x座標)
// Result : 角度(rad)
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _atan((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int base64encode()
{// Argument0: 文字列
// Result : base64エンコードされた文字列
RES["RESULT"] = _base64encode(REQ["ARGS"][0]);
return 1 ;
}
int base64decode()
{// Argument0: base64エンコードされた文字列
// Result : 文字列
RES["RESULT"] = _base64decode(REQ["ARGS"][0]);
return 1 ;
}
int bytechar()
{// Argument0: 整数(16進数[0x~],2進数[0b~]可)
// Result : 対応するバイト値
// 引数が数値以外だとバイト値0(NUL)が返るので、用法によっては要注意
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _bytechar((int)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int cdsscontrol()
{// ※現状無意味※
_cdsscontrol((int)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int colorselect()
{// ※ダイアログ展開中SSPはinfoレベルのエラーを通知し続けますが仕様です※
// ※戻り値形式注意※
// Argument0: ダイアログボックスのタイトル
// Result : 「,」区切りでそれぞれ0~255のR,G,B値
// Value0 : R
// Value1 : G
// Value2 : B
array color = _colorselect(REQ["ARGS"][0]) ;
RES["RESULT"] = (string)color[0] + "," + (string)color[1] + "," + (string)color[2] ;
RES["VALUE"] = color ;
return 1 ;
}
int cos()
{// Argument0: 角度(rad)
// Result : 余弦
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _cos((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int cosh()
{// Argument0: 角度(rad)
// Result : 双曲線余弦
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _cosh((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int createthread()
{// ※引数形式注意※
// ※実行先関数に配列形式で引数を渡すので注意
// Argument0: 別スレッドで実行する灯の関数
// Argument*: 関数引数を区切り字で列挙したもの
// Result : スレッド作成に成功時1,失敗時0
string func = REQ["ARGS"][0] ;
REQ["ARGS"][0] = nil ;
RES["RESULT"] = _create_thread(func , REQ["ARGS"]) ;
return 1 ;
}
int dbclose()
{
_dbclose() ;
return 1 ;
}
int dbcsv2table()
{// ※引数形式注意※
// Argument0: CSVファイルパス(絶対/相対(akari.dllからの))
// Argument1: テーブル名
// Argument2: テーブル各列の方をカンマ区切りで。(省略時全列text)
// Argument3: 1列目にidと言う名前の行を作るなら1,さもなくば0
_dbcsv2table(
REQ["ARGS"][0]
, REQ["ARGS"][1]
, _strsplit(REQ["ARGS"][2] , ",")
, (int)_zen2han(REQ["ARGS"][3])
)
return 1 ;
}
int dbopen()
{// Argument0: 展開/作成するデータベースのパス(絶対/相対(akari.dllからの))
// Result : 成功時1,失敗時0
RES["RESULT"] = _dbopen(REQ["ARGS"][0]) ;
return 1 ;
}
int dbquery()
{// ※引数形式注意※
// ※戻り値形式注意※
// Argument0: open中データベースに対するクエリ
// Argument1: 項目間の区切り字(省略時「,」)
// Argument2: 列名と値の間の区切り字(省略時「:」)
// Result : 空文字列
// Value* : 列名:値,列名:値…… の形で1行ずつ
array result ;
array sep = {"," , ":"} ;
if((string)REQ["ARGS"][0] != "") sep[0] ;
if((string)REQ["ARGS"][1] != "") sep[1] ;
result = _dbquery(REQ["ARGS"][0]) ;
for(int i = 0 ; result[i] != nil ; i ++){
RES["VALUE"] = AKASAORI.TOOL.JoinDict(result[i] , sep[0] , sep[1]) ;
}
RES["RESULT"] = "" ;
return 1 ;
}
int dcopy()
{// Argument0: 複製元フォルダパス(絶対/相対(akari.dllからの))
// Argument1: 複製先フォルダパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _dcopy(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int dcreate()
{// Argument0: フォルダパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _dcreate(REQ["ARGS"][0]) ;
return 1 ;
}
int ddelete()
{// Argument0: フォルダパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _ddelete(REQ["ARGS"][0]) ;
return 1 ;
}
int dickeyget()
{// ※引数形式注意※
// ※戻り値形式注意※
// Argument0: 各要素間を区切り字1で、キーと値を区切り字2で区切った文字列
// 例)キー0:値0,キー1:値1,キー2:値2,...
// Argument1: 区切り字1。各要素間の区切り字(省略時「,」)
// Argument2: 区切り字2。キーと値間の区切り字(省略時「:」)
// ※正規表現に用いられる記号は避ける
// Result : 空文字列
// Value* : キーが一つずつ
dict dic ;
array sep = {"," , ":" , ","} ;
if((string)REQ["ARGS"][1] != "") sep[0] = REQ["ARGS"][1] ;
if((string)REQ["ARGS"][2] != "") sep[1] = REQ["ARGS"][2] ;
array ary = _strsplit(REQ["ARGS"][0] , sep[0]) ;
array tmp ;
for(int i = 0 ; ary[i] != nil ; i ++){
tmp = _strsplit(ary[i] , sep[1]) ;
dic += $(tmp[0] , _regex_replace(ary[i] , "^" + tmp[0] + sep[1] , "")) ;
}
RES["VALUE"] = _dickeyget(dic) ;
RES["RESULT"] = "" ;
return 1 ;
}
int dicv()
{// ※現状無意味※
_dicv(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int dicvget()
{// ※引数形式注意※
// ※戻り値形式注意※
// Argument0: 各要素間を区切り字1で、キーと値を区切り字2で区切った文字列
// 例)キー0:値0,キー1:値1,キー2:値2,...
// Argument1: 区切り字1。各要素間の区切り字(省略時「,」)
// Argument2: 区切り字2。キーと値間の区切り字(省略時「:」)
// ※正規表現に用いられる記号は避ける
// Result : 空文字列
// Value* : 値が一つずつ
dict dic ;
array sep = {"," , ":" , ","} ;
if((string)REQ["ARGS"][1] != "") sep[0] = REQ["ARGS"][1] ;
if((string)REQ["ARGS"][2] != "") sep[1] = REQ["ARGS"][2] ;
array ary = _strsplit(REQ["ARGS"][0] , sep[0]) ;
array tmp ;
for(int i = 0 ; ary[i] != nil ; i ++){
tmp = _strsplit(ary[i] , sep[1]) ;
dic += $(tmp[0] , _regex_replace(ary[i] , "^" + tmp[0] + sep[1] , "")) ;
}
RES["VALUE"] = _dicvget(dic) ;
RES["RESULT"] = "";
return 1 ;
}
int dicvn()
{// ※引数形式注意※
// ※戻り値形式注意※
// Argument0: 各要素間を区切り字1で、キーと値を区切り字2で区切った文字列
// 例)キー0:値0,キー1:値1,キー2:値2,...
// Argument1: 区切り字1。各要素間の区切り字(省略時「,」)
// Argument2: 区切り字2。キーと値間の区切り字(省略時「:」)
// Result : 要素数
dict dic ;
array sep = {"," , ":"} ;
if((string)REQ["ARGS"][1] != "") sep[0] = REQ["ARGS"][1] ;
if((string)REQ["ARGS"][2] != "") sep[1] = REQ["ARGS"][2] ;
array ary = _strsplit(REQ["ARGS"][0] , sep[0]) ;
array tmp ;
for(int i = 0 ; ary[i] != nil ; i ++){
tmp = _strsplit(ary[i] , sep[1]) ;
dic += $(tmp[0] , _regex_replace(ary[i] , "^" + tmp[0] + sep[1] , "")) ;
}
RES["RESULT"] = _dicvn(dic) ;
return 1 ;
}
int dsstp()
{// ※引数形式注意※
// Argument* : DSSTPリクエストを1行ずつ1つの引数に
// ArgumentEND: (末尾の引数)dsstp送信対象のウィンドウハンドル
int argv = _aryvn(REQ["ARGS"]) ;
int hwnd = REQ["ARGS"][argv - 1] ;
REQ["ARGS"][argv - 1] = nil ;
array ary = REQ["ARGS"][argv - 1] ;
_dsstp(ary , hwnd) ;
return 1 ;
}
int etime()
{// ※1969年12月1日9時基算(理由不明)
// それより過去だと-1が帰る
// ※全ての引数を省略した場合は現在の暦時刻を求める
// Argument0: 年 省略時0
// Argument1: 月 省略時0
// Argument2: 日 省略時0
// Argument3: 時 省略時0
// Argument4: 分 省略時0
// Argument5: 秒 省略時0
// Result : 暦時刻
if(_aryvn(REQ["ARGS"]) > 0){
RES["RESULT"] = _etime(
(int)_han2zen(REQ["ARGS"][0])
, (int)_han2zen(REQ["ARGS"][1])
, (int)_han2zen(REQ["ARGS"][2])
, (int)_han2zen(REQ["ARGS"][3])
, (int)_han2zen(REQ["ARGS"][4])
, (int)_han2zen(REQ["ARGS"][5])
) ;
}
else {
dict now = _gettime() ;
RES["ARGS"] = _etime (
now["年"]
, now["月"]
, now["日"]
, now["時"]
, now["分"]
, now["秒"]
) ;
}
return 1 ;
}
int exp()
{// Argument0: 指数
// Result : ネイピア数eの[引数0]乗
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _exp((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int fabs()
{// Argument0: 実数
// Result : 絶対値
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _fabs((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int fcopy()
{// Argument0: 複製元ファイルパス(絶対/相対(akari.dllからの))
// Argument1: 複製先ファイルパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _fcopy(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int fdelete()
{// Argument0: ファイルパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _fdelete(REQ["ARGS"][0]) ;
return 1 ;
}
int fenum()
{// ※引数形式注意※
// ※戻り値形式注意※
// Argument0: フォルダパス(絶対/相対(akari.dllからの))
// Argument1: 区切り字(省略時「:」)
// Result : 空文字列
// Value0 : file名
// Value1 : folder名
string sep = ":" ;
if(REQ["ARGS"][1]) sep = REQ["ARGS"][1] ;
dict dic = _fenum() ;
REQ["VALUE"] = {AKASAORI.TOOL.Join(dic[0] , sep) , AKASAORI.TOOL.Join(dic[1] , sep)} ;
return 1 ;
}
int fileexecute()
{// Argument0: ファイル(探査あり)
// Argument1: コマンドライン引数
_file_execute(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int filemd5()
{// Argument0: ファイルパス
// Result : 指定したファイルのmd5値
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _filemd5(REQ["ARGS"][0]) ;
return 1 ;
}
int floor()
{// Argument0: 実数
// Result : [引数0]を負の無限大方向に丸めた整数
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _floor((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int fmove()
{// Argument0: 移動元ファイルパス(絶対/相対(akari.dllからの))
// Argument1: 移動先ファイルパス(絶対/相対(akari.dllからの))
// Result : 成功時1、失敗時0
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _fmove(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int fncstr()
{// ※引数形式注意※
// ※実行先関数に配列形式で引数を渡すので注意
// Argument0: 別スレッドで実行する灯の関数
// Argument*: 関数引数を区切り字で列挙したもの
// Result : スレッド作成に成功時1,失敗時0
string func = REQ["ARGS"][0] ;
REQ["ARGS"][0] = nil ;
RES["RESULT"] = _fncstr(func , REQ["ARGS"]) ;
return 1 ;
}
int folderselect()
{// Argument0: ダイアログボックスのタイトル
// Argument1: デフォルトフォルダの絶対パス(末尾に\をつけない)。省略時akari.dllのあるフォルダ
// Result : 選択したフォルダの絶対パス
RES["RESULT"] = _folderselect(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int ftpcommand()
{// Argument0: FTPコマンド
// Result : コマンドに対するレスポンス
RES["RESULT"] = _ftp_command(REQ["ARGS"][0]) ;
return 1 ;
}
int ftpdownload()
{// Argument0: ダウンロードするファイルパス
// Argument1: ローカルのファイルパス(絶対/相対(akari.dllからの))
// Result : 成功時1,失敗時0
if((string)REQ["ARGS"][0] == "" || (string)REQ["ARGS"][1] == "") return -1 ;
RES["RESULT"] = _ftp_download(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int ftplogin()
{// Argument0: サーバ名
// Argument1: ユーザ名
// Argument2: パスワード
// Argument3: ポート番号(省略時21)
// Result : 成功時1,失敗時0
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil || REQ["ARGS"][2] == nil) return -1 ;
int port = 21 ;
if(REQ["ARGS"][3] != nil && REQ["ARGS"][3] != "") port = (int)_zen2han(REQ["ARGS"][3]) ;
RES["RESULT"] = _ftp_login(REQ["ARGS"][0] , REQ["ARGS"][1] , REQ["ARGS"][2] , port) ;
return 1 ;
}
int ftplogout()
{// Result : 成功時1,失敗時0
RES["RESULT"] = _ftp_logout() ;
return 1 ;
}
int ftpupload()
{// Argument0: ローカルのファイルパス(絶対/相対(akari.dllからの))
// Argument1: アップロード先のファイルパス
// Result : 成功時1,失敗時0
if((string)REQ["ARGS"][0] == "" || (string)REQ["ARGS"][1] == "") return -1 ;
RES["RESULT"] = _ftp_download(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int getwindowslist()
{//※戻り値形式注意※
// Result: 空文字列
// Value*: ウィンドウ名:ハンドル値 の形式で一つずつ
dict list = _get_windowslist();
array key = _dickeyget(list) ;
array value = _dicvget(list) ;
int num = _dicvn(list) ;
for(int i = 0 ; i < num ; i ++){
RES["VALUE"] += $(key[i] , value[i]) ;
}
RES["RESULT"] = "" ;
return 1 ;
}
int getfmo()
{// Result: 空文字列
// Value*: SakuraFMO値 CRLFごとに1つ
RES["VALUE"] = _getfmo() ;
return 1 ;
}
int getghosthwnd()
{// Argument0: デスクトップに現在立っているゴーストのsakura側名
// Result : ウィンドウハンドル
RES["RESULT"] = _getghosthwnd(REQ["ARGS"][0]) ;
return 1 ;
}
int getposwindowname()
{// Argument0: スクリーンx座標
// Argument1: スクリーンy座標
// Result : 指定座標にあるウィンドウの名前
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _getposwindowname(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int gettime()
{// ※戻り値形式注意※
// Result: 年
// Value0: 月
// Value1: 日
// Value2: 時
// Value3: 分
// Value4: 秒
// Value5: ミリ秒
// Value6: 曜日
dict time = _gettype() ;
RES["VALUE"] = {time["年"] , time["月"] , time["日"] , time["時"] , time["分"] , time["秒"] , time["ミリ秒"] , time["週"]} ;
return 1 ;
}
int gettype()
{// ※現状無意味※
RES["RESULT"] = _gettype(REQ["ARGS"][0]) ;
return 1 ;
}
int han2zen()
{// Argument0: 文字列
// Result : アルファベット・記号などを半角化した文字列
RES["RESULT"] = _han2zen(REQ["ARGS"][0]) ;
return 1 ;
}
int httpdownload()
{// Argument0: URL
// Argument1: ファイル名(絶対/相対(akari.dllからの))
// Result : ファイル容量(byte)
RES["RESULT"] = _http_download(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int httpget()
{// Argument0: URL(テキスト形式のみ)
// Argument1: 文字コード(sjis|eucjp|utf8|jis)(省略時はsjis)
// Result : 空文字
// Value* : 読み取ったテキスト一行一つずつ
if(REQ["ARGS"][0] != nil) return -1 ;
RES["RESULT"] = _httpget(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int hypot()
{// Argument0: 実数
// Argument1: 実数
// Result : 引数の二乗の和の平方根
// ⇒それぞれ引数の長さを持つ二辺が成す直角に対する斜辺長
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _hypot((double)_zen2han(REQ["ARGS"][0]) , (double)_zen2han(REQ["ARGS"][1])) ;
return 1 ;
}
int isfile()
{// Argument0: パス(絶対/相対(akari.dllからの))
// Result : 指定したパスのファイル/フォルダが存在すれば1,なければ0
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _isfile(REQ["ARGS"][0]) ;
return 1 ;
}
int joypadstate()
{// ※戻り地形式注意※
// Result : 空文字列
// Value0 : upが押されているか(0/1)
// Value1 : downが押されているか(0/1)
// Value2 : rightが押されているか(0/1)
// Value3 : leftが押されているか(0/1)
// Value4 : button0が押されているか(0/1)
// Value5 : button1が押されているか(0/1)
// Value6 : button2が押されているか(0/1)
// Value7 : button3が押されているか(0/1)
// Value8 : button4が押されているか(0/1)
// Value9 : button5が押されているか(0/1)
// Value10 : button6が押されているか(0/1)
// Value11 : button7が押されているか(0/1)
dict result = _joypadstate();
RES["VALUE"] = (result["up"]
,result["down"]
,result["right"]
,result["left"]
,result["button0"]
,result["button1"]
,result["button2"]
,result["button3"]
,result["button4"]
,result["button5"]
,result["button6"]
,result["button7"]
);
RES["RESULT"] = "" ;
return 1 ;
}
int keystate()
{// Argument0: 仮想キーコード(文字列の定数または数字)
// Result: 押されているか否か(0/1)
if(_regex_match(REQ["ARGS"][0], "\d+")) {
REQ["ARGS"][0] = (int)REQ["ARGS"][0];
}
RES["RESULT"] = _keystate(REQ["ARGS"][0]) ;
return 1 ;
}
int log()
{// Argument0: 実数(指数)
// Result : [引数0]の自然対数
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _log((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int log10()
{// Argument0: 実数(指数)
// Result : [引数0]の常用対数
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _log((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int mailsend()
{// Argument0: ホスト名
// Argument1: fromメールアドレス
// Argument2: toメールアドレス
// Argument3: 件名
// Argument4: 内容
// Argument5: ポート番号
// Argument6: 認証タイプ(AUTH_NONE|AUTH_CRAM_MD5|AUTH_CRAM_SHA1|AUTH_LOGIN|AUTH_PLAIN)
// Argument7: ユーザ名
// Argument8: パスワード
// Result : 送信結果メッセージ
RES["RESULT"] = _mail_send(
REQ["ARGS"][0]
, REQ["ARGS"][1]
, REQ["ARGS"][2]
, REQ["ARGS"][3]
, REQ["ARGS"][4]
, (int)_zen2han(REQ["ARGS"][5])
, REQ["ARGS"][6]
, REQ["ARGS"][7]
, REQ["ARGS"][8]
) ;
return 1 ;
}
int maildelete()
{// Argument0: 指定したIDのメールを削除
_maildelete(REQ["ARGS"][0]) ;
return 1 ;
}
int mailget()
{// ※戻り値形式注意※
// Argument0: メールサーバ
// Argument1: メールアドレス
// Argument2: パスワード
// Argument3: 取得するメール番号
// Argument4: ポート番号(省略時110)
// Result : メールボックス内のメール数
// Value0 : 受信した日付
// Value1 : 送信者アドレス
// Value* : 本文1行ずつ一つに
int port = 110 ;
dict result ;
if(REQ["ARGS"][4] != nil) port = (int)_zen2han(REQ["ARGS"][4]) ;
result = _mailget(
REQ["ARGS"][0]
, REQ["ARGS"][1]
, REQ["ARGS"][2]
, REQ["ARGS"][3]
, port
) ;
array text ;
RES["RESULT"] = result["boxsize"] ;
RES["VALUE"] += result["date"] ;
RES["VALUE"] += result["sender"] ;
for(int i = 0 ; result[i] != nil ; i ++){
RES["VALUE"] += result[i] ;
}
return 1 ;
}
int mailids()
{// ※戻り地形式注意※
// Argument0: ホスト名
// Argument1: ユーザ名
// Argument2: パスワード
// Result : 空文字列
// Value* : サーバー上でメールに付けられているID一つずつ
RES["VALUE"] = _mailids(REQ["ARGS"][0] , REQ["ARGS"][1] , REQ["ARGS"][2]) ;
RES["RESULT"] = "" ;
return 1 ;
}
int md5()
{// Argument0: 文字列
// Result : MD5
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _md5(REQ["ARGS"][0]) ;
return 1 ;
}
int mousedoubleclick()
{
_mousedoubleclick() ;
return 1 ;
}
int mouseleftclick()
{
_mouseleftclick() ;
return 1 ;
}
int mousemove()
{// Argument0: スクリーンx座標
// Argument1: スクリーンy座標
_mousemove(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int mousepos()
{// ※戻り値形式注意※
// Result : 空文字列
// Value0 : x座標
// Value1 : y座標
dict pos = _mousepos() ;
RES["VALUE"] = {pos["x"] , pos["y"]} ;
return 1 ;
}
int mouserightclick()
{
_mouserightclick() ;
return 1 ;
}
int openfileselect()
{// Argument0: ダイアログボックスのタイトル
// Result : 絶対パス
RES["RESULT"] = _openfileselect(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int popmes()
{// Argument0: ポップアップ表示するメッセージ
_create_thread("_popmes" , REQ["ARGS"][0]) ;
return 1 ;
}
int pow()
{// Argument0: 実数(底)
// Argument1: 実数(指数)
// Result : [引数0]の[引数1]乗
if(REQ["ARGS"][0] == nil || REQ["ARGS"][1] == nil) return -1 ;
RES["RESULT"] = _pow((double)_zen2han(REQ["ARGS"][0]) , (double)_zen2han(REQ["ARGS"][1])) ;
return 1 ;
}
int rand()
{// Result: 0~9999までの整数が一様確立で一つ
RES["RESULT"] = _rand() ;
return 1 ;
}
int randselect()
{// Argument*: 文字列
// Result : 引数の中から択一された文字列
if(_aryvn(REQ["ARGS"]) == 0) return -1 ;
RES["RESULT"] = _randselect(REQ["ARGS"]) ;
return 1 ;
}
int readcsv()
{// ※現状readtextとほぼ同じ
// Argument0: ファイルパス(絶対パス/相対パス(akari.dll))
// Argument1: 文字コード(eucjp|utf8|sjis|jis)(省略時はsjis)
// Result : 空文字列
// Value* : 読み込まれたcsvが1行ごと1つに
if(REQ["ARGS"][0] != nil) return -1 ;
RES["RESULT"] = "" ;
RES["VALUE"] = _readcsv(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int readtext()
{// Argument0: ファイルパス(絶対パス/相対パス(akari.dll))
// Argument1: 文字コード(eucjp|utf8|sjis|jis)(省略時はsjis)
// Argument2: 改行コード(crlf|lf|none)(省略時crlf)
// Result : 空文字列
// Value* : 読み込まれたテキストが1行1つに
if(REQ["ARGS"][0] != nil) return -1 ;
RES["RESULT"] = "" ;
RES["VALUE"] = _readtext(REQ["ARGS"][0] , REQ["ARGS"][1] , REQ["ARGS"][2]) ;
return 1 ;
}
int regexmatch()
{// Argument0: 文字列
// Argument1: 正規表現
// Result : 文字列が正規表現と完全に一致すれば1,さもなくば0
RES["RESULT"] = _regex_match(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int regexreplace()
{// Argument0: 文字列
// Argument1: 正規表現
// Argument2: 置換文字列
// Result : 文字列中の正規表現と一致する部分を置換文字列に置き換えた文字列
RES["RESULT"] = _regex_replace(REQ["ARGS"][0] , REQ["ARGS"][1] , REQ["ARGS"][2]) ;
return 1 ;
}
int regexsearch()
{// Argument0: 文字列
// Argument1: 正規表現
// Argument2: 戻り値位置(1~)
// Result : 文字列中の正規表現と、[引数2]番目に一致した部分文字列
// Value* : Result中の正規表現グループ()に一致した部分文字列
array ary = _regex_search(REQ["ARGS"][0] , REQ["ARGS"][1] , REQ["ARGS"][2]) ;
RES["RESULT"] = ary[0] ;
ary[0] = nil ;
RES["VALUE"] = ary ;
return 1 ;
}
/* SAORI実行系関数 */
int saoriload()
{// ※universal SAORIは非推奨※
// Argument0: ファイルパス(相対パス/絶対パス(akari.dllからの))
// Argument1: ID(SAORI universal(dllのSAORI)のみ)
// Result : 成功時1,失敗時0
RES["RESULT"] = _saoriload(REQ["ARGS"][0] , REQ["ARGS"][1]) ;
return 1 ;
}
int saorirequest()
{// ※引数形式注意※
// ※akari.dllをSAORI basicのproxy代わりにする使途想定(里々だと関係ないですが)
// ※universal SAORIはメモリアクセスがどうのというエラーになるような気がするので非推奨
// Argument0 : ファイルパス(相対パス/絶対パス(akari.dllからの))
// またはID(saoriloadで指定した文字列)
// Argument1~30: SAORIに渡す引数 ※可変長引数渡せないので仕様上30個までに限定
// Result : SAORIからの単数戻り値
// Value* : SAORIからの複数戻り値
dict result ;
result = _saorirequest(
REQ["ARGS"][1] , REQ["ARGS"][2] , REQ["ARGS"][3] , REQ["ARGS"][4] , REQ["ARGS"][5] , REQ["ARGS"][6] , REQ["ARGS"][7] , REQ["ARGS"][8] , REQ["ARGS"][9] , REQ["ARGS"][10]
, REQ["ARGS"][11] , REQ["ARGS"][12] , REQ["ARGS"][13] , REQ["ARGS"][14] , REQ["ARGS"][15] , REQ["ARGS"][16] , REQ["ARGS"][17] , REQ["ARGS"][18] , REQ["ARGS"][19] , REQ["ARGS"][20]
, REQ["ARGS"][21] , REQ["ARGS"][22] , REQ["ARGS"][23] , REQ["ARGS"][24] , REQ["ARGS"][25] , REQ["ARGS"][26] , REQ["ARGS"][27] , REQ["ARGS"][28] , REQ["ARGS"][29] , REQ["ARGS"][30]
) ;
RES["RESULT"] = result["Result"] ;
for(int i = 1 ; result["Value" + i] != nil ; i ++){
RES["VALUE"] += result["Value" + i] ;
}
return 1 ;
}
int saoriunload()
{// Argument0: ID(saoriloadで指定した文字列)
// Result : 成功時1,失敗時0
RES["RESULT"] = _saoriunload(REQ["ARGS"][0]) ;
return 1 ;
}
int savecsv()
{// ※引数順序注意※
// Argument0: ファイルパス(絶対/相対(akari.dllからの))
// 上書き/存在しない場合ファイル作成
// Argument1: 文字コード(sjis|utf8|eucjp|jis|auto)(省略時auto)
// Argument*: カンマ区切りの値
// Result : 成功時1,失敗時0
string path = REQ["ARGS"][0] ;
string code = REQ["ARGS"][1] ;
REQ["ARGS"][0] = nil ; REQ["ARGS"][0] = nil ;
RES["RESULT"] = _savecsv(path , REQ["ARGS"] , code) ;
return 1 ;
}
int savefileselect()
{// Argument0: ダイアログボックスのタイトル
// Result : 絶対パス
RES["RESULT"] = _savefileselect(REQ["ARGS"][0]) ;
return 1 ;
}
int scriptload()
{// ※非推奨※
// Argument0: 拡張子を除いたパス(絶対パス/相対パス(akari.dllの))
// Result : 成功時1,失敗時0
RES["RESULT"] = _script_load(REQ["ARGS"][0]) ;
return 1 ;
}
int serialclose()
{// Result : 成功時1,失敗時0
RES["RESULT"] = _serial_close() ;
return 1 ;
}
int serialopen()
{// Argument0: ポートナンバー(COM1なら1)
// Result : 成功時1,失敗時0
RES["RESULT"] = _serial_open((int)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int serialread()
{// Result : シリアルポートのバッファ内にある文字列
RES["RESULT"] = _serial_read() ;
return 1 ;
}
int serialsend()
{// Argument0: 送信文字列
// Argument1: 成功時1,失敗時0
RES["RESULT"] = _serial_send(REQ["ARGS"][0]) ;
return 1 ;
}
int serialsetstate()
{// ※引数形式注意※
// Argument*: キー:値 の形で一つずつ
// Result : 成功時1,失敗時0
dict member ;
string key ;
string value ;
for(int i = 0 ; REQ["ARGS"][i] != nil ; i ++) {
key = _strsplit(REQ["ARGS"][i] , ":")[0];
value = _regex_replace(REQ["ARGS"][i] , "^" + key + ":" , "") ;
member += $(key , value) ;
}
RES["RESULT"] = _serial_setstate(member) ;
return 1 ;
}
int setfocus()
{// Argument0: Window Handle値
if(REQ["ARGS"][0] == nil) return -1 ;
_setfocus(REQ["ARGS"][0]) ;
return 1 ;
}
int sin()
{// Argument0: 角度(rad)※
// Result : 正弦
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _sin((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;
}
int sinh()
{// Argument0: 角度(rad)
// Result : 双曲線正弦
if(REQ["ARGS"][0] == nil) return -1 ;
RES["RESULT"] = _sinh((double)_zen2han(REQ["ARGS"][0])) ;
return 1 ;