Develop and Download Open Source Software

Browse Subversion Repository

Contents of /extensio.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Mon Nov 7 12:03:00 2011 UTC (12 years, 4 months ago) by shiraishikazuo
File MIME type: text/x-pascal
File size: 22171 byte(s)


1 unit extensio;
2
3 {$IFDEF FPC}
4 {$MODE DELPHI}{$H+}
5 {$ENDIF}
6
7 (***************************************)
8 (* Copyright (C) 2006, SHIRAISHI Kazuo *)
9 (***************************************)
10
11 interface
12
13 implementation
14 uses Controls, Dialogs, Forms, SysUtils,
15 base,arithmet,base0,texthand,variabl,struct,express,compiler,control,
16 helpctex,textfrm, MainFrm,float,sconsts,supplied ;
17
18 type
19 TSWAP=class(TStatement)
20
21 var1,var2:TVariable;
22 constructor create(prev,eld:TStatement);
23 destructor destroy;override;
24 //procedure exec;override;
25 function Code:AnsiString;override;
26 end;
27
28 function SWAPst(prev,eld:TStatement):TStatement;
29 begin
30 SWAPst:=TSWAP.create(prev,eld);
31 end;
32
33 constructor TSWAP.create(prev,eld:TStatement);
34 begin
35 inherited create(prev,eld);
36 var1:=variable;
37 check(',',IDH_EXTENSION);
38 var2:=variable;
39 if (var1=nil) or (var2=nil) or (var1.kind<>var2.kind) then
40 seterr('',IDH_EXTENSION);
41 end;
42
43 destructor TSWAP.destroy;
44 begin
45 var1.free;
46 var2.free;
47 inherited destroy
48 end;
49 (*
50 procedure TSWAP.exec;
51 var
52 p1,p2:TVar;
53 begin
54 p1:=var1.substance0(false);
55 p2:=var2.substance0(false);
56 if (p1<>nil) and (p2<>nil) then p1.swap(p2) ;
57 var1.disposesubstance0(p1,false);
58 var2.disposesubstance0(p2,false);
59 end;
60 *)
61 function TSwap.Code:AnsiString;
62 begin
63 result:='swap('+var1.code+','+var2.code+');'
64 end;
65
66 {******}
67 {PAUSE }
68 {******}
69
70 procedure Wait(n:extended);
71 var
72 svCtrlBreakHit:boolean;
73 finish:extended;
74 begin
75 svCtrlBreakHit:=CtrlBreakHit;
76 CtrlBreakHit:=false;
77 try
78 finish:=Date+time+n/(24*3600);
79 except
80 setexception(12004);
81 end;
82 repeat
83 sleep(10);IdleImmediately;
84 until (Date+time-Finish>=0) or CtrlBreakHit;
85 CtrlBreakHit:=CtrlBreakHit or SvCtrlBreakHit;
86 end;
87 (*
88 procedure Wait(n:extended);
89 var
90 svCtrlBreakHit:boolean;
91 finish:longint;
92 begin
93 svCtrlBreakHit:=CtrlBreakHit;
94 CtrlBreakHit:=false;
95 try
96 finish:=GetTickCount+
97 {$IFDEF ver100}system.round{$ELSE}LongIntRound{$ENDIF}(n*1000);
98 except
99 setexception(12004);
100 end;
101 repeat
102 sleep(10);IdleImmediately;
103 until (GetTickcount-Finish>=0) or CtrlBreakHit;
104 CtrlBreakHit:=CtrlBreakHit or SvCtrlBreakHit;
105 end;
106 *)
107
108 type
109 TPAUSE=class(TStatement)
110 exp:TPrincipal;
111 constructor create(prev,eld:TStatement);
112 destructor destroy;override;
113 //procedure exec;override;
114 function Code:ansistring;override;
115 end;
116
117 function PAUSEst(prev,eld:TStatement):TStatement;
118 begin
119 PAUSEst:=TPause.create(prev,eld)
120 end;
121
122 constructor TPause.create(prev,eld:TStatement);
123 begin
124 inherited create(prev,eld);
125 if not ((tokenspec=tail) or (token='ELSE')) then
126 exp:=NSExpression;
127 end;
128
129 destructor TPause.destroy;
130 begin
131 exp.free;
132 inherited destroy
133 end;
134
135 procedure ShowMess(const s:string);
136 begin
137 if MessageDlg(s, mtCustom, [mbOk], 800)<>mrOk then
138 CtrlBreakHit:=true;
139 end;
140
141 (*
142 procedure TPause.exec;
143 var
144 x:extended;
145 begin
146 if exp=nil then
147 ShowMess('Pause')
148 else if exp.kind='s' then
149 ShowMess(exp.evalS)
150 else
151 begin
152 x:=exp.evalX;
153 wait(x)
154 end;
155 end;
156 *)
157 function TPause.Code:ansistring;
158 begin
159 if exp=nil then
160 result:='ShowMess(''Pause'');'
161 else if exp.kind='s' then
162 result:='Showmess(' + exp.code +');'
163 else
164 result:='wait('+exp.code +');'
165 end;
166
167
168 {**********}
169 {WAIT DELAY}
170 {**********}
171
172
173 function WAITst(prev,eld:TStatement):TStatement;
174 begin
175 checktoken('DELAY',IDH_EXTENSION);
176 WAITst:=TPause.create(prev,eld);
177 end;
178
179 {*******}
180 {INQUIRE}
181 {*******}
182 (*
183 type
184 TCONFIRM=class(TStatement)
185 svar:TStrVari;
186 exp:TPrincipal;
187 constructor create(prev,eld:TStatement);
188 destructor destroy;override;
189 //procedure exec;override;
190 function code:ansistring;override;
191 end;
192
193 function CONFIRMst(prev,eld:TStatement):TStatement;
194 begin
195 CONFIRMst:=TCONFIRM.create(prev,eld)
196 end;
197
198 constructor TCONFIRM.create(prev,eld:TStatement);
199 begin
200 inherited create(prev,eld);
201 svar:=StrVari;
202 checkToken('WITH',IDH_EXTENSION);
203 exp:=NSExpression;
204 end;
205
206 destructor TCONFIRM.destroy;
207 begin
208 svar.free;
209 exp.free;
210 inherited destroy
211 end;
212
213 function TCONFIRM.code:ansistring;
214 begin
215 result:='with '+svar.code
216 +' do begin str:=YesNoLiteral[MessageDlg('+exp.Code+',mtConfirmation,[mbYes,mbNo],0)=mrYes];'
217 +' free end;';
218 end;
219 *)
220
221 {********}
222 {beep ST }
223 {********}
224 type
225 TBEEP=class(TStatement)
226 exp1,exp2:TPrincipal;
227 constructor create(prev,eld:TStatement);
228 destructor destroy;override;
229 //procedure exec;override;
230 function Code:ansistring;override;
231 end;
232
233 constructor TBeep.create;
234 begin
235 inherited create(prev,eld);
236 if (tokenspec<>tail) and (token<>'ELSE') then
237 begin
238 exp1:=Nexpression;
239 check(',',IDH_FILE_ENLARGE);
240 exp2:=NExpression;
241 end;
242 end;
243
244 destructor TBeep.destroy;
245 begin
246 exp1.free;
247 exp2.free;
248 inherited destroy
249 end;
250 (*
251 procedure TBEEP.exec;
252 var
253 freq,duration:integer;
254 begin
255 if exp1=nil then
256 SysUtils.beep
257 else
258 begin
259 freq:=exp1.evalInteger;
260 duration:=exp2.evalInteger;
261 SysUtils.beep; //Windows.Beep(freq,duration);
262 end;
263 end;
264 *)
265 function TBEEP.Code:ansistring;
266 begin
267 result:='sysUtils.beep;';
268 {$IFDEF Windows}
269 if exp1<>nil then
270 result:='Windows.Beep( System.Round('+exp1.code+'),System.Round('+exp2.code+'));'
271 {$ENDIF}
272 end;
273
274 function BEEPst(prev,eld:TStatement):TStatement;
275 begin
276 BEEPst:=TBEEP.create(prev,eld)
277 end;
278
279 {**********}
280 {DELETEFILE}
281 {**********}
282
283 type
284 TDELETEFILE=class(TStatement)
285 exp:TPrincipal;
286 constructor create(prev,eld:TStatement);
287 destructor destroy;override;
288 //procedure exec;override;
289 function Code:ansistring;override;
290 end;
291
292 function UNSAVEst(prev,eld:TStatement):TStatement;
293 begin
294 result:=TDELETEFILE.create(prev,eld)
295 end;
296
297 constructor TDELETEFILE.create(prev,eld:TStatement);
298 begin
299 inherited create(prev,eld);
300 exp:=SExpression;
301 end;
302
303 destructor TDELETEFILE.destroy;
304 begin
305 exp.free;
306 inherited destroy
307 end;
308 (*
309 procedure TDELETEFILE.exec;
310 var
311 s:String;
312 begin
313 s:=exp.evalS;
314 if FileExists(s) then
315 if DeleteFile(s) then
316 else
317 setexception(9000)
318 else
319 setexception(9003)
320 end;
321 *)
322 function TDeleteFile.Code:ansistring;
323 begin
324 result:='FileDelete('+exp.code+');'
325 end;
326
327 {***************}
328 {File Statements}
329 {***************}
330 type
331 TSetCurDir=class(TDeleteFile)
332 //procedure exec;override;
333 function Code:AnsiString;override;
334 end;
335 (*
336 procedure TSetCurDir.exec;
337 begin
338 {$I-}
339 chDir(exp.evalS);
340 if IOResult <> 0 then // ���������������������������������������������������������
341 setexception(9003);
342 {$I+} { ������������������������������������������������������������������������ }
343 end;
344 *)
345 function TSetCurDir.Code:ansistring;
346 begin
347 result:='if SetCurrentDir('+exp.code+') then else setexception(9003);';
348 end;
349
350
351
352
353 type
354 TGetCurDir=class(TStatement)
355 vari:TStrVari;
356 constructor create(prev,eld:TStatement);
357 destructor destroy;override;
358 function code:ansistring;override;
359 end;
360
361 function TGetCurDir.Code:ansistring;
362 begin
363 result:='with '+vari.Code+ 'do begin str:=GetCurrentDir; free end;';
364 end;
365
366
367 type
368 TGetName=Class(TGetCurDir)
369 exp:TPrincipal;
370 aux:integer;
371 constructor create(prev,eld:TStatement; aux0:integer);
372 destructor destroy;override;
373 function Code:Ansistring;override;
374 end;
375
376
377 constructor TGetCurDir.create(prev,eld:TStatement);
378 begin
379 inherited create(prev,eld);
380 vari:=StrVari;
381 end;
382
383 constructor TGetName.create(prev,eld:TStatement;aux0:integer);
384 begin
385 inherited create(prev,eld);
386 aux:=aux0;
387 if test(',') then
388 exp:=SExpression;
389 end;
390
391 destructor TGetCurDir.destroy;
392 begin
393 vari.free;
394 inherited destroy
395 end;
396
397 destructor TGetName.destroy;
398 begin
399 exp.free;
400 inherited destroy
401 end;
402
403 function TGetName.Code:ansistring;
404 var
405 s:string;
406 begin
407 s:='''''';
408 if exp<>nil then s:=exp.code;
409 result:='FileGetName('+s+',' +vari.Code+','+inttostr(aux)+'); ';
410 end;
411
412 type
413 TSplitName=Class(TStatement)
414 exp:TPrincipal;
415 vari1,vari2,vari3:TStrVari;
416 constructor create(prev,eld:TStatement);
417 destructor destroy;override;
418 //procedure exec;override;
419 function Code:ansistring;override;
420 end;
421
422 constructor TSplitName.create(prev,eld:TStatement);
423 begin
424 inherited create(prev,eld);
425 check('(',IDH_FILE_ENLARGE);
426 exp:=SExpression;
427 check(')',IDH_FILE_ENLARGE);
428 vari1:=StrVari;
429 check(',',IDH_FILE_ENLARGE);
430 vari2:=StrVari;
431 check(',',IDH_FILE_ENLARGE);
432 vari3:=StrVari;
433 end;
434
435
436 destructor TSplitName.destroy;
437 begin
438 exp.free;
439 vari1.free;
440 vari2.free;
441 vari3.free;
442 inherited destroy
443 end;
444 (*
445 procedure TSplitName.exec;
446 var
447 s,name,ext:string;
448 i:integer;
449 begin
450 s:=exp.evalS;
451 vari1.substS(ExtractFilePath(s));
452 name:=ExtractFileName(s);
453 i:=lastDelimiter('.',name);
454 ext:=copy(name,i,maxint);
455 name:=copy(name,1,i-1);
456 vari2.substS(name);
457 vari3.substS(ext);
458 end;
459 *)
460 function TSplitName.code:ansistring;
461 begin
462 result:='FileSplitName('+exp.code+','+vari1.code+','+vari2.code+','+vari3.code+');'
463 end;
464
465 type
466 TFileList=Class(TStatement)
467 exp:TPrincipal;
468 mat1:TMatrix;
469 constructor create(prev,eld:TStatement);
470 destructor destroy;override;
471 //procedure exec;override;
472 function Code:AnsiString;override;
473 end;
474
475 constructor TFileList.create(prev,eld:TStatement);
476 begin
477 inherited create(prev,eld);
478 exp:=SExpression;
479 check(',',IDH_FILE_ENLARGE);
480 mat1:=smatrix;
481 if mat1.idr.dim<>1 then
482 seterrDimension(IDH_FILE_ENLARGE);
483 end;
484
485
486 destructor TFileList.destroy;
487 begin
488 exp.free;
489 mat1.free;
490 inherited destroy
491 end;
492 (*
493 procedure TFileList.exec;
494 var
495 s:string;
496 Rec:TSearchRec;
497 p:TSArray;
498 sz:array3;
499 i:integer;
500 begin
501 s:=exp.evalS;
502
503 TVar(p):=mat1.point;
504 if p<>nil then
505 begin
506 i:=0;
507 try
508 if FindFirst(s,0,Rec)=0 then
509 begin
510 if p.MaxSize<=i then SetException(5001);
511 with p do ItemSubstS(i*size[2] ,Rec.Name);
512 inc(i);
513 while FindNext(Rec)=0 do
514 begin
515 if p.ary.count<=i then SetException(5001);
516 p.pointij(i,0).SubstS(Rec.Name);
517 inc(i);
518 end;
519 end;
520 finally
521 FindClose(Rec);
522 end;
523
524 sz[1]:=i;
525 sz[2]:=1;
526 sz[3]:=1;
527 p.RedimNative(sz,false);
528 end;
529 end;
530 *)
531 Function TFileList.Code:ansistring;
532 begin
533 result:='FileList('+exp.code+','+mat1.code+');'
534 end;
535
536 type
537 TFileRename=Class(TStatement)
538 exp1,exp2:TPrincipal;
539 constructor create(prev,eld:TStatement);
540 destructor destroy;override;
541 //procedure exec;override;
542 function Code:ansistring;override;
543 end;
544
545 constructor TFileRename.create(prev,eld:TStatement);
546 begin
547 inherited create(prev,eld);
548 exp1:=SExpression;
549 check(',',IDH_FILE_ENLARGE);
550 exp2:=SExpression;
551 end;
552
553 destructor TFileRename.destroy;
554 begin
555 exp1.free;
556 exp2.free;
557 inherited destroy
558 end;
559 (*
560 procedure TFileRename.exec;
561 var
562 s1,s2:string;
563 begin
564 s1:=exp1.evalS;
565 s2:=exp2.evalS;
566 if FileExists(s1) then
567 begin
568 if FileExists(s2) then
569 setexception(9004)
570 else if not RenameFile(s1,s2) then
571 setexception(9000)
572 end
573 else
574 setexception(9003);
575 end;
576 *)
577 function TFileRename.code:ansistring;
578 begin
579 result:='FileRename('+exp1.code+','+exp2.code+');'
580 end;
581
582
583
584 function FILEst(prev,eld:TStatement):TStatement;
585 begin
586 if token='DELETE' then
587 begin
588 gettoken;
589 result:=UNSAVEst(prev,eld);
590 end
591 else if token='GETNAME' then
592 begin
593 gettoken;
594 result:=TGetName.create(prev,eld,0);
595 end
596 else if token='GETOPENNAME' then
597 begin
598 gettoken;
599 result:=TGetName.create(prev,eld,1);
600 end
601 else if token='GETSAVENAME' then
602 begin
603 gettoken;
604 result:=TGetName.create(prev,eld,2);
605 end
606 else if token='SPLITNAME' then
607 begin
608 gettoken;
609 result:=TSplitName.create(prev,eld);
610 end
611 else if token='RENAME' then
612 begin
613 gettoken;
614 result:=TFileRename.create(prev,eld);
615 end
616 else if token='LIST' then
617 begin
618 gettoken;
619 result:=TFileList.create(prev,eld);
620 end
621 else
622 seterrIllegal(Token, IDH_FILE_ENLARGE)
623 end;
624
625 function SetCurDirst(prev,eld:TStatement):TStatement;
626 begin
627 result:=TSetCurDir.create(prev,eld)
628 end;
629
630 function GetCurDirst(prev,eld:TStatement):TStatement;
631 begin
632 result:=TGetCurDir.create(prev,eld)
633 end;
634
635 {*******************************************}
636 {Number of Files that matches the expression}
637 {*******************************************}
638
639 type
640 TNumFiles=class(TMiscInt)
641 exp:TPrincipal;
642 constructor create;
643 //function evalLongint:longint;override;
644 destructor destroy;override;
645 function code:ansistring;override;
646 end;
647
648
649 constructor TNumFiles.create;
650 begin
651 inherited create;
652 checkToken('(',IDH_EXTENSION) ;
653 exp:=SExpression;
654 checkToken(')',IDH_EXTENSION);
655 end;
656 (*
657 function TNumFiles.evalLongint:longint;
658 var
659 s:string;
660 Rec:TSearchRec;
661 begin
662 s:=exp.evalS;
663 result:=0;
664 try
665 if FindFirst(s,0,Rec)=0 then
666 begin
667 inc(result);
668 while FindNext(Rec)=0 do
669 inc(result);
670 end;
671 finally
672 FindClose(Rec);
673 end;
674 end;
675 *)
676 destructor TNumFiles.destroy;
677 begin
678 exp.free;
679 inherited destroy
680 end;
681
682 function TNumFiles.code:ansistring;
683 begin
684 result:='Files('+exp.code+')'
685 end;
686
687 function Filesfnc:TPrincipal;
688 begin
689 result:=NOperation(TNumFiles.create)
690 end;
691
692
693 {****************}
694 {Pack$ and Unpack}
695 {****************}
696
697 type
698 TPack=class(TStrExpression)
699 exp:TPrincipal;
700 constructor create;
701 //function evalS:ansistring;override;
702 destructor destroy;override;
703 function Code:AnsiString;override;
704 end;
705
706 constructor TPack.create;
707 begin
708 inherited create;
709 exp:=argumentN1;
710 end;
711 (*
712 function TPack.evalS:ansistring;
713 var
714 d:double;
715 s:string[8];
716 begin
717 d:=exp.evalX;
718 move(d,s[1],8);
719 setlength(s,8);
720 result:=s;
721 end;
722 *)
723 destructor TPack.destroy;
724 begin
725 exp.free;
726 inherited destroy;
727 end;
728
729 function Packfnc:TPrincipal;far;
730 begin
731 Packfnc:=TPack.create;
732 end;
733
734 type
735 TDWordStr=class(Tpack)
736 //function evalS:ansistring;override;
737 function Code:AnsiString;override;
738 end;
739
740 {
741 function TDWordStr.evalS:ansistring;
742 var
743 d:DWord;
744 s:string[4];
745 begin
746 d:=Trunc(exp.evalX);
747 move(d,s[1],4);
748 setlength(s,4);
749 result:=s;
750 end;
751 }
752
753 type
754 TWordStr=class(Tpack)
755 //function evalS:ansistring;override;
756 function Code:AnsiString;override;
757 end;
758
759 {
760 function TWordStr.evalS:ansistring;
761 var
762 w:word;
763 s:string[2];
764 begin
765 w:=exp.evalInteger;
766 move(w,s[1],2);
767 setlength(s,2);
768 result:=s;
769 end;
770 }
771
772 type
773 TByteStr=class(Tpack)
774 //function evalS:ansistring;override;
775 function Code:AnsiString;override;
776 end;
777
778 {
779 function TByteStr.evalS:ansistring;
780 var
781 b:byte;
782 s:string[1];
783 begin
784 b:=exp.evalInteger;
785 move(b,s[1],1);
786 setlength(s,1);
787 result:=s;
788 end;
789 }
790
791 function DWordfnc:TPrincipal;far;
792 begin
793 DWordfnc:=TDWordStr.create;
794 end;
795
796 function Wordfnc:TPrincipal;far;
797 begin
798 Wordfnc:=TWordStr.create;
799 end;
800
801 function Bytefnc:TPrincipal;far;
802 begin
803 Bytefnc:=TByteStr.create;
804 end;
805
806
807
808
809 type
810 TUnpack=Class(TMiscReal)
811 exp:TPrincipal;
812 constructor create;
813 //function evalX:extended;override;
814 destructor destroy;override;
815 function Code:AnsiString;override;
816
817 end;
818
819 constructor TUnPack.create;
820 begin
821 inherited create;
822 check('(',IDH_DLL);
823 exp:=SExpression;
824 check(')',IDH_DLL);
825 end;
826 (*
827 function TUnPack.evalX:extended;
828 var
829 s:string[8];
830 d:double;
831 begin
832 s:=exp.evalS;
833 move(s[1],d,8);
834 result:=d;
835 end;
836 *)
837 destructor TUnPack.destroy;
838 begin
839 exp.free;
840 inherited destroy;
841 end;
842
843 function UnPackfnc:TPrincipal;far;
844 begin
845 UnPackfnc:=NOperation(TUnPack.create);
846 end;
847
848 function TPack.Code:ansistring;
849 begin
850 result:='PackDbl_s('+exp.code+')'
851 end;
852
853 function TDwordStr.Code:ansistring;
854 begin
855 result:='DWord_s('+exp.code+')'
856 end;
857
858 function TWordStr.Code:ansistring;
859 begin
860 result:='Word_s('+exp.code+')'
861 end;
862
863 function TByteStr.Code:ansistring;
864 begin
865 result:='Byte_s('+exp.code+')'
866 end;
867
868 function TUnPack.Code:ansistring;
869 begin
870 result:='UnPackDbl('+exp.code+')'
871 end;
872
873
874 {**********}
875 {GetKeyStae}
876 {**********}
877 type
878 TGetKeyState=class(TMiscInt)
879 exp:TPrincipal;
880 constructor create;
881 function evalLongint:longint;override;
882 destructor destroy;override;
883 function Code:AnsiString;override;
884 end;
885
886
887 constructor TGetKeyState.create;
888 begin
889 inherited create;
890 checkToken('(',IDH_EXTENSION) ;
891 exp:=NExpression;
892 checkToken(')',IDH_EXTENSION);
893 end;
894
895 function TGetKeyState.evalLongint:longint;
896 begin
897 //result:=GetKeyState(exp.evalinteger);
898 end;
899
900 function TGetKeyState.Code:ansistring;
901 begin
902 result:='GetKeyState('+exp.code+')'
903 end;
904
905 destructor TGetKeyState.destroy;
906 begin
907 exp.free;
908 inherited destroy
909 end;
910
911 function GetKeyStatefnc:TPrincipal;
912 begin
913 GetKeyStatefnc:=NOperation(TGetKeyState.create)
914 end;
915
916
917 {**************}
918 {BIT operations}
919 {**************}
920 type
921 TBitNOT=class(TMiscReal)
922 exp:TPrincipal;
923 constructor create;
924 function Code:AnsiString;override;
925 end;
926 constructor TBitNOT.create;
927 begin
928 inherited create;
929 check('(',0);
930 exp:=NExpression;
931 check(')',0);
932 end;
933
934 function TBitNOT.Code:AnsiString;
935 begin
936 result:='BitNOT('+exp.Code+')'
937 end;
938
939 type
940 TBitOp=class(TMiscReal)
941 exp1,exp2:Tprincipal;
942 constructor create;
943 end;
944
945 constructor TBitOp.create;
946 begin
947 inherited create;
948 check('(',0);
949 exp1:=NExpression;
950 check(',',0);
951 exp2:=NExpression;
952 check(')',0);
953 end;
954
955 type
956 TBitAND=class(TBitOp)
957 function Code:AnsiString;override;
958 end;
959 TBitOR=class(TBitOp)
960 function Code:AnsiString;override;
961 end;
962 TBitXOR=class(TBitOp)
963 function Code:AnsiString;override;
964 end;
965
966 function TBitAND.Code:AnsiString;
967 begin
968 result:='BitAND('+exp1.code+','+exp2.code+')'
969 end;
970
971 function TBitOr.Code:AnsiString;
972 begin
973 result:='BitOR('+exp1.code+','+exp2.code+')'
974 end;
975
976 function TBitXOR.Code:AnsiString;
977 begin
978 result:='BitXOR('+exp1.code+','+exp2.code+')'
979 end;
980
981 function BitNotfnc:TPrincipal;
982 begin
983 Result:=NOperation(TBitNOT.create)
984 end;
985
986 function BitAndfnc:TPrincipal;
987 begin
988 Result:=NOperation(TBitAND.create)
989 end;
990
991 function BitOrfnc:TPrincipal;
992 begin
993 Result:=NOperation(TBitOR.create)
994 end;
995
996 function BitXorfnc:TPrincipal;
997 begin
998 Result:=NOperation(TBitXOR.create)
999 end;
1000
1001 {*******************}
1002 {Confirmation Dialog}
1003 {*******************}
1004
1005 type
1006 TConfirm=class(TStrExpression)
1007 exp:TPrincipal;
1008 constructor create;
1009 function code:ansistring;override;
1010 destructor destroy;override;
1011 end;
1012
1013 constructor TConfirm.create;
1014 begin
1015 inherited create;
1016 exp:=SExpression;
1017 end;
1018
1019
1020 destructor TConfirm.destroy;
1021 begin
1022 exp.free;
1023 inherited destroy;
1024 end;
1025
1026 function TCONFIRM.code:AnsiString;
1027 begin
1028 result:='confirm_s('+exp.code+')'
1029 end;
1030
1031 function CONFIRMfnc:TPrincipal;
1032 begin
1033 CONFIRMfnc:=TCONFIRM.create
1034 end;
1035
1036
1037
1038
1039
1040 {**********}
1041 {initialize}
1042 {**********}
1043
1044 procedure statementTableinit;
1045 begin
1046 StatementTableInitImperative('SWAP',SWAPst);
1047 StatementTableInitImperative('PAUSE',PAUSEst);
1048 StatementTableInitImperative('WAIT',WAITst);
1049 //StatementTableInitImperative('CONFIRM',CONFIRMst);
1050 StatementTableInitImperative('BEEP',BEEPst);
1051 StatementTableInitImperative('UNSAVE',UNSAVEst);
1052 StatementTableInitImperative('KILL',UNSAVEst);
1053 StatementTableInitImperative('FILE',FILEst);
1054 StatementTableInitImperative('SETCURDIR',SetCurDirst);
1055 StatementTableInitImperative('GETCURDIR',GetCurDirst);
1056
1057
1058 end;
1059
1060
1061 procedure FunctionTableInit;
1062 begin
1063 SuppliedFunctionTableInit('GETKEYSTATE' , GetKeyStatefnc);
1064 SuppliedFunctionTableInit('FILES' , Filesfnc);
1065 SuppliedFunctionTableInit('PACKDBL$' , Packfnc);
1066 SuppliedFunctionTableInit('DWORD$' , DWordfnc);
1067 SuppliedFunctionTableInit('WORD$' , Wordfnc);
1068 SuppliedFunctionTableInit('BYTE$' , Bytefnc);
1069 SuppliedFunctionTableInit('UNPACKDBL' , UnPackfnc);
1070 SuppliedFunctionTableInit('BITNOT' , BitNOTfnc);
1071 SuppliedFunctionTableInit('BITAND' , BitANDfnc);
1072 SuppliedFunctionTableInit('BITOR' , BitORfnc);
1073 SuppliedFunctionTableInit('BITXOR' , BitXORfnc);
1074 SuppliedFunctionTableInit('CONFIRM$',CONFIRMfnc);
1075
1076 end;
1077
1078
1079 begin
1080 tableInitProcs.accept(statementTableinit);
1081 tableInitProcs.accept(FunctionTableInit);
1082 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26