updated compiler to 3.2.3636
authorBorja Ferrer <faluco@alliedmods.net>
Mon Aug 28 15:22:02 2006 +0000 (2006-08-28)
changeset 627c24f0801ae1
parent 61 c5da4f810382
child 63 29b9475a8b59
updated compiler to 3.2.3636
sourcepawn/compiler/amx.h
sourcepawn/compiler/amxdbg.h
sourcepawn/compiler/libpawnc.c
sourcepawn/compiler/pawncc.c
sourcepawn/compiler/sc.h
sourcepawn/compiler/sc1.c
sourcepawn/compiler/sc2.c
sourcepawn/compiler/sc3.c
sourcepawn/compiler/sc4.c
sourcepawn/compiler/sc5.scp
sourcepawn/compiler/sc6.c
sourcepawn/compiler/sci18n.c
sourcepawn/compiler/sclist.c
sourcepawn/compiler/scmemfil.c
sourcepawn/compiler/scvars.c
sourcepawn/compiler/svnrev.h
     1.1 --- a/sourcepawn/compiler/amx.h	Sat Aug 19 20:52:42 2006 +0000
     1.2 +++ b/sourcepawn/compiler/amx.h	Mon Aug 28 15:22:02 2006 +0000
     1.3 @@ -18,7 +18,7 @@
     1.4   *      misrepresented as being the original software.
     1.5   *  3.  This notice may not be removed or altered from any source distribution.
     1.6   *
     1.7 - *  Version: $Id: amx.h 3579 2006-06-06 13:35:29Z thiadmer $
     1.8 + *  Version: $Id: amx.h 3633 2006-08-11 16:20:18Z thiadmer $
     1.9   */
    1.10  
    1.11  #ifndef AMX_H_INCLUDED
    1.12 @@ -266,6 +266,7 @@
    1.13    cell alt              ;
    1.14    cell reset_stk        ;
    1.15    cell reset_hea        ;
    1.16 +  /* extra fields for increased performance */
    1.17    cell sysreq_d         ; /* relocated address/value for the SYSREQ.D opcode */
    1.18    #if defined JIT
    1.19      /* support variables for the JIT */
    1.20 @@ -341,6 +342,7 @@
    1.21  #define AMX_FLAG_COMPACT  0x04  /* compact encoding */
    1.22  #define AMX_FLAG_SLEEP    0x08  /* script uses the sleep instruction (possible re-entry or power-down mode) */
    1.23  #define AMX_FLAG_NOCHECKS 0x10  /* no array bounds checking; no BREAK opcodes */
    1.24 +#define AMX_FLAG_SYSREQN 0x800  /* script new (optimized) version of SYSREQ opcode */
    1.25  #define AMX_FLAG_NTVREG 0x1000  /* all native functions are registered */
    1.26  #define AMX_FLAG_JITC   0x2000  /* abstract machine is JIT compiled */
    1.27  #define AMX_FLAG_BROWSE 0x4000  /* busy browsing */
     2.1 --- a/sourcepawn/compiler/amxdbg.h	Sat Aug 19 20:52:42 2006 +0000
     2.2 +++ b/sourcepawn/compiler/amxdbg.h	Mon Aug 28 15:22:02 2006 +0000
     2.3 @@ -21,7 +21,7 @@
     2.4   *      misrepresented as being the original software.
     2.5   *  3.  This notice may not be removed or altered from any source distribution.
     2.6   *
     2.7 - *  Version: $Id: amxdbg.h 3519 2006-02-17 17:57:04Z thiadmer $
     2.8 + *  Version: $Id: amxdbg.h 3612 2006-07-22 09:59:46Z thiadmer $
     2.9   */
    2.10  
    2.11  #ifndef AMXDBG_H_INCLUDED
     3.1 --- a/sourcepawn/compiler/libpawnc.c	Sat Aug 19 20:52:42 2006 +0000
     3.2 +++ b/sourcepawn/compiler/libpawnc.c	Mon Aug 28 15:22:02 2006 +0000
     3.3 @@ -20,7 +20,7 @@
     3.4   *			misrepresented as being the original software.
     3.5   *	3.	This notice may not be removed or altered from any source distribution.
     3.6   *
     3.7 - *	Version: $Id: libsc.c 3114 2005-03-17 14:48:29Z thiadmer $
     3.8 + *  Version: $Id: libpawnc.c 3612 2006-07-22 09:59:46Z thiadmer $
     3.9   */
    3.10  #include <assert.h>
    3.11  #include <stdio.h>
     4.1 --- a/sourcepawn/compiler/pawncc.c	Sat Aug 19 20:52:42 2006 +0000
     4.2 +++ b/sourcepawn/compiler/pawncc.c	Mon Aug 28 15:22:02 2006 +0000
     4.3 @@ -139,7 +139,7 @@
     4.4  			cod.flags = 0;
     4.5  			if (hdr->flags & AMX_FLAG_DEBUG)
     4.6  			{
     4.7 -				cod.flags |= SP_FILE_DEBUG;
     4.8 +				cod.flags |= SP_FLAG_DEBUG;
     4.9  			}
    4.10  			cod.code = sizeof(cod);
    4.11  			cod.main = hdr->cip;
     5.1 --- a/sourcepawn/compiler/sc.h	Sat Aug 19 20:52:42 2006 +0000
     5.2 +++ b/sourcepawn/compiler/sc.h	Mon Aug 28 15:22:02 2006 +0000
     5.3 @@ -25,7 +25,7 @@
     5.4   *      misrepresented as being the original software.
     5.5   *  3.  This notice may not be removed or altered from any source distribution.
     5.6   *
     5.7 - *  Version: $Id: sc.h 3590 2006-06-24 14:16:39Z thiadmer $
     5.8 + *  Version: $Id: sc.h 3636 2006-08-14 15:42:05Z thiadmer $
     5.9   */
    5.10  #ifndef SC_H_INCLUDED
    5.11  #define SC_H_INCLUDED
    5.12 @@ -279,11 +279,11 @@
    5.13  #define opargs(n)       ((n)*sizeof(cell))      /* size of typical argument */
    5.14  
    5.15  /*  Tokens recognized by lex()
    5.16 - *  Some of these constants are assigned as well to the variable "lastst"
    5.17 + *  Some of these constants are assigned as well to the variable "lastst" (see SC1.C)
    5.18   */
    5.19  #define tFIRST   256    /* value of first multi-character operator */
    5.20  #define tMIDDLE  280    /* value of last multi-character operator */
    5.21 -#define tLAST    326    /* value of last multi-character match-able token */
    5.22 +#define tLAST    329    /* value of last multi-character match-able token */
    5.23  /* multi-character operators */
    5.24  #define taMULT   256    /* *= */
    5.25  #define taDIV    257    /* /= */
    5.26 @@ -312,62 +312,66 @@
    5.27  #define tDBLCOLON 280   /* :: */
    5.28  /* reserved words (statements) */
    5.29  #define tASSERT  281
    5.30 -#define tBREAK   282
    5.31 -#define tCASE    283
    5.32 -#define tCHAR    284
    5.33 -#define tCONST   285
    5.34 -#define tCONTINUE 286
    5.35 -#define tDEFAULT 287
    5.36 -#define tDEFINED 288
    5.37 -#define tDO      289
    5.38 -#define tELSE    290
    5.39 -#define tENUM    291
    5.40 -#define tEXIT    292
    5.41 -#define tFOR     293
    5.42 -#define tFORWARD 294
    5.43 -#define tGOTO    295
    5.44 -#define tIF      296
    5.45 -#define tNATIVE  297
    5.46 -#define tNEW     298
    5.47 -#define tDECL    299
    5.48 -#define tOPERATOR 300
    5.49 -#define tPUBLIC  301
    5.50 -#define tRETURN  302
    5.51 -#define tSIZEOF  303
    5.52 -#define tSLEEP   304
    5.53 -#define tSTATE   305
    5.54 -#define tSTATIC  306
    5.55 -#define tSTOCK   307
    5.56 -#define tSWITCH  308
    5.57 -#define tTAGOF   309
    5.58 -#define tWHILE   310
    5.59 +#define tBEGIN   282
    5.60 +#define tBREAK   283
    5.61 +#define tCASE    284
    5.62 +#define tCHAR    285
    5.63 +#define tCONST   286
    5.64 +#define tCONTINUE 287
    5.65 +#define tDEFAULT 288
    5.66 +#define tDEFINED 289
    5.67 +#define tDO      290
    5.68 +#define tELSE    291
    5.69 +#define tEND     292
    5.70 +#define tENUM    293
    5.71 +#define tEXIT    294
    5.72 +#define tFOR     295
    5.73 +#define tFORWARD 296
    5.74 +#define tGOTO    297
    5.75 +#define tIF      298
    5.76 +#define tNATIVE  299
    5.77 +#define tNEW     300
    5.78 +#define tDECL    301
    5.79 +#define tOPERATOR 302
    5.80 +#define tPUBLIC  303
    5.81 +#define tRETURN  304
    5.82 +#define tSIZEOF  305
    5.83 +#define tSLEEP   306
    5.84 +#define tSTATE   307
    5.85 +#define tSTATIC  308
    5.86 +#define tSTOCK   309
    5.87 +#define tSWITCH  310
    5.88 +#define tTAGOF   311
    5.89 +#define tTHEN    312
    5.90 +#define tWHILE   313
    5.91  /* compiler directives */
    5.92 -#define tpASSERT 311    /* #assert */
    5.93 -#define tpDEFINE 312
    5.94 -#define tpELSE   313    /* #else */
    5.95 -#define tpELSEIF 314    /* #elseif */
    5.96 -#define tpEMIT   315
    5.97 -#define tpENDIF  316
    5.98 -#define tpENDINPUT 317
    5.99 -#define tpENDSCRPT 318
   5.100 -#define tpERROR  319
   5.101 -#define tpFILE   320
   5.102 -#define tpIF     321    /* #if */
   5.103 -#define tINCLUDE 322
   5.104 -#define tpLINE   323
   5.105 -#define tpPRAGMA 324
   5.106 -#define tpTRYINCLUDE 325
   5.107 -#define tpUNDEF  326
   5.108 +#define tpASSERT 314    /* #assert */
   5.109 +#define tpDEFINE 315
   5.110 +#define tpELSE   316    /* #else */
   5.111 +#define tpELSEIF 317    /* #elseif */
   5.112 +#define tpEMIT   318
   5.113 +#define tpENDIF  319
   5.114 +#define tpENDINPUT 320
   5.115 +#define tpENDSCRPT 321
   5.116 +#define tpERROR  322
   5.117 +#define tpFILE   323
   5.118 +#define tpIF     324    /* #if */
   5.119 +#define tINCLUDE 325
   5.120 +#define tpLINE   326
   5.121 +#define tpPRAGMA 327
   5.122 +#define tpTRYINCLUDE 328
   5.123 +#define tpUNDEF  329
   5.124  /* semicolon is a special case, because it can be optional */
   5.125 -#define tTERM    327    /* semicolon or newline */
   5.126 -#define tENDEXPR 328    /* forced end of expression */
   5.127 +#define tTERM    330    /* semicolon or newline */
   5.128 +#define tENDEXPR 331    /* forced end of expression */
   5.129  /* other recognized tokens */
   5.130 -#define tNUMBER  329    /* integer number */
   5.131 -#define tRATIONAL 330   /* rational number */
   5.132 -#define tSYMBOL  331
   5.133 -#define tLABEL   332
   5.134 -#define tSTRING  333
   5.135 -#define tEXPR    334    /* for assigment to "lastst" only */
   5.136 +#define tNUMBER  332    /* integer number */
   5.137 +#define tRATIONAL 333   /* rational number */
   5.138 +#define tSYMBOL  334
   5.139 +#define tLABEL   335
   5.140 +#define tSTRING  336
   5.141 +#define tEXPR    337 /* for assigment to "lastst" only (see SC1.C) */
   5.142 +#define tENDLESS 338 /* endless loop, for assigment to "lastst" only */
   5.143  
   5.144  /* (reversed) evaluation of staging buffer */
   5.145  #define sSTARTREORDER 0x01
   5.146 @@ -698,15 +702,15 @@
   5.147    typedef unsigned char MEMFILE;
   5.148    #define tMEMFILE  1
   5.149  #endif
   5.150 -MEMFILE *mfcreate(char *filename);
   5.151 +MEMFILE *mfcreate(const char *filename);
   5.152  void mfclose(MEMFILE *mf);
   5.153  int mfdump(MEMFILE *mf);
   5.154 -long mflength(MEMFILE *mf);
   5.155 +long mflength(const MEMFILE *mf);
   5.156  long mfseek(MEMFILE *mf,long offset,int whence);
   5.157 -unsigned int mfwrite(MEMFILE *mf,unsigned char *buffer,unsigned int size);
   5.158 +unsigned int mfwrite(MEMFILE *mf,const unsigned char *buffer,unsigned int size);
   5.159  unsigned int mfread(MEMFILE *mf,unsigned char *buffer,unsigned int size);
   5.160  char *mfgets(MEMFILE *mf,char *string,unsigned int size);
   5.161 -int mfputs(MEMFILE *mf,char *string);
   5.162 +int mfputs(MEMFILE *mf,const char *string);
   5.163  
   5.164  /* function prototypes in SCI18N.C */
   5.165  #define MAXCODEPAGE 12
     6.1 --- a/sourcepawn/compiler/sc1.c	Sat Aug 19 20:52:42 2006 +0000
     6.2 +++ b/sourcepawn/compiler/sc1.c	Mon Aug 28 15:22:02 2006 +0000
     6.3 @@ -20,7 +20,7 @@
     6.4   *      misrepresented as being the original software.
     6.5   *  3.  This notice may not be removed or altered from any source distribution.
     6.6   *
     6.7 - *  Version: $Id: sc1.c 3591 2006-06-25 14:30:07Z thiadmer $
     6.8 + *  Version: $Id: sc1.c 3636 2006-08-14 15:42:05Z thiadmer $
     6.9   */
    6.10  #include <assert.h>
    6.11  #include <ctype.h>
    6.12 @@ -109,21 +109,21 @@
    6.13  static int testsymbols(symbol *root,int level,int testlabs,int testconst);
    6.14  static void destructsymbols(symbol *root,int level);
    6.15  static constvalue *find_constval_byval(constvalue *table,cell val);
    6.16 +static symbol *fetchlab(char *name);
    6.17  static void statement(int *lastindent,int allow_decl);
    6.18 -static void compound(int stmt_sameline);
    6.19 +static void compound(int stmt_sameline,int starttok);
    6.20 +static int test(int label,int parens,int invert);
    6.21  static int doexpr(int comma,int chkeffect,int allowarray,int mark_endexpr,
    6.22                    int *tag,symbol **symptr,int chkfuncresult);
    6.23  static void doassert(void);
    6.24  static void doexit(void);
    6.25 -static void test(int label,int parens,int invert);
    6.26 -static void doif(void);
    6.27 -static void dowhile(void);
    6.28 -static void dodo(void);
    6.29 -static void dofor(void);
    6.30 +static int doif(void);
    6.31 +static int dowhile(void);
    6.32 +static int dodo(void);
    6.33 +static int dofor(void);
    6.34  static void doswitch(void);
    6.35  static void dogoto(void);
    6.36  static void dolabel(void);
    6.37 -static symbol *fetchlab(char *name);
    6.38  static void doreturn(void);
    6.39  static void dobreak(void);
    6.40  static void docont(void);
    6.41 @@ -134,10 +134,17 @@
    6.42  static int *readwhile(void);
    6.43  static void inst_datetime_defines(void);
    6.44  
    6.45 +enum {
    6.46 +  TEST_PLAIN,           /* no parentheses */
    6.47 +  TEST_THEN,            /* '(' <expr> ')' or <expr> 'then' */
    6.48 +  TEST_DO,              /* '(' <expr> ')' or <expr> 'do' */
    6.49 +  TEST_OPT,             /* '(' <expr> ')' or <expr> */
    6.50 +};
    6.51  static int norun      = 0;      /* the compiler never ran */
    6.52 -static int autozero   = 1;      /* if 1 will zero out the variable, if 0 omit the zeroing */ 
    6.53 +static int autozero   = 1;      /* if 1 will zero out the variable, if 0 omit the zeroing */
    6.54  static int lastst     = 0;      /* last executed statement type */
    6.55  static int nestlevel  = 0;      /* number of active (open) compound statements */
    6.56 +static int endlessloop= 0;      /* nesting level of endless loop */
    6.57  static int rettype    = 0;      /* the type that a "return" expression should have */
    6.58  static int skipinput  = 0;      /* number of lines to skip from the first input file */
    6.59  static int optproccall = TRUE;  /* support "procedure call" */
    6.60 @@ -449,9 +456,9 @@
    6.61          pc_printf("Stack/heap size:   %8ld bytes; ", (long)pc_stksize*sizeof(cell));
    6.62          pc_printf("estimated max. usage");
    6.63          if (recursion)
    6.64 -          pc_printf(" is unknown, due to recursion\n");
    6.65 +          pc_printf(": unknown, due to recursion\n");
    6.66          else if ((pc_memflags & suSLEEP_INSTR)!=0)
    6.67 -          pc_printf(" is unknown, due to the \"sleep\" instruction\n");
    6.68 +          pc_printf(": unknown, due to the \"sleep\" instruction\n");
    6.69          else
    6.70            pc_printf("=%ld cells (%ld bytes)\n",stacksize,stacksize*sizeof(cell));
    6.71          pc_printf("Total requirements:%8ld bytes\n", (long)hdrsize+(long)code_idx+(long)glb_declared*sizeof(cell)+(long)pc_stksize*sizeof(cell));
    6.72 @@ -1415,6 +1422,9 @@
    6.73  {
    6.74    int j,k;
    6.75  
    6.76 +  if (sc_status==statSKIP)
    6.77 +    return;
    6.78 +
    6.79    k=0;
    6.80    while (k<litidx){
    6.81      /* should be in the data segment */
    6.82 @@ -1444,7 +1454,7 @@
    6.83  {
    6.84    int i;
    6.85  
    6.86 -  if (count<=0)
    6.87 +  if (sc_status==statSKIP || count<=0)
    6.88      return;
    6.89    assert(curseg==2);
    6.90    defstorage();
    6.91 @@ -2196,6 +2206,24 @@
    6.92            err++;
    6.93          } /* if */
    6.94        } /* for */
    6.95 +      if (numdim>1 && dim[numdim-1]==0) {
    6.96 +        /* also look whether, by any chance, all "counted" final dimensions are
    6.97 +         * the same value; if so, we can store this
    6.98 +         */
    6.99 +        constvalue *ld=lastdim.next;
   6.100 +        int d,match;
   6.101 +        for (d=0; d<dim[numdim-2]; d++) {
   6.102 +          assert(ld!=NULL);
   6.103 +          assert(strtol(ld->name,NULL,16)==d);
   6.104 +          if (d==0)
   6.105 +            match=ld->value;
   6.106 +          else if (match!=ld->value)
   6.107 +            break;
   6.108 +          ld=ld->next;
   6.109 +        } /* for */
   6.110 +        if (d==dim[numdim-2])
   6.111 +          dim[numdim-1]=match;
   6.112 +      } /* if */
   6.113        /* after all arrays have been initalized, we know the (major) dimensions
   6.114         * of the array and we can properly adjust the indirection vectors
   6.115         */
   6.116 @@ -2446,26 +2474,28 @@
   6.117    int symbolline;
   6.118    symbol *sym;
   6.119  
   6.120 -  insert_docstring_separator(); /* see comment in newfunc() */
   6.121 -  tag=pc_addtag(NULL);
   6.122 -  if (lex(&val,&str)!=tSYMBOL)  /* read in (new) token */
   6.123 -    error(20,str);              /* invalid symbol name */
   6.124 -  symbolline=fline;             /* save line where symbol was found */
   6.125 -  strcpy(constname,str);        /* save symbol name */
   6.126 -  needtoken('=');
   6.127 -  constexpr(&val,&exprtag,NULL);/* get value */
   6.128 +  insert_docstring_separator();         /* see comment in newfunc() */
   6.129 +  do {
   6.130 +    tag=pc_addtag(NULL);
   6.131 +    if (lex(&val,&str)!=tSYMBOL)        /* read in (new) token */
   6.132 +      error(20,str);                    /* invalid symbol name */
   6.133 +    symbolline=fline;                   /* save line where symbol was found */
   6.134 +    strcpy(constname,str);              /* save symbol name */
   6.135 +    needtoken('=');
   6.136 +    constexpr(&val,&exprtag,NULL);      /* get value */
   6.137 +    /* add_constant() checks for duplicate definitions */
   6.138 +    if (!matchtag(tag,exprtag,FALSE)) {
   6.139 +      /* temporarily reset the line number to where the symbol was defined */
   6.140 +      int orgfline=fline;
   6.141 +      fline=symbolline;
   6.142 +      error(213);                       /* tagname mismatch */
   6.143 +      fline=orgfline;
   6.144 +    } /* if */
   6.145 +    sym=add_constant(constname,val,vclass,tag);
   6.146 +    if (sym!=NULL)
   6.147 +      sc_attachdocumentation(sym);/* attach any documenation to the constant */
   6.148 +  } while (matchtoken(',')); /* enddo */   /* more? */
   6.149    needtoken(tTERM);
   6.150 -  /* add_constant() checks for duplicate definitions */
   6.151 -  if (!matchtag(tag,exprtag,FALSE)) {
   6.152 -    /* temporarily reset the line number to where the symbol was defined */
   6.153 -    int orgfline=fline;
   6.154 -    fline=symbolline;
   6.155 -    error(213);                 /* tagname mismatch */
   6.156 -    fline=orgfline;
   6.157 -  } /* if */
   6.158 -  sym=add_constant(constname,val,vclass,tag);
   6.159 -  if (sym!=NULL)
   6.160 -    sc_attachdocumentation(sym);/* attach any documenation to the function */
   6.161  }
   6.162  
   6.163  /*  decl_enum   - declare enumerated constants
   6.164 @@ -4597,7 +4627,7 @@
   6.165   */
   6.166  static void statement(int *lastindent,int allow_decl)
   6.167  {
   6.168 -  int tok;
   6.169 +  int tok,save;
   6.170    cell val;
   6.171    char *st;
   6.172  
   6.173 @@ -4650,29 +4680,26 @@
   6.174      } /* if */
   6.175      break;
   6.176    case '{':
   6.177 -    tok=fline;
   6.178 +  case tBEGIN:
   6.179 +    save=fline;
   6.180      if (!matchtoken('}'))       /* {} is the empty statement */
   6.181 -      compound(tok==fline);
   6.182 +      compound(save==fline,tok);
   6.183      /* lastst (for "last statement") does not change */
   6.184      break;
   6.185    case ';':
   6.186      error(36);                  /* empty statement */
   6.187      break;
   6.188    case tIF:
   6.189 -    doif();
   6.190 -    lastst=tIF;
   6.191 +    lastst=doif();
   6.192      break;
   6.193    case tWHILE:
   6.194 -    dowhile();
   6.195 -    lastst=tWHILE;
   6.196 +    lastst=dowhile();
   6.197      break;
   6.198    case tDO:
   6.199 -    dodo();
   6.200 -    lastst=tDO;
   6.201 +    lastst=dodo();
   6.202      break;
   6.203    case tFOR:
   6.204 -    dofor();
   6.205 -    lastst=tFOR;
   6.206 +    lastst=dofor();
   6.207      break;
   6.208    case tSWITCH:
   6.209      doswitch();
   6.210 @@ -4734,23 +4761,24 @@
   6.211    } /* switch */
   6.212  }
   6.213  
   6.214 -static void compound(int stmt_sameline)
   6.215 +static void compound(int stmt_sameline,int starttok)
   6.216  {
   6.217    int indent=-1;
   6.218    cell save_decl=declared;
   6.219    int count_stmt=0;
   6.220    int block_start=fline;  /* save line where the compound block started */
   6.221 +  int endtok;
   6.222  
   6.223    /* if there is more text on this line, we should adjust the statement indent */
   6.224    if (stmt_sameline) {
   6.225      int i;
   6.226      const unsigned char *p=lptr;
   6.227      /* go back to the opening brace */
   6.228 -    while (*p!='{') {
   6.229 +    while (*p!=starttok) {
   6.230        assert(p>pline);
   6.231        p--;
   6.232      } /* while */
   6.233 -    assert(*p=='{');  /* it should be found */
   6.234 +    assert(*p==starttok);  /* it should be found */
   6.235      /* go forward, skipping white-space */
   6.236      p++;
   6.237      while (*p<=' ' && *p!='\0')
   6.238 @@ -4764,13 +4792,14 @@
   6.239          stmtindent++;
   6.240    } /* if */
   6.241  
   6.242 +  endtok=(starttok=='{') ? '}' : tEND;
   6.243    nestlevel+=1;                 /* increase compound statement level */
   6.244 -  while (matchtoken('}')==0){   /* repeat until compound statement is closed */
   6.245 +  while (matchtoken(endtok)==0){/* repeat until compound statement is closed */
   6.246      if (!freading){
   6.247        error(30,block_start);    /* compound block not closed at end of file */
   6.248        break;
   6.249      } else {
   6.250 -      if (count_stmt>0 && (lastst==tRETURN || lastst==tBREAK || lastst==tCONTINUE))
   6.251 +      if (count_stmt>0 && (lastst==tRETURN || lastst==tBREAK || lastst==tCONTINUE || lastst==tENDLESS))
   6.252          error(225);             /* unreachable code */
   6.253        statement(&indent,TRUE);  /* do a statement */
   6.254        count_stmt++;
   6.255 @@ -4864,11 +4893,12 @@
   6.256   *
   6.257   *  Global references: sc_intest (altered, but restored upon termination)
   6.258   */
   6.259 -static void test(int label,int parens,int invert)
   6.260 +static int test(int label,int parens,int invert)
   6.261  {
   6.262    int index,tok;
   6.263    cell cidx;
   6.264    int ident,tag;
   6.265 +  int endtok;
   6.266    cell constval;
   6.267    symbol *sym;
   6.268    int localstaging=FALSE;
   6.269 @@ -4884,8 +4914,15 @@
   6.270  
   6.271    PUSHSTK_I(sc_intest);
   6.272    sc_intest=TRUE;
   6.273 -  if (parens)
   6.274 -    needtoken('(');
   6.275 +  endtok=0;
   6.276 +  if (parens!=TEST_PLAIN) {
   6.277 +    if (matchtoken('('))
   6.278 +      endtok=')';
   6.279 +    else if (parens==TEST_THEN)
   6.280 +      endtok=tTHEN;
   6.281 +    else if (parens==TEST_DO)
   6.282 +      endtok=tDO;
   6.283 +  } /* if */
   6.284    do {
   6.285      stgget(&index,&cidx);       /* mark position (of last expression) in
   6.286                                   * code generator */
   6.287 @@ -4894,17 +4931,19 @@
   6.288      if (tok)
   6.289        markexpr(sEXPR,NULL,0);
   6.290    } while (tok); /* do */
   6.291 -  if (parens)
   6.292 -    needtoken(')');
   6.293 +  if (endtok!=0)
   6.294 +    needtoken(endtok);
   6.295    if (ident==iARRAY || ident==iREFARRAY) {
   6.296      char *ptr=(sym->name!=NULL) ? sym->name : "-unknown-";
   6.297      error(33,ptr);              /* array must be indexed */
   6.298    } /* if */
   6.299    if (ident==iCONSTEXPR) {      /* constant expression */
   6.300 +    int testtype=0;
   6.301      sc_intest=(short)POPSTK_I();/* restore stack */
   6.302      stgdel(index,cidx);
   6.303      if (constval) {             /* code always executed */
   6.304        error(206);               /* redundant test: always non-zero */
   6.305 +      testtype=tENDLESS;
   6.306      } else {
   6.307        error(205);               /* redundant code: never executed */
   6.308        jumplabel(label);
   6.309 @@ -4913,7 +4952,7 @@
   6.310        stgout(0);                /* write "jumplabel" code */
   6.311        stgset(FALSE);            /* stop staging */
   6.312      } /* if */
   6.313 -    return;
   6.314 +    return testtype;
   6.315    } /* if */
   6.316    if (tag!=0 && tag!=pc_addtag("bool"))
   6.317      if (check_userop(lneg,tag,0,1,NULL,&tag))
   6.318 @@ -4929,37 +4968,49 @@
   6.319                                   * assert() when localstaging is set to TRUE) */
   6.320      stgset(FALSE);              /* stop staging */
   6.321    } /* if */
   6.322 +  return 0;
   6.323  }
   6.324  
   6.325 -static void doif(void)
   6.326 +static int doif(void)
   6.327  {
   6.328    int flab1,flab2;
   6.329    int ifindent;
   6.330 +  int lastst_true;
   6.331  
   6.332    ifindent=stmtindent;          /* save the indent of the "if" instruction */
   6.333    flab1=getlabel();             /* get label number for false branch */
   6.334 -  test(flab1,TRUE,FALSE);       /* get expression, branch to flab1 if false */
   6.335 +  test(flab1,TEST_THEN,FALSE);  /* get expression, branch to flab1 if false */
   6.336    statement(NULL,FALSE);        /* if true, do a statement */
   6.337 -  if (matchtoken(tELSE)==0){    /* if...else ? */
   6.338 +  if (!matchtoken(tELSE)) {     /* if...else ? */
   6.339      setlabel(flab1);            /* no, simple if..., print false label */
   6.340    } else {
   6.341 +    lastst_true=lastst;         /* save last statement of the "true" branch */
   6.342      /* to avoid the "dangling else" error, we want a warning if the "else"
   6.343       * has a lower indent than the matching "if" */
   6.344      if (stmtindent<ifindent && sc_tabsize>0)
   6.345        error(217);               /* loose indentation */
   6.346      flab2=getlabel();
   6.347      if ((lastst!=tRETURN) && (lastst!=tGOTO))
   6.348 -      jumplabel(flab2);
   6.349 +      jumplabel(flab2);         /* "true" branch jumps around "else" clause, unless the "true" branch statement already jumped */
   6.350      setlabel(flab1);            /* print false label */
   6.351      statement(NULL,FALSE);      /* do "else" clause */
   6.352      setlabel(flab2);            /* print true label */
   6.353 -  } /* endif */
   6.354 +    /* if both the "true" branch and the "false" branch ended with the same
   6.355 +     * kind of statement, set the last statement id to that kind, rather than
   6.356 +     * to the generic tIF; this allows for better "unreachable code" checking
   6.357 +     */
   6.358 +    if (lastst==lastst_true)
   6.359 +      return lastst;
   6.360 +  } /* if */
   6.361 +  return tIF;
   6.362  }
   6.363  
   6.364 -static void dowhile(void)
   6.365 +static int dowhile(void)
   6.366  {
   6.367    int wq[wqSIZE];               /* allocate local queue */
   6.368 -
   6.369 +  int save_endlessloop,retcode;
   6.370 +
   6.371 +  save_endlessloop=endlessloop;
   6.372    addwhile(wq);                 /* add entry to queue for "break" */
   6.373    setlabel(wq[wqLOOP]);         /* loop label */
   6.374    /* The debugger uses the "break" opcode to be able to "break" out of
   6.375 @@ -4967,21 +5018,27 @@
   6.376     * tiniest loop, set it below the top of the loop
   6.377     */
   6.378    setline(TRUE);
   6.379 -  test(wq[wqEXIT],TRUE,FALSE);  /* branch to wq[wqEXIT] if false */
   6.380 +  endlessloop=test(wq[wqEXIT],TEST_DO,FALSE);/* branch to wq[wqEXIT] if false */
   6.381    statement(NULL,FALSE);        /* if so, do a statement */
   6.382    jumplabel(wq[wqLOOP]);        /* and loop to "while" start */
   6.383    setlabel(wq[wqEXIT]);         /* exit label */
   6.384    delwhile();                   /* delete queue entry */
   6.385 +
   6.386 +  retcode=endlessloop ? tENDLESS : tWHILE;
   6.387 +  endlessloop=save_endlessloop;
   6.388 +  return retcode;
   6.389  }
   6.390  
   6.391  /*
   6.392   *  Note that "continue" will in this case not jump to the top of the loop, but
   6.393   *  to the end: just before the TRUE-or-FALSE testing code.
   6.394   */
   6.395 -static void dodo(void)
   6.396 +static int dodo(void)
   6.397  {
   6.398    int wq[wqSIZE],top;
   6.399 -
   6.400 +  int save_endlessloop,retcode;
   6.401 +
   6.402 +  save_endlessloop=endlessloop;
   6.403    addwhile(wq);           /* see "dowhile" for more info */
   6.404    top=getlabel();         /* make a label first */
   6.405    setlabel(top);          /* loop label */
   6.406 @@ -4989,26 +5046,32 @@
   6.407    needtoken(tWHILE);
   6.408    setlabel(wq[wqLOOP]);   /* "continue" always jumps to WQLOOP. */
   6.409    setline(TRUE);
   6.410 -  test(wq[wqEXIT],TRUE,FALSE);
   6.411 +  endlessloop=test(wq[wqEXIT],TEST_OPT,FALSE);
   6.412    jumplabel(top);
   6.413    setlabel(wq[wqEXIT]);
   6.414    delwhile();
   6.415    needtoken(tTERM);
   6.416 +
   6.417 +  retcode=endlessloop ? tENDLESS : tDO;
   6.418 +  endlessloop=save_endlessloop;
   6.419 +  return retcode;
   6.420  }
   6.421  
   6.422 -static void dofor(void)
   6.423 +static int dofor(void)
   6.424  {
   6.425    int wq[wqSIZE],skiplab;
   6.426    cell save_decl;
   6.427 -  int save_nestlevel,index;
   6.428 +  int save_nestlevel,save_endlessloop;
   6.429 +  int index,endtok;
   6.430    int *ptr;
   6.431  
   6.432    save_decl=declared;
   6.433    save_nestlevel=nestlevel;
   6.434 +  save_endlessloop=endlessloop;
   6.435  
   6.436    addwhile(wq);
   6.437    skiplab=getlabel();
   6.438 -  needtoken('(');
   6.439 +  endtok= matchtoken('(') ? ')' : tDO;
   6.440    if (matchtoken(';')==0) {
   6.441      /* new variable declarations are allowed here */
   6.442      if (matchtoken(tNEW)) {
   6.443 @@ -5016,7 +5079,7 @@
   6.444         * 'compound statement' level of it own.
   6.445         */
   6.446        nestlevel++;
   6.447 -      autozero=1;
   6.448 +	  autozero=1;
   6.449        declloc(FALSE); /* declare local variable */
   6.450      } else {
   6.451        doexpr(TRUE,TRUE,TRUE,TRUE,NULL,NULL,FALSE);  /* expression 1 */
   6.452 @@ -5046,14 +5109,16 @@
   6.453    stgmark(sSTARTREORDER);
   6.454    stgmark((char)(sEXPRSTART+0));    /* mark start of 2nd expression in stage */
   6.455    setlabel(skiplab);                /* jump to this point after 1st expression */
   6.456 -  if (matchtoken(';')==0) {
   6.457 -    test(wq[wqEXIT],FALSE,FALSE);   /* expression 2 (jump to wq[wqEXIT] if false) */
   6.458 +  if (matchtoken(';')) {
   6.459 +    endlessloop=1;
   6.460 +  } else {
   6.461 +    endlessloop=test(wq[wqEXIT],TEST_PLAIN,FALSE);/* expression 2 (jump to wq[wqEXIT] if false) */
   6.462      needtoken(';');
   6.463    } /* if */
   6.464    stgmark((char)(sEXPRSTART+1));    /* mark start of 3th expression in stage */
   6.465 -  if (matchtoken(')')==0) {
   6.466 +  if (!matchtoken(endtok)) {
   6.467      doexpr(TRUE,TRUE,TRUE,TRUE,NULL,NULL,FALSE);    /* expression 3 */
   6.468 -    needtoken(')');
   6.469 +    needtoken(endtok);
   6.470    } /* if */
   6.471    stgmark(sENDREORDER);             /* mark end of reversed evaluation */
   6.472    stgout(index);
   6.473 @@ -5075,6 +5140,10 @@
   6.474      delete_symbols(&loctab,nestlevel,FALSE,TRUE);
   6.475      nestlevel=save_nestlevel;     /* reset 'compound statement' nesting level */
   6.476    } /* if */
   6.477 +
   6.478 +  index=endlessloop ? tENDLESS : tFOR;
   6.479 +  endlessloop=save_endlessloop;
   6.480 +  return index;
   6.481  }
   6.482  
   6.483  /* The switch statement is incompatible with its C sibling:
   6.484 @@ -5092,16 +5161,17 @@
   6.485  static void doswitch(void)
   6.486  {
   6.487    int lbl_table,lbl_exit,lbl_case;
   6.488 -  int tok,swdefault,casecount;
   6.489 +  int swdefault,casecount;
   6.490 +  int tok,endtok;
   6.491    cell val;
   6.492    char *str;
   6.493    constvalue caselist = { NULL, "", 0, 0};   /* case list starts empty */
   6.494    constvalue *cse,*csp;
   6.495    char labelname[sNAMEMAX+1];
   6.496  
   6.497 -  needtoken('(');
   6.498 +  endtok= matchtoken('(') ? ')' : tDO;
   6.499    doexpr(TRUE,FALSE,FALSE,FALSE,NULL,NULL,TRUE);/* evaluate switch expression */
   6.500 -  needtoken(')');
   6.501 +  needtoken(endtok);
   6.502    /* generate the code for the switch statement, the label is the address
   6.503     * of the case table (to be generated later).
   6.504     */
   6.505 @@ -5109,7 +5179,12 @@
   6.506    lbl_case=0;                   /* just to avoid a compiler warning */
   6.507    ffswitch(lbl_table);
   6.508  
   6.509 -  needtoken('{');
   6.510 +  if (matchtoken(tBEGIN)) {
   6.511 +    endtok=tEND;
   6.512 +  } else {
   6.513 +    endtok='}';
   6.514 +    needtoken('{');
   6.515 +  } /* if */
   6.516    lbl_exit=getlabel();          /* get label number for jumping out of switch */
   6.517    swdefault=FALSE;
   6.518    casecount=0;
   6.519 @@ -5195,15 +5270,14 @@
   6.520         */
   6.521        jumplabel(lbl_exit);
   6.522        break;
   6.523 -    case '}':
   6.524 -      /* nothing, but avoid dropping into "default" */
   6.525 -      break;
   6.526      default:
   6.527 -      error(2);
   6.528 -      indent_nowarn=TRUE; /* disable this check */
   6.529 -      tok='}';          /* break out of the loop after an error */
   6.530 +      if (tok!=endtok) {
   6.531 +        error(2);
   6.532 +        indent_nowarn=TRUE; /* disable this check */
   6.533 +        tok=endtok;     /* break out of the loop after an error */
   6.534 +      } /* if */
   6.535      } /* switch */
   6.536 -  } while (tok!='}');
   6.537 +  } while (tok!=endtok);
   6.538  
   6.539    #if !defined NDEBUG
   6.540      /* verify that the case table is sorted (unfortunatly, duplicates can
   6.541 @@ -5238,7 +5312,7 @@
   6.542  
   6.543    if ((sc_debug & sCHKBOUNDS)!=0) {
   6.544      flab1=getlabel();           /* get label number for "OK" branch */
   6.545 -    test(flab1,FALSE,TRUE);     /* get expression and branch to flab1 if true */
   6.546 +    test(flab1,TEST_PLAIN,TRUE);/* get expression and branch to flab1 if true */
   6.547      insert_dbgline(fline);      /* make sure we can find the correct line number */
   6.548      ffabort(xASSERTION);
   6.549      setlabel(flab1);
   6.550 @@ -5260,6 +5334,9 @@
   6.551    cell val;
   6.552    symbol *sym;
   6.553  
   6.554 +  /* if we were inside an endless loop, assume that we jump out of it */
   6.555 +  endlessloop=0;
   6.556 +
   6.557    if (lex(&val,&st)==tSYMBOL) {
   6.558      sym=fetchlab(st);
   6.559      jumplabel((int)sym->addr);
   6.560 @@ -5443,6 +5520,7 @@
   6.561  {
   6.562    int *ptr;
   6.563  
   6.564 +  endlessloop=0;      /* if we were inside an endless loop, we just jumped out */
   6.565    ptr=readwhile();      /* readwhile() gives an error if not in loop */
   6.566    needtoken(tTERM);
   6.567    if (ptr==NULL)
   6.568 @@ -5530,7 +5608,7 @@
   6.569    if (matchtoken('(')) {
   6.570      flabel=getlabel();          /* get label number for "false" branch */
   6.571      pc_docexpr=TRUE;            /* attach expression as a documentation string */
   6.572 -    test(flabel,FALSE,FALSE);   /* get expression, branch to flabel if false */
   6.573 +    test(flabel,TEST_PLAIN,FALSE);/* get expression, branch to flabel if false */
   6.574      pc_docexpr=FALSE;
   6.575      needtoken(')');
   6.576    } else {
     7.1 --- a/sourcepawn/compiler/sc2.c	Sat Aug 19 20:52:42 2006 +0000
     7.2 +++ b/sourcepawn/compiler/sc2.c	Mon Aug 28 15:22:02 2006 +0000
     7.3 @@ -18,7 +18,7 @@
     7.4   *      misrepresented as being the original software.
     7.5   *  3.  This notice may not be removed or altered from any source distribution.
     7.6   *
     7.7 - *  Version: $Id: sc2.c 3590 2006-06-24 14:16:39Z thiadmer $
     7.8 + *  Version: $Id: sc2.c 3636 2006-08-14 15:42:05Z thiadmer $
     7.9   */
    7.10  #include <assert.h>
    7.11  #include <stdio.h>
    7.12 @@ -947,11 +947,27 @@
    7.13          if ((ifstack[iflevel-1] & PARSEMODE)==PARSEMODE) {
    7.14            /* there has been a parse mode already on this level, so skip the rest */
    7.15            ifstack[iflevel-1] |= (char)SKIPMODE;
    7.16 +          /* if we were already skipping this section, allow expressions with
    7.17 +           * undefined symbols; otherwise check the expression to catch errors
    7.18 +           */
    7.19 +          if (tok==tpELSEIF) {
    7.20 +            if (skiplevel==iflevel)
    7.21 +              preproc_expr(&val,NULL);  /* get, but ignore the expression */
    7.22 +            else
    7.23 +              lptr=strchr(lptr,'\0');
    7.24 +          } /* if */
    7.25          } else {
    7.26            /* previous conditions were all FALSE */
    7.27            if (tok==tpELSEIF) {
    7.28 -            /* get new expression */
    7.29 -            preproc_expr(&val,NULL);  /* get value (or 0 on error) */
    7.30 +            /* if we were already skipping this section, allow expressions with
    7.31 +             * undefined symbols; otherwise check the expression to catch errors
    7.32 +             */
    7.33 +            if (skiplevel==iflevel) {
    7.34 +              preproc_expr(&val,NULL);  /* get value (or 0 on error) */
    7.35 +            } else {
    7.36 +              lptr=strchr(lptr,'\0');
    7.37 +              val=0;
    7.38 +            } /* if */
    7.39              ifstack[iflevel-1]=(char)(val ? PARSEMODE : SKIPMODE);
    7.40            } else {
    7.41              /* a simple #else, clear skip mode */
    7.42 @@ -1816,10 +1832,10 @@
    7.43           "*=", "/=", "%=", "+=", "-=", "<<=", ">>>=", ">>=", "&=", "^=", "|=",
    7.44           "||", "&&", "==", "!=", "<=", ">=", "<<", ">>>", ">>", "++", "--",
    7.45           "...", "..", "::",
    7.46 -         "assert", "break", "case", "char", "const", "continue", "default",
    7.47 -         "defined", "do", "else", "enum", "exit", "for", "forward", "goto",
    7.48 +         "assert", "*begin", "break", "case", "char", "const", "continue", "default",
    7.49 +         "defined", "do", "else", "*end", "enum", "exit", "for", "forward", "goto",
    7.50           "if", "native", "new", "decl", "operator", "public", "return", "sizeof",
    7.51 -         "sleep", "state", "static", "stock", "switch", "tagof", "while",
    7.52 +         "sleep", "state", "static", "stock", "switch", "tagof", "*then", "while",
    7.53           "#assert", "#define", "#else", "#elseif", "#emit", "#endif", "#endinput",
    7.54           "#endscript", "#error", "#file", "#if", "#include", "#line", "#pragma",
    7.55           "#tryinclude", "#undef",
     8.1 --- a/sourcepawn/compiler/sc3.c	Sat Aug 19 20:52:42 2006 +0000
     8.2 +++ b/sourcepawn/compiler/sc3.c	Mon Aug 28 15:22:02 2006 +0000
     8.3 @@ -18,7 +18,7 @@
     8.4   *      misrepresented as being the original software.
     8.5   *  3.  This notice may not be removed or altered from any source distribution.
     8.6   *
     8.7 - *  Version: $Id: sc3.c 3598 2006-07-04 13:44:04Z thiadmer $
     8.8 + *  Version: $Id: sc3.c 3635 2006-08-13 12:19:41Z thiadmer $
     8.9   */
    8.10  #include <assert.h>
    8.11  #include <stdio.h>
    8.12 @@ -619,9 +619,26 @@
    8.13    } /* if */
    8.14  }
    8.15  
    8.16 -static cell truemodulus(cell a,cell b)
    8.17 +static cell flooreddiv(cell a,cell b,int return_remainder)
    8.18  {
    8.19 -  return (a % b + b) % b;
    8.20 +  cell q,r;
    8.21 +
    8.22 +  if (b==0) {
    8.23 +    error(29);
    8.24 +    return 0;
    8.25 +  } /* if */
    8.26 +  /* first implement truncated division in a portable way */
    8.27 +  #define IABS(a)       ((a)>=0 ? (a) : (-a))
    8.28 +  q=IABS(a)/IABS(b);
    8.29 +  if ((cell)(a ^ b)<0)
    8.30 +    q=-q;               /* swap sign if either "a" or "b" is negative (but not both) */
    8.31 +  r=a-q*b;              /* calculate the matching remainder */
    8.32 +  /* now "fiddle" with the values to get floored division */
    8.33 +  if (r!=0 && (cell)(r ^ b)<0) {
    8.34 +    q--;
    8.35 +    r+=b;
    8.36 +  } /* if */
    8.37 +  return return_remainder ? r : q;
    8.38  }
    8.39  
    8.40  static cell calc(cell left,void (*oper)(),cell right,char *boolresult)
    8.41 @@ -657,9 +674,9 @@
    8.42    else if (oper==os_mult)
    8.43      return (left * right);
    8.44    else if (oper==os_div)
    8.45 -    return (left - truemodulus(left,right)) / right;
    8.46 +    return flooreddiv(left,right,0);
    8.47    else if (oper==os_mod)
    8.48 -    return truemodulus(left,right);
    8.49 +    return flooreddiv(left,right,1);
    8.50    else
    8.51      error(29);  /* invalid expression, assumed 0 (this should never occur) */
    8.52    return 0;
     9.1 --- a/sourcepawn/compiler/sc4.c	Sat Aug 19 20:52:42 2006 +0000
     9.2 +++ b/sourcepawn/compiler/sc4.c	Mon Aug 28 15:22:02 2006 +0000
     9.3 @@ -18,7 +18,7 @@
     9.4   *      misrepresented as being the original software.
     9.5   *  3.  This notice may not be removed or altered from any source distribution.
     9.6   *
     9.7 - *  Version: $Id: sc4.c 3579 2006-06-06 13:35:29Z thiadmer $
     9.8 + *  Version: $Id: sc4.c 3633 2006-08-11 16:20:18Z thiadmer $
     9.9   */
    9.10  #include <assert.h>
    9.11  #include <ctype.h>
    9.12 @@ -214,7 +214,7 @@
    9.13   */
    9.14  SC_FUNC void begcseg(void)
    9.15  {
    9.16 -  if (curseg!=sIN_CSEG || fcurrent!=fcurseg) {
    9.17 +  if (sc_status!=statSKIP && (curseg!=sIN_CSEG || fcurrent!=fcurseg)) {
    9.18      stgwrite("\n");
    9.19      stgwrite("CODE ");
    9.20      outval(fcurrent,FALSE);
    9.21 @@ -232,7 +232,7 @@
    9.22   */
    9.23  SC_FUNC void begdseg(void)
    9.24  {
    9.25 -  if (curseg!=sIN_DSEG || fcurrent!=fcurseg) {
    9.26 +  if (sc_status!=statSKIP && (curseg!=sIN_DSEG || fcurrent!=fcurseg)) {
    9.27      stgwrite("\n");
    9.28      stgwrite("DATA ");
    9.29      outval(fcurrent,FALSE);
    9.30 @@ -245,6 +245,10 @@
    9.31  
    9.32  SC_FUNC void setline(int chkbounds)
    9.33  {
    9.34 +  if (sc_asmfile) {
    9.35 +    stgwrite("\t; line ");
    9.36 +    outval(fline,TRUE);
    9.37 +  } /* if */
    9.38    if ((sc_debug & sSYMBOLIC)!=0 || chkbounds && (sc_debug & sCHKBOUNDS)!=0) {
    9.39      /* generate a "break" (start statement) opcode rather than a "line" opcode
    9.40       * because earlier versions of Small/Pawn have an incompatible version of the
    10.1 --- a/sourcepawn/compiler/sc5.scp	Sat Aug 19 20:52:42 2006 +0000
    10.2 +++ b/sourcepawn/compiler/sc5.scp	Mon Aug 28 15:22:02 2006 +0000
    10.3 @@ -18,7 +18,7 @@
    10.4   *      misrepresented as being the original software.
    10.5   *  3.  This notice may not be removed or altered from any source distribution.
    10.6   *
    10.7 - *  Version: $Id: sc5.sch 3590 2006-06-24 14:16:39Z thiadmer $
    10.8 + *  Version: $Id: sc5.sch 3633 2006-08-11 16:20:18Z thiadmer $
    10.9   */
   10.10  
   10.11  SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]);
   10.12 @@ -27,13 +27,13 @@
   10.13  /*-*SCPACK start of pair table, do not change or remove this line */
   10.14  unsigned char errstr_table[][2] = {
   10.15    {101,32}, {111,110}, {116,32}, {105,110}, {97,114}, {116,105}, {100,32}, {115,32}, {101,114}, {97,108}, {101,110}, {37,115}, {133,129}, {34,139}, {141,34}, {117,110},
   10.16 -  {110,111}, {114,101}, {115,105}, {121,32}, {97,116}, {111,114}, {97,110}, {32,142}, {109,98}, {115,116}, {41,10}, {100,101}, {109,138}, {101,134}, {98,108}, {140,32},
   10.17 -  {111,108}, {114,97}, {144,130}, {118,137}, {143,99}, {102,164}, {115,121}, {166,152}, {167,160}, {117,115}, {97,32}, {115,146}, {97,158}, {149,32}, {132,161}, {105,134},
   10.18 +  {114,101}, {110,111}, {115,105}, {121,32}, {97,116}, {111,114}, {97,110}, {32,142}, {109,98}, {115,116}, {41,10}, {100,101}, {109,138}, {101,134}, {98,108}, {140,32},
   10.19 +  {111,108}, {114,97}, {145,130}, {118,137}, {143,99}, {102,164}, {115,121}, {166,152}, {167,160}, {117,115}, {97,32}, {115,146}, {97,158}, {149,32}, {132,161}, {105,134},
   10.20    {103,32}, {163,175}, {103,117}, {178,156}, {136,32}, {132,179}, {131,177}, {111,102}, {116,104}, {101,120}, {105,135}, {165,159}, {101,100}, {99,104}, {118,132}, {168,151},
   10.21 -  {105,172}, {190,192}, {155,102}, {174,147}, {183,32}, {109,97}, {116,111}, {99,129}, {101,135}, {181,130}, {98,128}, {115,10}, {112,145}, {153,148}, {44,32}, {40,191},
   10.22 -  {169,130}, {151,10}, {101,10}, {207,154}, {109,208}, {116,97}, {105,99}, {194,131}, {193,128}, {34,32}, {129,32}, {132,97}, {100,105}, {146,122}, {110,32}, {137,32},
   10.23 -  {104,97}, {101,108}, {117,108}, {99,111}, {108,111}, {109,148}, {199,153}, {58,209}, {111,112}, {97,115}, {108,128}, {232,136}, {230,150}, {150,32}, {204,171}, {131,176},
   10.24 -  {212,202}, {102,105}, {119,105}, {185,238}, {109,112}, {116,136}, {165,140}, {197,147}, {102,149}, {111,32}, {131,32}, {213,176}, {110,117}, {115,117}, {118,128}
   10.25 +  {105,172}, {190,192}, {155,102}, {174,147}, {183,32}, {109,97}, {116,111}, {99,129}, {101,135}, {112,144}, {181,130}, {98,128}, {115,10}, {153,148}, {44,32}, {40,191},
   10.26 +  {169,130}, {151,10}, {101,10}, {207,154}, {109,208}, {116,97}, {194,131}, {193,128}, {34,32}, {129,32}, {105,99}, {132,97}, {100,105}, {146,122}, {110,32}, {137,32},
   10.27 +  {104,97}, {101,108}, {117,108}, {99,111}, {108,111}, {109,148}, {199,153}, {58,209}, {111,112}, {97,115}, {108,128}, {232,136}, {230,150}, {150,32}, {201,171}, {131,176},
   10.28 +  {212,203}, {102,105}, {119,105}, {185,238}, {109,112}, {116,136}, {165,140}, {197,147}, {102,149}, {111,32}, {131,32}, {213,176}, {110,117}, {115,117}, {118,128}
   10.29  };
   10.30  /*-*SCPACK end of pair table, do not change or remove this line */
   10.31  
   10.32 @@ -134,96 +134,96 @@
   10.33  #else
   10.34    "\271pect\235\306k\212:\227\316bu\202fo\217\206\216\012",
   10.35    "\201l\223\252s\203g\352\315e\234\202(\255\363\201) c\355f\240\344w ea\275 \042c\351e\042\012",
   10.36 -  "\233cl\333\237\304\252\344c\337\330\324appe\204 \372\252\343\364o\217\206\236ock\012",
   10.37 +  "\233cl\333\237\304\252\344c\337\327\324appe\204 \372\252\343\364o\217\206\236ock\012",
   10.38    "\366\227 \272\242i\364le\234t\274\012",
   10.39 -  "\273\367\242\340\376\265t\313",
   10.40 +  "\273\367\242\340\376\265t\314",
   10.41    "\360a\253gn\235\306 \355\256y\012",
   10.42 -  "\353\224\255c\226\242\312\221\327\274\012",
   10.43 +  "\353\224\255c\226\242\313\220\326\274\012",
   10.44    "\360\252\354\202\363\201; \351\375m\235z\210o\012",
   10.45    "\266\303\335\200(nega\205ve\316z\210\371\255ou\202\304bo\217ds\232",
   10.46    "\266\273\255\233cl\333\214\012",
   10.47 -  "\266out\222d\200\366\313",
   10.48 -  "\266\273c\211l\316\242\252\261add\221s\313",
   10.49 -  "\220 \212tr\223po\203\202(\220 pu\236\326 \366s\232",
   10.50 +  "\266out\222d\200\366\314",
   10.51 +  "\266\273c\211l\316\242\252\261add\220s\314",
   10.52 +  "\221 \212tr\223po\203\202(\221 pu\236\332 \366s\232",
   10.53    "\266\315e\234t; \242\372s\362t\275\012",
   10.54 -  "\042\302a\342t\331c\351\200\360\270\200l\351\202c\351\200\372s\362t\275 \315e\234t\012",
   10.55 +  "\042\302a\342t\330c\351\200\360\270\200l\351\202c\351\200\372s\362t\275 \315e\234t\012",
   10.56    "m\342\205p\352\302a\342t\207\372\042s\362t\275\042\012",
   10.57 -  "\217\327\235\277\012",
   10.58 +  "\217\326\235\277\012",
   10.59    "\203i\205\211iza\237d\224\252\271ce\274\207\233cl\204\235\335\322",
   10.60    "\242\252lab\341\347",
   10.61    "\266\250 nam\200\216\012",
   10.62 -  "\250 \211\221ad\223\327\274\347",
   10.63 +  "\250 \211\220ad\223\326\274\347",
   10.64    "\360l\243u\200(n\201-\354t\232",
   10.65    "\303a\253gn\234\202\360\222\364\352a\253gn\234t\012",
   10.66 -  "\042b\221ak\331\255\042\307t\203ue\331\272ou\202\304\307t\271t\012",
   10.67 +  "\042b\220ak\330\255\042\307t\203ue\330\272ou\202\304\307t\271t\012",
   10.68    "\273head\357\334ff\210\207from pro\306typ\322",
   10.69 -  "\220 \345\275\357\042#if...\042\012",
   10.70 +  "\221 \345\275\357\042#if...\042\012",
   10.71    "\266\275\333ct\264\354t\012",
   10.72    "\266\375bscrip\202(\242\355\303\255\306\371m\226\223\375bscripts)\347",
   10.73    "\266\363\201\316\351\375m\235z\210o\012",
   10.74    "\343\364o\217\206\315e\234\202\242c\344s\235a\202\270\200\212\206\304\361\352(\231\204t\235a\202l\203\200%d\232",
   10.75 -  "\217k\220w\336\334\221c\205v\322",
   10.76 -  "\303\203\233x ou\202\304bo\217d\207(\330\216\232",
   10.77 -  "\303\360\203\233x\235(\330\216\232",
   10.78 -  "\311do\310\242\340\376\252\302a\342\202\243u\200(\311%d\232",
   10.79 -  "\311typ\200mis\345\275 (\311%d\232",
   10.80 +  "\217k\221w\336\334\220c\205v\322",
   10.81 +  "\303\203\233x ou\202\304bo\217d\207(\327\216\232",
   10.82 +  "\303\360\203\233x\235(\327\216\232",
   10.83 +  "\312do\310\242\340\376\252\302a\342\202\243u\200(\312%d\232",
   10.84 +  "\312typ\200mis\345\275 (\312%d\232",
   10.85    "e\364t\223\315e\234t\012",
   10.86    "\266\231r\357(po\253\236\223n\201-\365m\203\224\235\231r\203g\232",
   10.87 -  "\271t\241 \275\333c\365\207\332l\203\322",
   10.88 -  "\354\202\250 \340\207\220 \335\322",
   10.89 -  "dupl\326\224\200\042c\351e\331lab\341 (\243u\200%d\232",
   10.90 -  "\266\341lip\222s\316\303\335\200\272\242k\220wn\012",
   10.91 -  "\266\343\230\203a\237\304cl\351\207speci\361\210\313",
   10.92 +  "\271t\241 \275\333c\365\207\331l\203\322",
   10.93 +  "\354\202\250 \340\207\221 \335\322",
   10.94 +  "dupl\332\224\200\042c\351e\330lab\341 (\243u\200%d\232",
   10.95 +  "\266\341lip\222s\316\303\335\200\272\242k\221wn\012",
   10.96 +  "\266\343\230\203a\237\304cl\351\207speci\361\210\314",
   10.97    "\275\333ct\264\354\202\271ce\274\207r\226g\200f\255pack\235\231r\203g\012",
   10.98 -  "po\222\214\337p\333me\365\207\324\314c\274\200\211l nam\235p\333me\365\313",
   10.99 -  "\306\371m\226\223\273\265t\313",
  10.100 -  "\217k\220w\336\303\335\200(\330\216\232",
  10.101 +  "po\222\214\337p\333me\365\207\324\311c\274\200\211l nam\235p\333me\365\314",
  10.102 +  "\306\371m\226\223\273\265t\314",
  10.103 +  "\217k\221w\336\303\335\200(\327\216\232",
  10.104    "\303\335\310d\371\242\345\275\316\255\233\231\203a\237\303\272\306\371sm\211l\012",
  10.105    "\303\334\234\222\201\207d\371\242\345\275\012",
  10.106    "\266l\203\200\307t\203ua\214\012",
  10.107    "\266r\226g\322",
  10.108 -  "\266\375bscript\316\251\200\042[ ]\331\353\224\225\207\332\305j\255\334\234\222\201\313",
  10.109 +  "\266\375bscript\316\251\200\042[ ]\330\353\224\225\207\331\305j\255\334\234\222\201\314",
  10.110    "m\342\205-\334\234\222\201\337\256y\207\360f\342l\223\203i\205\211iz\274\012",
  10.111 -  "\271ce\274\357\305ximum \374\230\264\304\334\234\222\201\313",
  10.112 +  "\271ce\274\357\305ximum \374\230\264\304\334\234\222\201\314",
  10.113    "\217\345\275\235c\344s\357b\241c\200(\042}\042\232",
  10.114    "\231\204\202\304\273bod\223\362\270ou\202\273head\210\012",
  10.115 -  "\256ys\316\344c\337\301\310\226\206\273\265t\207c\226\242\312pu\236\326 (\330\216\232",
  10.116 -  "\217f\203ish\235\363\332be\370\200\343\364il\264\334\221c\205v\322",
  10.117 -  "dupl\326\224\200\265t; sam\200\311\272p\351s\235tw\326\322",
  10.118 -  "\273\311\367\242\340\376\252\302a\342\202\243u\200(\330\216\232",
  10.119 -  "m\342\205p\352\042#\341se\331\334\221c\205v\310betwe\212 \042#if ... #\212\334f\042\012",
  10.120 -  "\042#\341seif\331\334\221c\205\376f\240\344w\207\355\042#\341se\331\334\221c\205v\322",
  10.121 +  "\256ys\316\344c\337\301\310\226\206\273\265t\207c\226\242\313pu\236\332 (\327\216\232",
  10.122 +  "\217f\203ish\235\363\331be\370\200\343\364il\264\334\220c\205v\322",
  10.123 +  "dupl\332\224\200\265t; sam\200\312\272p\351s\235tw\332\322",
  10.124 +  "\273\312\367\242\340\376\252\302a\342\202\243u\200(\327\216\232",
  10.125 +  "m\342\205p\352\042#\341se\330\334\220c\205v\310betwe\212 \042#if ... #\212\334f\042\012",
  10.126 +  "\042#\341seif\330\334\220c\205\376f\240\344w\207\355\042#\341se\330\334\220c\205v\322",
  10.127    "\374\230\264\304\353\226d\207do\310\242\361\202\270\200\353\224\225\012",
  10.128 -  "\273\221s\342\202\373\304\353\224\225\227 \360\216\012",
  10.129 -  "c\226\242\275\226g\200\314\327\235\353\224\225\313",
  10.130 -  "\273\311\367\201l\223\340\376\252s\203g\352\373(\311%d\232",
  10.131 -  "\273\311\367\242\312\252\221f\210\212c\200\311\255\355\303(\311\216\232",
  10.132 -  "\330c\226\242\312bo\270 \252\221f\210\212c\200\226\206\355\303(\330\216\232",
  10.133 -  "\266\241\214\337\374\230\264\314ci\222\332\372#p\241g\305\012",
  10.134 -  "\241\214\337\374\230\264\370\305\202\211\221ad\223\327\274\012",
  10.135 +  "\273\220s\342\202\373\304\353\224\225\227 \360\216\012",
  10.136 +  "c\226\242\275\226g\200\311\326\235\353\224\225\314",
  10.137 +  "\273\312\367\201l\223\340\376\252s\203g\352\373(\312%d\232",
  10.138 +  "\273\312\367\242\313\252\220f\210\212c\200\312\255\355\303(\312\216\232",
  10.139 +  "\327c\226\242\313bo\270 \252\220f\210\212c\200\226\206\355\303(\327\216\232",
  10.140 +  "\266\241\214\337\374\230\264\311ci\222\331\372#p\241g\305\012",
  10.141 +  "\241\214\337\374\230\264\370\305\202\211\220ad\223\326\274\012",
  10.142    "\241\214\337\374\230\264\375pp\225\202wa\207\242\212\254\274\012",
  10.143 -  "\251\210-\327\235\353\224\255\360\233cl\204\235be\370\200\251\200(\366\227\232",
  10.144 -  "\042\335e\267\331\353\224\255\272\266\332\042\366\331\250\313",
  10.145 -  "\273\311\360\355\303(\311\216\232",
  10.146 -  "#\327\200p\224\365\336\324\231\204\202\362\270 \355\211p\340be\205c \275\333c\365\012",
  10.147 +  "\251\210-\326\235\353\224\255\360\233cl\204\235be\370\200\251\200(\366\227\232",
  10.148 +  "\042\335e\267\330\353\224\255\272\266\331\042\366\330\250\314",
  10.149 +  "\273\312\360\355\303(\312\216\232",
  10.150 +  "#\326\200p\224\365\336\324\231\204\202\362\270 \355\211p\340be\205c \275\333c\365\012",
  10.151    "\203pu\202l\203\200\306\371l\201\260(aft\264\375bs\205tu\214s\232",
  10.152    "\246n\325x \210r\255\372\270\200\363\201\316\255\266\273c\211l\012",
  10.153    "m\211\370m\235UTF-8 \212\343d\203g\316\255c\225rupt\235\361le: \213\012",
  10.154 -  "\273\251\310bo\270 \042\221turn\331\226\206\042\221tur\336<\243ue>\042\012",
  10.155 -  "\203\307\222\231\212\202\221tur\336typ\310(\303& n\201-\256y\232",
  10.156 -  "\217k\220w\336\250\316\255\242\252\354\202\250 \323",
  10.157 +  "\273\251\310bo\270 \042\220turn\330\226\206\042\220tur\336<\243ue>\042\012",
  10.158 +  "\203\307\222\231\212\202\220tur\336typ\310(\303& n\201-\256y\232",
  10.159 +  "\217k\221w\336\250\316\255\242\252\354\202\250 \323",
  10.160    "c\226\242\325k\200\252\373a\207\252\302a\342\202\243u\200f\255\355\203\233x\235\303p\333met\264\323",
  10.161 -  "\251\210-\327\235\353\224\225\207\226\206na\205\376\366\207\367\242\340\376\315e\313",
  10.162 -  "\252\273\255\330\367\201l\223b\341\201\260\306 \252s\203g\352au\306\345\332\323",
  10.163 -  "\315\200\307fl\326t: \201\200\304\270\200\315\310\272\211\221ad\223a\253gn\235\306 a\220\270\264i\364le\234\325\237\323",
  10.164 -  "\220 \315\310\204\200\327\235f\255\277\012",
  10.165 -  "\217k\220w\336au\306\345\201\321",
  10.166 -  "\217k\220w\336\315\200\216 f\255au\306\345\201\321",
  10.167 -  "pu\236\326 \301\310\226\206\344c\337\301\310\367\242\340\376\315\310\323",
  10.168 -  "\315\200\301\310\367\242\312\203i\205\211iz\235\323",
  10.169 -  "pu\236\326 \366\207\367\242\221tur\336\256y\207\323",
  10.170 -  "a\230i\262ou\207\354t; \373ov\210rid\200\272\221qui\221\206\323",
  10.171 -  "\374\230\264\304\265t\207do\310\242\345\275 \327i\214\012",
  10.172 +  "\251\210-\326\235\353\224\225\207\226\206na\205\376\366\207\367\242\340\376\315e\314",
  10.173 +  "\252\273\255\327\367\201l\223b\341\201\260\306 \252s\203g\352au\306\345\331\323",
  10.174 +  "\315\200\307fl\332t: \201\200\304\270\200\315\310\272\211\220ad\223a\253gn\235\306 a\221\270\264i\364le\234\325\237\323",
  10.175 +  "\221 \315\310\204\200\326\235f\255\277\012",
  10.176 +  "\217k\221w\336au\306\345\201\321",
  10.177 +  "\217k\221w\336\315\200\216 f\255au\306\345\201\321",
  10.178 +  "pu\236\332 \301\310\226\206\344c\337\301\310\367\242\340\376\315\310\323",
  10.179 +  "\315\200\301\310\367\242\313\203i\205\211iz\235\323",
  10.180 +  "pu\236\332 \366\207\367\242\220tur\336\256y\207\323",
  10.181 +  "a\230i\262ou\207\354t; \373ov\210rid\200\272\220qui\220\206\323",
  10.182 +  "\374\230\264\304\265t\207do\310\242\345\275 \326i\214\012"
  10.183  #endif
  10.184         };
  10.185  
  10.186 @@ -248,14 +248,14 @@
  10.187  /*110*/  "assertion failed: %s\n",
  10.188  /*111*/  "user error: %s\n",
  10.189  #else
  10.190 -  "c\226\242\221a\206from \361le\347",
  10.191 +  "c\226\242\220a\206from \361le\347",
  10.192    "c\226\242writ\200\306 \361le\347",
  10.193    "t\254\200ov\210f\344w\347",
  10.194 -  "\203\375ff\326i\212\202mem\225y\012",
  10.195 +  "\203\375ff\332i\212\202mem\225y\012",
  10.196    "\266\351se\230l\264\203\231ruc\214\321",
  10.197 -  "\374m\210\326 ov\210f\344w\316\271ce\274\357capacity\012",
  10.198 +  "\374m\210\332 ov\210f\344w\316\271ce\274\357capacity\012",
  10.199    "\343\364il\235scrip\202\271ce\274\207\270\200\305ximum mem\225\223\335\200(%l\206bytes\232",
  10.200 -  "\306\371m\226\223\210r\255messag\310\332\201\200l\203\322",
  10.201 +  "\306\371m\226\223\210r\255messag\310\331\201\200l\203\322",
  10.202    "\343\233pag\200\305pp\357\361\352\242fo\217d\012",
  10.203    "\266p\224h\347",
  10.204    "\351s\210\237fail\274: \213\012",
  10.205 @@ -303,42 +303,42 @@
  10.206  /*235*/  "public function lacks forward declaration (symbol \"%s\")\n",
  10.207  /*236*/  "unknown parameter in substitution (incorrect #define pattern)\n"
  10.208  #else
  10.209 -  "\277 \272tr\244\224\235\306 %\206\275\333c\365\313",
  10.210 -  "\221\327i\237\304\354t/\305cr\371\323",
  10.211 -  "\374\230\264\304\265t\207do\310\242\345\275 \327i\214\012",
  10.212 +  "\277 \272tr\244\224\235\306 %\206\275\333c\365\314",
  10.213 +  "\220\326i\237\304\354t/\305cr\371\323",
  10.214 +  "\374\230\264\304\265t\207do\310\242\345\275 \326i\214\012",
  10.215    "\250 \272nev\264\251\274\347",
  10.216    "\250 \272a\253gn\235\252\243u\200\270a\202\272nev\264\251\274\347",
  10.217 -  "\221d\217d\226\202\343\233: \354\202\363\332\272z\210o\012",
  10.218 -  "\221d\217d\226\202te\231: \354\202\363\332\272n\201-z\210o\012",
  10.219 -  "\217k\220w\336#p\241g\305\012",
  10.220 -  "\273\362\270 \373\221s\342\202\251\235be\370\200\327i\214\316\370c\357\221p\204s\322",
  10.221 -  "\366\227 sho\342\206\221tur\336\252\243u\322",
  10.222 +  "\220d\217d\226\202\343\233: \354\202\363\331\272z\210o\012",
  10.223 +  "\220d\217d\226\202te\231: \354\202\363\331\272n\201-z\210o\012",
  10.224 +  "\217k\221w\336#p\241g\305\012",
  10.225 +  "\273\362\270 \373\220s\342\202\251\235be\370\200\326i\214\316\370c\357\220p\204s\322",
  10.226 +  "\366\227 sho\342\206\220tur\336\252\243u\322",
  10.227    "po\253\236\200\251\200\304\250 be\370\200\203i\205\211iza\214\347",
  10.228    "po\253\236\223\217\203t\212\233\206a\253gn\234t\012",
  10.229    "po\253\236\223\217\203t\212\233\206bit\362s\200\353a\214\012",
  10.230    "\373mis\345\275\012",
  10.231 -  "po\253\236\223\252\042\346\331\303\311wa\207\203t\212\233d\347",
  10.232 -  "\363\332\340\207\220 effect\012",
  10.233 +  "po\253\236\223\252\042\346\330\303\312wa\207\203t\212\233d\347",
  10.234 +  "\363\331\340\207\221 effect\012",
  10.235    "ne\231\235\343m\234t\012",
  10.236    "\344os\200\203d\212\325\214\012",
  10.237 -  "\240\206\231y\352pro\306typ\310\251\235\362\270 \350\214\337sem\326\240umn\313",
  10.238 -  "\344c\337\330\216 s\340dow\207\252\330a\202\252\314c\274\357lev\341\012",
  10.239 -  "\363\332\362\270 \373ov\210rid\200\324appe\204 betwe\212 p\204\212\270ese\313",
  10.240 +  "\240\206\231y\352pro\306typ\310\251\235\362\270 \350\214\337sem\332\240umn\314",
  10.241 +  "\344c\337\327\216 s\340dow\207\252\327a\202\252\311c\274\357lev\341\012",
  10.242 +  "\363\331\362\270 \373ov\210rid\200\324appe\204 betwe\212 p\204\212\270ese\314",
  10.243    "lab\341 nam\200\216 s\340dow\207\373nam\322",
  10.244 -  "\374\230\264\304\334git\207\271ce\274\207\241\214\337\374\230\264\314ci\222\201\012",
  10.245 -  "\221d\217d\226\202\042\335e\267\042: \311\335\200\272\211way\2071 \323",
  10.246 -  "\203\233\365m\203\224\200\303\335\200\372\042\335e\267\331\363\332\323",
  10.247 -  "\217\221a\275\254\200\343\233\012",
  10.248 -  "\252\330\272a\253gn\235\306 its\341f \323",
  10.249 -  "m\225\200\203i\205\211l\210\207\270\355\212um \361\341d\313",
  10.250 +  "\374\230\264\304\334git\207\271ce\274\207\241\214\337\374\230\264\311ci\222\201\012",
  10.251 +  "\220d\217d\226\202\042\335e\267\042: \312\335\200\272\211way\2071 \323",
  10.252 +  "\203\233\365m\203\224\200\303\335\200\372\042\335e\267\330\363\331\323",
  10.253 +  "\217\220a\275\254\200\343\233\012",
  10.254 +  "\252\327\272a\253gn\235\306 its\341f \323",
  10.255 +  "m\225\200\203i\205\211l\210\207\270\355\212um \361\341d\314",
  10.256    "l\212g\270 \304\203i\205\211l\264\271ce\274\207\335\200\304\270\200\212um \361\341d\012",
  10.257    "\203\233x \373mis\345\275 \323",
  10.258 -  "\220 i\364le\234\325\237f\255\315\200\216 \372\366\227\316\220 f\211l-back\012",
  10.259 -  "\315\200specif\326a\237\332\370w\204\206\233cl\333\237\272ig\220\221d\012",
  10.260 +  "\221 i\364le\234\325\237f\255\315\200\216 \372\366\227\316\221 f\211l-back\012",
  10.261 +  "\315\200specif\332a\237\331\370w\204\206\233cl\333\237\272ig\221\220d\012",
  10.262    "outpu\202\361\352\272writt\212\316bu\202\362\270 \343\364ac\202\212\343d\357\334s\254\274\012",
  10.263 -  "\315\200\330\216 s\340dow\207\252g\344b\337\301\322",
  10.264 -  "\273\272\233pr\326\224\235\317) \213\012",
  10.265 -  "pu\236\326 \273lack\207\370w\204\206\233cl\333\237\323",
  10.266 -  "\217k\220w\336p\333met\264\372\375bs\205tu\237(\203c\225\221c\202#\327\200p\224\365n\232"
  10.267 +  "\315\200\327\216 s\340dow\207\252g\344b\337\301\322",
  10.268 +  "\273\272\233\311c\224\235\317) \213\012",
  10.269 +  "pu\236\332 \273lack\207\370w\204\206\233cl\333\237\323",
  10.270 +  "\217k\221w\336p\333met\264\372\375bs\205tu\237(\203c\225\220c\202#\326\200p\224\365n\232"
  10.271  #endif
  10.272         };
    11.1 --- a/sourcepawn/compiler/sc6.c	Sat Aug 19 20:52:42 2006 +0000
    11.2 +++ b/sourcepawn/compiler/sc6.c	Mon Aug 28 15:22:02 2006 +0000
    11.3 @@ -18,7 +18,7 @@
    11.4   *      misrepresented as being the original software.
    11.5   *  3.  This notice may not be removed or altered from any source distribution.
    11.6   *
    11.7 - *  Version: $Id: sc6.c 3579 2006-06-06 13:35:29Z thiadmer $
    11.8 + *  Version: $Id: sc6.c 3633 2006-08-11 16:20:18Z thiadmer $
    11.9   */
   11.10  #include <assert.h>
   11.11  #include <stdio.h>
   11.12 @@ -670,7 +670,7 @@
   11.13    symbol *sym, **nativelist;
   11.14    constvalue *constptr;
   11.15    cell mainaddr;
   11.16 -  char nullchar = 0;
   11.17 +  char nullchar;
   11.18  
   11.19    /* if compression failed, restart the assembly with compaction switched off */
   11.20    if (setjmp(compact_err)!=0) {
   11.21 @@ -785,8 +785,9 @@
   11.22    pc_writebin(fout,&hdr,sizeof hdr);
   11.23  
   11.24    /* dump zeros up to the rest of the header, so that we can easily "seek" */
   11.25 +  nullchar='\0';
   11.26    for (nameofs=sizeof hdr; nameofs<hdr.cod; nameofs++)
   11.27 -    pc_writebin(fout, &nullchar, 1);
   11.28 +    pc_writebin(fout,&nullchar,1);
   11.29    nameofs=hdr.nametable+sizeof(int16_t);
   11.30  
   11.31    /* write the public functions table */
    12.1 --- a/sourcepawn/compiler/sci18n.c	Sat Aug 19 20:52:42 2006 +0000
    12.2 +++ b/sourcepawn/compiler/sci18n.c	Mon Aug 28 15:22:02 2006 +0000
    12.3 @@ -30,7 +30,7 @@
    12.4   *      misrepresented as being the original software.
    12.5   *  3.  This notice may not be removed or altered from any source distribution.
    12.6   *
    12.7 - *  Version: $Id: CODEPAGE.C,v 1.0 2004-02-18 12:13:04+01 thiadmer Exp thiadmer $
    12.8 + *  Version: $Id: sci18n.c 3612 2006-07-22 09:59:46Z thiadmer $
    12.9   */
   12.10  #include <assert.h>
   12.11  #include <stdio.h>
    13.1 --- a/sourcepawn/compiler/sclist.c	Sat Aug 19 20:52:42 2006 +0000
    13.2 +++ b/sourcepawn/compiler/sclist.c	Mon Aug 28 15:22:02 2006 +0000
    13.3 @@ -2,7 +2,9 @@
    13.4   *
    13.5   *  o  Name list (aliases)
    13.6   *  o  Include path list
    13.7 - *  o  Macro defintions (text substitutions)
    13.8 + *  o  Macro definitions (text substitutions)
    13.9 + *  o  Documentation tags and automatic listings
   13.10 + *  o  Debug strings
   13.11   *
   13.12   *  Copyright (c) ITB CompuPhase, 2001-2006
   13.13   *
   13.14 @@ -22,7 +24,7 @@
   13.15   *      misrepresented as being the original software.
   13.16   *  3.  This notice may not be removed or altered from any source distribution.
   13.17   *
   13.18 - *  Version: $Id: sclist.c 3579 2006-06-06 13:35:29Z thiadmer $
   13.19 + *  Version: $Id: sclist.c 3633 2006-08-11 16:20:18Z thiadmer $
   13.20   */
   13.21  #include <assert.h>
   13.22  #include <limits.h>
    14.1 --- a/sourcepawn/compiler/scmemfil.c	Sat Aug 19 20:52:42 2006 +0000
    14.2 +++ b/sourcepawn/compiler/scmemfil.c	Mon Aug 28 15:22:02 2006 +0000
    14.3 @@ -31,12 +31,15 @@
    14.4  #include <string.h>
    14.5  #include "memfile.h"
    14.6  
    14.7 +#if defined FORTIFY
    14.8 +  #include <alloc/fortify.h>
    14.9 +#endif
   14.10  typedef memfile_t MEMFILE;
   14.11  #define tMEMFILE  1
   14.12  
   14.13  #include "sc.h"
   14.14  
   14.15 -MEMFILE *mfcreate(char *filename)
   14.16 +MEMFILE *mfcreate(const char *filename)
   14.17  {
   14.18    return memfile_creat(filename, 4096);
   14.19  }
   14.20 @@ -64,7 +67,7 @@
   14.21    return okay;
   14.22  }
   14.23  
   14.24 -long mflength(MEMFILE *mf)
   14.25 +long mflength(const MEMFILE *mf)
   14.26  {
   14.27    return mf->usedoffs;
   14.28  }
   14.29 @@ -105,7 +108,7 @@
   14.30    return offset;
   14.31  }
   14.32  
   14.33 -unsigned int mfwrite(MEMFILE *mf,unsigned char *buffer,unsigned int size)
   14.34 +unsigned int mfwrite(MEMFILE *mf,const unsigned char *buffer,unsigned int size)
   14.35  {
   14.36    return (memfile_write(mf, buffer, size) ? size : 0);
   14.37  }
   14.38 @@ -152,7 +155,7 @@
   14.39    return string;
   14.40  }
   14.41  
   14.42 -int mfputs(MEMFILE *mf,char *string)
   14.43 +int mfputs(MEMFILE *mf,const char *string)
   14.44  {
   14.45    unsigned int written,length;
   14.46  
    15.1 --- a/sourcepawn/compiler/scvars.c	Sat Aug 19 20:52:42 2006 +0000
    15.2 +++ b/sourcepawn/compiler/scvars.c	Mon Aug 28 15:22:02 2006 +0000
    15.3 @@ -20,7 +20,7 @@
    15.4   *      misrepresented as being the original software.
    15.5   *  3.  This notice may not be removed or altered from any source distribution.
    15.6   *
    15.7 - *  Version: $Id: scvars.c 3577 2006-06-02 16:22:52Z thiadmer $
    15.8 + *  Version: $Id: scvars.c 3633 2006-08-11 16:20:18Z thiadmer $
    15.9   */
   15.10  #include <stdio.h>
   15.11  #include <stdlib.h>     /* for _MAX_PATH */
    16.1 --- a/sourcepawn/compiler/svnrev.h	Sat Aug 19 20:52:42 2006 +0000
    16.2 +++ b/sourcepawn/compiler/svnrev.h	Mon Aug 28 15:22:02 2006 +0000
    16.3 @@ -1,9 +1,9 @@
    16.4  #define SMC_VERSION		1
    16.5  #define SMC_REVISION	0
    16.6  #define SMC_BUILD		1
    16.7 -#define SMC_VERSTRING	"1.0.1.3599"
    16.8 +#define SMC_VERSTRING	"1.0.1.3636"
    16.9  
   16.10 -#define SVN_REV		3599
   16.11 -#define SVN_REVSTR	"3599"
   16.12 -#define SVN_REVDATE	"2006-07-05"
   16.13 -#define SVN_REVSTAMP	20060705L
   16.14 +#define SVN_REV		3636
   16.15 +#define SVN_REVSTR	"3636"
   16.16 +#define SVN_REVDATE	"2006-08-14"
   16.17 +#define SVN_REVSTAMP	20060814L