# HG changeset patch # User roug # Date 1035313744 0 # Node ID afff0087c27f368cdb70f64b3c126f3b14b38445 # Parent b93501797906ef8e792f5a716bb74b4f88be9309 findstr and signal finished. diff -r b93501797906 -r afff0087c27f docs/ccguide/basic09.appendix --- a/docs/ccguide/basic09.appendix Sun Oct 20 05:16:37 2002 +0000 +++ b/docs/ccguide/basic09.appendix Tue Oct 22 19:09:04 2002 +0000 @@ -9,4 +9,105 @@ calling protocol. +
+Example 1 - Simple Integer Aritmetic Case + +This first example illustrates a simple case. Write a C function to +add an integer value to three integer variables. + +build bt1.c +? addints(cnt,value,s1,arg1,s2,arg2,s2,arg3,s4) +? int *value,*arg1,*arg2,*arg3; +? { +? *arg1 += *value; +? *arg2 += *value; +? *arg3 += *value; +? } +? + + + +That's the C function. The name of the function is "addints". The +name is information for C and c.link; BASIC09 will not know anything +about the name. Page 9-13 of the BASIC09 Reference manual describes +how BASIC09 passes parameters to machine language modules. Since +BASIC09 and C pass parameters in a similar fashion, it is easy to +access BASIC09 values. The first parameter on the BASIC09 stack is +a two-byte count of the number of following parameter pairs. Each +pair consists of an address and size of value. For most C +functions, the parameter count and pair size is not used. The +address, however, is the useful piece of information. The address +is declared in the C function to always be a "pointer to..." type. +BASIC09 always passes addresses to procedures, even for constant +values. The arguments cnt, s1, s2, s3 and s4 are just place holders +to indicate the presence of the parameter count and argument sizes +on the stack. These can be used to check validity of the passed +arguments if desired. + + +The line "int *value,*arg1,*arg2,*arg3" declares the parameters (in +this case all "pointers to int"), so the compiler will generate the +correct code to access the BASIC09 values. The remaining lines +increment each arg by the passed value. Notice that a simple +arithmetic operation is performed here (addition), so C will not +have to call a library function to do the operation. + + +To compile this function, the following C compiler command line is +used: + + +cc2 bt1.c -rs + + +CC2 uses the Level-Two compiler. Replace cc2 with cc1 if you are +using the Level-One compiler. The -r option causes the compiler to +leave bt1.r as output, ready to be linked. The -s option suppresses +the call to the stack-checking function. Since we will be making a +module for BASIC09, cstart.r will not be used. Therefore, no +initialized data, static data, or stack checking is allowed. More +on this later. + + +The bt1.r file must now be converted to a loadable module that +BASIC09 can link to by using a special linking technique as follows: + + +c.link bt1.r -b=addints -o=addints + + +This command tells the linker to read bt1.r as input. The option +"-b=addints" tells the linker to make the output file a module that +BASIC09 can link to and that the function "addints" is to be the +entrypoint in the module. You may give many input files to c.link +in this mode. It resolves references in the normal fashion. The +name given to the "-b=" option indicates which of the functions is +to be entered directly by the BASIC09 RUN command. The option +"-o=addints" says what the name of the output file is to be, in this +case "addints". This name should be the name used in the BASIC09 +RUN command to call the C procedure. The name given in "-o=" +option is the name of the procedure to RUN. The "-b=" option is +merely information to the linker so it can fill in the correct +module entrypoint offset. + + + +Enter the following BASIC09 program: + +PROCEDURE btest +DIM i,j,k:INTEGER +i=1 +j=132 +k=-1033 +RUN addints(4,i,j,k) +PRINT i,j,k +END + +When this procedure is RUN, it should print: + +5 136 -1029 + +indicating that our C function worked! + + diff -r b93501797906 -r afff0087c27f docs/ccguide/errors.appendix --- a/docs/ccguide/errors.appendix Sun Oct 20 05:16:37 2002 +0000 +++ b/docs/ccguide/errors.appendix Tue Oct 22 19:09:04 2002 +0000 @@ -33,434 +33,450 @@ - +argument storage - +bad character + + + + + + +both must be integral - +break error - +can't take address - +cannot cast - +cannot evaluate data - +cannot initialize - +compiler trouble - +condition needed - +constant expression required - +constant overflow - +constant required - +continue error - +declaration mismatch - +divide by zero - +? expected - +expression missing - +function header missing - +function type error - +function unfinished - +identifier missing - +illegal declaration - +label required - +label undefined - +lvalue required - +multiple defaults - +multiple definition - +must be integral - +name clash - +name in cast - +named twice - - - - - - - - +no 'if' for 'else' - +no switch statement - +not a function - +not an argument - +operand expected - +out of memory +Compiler dynamic memory overflow. The compiler requires +dynamic memory for symbol table entries, block level +declarations and code generation. Three major factors affect +this memory usage. Permanent declarations (those appearing on +the outer block level (used in include files)) must be +reserved from the dynamic memory for the duration of the +compilation of the file. Each { causes the compiler to perform +a block-level recursion which may involve "pushing down" +previous declarations which consume memory. Auto class +initializers require saving expression trees until past the +declarations which may be very memory-expensive if may exist. +Avoiding excessive declarations, both permanent and inside +compound statement blocks conserve memory. If this error +occurs on an auto initializer, try initializing the value in +the code body. - - - - - - - - +pointer mismatch - +pointer or integer required - +pointer required - +primary expected - +should be NULL - +**** STACK OVERFLOW **** + + + + + + +storage error - +struct member mismatch - +struct member required - +struct syntax - +struct or union inappropiate - +syntax error - +third expression missing - +too long - +too many brackets - +too many elements - +type error - +type mismatch - +typedef - not a variable - +undeclared variable - +undefined structure - +unions not allowed - +unterminated character constant +Unmatched ' character delimiters. (2.4.3) - +unterminated string Unmatched " string delimiters. (2.5) @@ -471,7 +487,7 @@ while expected -No while found for do statements (9.5) +No while found for do statement. (9.5)