| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- IMPORTANT Changes in RIGAL 2.18
- ============ RIG218.DOK ===========
- CHANGES
- ADDITIONALS
- ERRORS CORRECTED
- 1. on ERRORS
- a. COPY for lists bow works correctly.
- b. LAST to inactive rule still can work incorrectly
- (error is not corrected)
- 2. SCANNER
- a. For symbolic strings which have not ending delimiter
- #_KEYWORD atom is produced
- b. Lexical Error coordinates now will appear correctly on screen
- 3. FATAL ERRORS
- a. Possible fatal errors are
- - Disk overflow during SAVE
- - Structured memory overflow (8 M, more is impossible)
- - Current disk overflow (DOS mode only)
- b. In Windows mode a MESSAGEBOX about fatal error appear
- 4. TURBO PASCAL FOR WINDOWS AS A SECOND PHASE
- a. Now we try to guarantee safety of call to MYTPW.EXE
- - .CFG files are generated in 1st phase every time
- - They are generated with correct disk and directory name
- - MYTPW can't save its Desktop or Configuration file
- - Filename.PAR is used as intermediate file instead of
- Filename.PAS for compilation of Filename.RIG in 2 phases.
- 5. STACK problems
- Stack limitations are set by $M directive :
- in Interpreter/Windows 38 K (it is maximum)
- Interpreter/DOS 60 K (it is maximum)
- in Compilation/Windows 22 K
- (it is maximum for GENPD.EXE,
- you can change it to 30-35 K for other tasks,
- use RIGWSRC.CFG or Options/Compiler/Memory in TPW environment)
- Compilation/DOS 32 K
- (see XCR0.BAT)
- Stack can not be more than 64-datasize-statics
- (datasize is summ of all string constants + something;
- it is reported at the end of Turbo Pascal command line compilation)
- (static is 5-10 Kb)
- When Stack overflows, Pascal runtime error 202 is reported
- 6. INTERPETER STACK
- Stack of INTERPETER variables is set to 1000 variables
- When it overflows, Rigal runtime error 1 is reported
- 7. HOME DIRECTORY
- For EXE files - directory where EXE is located.
- For interpreter - directory where File.RSC is located.
- Directory is given with ending slash (\).
- Call #CALL_PAS(105) to get it
- 8. APPEND
- Use
- OPEN XXX 'A.LST+'
- to append if file exists;
- to rewrite if file does not exist.
- 9. ACCESS TO DLL LIBRARIES
- Use
- #CALL_PAS(76) --to initialize buffers
- $HANDLE:=#CALL_PAS(101 'Lib.DLL') --to access library
- $PARAMETERS_or_ERRORCODE:=
- #CALL_PAS(102 $HANDLE $FUNCTION_NAME $PARAMETERS)
- -- to call function
- #CALL_PAS(103 $HANDLE) -- to free library
- IMPORTANT:
- 101======
- a. Library file name must be with full path.
- Otherwise Windows looks for DLL in PATH directories,
- then in disk "A:"
- You must use #CALL_PAS(105) or any PATH directory for compatibility
- $HANDLE>=32 is retured if OK
- 102======
- a. Function name must be exported by library.
- See GRAD.PAS to see correct parameter passing from/to DLL.
- Input and output $PARAMTERS are list of atoms (strings or numeric).
- For large strings (more than 80 bytes) special format
- (list of atoms) can be used.
- b. If error occur, not list, but number in 1000 .. 1020 is
- returned.
- 10. LIBRARY GRAD.DLL
- The following functions are allowed now to use with GRAD.DLL
- Function Parameters Returns
- -----------------------------------------------------------
- -- Monitor box functions (recommended for long execution)
- SB_CREATE (. 'title' .) -
- SB_NUM (. $num .) -
- SB_END - -
- -- Message Boxes with user's answer and without it
- R_MESSA (. 'Message' .) -
- R_MESSA (. 'Message' 'Title' .) -
- R_MESSA (. 'Message' 'Title' $nstyle .) (. $nAnswer .)
- -- here $nAnswer depends of $nstyle ans User's answer ----
- -- call DOS or Windows application
- R_WINEXEC (. 'c:\nc\nc.exe' .) (. $n .)
- -- here $n is >=32 if successful
- -- List box
- LB_INIT -
- LB_ADD (. $num_or_string .) (. $nFilled .)
- LB_ADD (. $n_or_s $n_or_s .) (. $nFilled .)
- -- $nFilled - how many lines are filled already
- -- Two paramters appear on screen separated by TAB in its line
- LB_GO - (. $nChosen .)
- -- Chosen line (starting from 1)
- LB_END
- ============ DLL.RIG ======================
- #S
- -- Test of work with DLL
- $E:=#CALL_PAS(76); -- Initialize all DLL access
- $FN:=#IMPLODE( #CALL_PAS(105) 'grad.DLL' );
- PRINT (. 'library is =' $FN .);
- $HA:=#CALL_PAS(101 $FN); -- Access to concrete DLL
- PRINT (. 'Library handle=' $HA .);
- IF $HA<32 -> PRINT (. No handle .) FI;
- -- Message Box function
- $VS:=#CALL_PAS(102 $HA 'ch' (. (.af ri ka.) 3 7 .) );
- -- Every function returns list of parameters or such answer as
- -- a number:
- -- 1000 #CALL_PAS(76) was not called
- -- 1001 1st paramter is not number
- -- 1002 2nd paramter is not atom
- -- 1003 3 handle is less than 32, Library was not opened for access
- -- 1004 no memory 80 bytes
- -- 1005 parameters are not formed in list,
- -- possible atom instead of list
- -- 1006 function not found in library
- -- (function must be declared as FAR and EXPORT)
- -- 1008 descriptor too small (see P_max_size in RIF.PAS )
- -- 1009 too many parameters (see P_max_cnt in RIF.PAS )
- -- 1010 wrong atoms in list of atoms which must represent
- -- super long string (only non numeric atoms allowed)
- -- 1011 wromg element (tree) in parameters
- -- Create Monitor box
- $VS:=#CALL_PAS(102 $HA 'SB_CREATE' (. 'Compiling CD Lagerverwaltung' .) );
- PRINT (. 'VS=' $VS .);
- LOOP
- $I+:=1;
- IF $I MOD 100=0 ->
- -- Modify monitor box with new number
- $VS:=#CALL_PAS(102 $HA 'SB_NUM' (. $I .) );
- FI;
- IF $I=1000 -> BREAK FI;
- END;
- -- remove monitor box
- $VS:=#CALL_PAS(102 $HA 'SB_END' );
- -- Call any Windows or DOS executable file
- IF #CALL_PAS(102 $HA 'R_MESSA' (.'Do you want NORTON ?' 'QQQ' 36.))=(.6.) ->
- #CALL_PAS(102 $HA 'R_MESSA' (. 'norton' .));
- $S:= #CALL_PAS(102 $HA R_WINEXEC (. 'C:\nc\nc' .) );
- PRINT (. 'S===' $S .);
- FI;
- --
- PRINT (. 'MB='
- #CALL_PAS(102 $HA 'R_MESSA'
- (.
- (. This ' ' is #CHR(13) big #CHR(13) Message ' ' box .)
- (. am er ika .)
- .) )
- .);
-
- -- Remove library from memory
- $FR:=#CALL_PAS(103 $HA);
- #CALL_PAS(1);
- ##
- =================== LBX.RIG ========================
- #LBX
- #CALL_PAS(76);
- $H:=#CALL_PAS(101 'G:\grad.dll');
- PRINT $H;
- $V:=#CALL_PAS(102 $H 'INPUT' (. afrika amerika .) );
- PRINT $V;
- $M:=#CALL_PAS(102 $H 'LB_INIT');
- PRINT $M;
- $M:=#CALL_PAS(102 $H 'LB_ADD' (. 5 YYY .) );
- PRINT $M;
- $M:=#CALL_PAS(102 $H 'LB_ADD' (. MTTT 789 .) );
- PRINT $M;
- $M:=#CALL_PAS(102 $H 'LB_ADD' (.
- M012345678901234567890123456789012345678901234567890
- K012345678901234567890123456789012345678901234567890
- .) );
- PRINT $M;
- $M:=#CALL_PAS(102 $H 'LB_GO' (. KOL .) );
- PRINT $M;
- #CALL_PAS(1);
- ##
-
|