Browse Source

* more ansistring fixes

peter 27 years ago
parent
commit
85726fcb35
9 changed files with 258 additions and 297 deletions
  1. 15 60
      compiler/cg386add.pas
  2. 16 23
      compiler/cg386cnv.pas
  3. 6 3
      compiler/cg386mem.pas
  4. 5 2
      compiler/htypechk.pas
  5. 1 0
      compiler/msgidx.inc
  6. 175 173
      compiler/msgtxt.inc
  7. 18 30
      compiler/tcadd.pas
  8. 17 4
      compiler/tccon.pas
  9. 5 2
      compiler/tcld.pas

+ 15 - 60
compiler/cg386add.pas

@@ -152,19 +152,9 @@ implementation
                         { push the still used registers }
                         pushusedregisters(pushedregs,$ff);
                         { push data }
-                        case p^.right^.location.loc of
-                          LOC_REFERENCE,LOC_MEM:
-                            emit_push_mem(p^.right^.location.reference);
-                          LOC_REGISTER,LOC_CREGISTER:
-                            exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.right^.location.register)));
-                        end;
-                        case p^.left^.location.loc of
-                          LOC_REFERENCE,LOC_MEM:
-                            emit_push_mem(p^.left^.location.reference);
-                          LOC_REGISTER,LOC_CREGISTER:
-                            exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.left^.location.register)));
-                        end;
-                        emitcall('FPC_ANSICAT',true);
+                        emit_push_loc(p^.right^.location);
+                        emit_push_loc(p^.left^.location);
+                        emitcall('FPC_ANSISTR_CONCAT',true);
                         unused:=savedunused;
                         p^.location.register:=getexplicitregister32(R_EAX);
                         p^.location.loc:=LOC_REGISTER;
@@ -214,7 +204,7 @@ implementation
                           LOC_REGISTER,LOC_CREGISTER:
                             exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.left^.location.register)));
                         end;
-                        emitcall('FPC_ANSICOMPARE',true);
+                        emitcall('FPC_ANSISTR_COMPARE',true);
                         emit_reg_reg(A_OR,S_L,R_EAX,R_EAX);
                         popusedregisters(pushedregs);
                         maybe_loadesi;
@@ -258,50 +248,12 @@ implementation
 
                         { on the right we do not need the register anymore too }
                         del_reference(p^.right^.location.reference);
-                        {
-                        if p^.right^.resulttype^.deftype=orddef then
-                         begin
-                           pushusedregisters(pushedregs,$ff);
-                           exprasmlist^.concat(new(pai386,op_ref_reg(
-                              A_LEA,S_L,newreference(p^.left^.location.reference),R_EDI)));
-                           exprasmlist^.concat(new(pai386,op_reg_reg(
-                              A_XOR,S_L,R_EBX,R_EBX)));
-                           reset_reference(href);
-                           href.base:=R_EDI;
-                           exprasmlist^.concat(new(pai386,op_ref_reg(
-                              A_MOV,S_B,newreference(href),R_BL)));
-                           exprasmlist^.concat(new(pai386,op_reg(
-                              A_INC,S_L,R_EBX)));
-                           exprasmlist^.concat(new(pai386,op_reg_ref(
-                              A_MOV,S_B,R_BL,newreference(href))));
-                           href.index:=R_EBX;
-                           if p^.right^.treetype=ordconstn then
-                             exprasmlist^.concat(new(pai386,op_const_ref(
-                                A_MOV,S_L,p^.right^.value,newreference(href))))
-                           else
-                            begin
-                              if p^.right^.location.loc in [LOC_CREGISTER,LOC_REGISTER] then
-                               exprasmlist^.concat(new(pai386,op_reg_ref(
-                                 A_MOV,S_B,p^.right^.location.register,newreference(href))))
-                              else
-                               begin
-                                 exprasmlist^.concat(new(pai386,op_ref_reg(
-                                   A_MOV,S_L,newreference(p^.right^.location.reference),R_EAX)));
-                                 exprasmlist^.concat(new(pai386,op_reg_ref(
-                                   A_MOV,S_B,R_AL,newreference(href))));
-                               end;
-                            end;
-                           popusedregisters(pushedregs);
-                         end
-                        else }
-                         begin
-                           pushusedregisters(pushedregs,$ff);
-                           emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
-                           emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
-                           emitcall('FPC_STRCONCAT',true);
-                           maybe_loadesi;
-                           popusedregisters(pushedregs);
-                         end;
+                        pushusedregisters(pushedregs,$ff);
+                        emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
+                        emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
+                        emitcall('FPC_SHORTSTR_CONCAT',true);
+                        maybe_loadesi;
+                        popusedregisters(pushedregs);
 
                         set_location(p^.location,p^.left^.location);
                         ungetiftemp(p^.right^.location.reference);
@@ -341,7 +293,7 @@ implementation
                              secondpass(p^.right);
                              del_reference(p^.right^.location.reference);
                              emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
-                             emitcall('FPC_STRCMP',true);
+                             emitcall('FPC_SHORTSTR_COMPARE',true);
                              maybe_loadesi;
                              popusedregisters(pushedregs);
                           end;
@@ -1406,7 +1358,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.26  1998-11-16 16:17:16  peter
+  Revision 1.27  1998-11-17 00:36:38  peter
+    * more ansistring fixes
+
+  Revision 1.26  1998/11/16 16:17:16  peter
     * fixed ansistring temp which forgot a reset
 
   Revision 1.25  1998/11/16 15:35:35  peter

+ 16 - 23
compiler/cg386cnv.pas

@@ -426,7 +426,7 @@ implementation
               end;
 
             st_longstring:
-              case pstringdef(p^.left)^.string_typ of
+              case pstringdef(p^.left^.resulttype)^.string_typ of
                  st_shortstring:
                    begin
                       {!!!!!!!}
@@ -445,25 +445,15 @@ implementation
               end;
 
             st_ansistring:
-              case pstringdef(p^.left)^.string_typ of
+              case pstringdef(p^.left^.resulttype)^.string_typ of
                  st_shortstring:
                    begin
-                      pushusedregisters(pushed,$ff);
                       gettempofsizereference(p^.resulttype^.size,p^.location.reference);
-                      emitpushreferenceaddr(exprasmlist,p^.location.reference);
-                      case p^.left^.location.loc of
-                         LOC_REGISTER,LOC_CREGISTER:
-                           begin
-                              exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.left^.location.register)));
-                              ungetregister32(p^.left^.location.register);
-                           end;
-                         LOC_REFERENCE,LOC_MEM:
-                           begin
-                              emit_push_mem(p^.left^.location.reference);
-                              del_reference(p^.left^.location.reference);
-                           end;
-                      end;
-                      emitcall('FPC_ANSI_TO_SHORTSTRING',true);
+                      exprasmlist^.concat(new(pai386,op_const_ref(A_MOV,S_L,0,newreference(p^.location.reference))));
+                      pushusedregisters(pushed,$ff);
+                      emit_push_lea_loc(p^.left^.location);
+                      emit_push_lea_loc(p^.location);
+                      emitcall('FPC_SHORTSTR_TO_ANSISTR',true);
                       maybe_loadesi;
                       popusedregisters(pushed);
                    end;
@@ -480,7 +470,7 @@ implementation
               end;
 
             st_widestring:
-              case pstringdef(p^.left)^.string_typ of
+              case pstringdef(p^.left^.resulttype)^.string_typ of
                  st_shortstring:
                    begin
                       {!!!!!!!}
@@ -621,9 +611,9 @@ implementation
                {temptoremove^.concat(new(ptemptodestroy,init(p^.location.reference,p^.resulttype)));}
                exprasmlist^.concat(new(pai386,op_const_ref(A_MOV,S_L,0,newreference(p^.location.reference))));
                pushusedregisters(pushed,$ff);
-               emit_push_loc(p^.left^.location);
+               emit_pushw_loc(p^.left^.location);
                emitpushreferenceaddr(exprasmlist,p^.location.reference);
-               emitcall('FPC_CHAR2ANSI',true);
+               emitcall('FPC_CHAR_TO_ANSISTR',true);
                popusedregisters(pushed);
                maybe_loadesi;
              end;
@@ -1099,7 +1089,7 @@ implementation
                      end;
                 end;
                 emitpushreferenceaddr(exprasmlist,p^.location.reference);
-                emitcall('FPC_PCHAR_TO_STR',true);
+                emitcall('FPC_PCHAR_TO_SHORTSTR',true);
                 maybe_loadesi;
                 popusedregisters(pushed);
              end;
@@ -1122,7 +1112,7 @@ implementation
                      end;
                 end;
                 emitpushreferenceaddr(exprasmlist,p^.location.reference);
-                emitcall('FPC_PCHAR_TO_ANSISTRING',true);
+                emitcall('FPC_PCHAR_TO_ANSISTR',true);
                 maybe_loadesi;
                 popusedregisters(pushed);
              end;
@@ -1307,7 +1297,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.32  1998-11-16 15:35:38  peter
+  Revision 1.33  1998-11-17 00:36:39  peter
+    * more ansistring fixes
+
+  Revision 1.32  1998/11/16 15:35:38  peter
     * rename laod/copystring -> load/copyshortstring
     * fixed int-bool cnv bug
     + char-ansistring conversion

+ 6 - 3
compiler/cg386mem.pas

@@ -377,7 +377,7 @@ implementation
                      begin
                         pushusedregisters(pushed,$ff);
                         emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
-                        emitcall('FPC_UNIQUE_ANSISTRING',true);
+                        emitcall('FPC_ANSISTR_UNIQUE',true);
                         maybe_loadesi;
                         popusedregisters(pushed);
                      end;
@@ -388,7 +388,7 @@ implementation
                      begin
                         pushusedregisters(pushed,$ff);
                         emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
-                        emitcall('FPC_UNIQUE_WIDESTRING',true);
+                        emitcall('FPC_WIDESTR_UNIQUE',true);
                         maybe_loadesi;
                         popusedregisters(pushed);
                      end;
@@ -702,7 +702,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.17  1998-11-16 15:35:09  pierre
+  Revision 1.18  1998-11-17 00:36:40  peter
+    * more ansistring fixes
+
+  Revision 1.17  1998/11/16 15:35:09  pierre
    * added error for with if different segment
 
   Revision 1.16  1998/10/21 11:44:42  florian

+ 5 - 2
compiler/htypechk.pas

@@ -169,7 +169,7 @@ implementation
                             end;
                    orddef : begin
                             { char to string}
-                              if is_equal(def_from,cchardef) then
+                              if is_char(def_from) then
                                begin
                                  doconv:=tc_char_to_string;
                                  b:=true;
@@ -675,7 +675,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.7  1998-10-14 13:33:24  peter
+  Revision 1.8  1998-11-17 00:36:42  peter
+    * more ansistring fixes
+
+  Revision 1.7  1998/10/14 13:33:24  peter
     * fixed small typo
 
   Revision 1.6  1998/10/14 12:53:38  peter

+ 1 - 0
compiler/msgidx.inc

@@ -81,6 +81,7 @@ type tmsgconst=(
   parser_e_header_different_var_names,
   parser_n_duplicate_enum,
   parser_n_interface_name_diff_implementation_name,
+  parser_e_no_with_for_variable_in_other_segments,
   parser_e_too_much_lexlevel,
   parser_e_range_check_error,
   parser_w_range_check_error,

+ 175 - 173
compiler/msgtxt.inc

@@ -82,362 +82,364 @@ const msgtxt : array[0..00094,1..240] of char=(
   '> $3'#000+
   'N_only values can be jumped over in enumeration types'#000+
   'N_Interface and implementation names are diffe','rent !'#000+
+  'E_With can not be used for variables in a different segment'#000+
   'E_function nesting > 31'#000+
   'E_range check error while evaluating constants'#000+
   'W_range check error while evaluating constants'#000+
   'E_duplicate case label'#000+
-  'E_typed constants of classes are not allowed'#000+
-  'E_functions variables of overloaded functions a','re not allowed'#000+
+  'E_typed constants of classes are',' not allowed'#000+
+  'E_functions variables of overloaded functions are not allowed'#000+
   'E_string length must be a value from 1 to 255'#000+
   'W_use extended syntax of DISPOSE and NEW to generate instances of obje'+
   'cts'#000+
   'E_class identifier expected'#000+
-  'E_type identifier not allowed here'#000+
+  'E_type identifier',' not allowed here'#000+
   'E_method identifier expected'#000+
-  'E_function he','ader doesn'#039't match any method of this class'#000+
+  'E_function header doesn'#039't match any method of this class'#000+
   'P_procedure/function $1'#000+
   'E_Illegal floating point constant'#000+
   'E_FAIL can be used in constructors only'#000+
   'E_Destructors can'#039't have parameters'#000+
-  'E_Only class methods can be referred with class references'#000+
-  'E_O','nly class methods can be accessed in class methods'#000+
+  'E_','Only class methods can be referred with class references'#000+
+  'E_Only class methods can be accessed in class methods'#000+
   'E_Constant and CASE types do not match'#000+
   'E_The symbol can'#039't be exported from a library'#000+
   'W_A inherited method is hidden by $1'#000+
-  'E_There is no method in an ancestor class to be overridden: $1'#000+
-  'E_No',' member is provided to access property'#000+
+  'E_There',' is no method in an ancestor class to be overridden: $1'#000+
+  'E_No member is provided to access property'#000+
   'W_Stored prorperty directive is not yet implemented'#000+
   'E_Illegal symbol for property access'#000+
-  'E_Cannot access a protected field of an object here'#000+
+  'E_Cannot access a protected field of an object here'#000,+
   'E_Cannot access a private field of an object here'#000+
-  'W_overload','ed of virtual method must be virtual: $1'#000+
+  'W_overloaded of virtual method must be virtual: $1'#000+
   'E_overloaded methods which are virtual must have the same return type:'+
   ' $1'#000+
   'E_EXPORT declared functions can'#039't be nested'#000+
-  'E_methods can'#039't be EXPORTed'#000+
+  'E_methods can'#039't be EX','PORTed'#000+
   'E_call by var parameters have to match exactly'#000+
-  'E_Clas','s isn'#039't a parent class of the current class'#000+
+  'E_Class isn'#039't a parent class of the current class'#000+
   'E_SELF is only allowed in methods'#000+
   'E_methods can be only in other methods called direct with type identif'+
   'ier of the class'#000+
-  'E_Illegal use of '#039':'#039#000+
-  'E_range check error in set constructor or duplicate se','t element'#000+
+  'E_Illegal use o','f '#039':'#039#000+
+  'E_range check error in set constructor or duplicate set element'#000+
   'E_Pointer to object expected'#000+
   'E_Expression must be constructor call'#000+
   'E_Expression must be destructor call'#000+
   'E_Illegal order of record elements'#000+
-  'E_Expression type must be class or record type'#000+
-  'E_Functions with void return value can'#039't ret','urn any value'#000+
+  'E_Expression type must be class',' or record type'#000+
+  'E_Functions with void return value can'#039't return any value'#000+
   'E_constructors and destructors must be methods'#000+
   'E_Operator is not overloaded'#000+
   'E_Re-raise isn'#039't possible there'#000+
-  'E_The extended syntax of new or dispose isn'#039't allowed for a class'#000+
-  'E_Assembler incompatible with function return value'#000,+
+  'E_The extended syntax of new or dispose isn'#039't allowed for ','a clas'+
+  's'#000+
+  'E_Assembler incompatible with function return value'#000+
   'E_Procedure overloading is switched off'#000+
   'E_It is not possible to overload this operator (overload = instead)'#000+
   'E_Comparative operator must return a boolean value'#000+
-  'E_Only virtual methods can be abstract'#000+
+  'E_Only virtual method','s can be abstract'#000+
   'F_Use of unsupported feature!'#000+
-  'E_The mix of',' CLASSES and OBJECTS isn'#039't allowed'#000+
+  'E_The mix of CLASSES and OBJECTS isn'#039't allowed'#000+
   'W_Unknown procedure directive had to be ignored: $1'#000+
   'E_absolute can only be associated to ONE variable'#000+
-  'E_absolute can only be associated a var or const'#000+
-  'E_Abtract methods shouldn'#039't have any definition (with ','function b'+
-  'ody)'#000+
+  'E_absolute can only be associated a var or ','const'#000+
+  'E_Abtract methods shouldn'#039't have any definition (with function bod'+
+  'y)'#000+
   'E_This overloaded function can'#039't be local (must be exported)'#000+
   'W_Virtual methods are used without a constructor in $1'#000+
   'M_Macro defined: $1'#000+
   'M_Macro undefined: $1'#000+
-  'M_Macro $1 set to $2'#000+
+  'M_Macro',' $1 set to $2'#000+
   'I_Compiling $1'#000+
-  'D_Compiling $1 for the second t','ime'#000+
+  'D_Compiling $1 for the second time'#000+
   'E_Array properties aren'#039't allowed at this point'#000+
   'E_No property found to override'#000+
   'E_Only one default property is allowed, found inherited default proper'+
   'ty in class $1'#000+
-  'E_The default property must be an array property'#000+
-  'E_Virtual constructors',' are only supported in class object model'#000+
+  'E_The defau','lt property must be an array property'#000+
+  'E_Virtual constructors are only supported in class object model'#000+
   'E_No default property available'#000+
   'E_The class can'#039't have a published section, use the {$M+} switch'#000+
-  'E_Forward declaration of class $1 must be resolved here to use the cla'+
-  'ss as ancestor'#000+
-  'E_Local operator','s not supported'#000+
+  'E_Forward declaration of class $1 must be',' resolved here to use the c'+
+  'lass as ancestor'#000+
+  'E_Local operators not supported'#000+
   'E_Procedure directive $1 not allowed in interface section'#000+
   'E_Procedure directive $1 not allowed in implementation section'#000+
-  'E_Procedure directive $1 not allowed in procvar declaration'#000+
-  'E_Function is already declared Public/Forwa','rd $1'#000+
+  'E_Procedure directive $1 not allowed in pro','cvar declaration'#000+
+  'E_Function is already declared Public/Forward $1'#000+
   'E_Can'#039't use both EXPORT and EXTERNAL'#000+
   'E_NAME keyword expected'#000+
   'W_$1 not yet supported inside inline procedure/function'#000+
   'W_Inlining disabled'#000+
   'I_Writing Browser log $1'#000+
-  'H_may be pointer dereference is missing'#000+
-  'F_Selected assembler reader not ','supported'#000+
+  'H_may be poi','nter dereference is missing'#000+
+  'F_Selected assembler reader not supported'#000+
   'E_Procedure directive $1 has conflicts with other directives'#000+
   'E_Calling convention doesn'#039't match forward'#000+
   'E_Register calling (fastcall) not supported'#000+
-  'E_Property can'#039't have a default value'#000+
-  'E_The default value of a property must be co','nstant'#000+
+  'E_Property can'#039't have ','a default value'#000+
+  'E_The default value of a property must be constant'#000+
   'E_Symbol can'#039't be published, can be only a class'#000+
   'E_That kind of property can'#039't be published'#000+
   'W_Empty import name specified'#000+
   'E_Division by zero'#000+
-  'E_Invalid floating point operation'#000+
+  'E_Invalid floating point operati','on'#000+
   'E_Type mismatch'#000+
   'E_Integer expression expected'#000+
-  'E_Ordinal e','xpression expected'#000+
+  'E_Ordinal expression expected'#000+
   'E_Type identifier expected'#000+
   'E_Variable identifier expected'#000+
   'E_pointer type expected'#000+
   'E_class type expected'#000+
   'E_Variable or type indentifier expected'#000+
-  'E_Can'#039't evaluate constant expression'#000+
+  'E_Can'#039't evaluate ','constant expression'#000+
   'E_Set elements are not compatible'#000+
-  'E_Oper','ation not implemented for sets'#000+
+  'E_Operation not implemented for sets'#000+
   'W_Automatic type conversion from floating type to COMP which is an int'+
   'eger type'#000+
   'W_Using / will give a floating point result'#000+
-  'H_use DIV instead to get an integer result'#000+
-  'E_string types doesn'#039't match, because of $','V+ mode'#000+
+  'H_use DIV instead to get ','an integer result'#000+
+  'E_string types doesn'#039't match, because of $V+ mode'#000+
   'E_succ or pred on enums with assignments not possible'#000+
   'E_Can'#039't read or write variables of this type'#000+
   'E_Type conflict between set elements'#000+
-  'E_Integer or real expression expected'#000+
+  'E_Integer or real expression expecte','d'#000+
   'E_Identifier not found $1'#000+
-  'F_Internal Error in SymTableStac','k()'#000+
+  'F_Internal Error in SymTableStack()'#000+
   'E_Duplicate identifier $1'#000+
   'E_Unknown identifier $1'#000+
   'E_Forward declaration not solved $1'#000+
   'F_Identifier type already defined as type'#000+
   'E_Error in type definition'#000+
-  'E_Type identifier not defined'#000+
+  'E_Type identifier not',' defined'#000+
   'E_Forward type not resolved $1'#000+
-  'E_Only static variab','les can be used in static methods or outside met'+
-  'hods'#000+
+  'E_Only static variables can be used in static methods or outside metho'+
+  'ds'#000+
   'E_Invalid call to tvarsym.mangledname()'#000+
   'F_record or class type expected'#000+
-  'E_Instances of classes or objects with an abtsract method are not allo'+
-  'wed'#000+
+  'E_Instances of classes or objects with an abtsract meth','od are not al'+
+  'lowed'#000+
   'W_Label not defined $1'#000+
-  'E_Illegal label de','claration'#000+
+  'E_Illegal label declaration'#000+
   'E_GOTO und LABEL are not supported (use command line switch -Sg)'#000+
   'E_Label not found'#000+
   'E_identifier isn'#039't a label'#000+
   'E_label already defined'#000+
-  'E_illegal type declaration of set elements'#000+
+  'E_illegal type declaration of set el','ements'#000+
   'E_Forward class definition not resolved $1'#000+
-  'H_Paramete','r not used $1'#000+
+  'H_Parameter not used $1'#000+
   'N_Local variable not used $1'#000+
   'E_Set type expected'#000+
   'W_Function result does not seem to be set'#000+
   'E_Unknown record field identifier $1'#000+
-  'W_Local variable $1 does not seem to be initialized'#000+
+  'W_Local variable $1 does not seem to b','e initialized'#000+
   'E_identifier idents no member $1'#000+
-  'B_Found decla','ration: $1'#000+
+  'B_Found declaration: $1'#000+
   'E_BREAK not allowed'#000+
   'E_CONTINUE not allowed'#000+
   'E_Expression too complicated - FPU stack overflow'#000+
   'E_Illegal expression'#000+
   'E_Invalid integer'#000+
   'E_Illegal qualifier'#000+
-  'E_High range limit < low range limit'#000+
+  'E_High range limi','t < low range limit'#000+
   'E_Illegal counter variable'#000+
-  'E_Can'#039't deter','mine which overloaded function to call'#000+
+  'E_Can'#039't determine which overloaded function to call'#000+
   'E_Parameter list size exceeds 65535 bytes'#000+
   'E_Illegal type conversion'#000+
   'E_File types must be var parameters'#000+
-  'E_The use of a far pointer isn'#039't allowed there'#000+
+  'E_The use of a far pointer isn'#039't allo','wed there'#000+
   'E_illegal call by reference parameters'#000+
-  'E_EXPORT de','clared functions can'#039't be called'#000+
+  'E_EXPORT declared functions can'#039't be called'#000+
   'W_Possible illegal call of constructor or destructor (doesn'#039't matc'+
   'h to this context)'#000+
   'N_Inefficient code'#000+
   'W_unreachable code'#000+
-  'E_procedure call with stackframe ESP/SP'#000+
-  'E_Abstract methods can'#039't be called directly'#000,+
+  'E_procedure call with st','ackframe ESP/SP'#000+
+  'E_Abstract methods can'#039't be called directly'#000+
   'F_Internal Error in getfloatreg(), allocation failure'#000+
   'F_Unknown float type'#000+
   'F_SecondVecn() base defined twice'#000+
   'F_Extended cg68k not supported'#000+
-  'F_32-bit unsigned not supported in MC68000 mode'#000+
+  'F_32-bit unsigned not supported in MC680','00 mode'#000+
   'F_Internal Error in secondinline()'#000+
-  'D_Register $1 wei','ght $2 $3'#000+
+  'D_Register $1 weight $2 $3'#000+
   'E_Stack limit excedeed in local routine'#000+
   'D_Stack frame is omited'#000+
   'E_Unable to inline object methods'#000+
   'E_Unable to inline procvar calls'#000+
   'E_No code for inline procedure stored'#000+
-  'E_Element zero of an ansi/wide- or longstring can'#039't be access','ed,'+
+  'E','_Element zero of an ansi/wide- or longstring can'#039't be accessed,'+
   ' use (set)length instead'#000+
   'E_Include or exclude not implemented in this case'#000+
   'F_Divide by zero in asm evaluator'#000+
   'F_Evaluator stack overflow'#000+
   'F_Evaluator stack underflow'#000+
-  'F_Invalid numeric format in asm evaluator'#000+
-  'F_Invalid Operator in asm evalu','ator'#000+
+  'F_Invalid num','eric format in asm evaluator'#000+
+  'F_Invalid Operator in asm evaluator'#000+
   'F_Unknown error in asm evaluator'#000+
   'W_Invalid numeric value'#000+
   'E_escape sequence ignored: $1'#000+
   'E_Asm syntax error - Prefix not found'#000+
-  'E_Asm syntax error - Trying to add more than one prefix'#000+
+  'E_Asm syntax error - Trying to add more than one p','refix'#000+
   'E_Asm syntax error - Opcode not found'#000+
-  'E_Invalid symbol',' reference'#000+
+  'E_Invalid symbol reference'#000+
   'W_Calling an overload function in an asm'#000+
   'E_Constant value out of bounds'#000+
   'E_Non-label pattern contains @'#000+
   'E_Invalid Operand: $1'#000+
   'W_Override operator not supported'#000+
-  'E_Error in binary constant: $1'#000+
+  'E_Error in',' binary constant: $1'#000+
   'E_Error in octal constant: $1'#000+
-  'E_Error i','n hexadecimal constant: $1'#000+
+  'E_Error in hexadecimal constant: $1'#000+
   'E_Error in integer constant: $1'#000+
   'E_Invalid labeled opcode'#000+
   'F_Internal error in Findtype()'#000+
   'E_Invalid size for MOVSX/MOVZX'#000+
   'E_16-bit base in 32-bit segment'#000+
-  'E_16-bit index in 32-bit segment'#000+
+  'E_','16-bit index in 32-bit segment'#000+
   'E_Invalid Opcode'#000+
-  'E_Constant r','eference not allowed'#000+
+  'E_Constant reference not allowed'#000+
   'W_Fwait can cause emulation problems with emu387'#000+
   'E_Invalid combination of opcode and operands'#000+
   'W_Opcode $1 not in table, operands not checked'#000+
-  'F_Internal Error in ConcatOpcode()'#000+
+  'F_Internal Error i','n ConcatOpcode()'#000+
   'E_Invalid size in reference'#000+
-  'E_Invalid middl','e sized operand'#000+
+  'E_Invalid middle sized operand'#000+
   'E_Invalid three operand opcode'#000+
   'E_Assembler syntax error'#000+
   'E_Invalid operand type'#000+
   'E_Segment overrides not supported'#000+
   'E_Invalid constant symbol $1'#000+
-  'F_Internal Errror converting binary'#000+
+  'F_Internal Errror conv','erting binary'#000+
   'F_Internal Errror converting hexadecimal'#000+
-  'F_Int','ernal Errror converting octal'#000+
+  'F_Internal Errror converting octal'#000+
   'E_Invalid constant expression'#000+
   'E_Unknown identifier: $1'#000+
   'E_Trying to define an index register more than once'#000+
   'E_Invalid field specifier'#000+
-  'F_Internal Error in BuildScaling()'#000+
+  'F_Internal Error ','in BuildScaling()'#000+
   'E_Invalid scaling factor'#000+
-  'E_Invalid scaling',' value'#000+
+  'E_Invalid scaling value'#000+
   'E_Scaling value only allowed with index'#000+
   'E_Invalid assembler syntax. No ref with brackets)'#000+
   'E_Expressions of the form [sreg:reg...] are currently not supported'#000+
-  'E_Trying to define a segment register twice'#000+
-  'E_Trying to define a base regis','ter twice'#000+
+  'E_Trying to def','ine a segment register twice'#000+
+  'E_Trying to define a base register twice'#000+
   'E_Trying to use a negative index register'#000+
   'E_Asm syntax error - error in reference'#000+
   'E_Local symbols not allowed as references'#000+
   'E_Invalid operand in bracket expression'#000+
-  'E_Invalid symbol name: $1'#000+
+  'E_Inva','lid symbol name: $1'#000+
   'E_Invalid Reference syntax'#000+
-  'E_Invalid str','ing as opcode operand: $1'#000+
+  'E_Invalid string as opcode operand: $1'#000+
   'W_@CODE and @DATA not supported'#000+
   'E_Null label references are not allowed'#000+
   'W_Calling of an overloaded function in direct assembler'#000+
-  'E_Cannot use SELF outside a method'#000+
+  'E_Cannot use SELF outside ','a method'#000+
   'E_Asm syntax error - Should start with bracket'#000+
-  'E_As','m syntax error - register: $1'#000+
+  'E_Asm syntax error - register: $1'#000+
   'E_SEG and OFFSET not supported'#000+
   'E_Asm syntax error - in opcode operand'#000+
   'E_Invalid String expression'#000+
   'E_Constant expression out of bounds'#000+
-  'F_Internal Error in BuildConstant()'#000+
-  'W_A repeat prefix and a segment override',' on <= i386 may result in er'+
-  'rors if an interrupt occurs'#000+
+  'F_Internal Error',' in BuildConstant()'#000+
+  'W_A repeat prefix and a segment override on <= i386 may result in erro'+
+  'rs if an interrupt occurs'#000+
   'E_Invalid or missing opcode'#000+
   'E_Invalid combination of prefix and opcode: $1'#000+
-  'E_Invalid combination of override and opcode: $1'#000+
+  'E_Invalid combination of override and opcode: $1'#000,+
   'E_Too many operands on line'#000+
   'E_Duplicate local symbol: $1'#000+
-  'E_U','nknown label identifer: $1'#000+
+  'E_Unknown label identifer: $1'#000+
   'E_Assemble node syntax error'#000+
   'E_Undefined local symbol: $1'#000+
   'D_Starting intel styled assembler parsing...'#000+
   'D_Finished intel styled assembler parsing...'#000+
-  'E_Not a directive or local symbol: $1'#000+
-  'E_/ at beginning of line no','t allowed'#000+
+  'E_Not',' a directive or local symbol: $1'#000+
+  'E_/ at beginning of line not allowed'#000+
   'E_NOR not supported'#000+
   'E_Invalid floating point register name'#000+
   'W_Modulo not supported'#000+
   'E_Invalid floating point constant: $1'#000+
-  'E_Size suffix and destination register do not match'#000+
+  'E_Size suffix and destination register do not matc','h'#000+
   'E_Internal error in ConcatLabeledInstr()'#000+
-  'W_Floating point ','binary representation ignored'#000+
+  'W_Floating point binary representation ignored'#000+
   'W_Floating point hexadecimal representation ignored'#000+
   'W_Floating point octal representation ignored'#000+
   'E_Invalid real constant expression'#000+
-  'E_Parenthesis are not allowed'#000+
+  'E_Parenthesis are',' not allowed'#000+
   'E_Invalid Reference'#000+
-  'E_Cannot use __SELF outside',' a method'#000+
+  'E_Cannot use __SELF outside a method'#000+
   'E_Cannot use __OLDEBP outside a nested procedure'#000+
   'W_Identifier $1 supposed external'#000+
   'E_Invalid segment override expression'#000+
   'E_Strings not allowed as constants'#000+
-  'D_Starting AT&T styled assembler parsing...'#000+
-  'D_Finished AT&T styled assembl','er parsing...'#000+
+  'D_Starting AT&','T styled assembler parsing...'#000+
+  'D_Finished AT&T styled assembler parsing...'#000+
   'E_Switching sections is not allowed in an assembler block'#000+
   'E_Invalid global definition'#000+
   'E_Line separator expected'#000+
   'W_globl not supported'#000+
   'W_align not supported'#000+
-  'W_lcomm not supported'#000+
+  'W_lcomm no','t supported'#000+
   'W_comm not supported'#000+
-  'E_Invalid local common defi','nition'#000+
+  'E_Invalid local common definition'#000+
   'E_Invalid global common definition'#000+
   'E_local symbol: $1 not found inside asm statement'#000+
   'E_assembler code not returned to text'#000+
   'F_internal error in BuildReference()'#000+
-  'E_invalid opcode size'#000+
+  'E_invalid opc','ode size'#000+
   'W_NEAR ignored'#000+
   'W_FAR ignored'#000+
-  'D_Creating inline asm ','lookup tables'#000+
+  'D_Creating inline asm lookup tables'#000+
   'E_Using a defined name as a local label'#000+
   'F_internal error in HandleExtend()'#000+
   'E_Invalid character: <'#000+
   'E_Invalid character: >'#000+
   'E_Unsupported opcode'#000+
-  'E_Increment and Decrement mode not allowed together'#000+
-  'E_Invalid Register list in movem','/fmovem'#000+
+  'E_Increment and Decremen','t mode not allowed together'#000+
+  'E_Invalid Register list in movem/fmovem'#000+
   'E_Invalid Register list for opcode'#000+
   'E_68020+ mode required to assemble'#000+
   'D_Starting Motorola styled assembler parsing...'#000+
   'D_Finished Motorola styled assembler parsing...'#000+
-  'W_XDEF not supported'#000+
-  'W_Functions with void return value can'#039't retu','rn any value in asm'+
-  ' code'#000+
+  'W_XDEF',' not supported'#000+
+  'W_Functions with void return value can'#039't return any value in asm c'+
+  'ode'#000+
   'E_Invalid suffix for intel assembler'#000+
   'E_Extended not supported in this mode'#000+
   'E_Comp not supported in this mode'#000+
-  'W_You need GNU as version >= 2.81 to compile this MMX code'#000+
+  'W_You need GNU as version >= 2.81 to compile t','his MMX code'#000+
   'F_Too many assembler files'#000+
-  'F_Selected assembler',' output not supported'#000+
+  'F_Selected assembler output not supported'#000+
   'E_Unsupported symbol type for operand'#000+
   'E_Cannot index a local var or parameter with a register'#000+
   'W_Source operating system redefined'#000+
   'I_Assembling (pipe) $1'#000+
-  'E_Can'#039't create assember file $1'#000+
-  'W_Assembler $1 not found, switchi','ng to external assembling'#000+
+  'E_Can',#039't create assember file $1'#000+
+  'W_Assembler $1 not found, switching to external assembling'#000+
   'T_Using assembler: $1'#000+
   'W_Error while assembling exitcode $1'#000+
   'W_Can'#039't call the assembler, error $1 switching to external assembl'+
   'ing'#000+
   'I_Assembling $1'#000+
-  'W_Linker $1 not found, switching to external linking'#000+
-  'T_Using linker: ','$1'#000+
+  'W_Linker ','$1 not found, switching to external linking'#000+
+  'T_Using linker: $1'#000+
   'W_Object $1 not found, Linking may fail !'#000+
   'W_Library $1 not found, Linking may fail !'#000+
   'W_Error while linking'#000+
   'W_Can'#039't call the linker, switching to external linking'#000+
   'I_Linking $1'#000+
-  'W_binder not found, switching to external binding'#000+
-  'W_ar not fou','nd, switching to external ar'#000+
+  'W_','binder not found, switching to external binding'#000+
+  'W_ar not found, switching to external ar'#000+
   'E_Dynamic Libraries not supported'#000+
   'I_Closing script $1'#000+
   'F_Can'#039't post process executable $1'#000+
   'F_Can'#039't open executable $1'#000+
   'X_Size of Code: $1 bytes'#000+
-  'X_Size of initialized data: $1 bytes'#000+
-  'X_Size of uninitialized data: $1 ','bytes'#000+
+  'X_Size of ','initialized data: $1 bytes'#000+
+  'X_Size of uninitialized data: $1 bytes'#000+
   'X_Stack space reserved: $1 bytes'#000+
   'X_Stack space commited: $1 bytes'#000+
   'T_Unitsearch: $1'#000+
@@ -446,190 +448,190 @@ const msgtxt : array[0..00094,1..240] of char=(
   'U_PPU Flags: $1'#000+
   'U_PPU Crc: $1'#000+
   'U_PPU Time: $1'#000+
-  'U_PPU File too short'#000+
+  'U_PPU File too',' short'#000+
   'U_PPU Invalid Header (no PPU at the begin)'#000+
-  'U_PPU Inva','lid Version $1'#000+
+  'U_PPU Invalid Version $1'#000+
   'U_PPU is compiled for an other processor'#000+
   'U_PPU is compiled for an other target'#000+
   'U_PPU Source: $1'#000+
   'U_Writing $1'#000+
   'F_Can'#039't Write PPU-File'#000+
   'F_reading PPU-File'#000+
-  'F_unexpected end of PPU-File'#000+
+  'F_unexpected e','nd of PPU-File'#000+
   'F_Invalid PPU-File entry: $1'#000+
-  'F_PPU Dbx count ','problem'#000+
+  'F_PPU Dbx count problem'#000+
   'E_Illegal unit name: $1'#000+
   'F_Too much units'#000+
   'F_Circular unit reference between $1 and $2'#000+
   'F_Can'#039't compile unit $1, no sources available'#000+
-  'W_Compiling the system unit requires the -Us switch'#000+
-  'F_There were $1 errors compiling module, stopping',#000+
+  'W_Compiling the system unit requires the ','-Us switch'#000+
+  'F_There were $1 errors compiling module, stopping'#000+
   'U_Load from $1 ($2) unit $3'#000+
   'U_Recompiling $1, checksum changed for $2'#000+
   'U_Recompiling unit, static lib is older than ppufile'#000+
   'U_Recompiling unit, shared lib is older than ppufile'#000+
-  'U_Recompiling unit, obj and asm are older than ppufile'#000+
-  'U_Recomp','iling unit, obj is older than asm'#000+
+  'U_R','ecompiling unit, obj and asm are older than ppufile'#000+
+  'U_Recompiling unit, obj is older than asm'#000+
   'U_Parsing interface of $1'#000+
   'U_Parsing implementation of $1'#000+
   'U_Second load for unit $1'#000+
   'U_PPU Check file $1 time $2'#000+
-  '$1 [options] <inputfile> [options]'#000+
+  '$1 [options] <inputfile> [options]'#000,+
   'W_Only one source file supported'#000+
-  'W_DEF file can be created o','nly for OS/2'#000+
+  'W_DEF file can be created only for OS/2'#000+
   'E_nested response files are not supported'#000+
   'F_No source file name in command line'#000+
   'E_Illegal parameter: $1'#000+
   'H_-? writes help pages'#000+
   'F_Too many config files nested'#000+
-  'F_Unable to open file $1'#000+
+  'F_Unable ','to open file $1'#000+
   'N_Reading further options from $1'#000+
-  'W_Target i','s already set to: $1'#000+
+  'W_Target is already set to: $1'#000+
   'W_Shared libs not supported on DOS platform, reverting to static'#000+
   'F_too many IF(N)DEFs'#000+
   'F_too many ENDIFs'#000+
   'F_open conditional at the end of the file'#000+
-  'W_Debug information generation is not supported by this executable'#000+
-  'H_Try ','recompiling with -dGDB'#000+
+  'W_Debug infor','mation generation is not supported by this executable'#000+
+  'H_Try recompiling with -dGDB'#000+
   'W_You are using the obsolete switch $1'#000+
   'Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#000+
   'Copyright (c) 1993-98 by Florian Klaempfl'#000+
-  'Free Pascal Compiler version $FPCVER'#000+
+  'Free Pascal C','ompiler version $FPCVER'#000+
   #000+
   'Compiler Date  : $FPCDATE'#000+
-  'Compiler ','Target: $FPCTARGET'#000+
+  'Compiler Target: $FPCTARGET'#000+
   #000+
   'This program comes under the GNU General Public Licence'#000+
   'For more information read COPYING.FPC'#000+
   #000+
   'Report bugs,suggestions etc to:'#000+
-  '                [email protected]'#000+
-  '**0*_put + after a boolean switch option to ','enable it, - to disable '+
-  'it'#000+
+  '                [email protected]','lna.hungary.net'#000+
+  '**0*_put + after a boolean switch option to enable it, - to disable it'+
+  #000+
   '**1a_the compiler doesn'#039't delete the generated assembler file'#000+
   '**2al_list sourcecode lines in assembler file'#000+
   '*t1b_use EMS'#000+
   '**1B_build all modules'#000+
-  '**1C_code generation options'#000+
+  '**1C_code',' generation options'#000+
   '3*2CD_create dynamic library'#000+
-  '**2Ch<n>_<n','> bytes heap (between 1023 and 67107840)'#000+
+  '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#000+
   '**2Ci_IO-checking'#000+
   '**2Cn_omit linking stage'#000+
   '**2Co_check overflow of integer operations'#000+
   '**2Cr_range checking'#000+
   '**2Cs<n>_set stack size to <n>'#000+
-  '**2Ct_stack checking'#000+
+  '*','*2Ct_stack checking'#000+
   '3*2CS_create static library'#000+
-  '3*2Cx_use sm','artlinking'#000+
+  '3*2Cx_use smartlinking'#000+
   '**1d<x>_defines the symbol <x>'#000+
   '*O1D_generate a DEF file'#000+
   '*O2Dd<x>_set description to <x>'#000+
   '*O2Dw_PM application'#000+
   '**1e<x>_set path to executable'#000+
   '**1E_same as -Cn'#000+
-  '**1F_set file names and paths'#000+
-  '**2FD<x>_sets the directory where to searc','h for compiler utilities'#000+
+  '**1F_set fil','e names and paths'#000+
+  '**2FD<x>_sets the directory where to search for compiler utilities'#000+
   '**2Fe<x>_redirect error output to <x>'#000+
   '**2FE<x>_set exe/unit output path to <x>'#000+
   '*L2Fg<x>_same as -Fl'#000+
   '**2Fi<x>_adds <x> to include path'#000+
-  '**2Fl<x>_adds <x> to library path'#000+
+  '**2Fl<x>_adds <x> to ','library path'#000+
   '*L2FL<x>_uses <x> as dynamic linker'#000+
-  '**2Fo<x>_ad','ds <x> to object path'#000+
+  '**2Fo<x>_adds <x> to object path'#000+
   '**2Fr<x>_load error message file <x>'#000+
   '**2Fu<x>_adds <x> to unit path'#000+
   '**2FU<x>_set unit output path to <x>, overrides -FE'#000+
   '*g1g_generate debugger information'#000+
-  '*g2gg_use gsym'#000+
+  '*g2','gg_use gsym'#000+
   '*g2gd_use dbx'#000+
   '**1i_information'#000+
-  '**1I<x>_adds <x> ','to include path'#000+
+  '**1I<x>_adds <x> to include path'#000+
   '**1k<x>_Pass <x> to the linker'#000+
   '**1l_write logo'#000+
   '**1n_don'#039't read the default config file'#000+
   '**1o<x>_change the name of the executable produced to <x>'#000+
-  '**1pg_generate profile code for gprof'#000+
-  '*L1P_use pipes instead of creating tempor','ary assembler files'#000+
+  '**1pg_generate prof','ile code for gprof'#000+
+  '*L1P_use pipes instead of creating temporary assembler files'#000+
   '**1S_syntax options'#000+
   '**2S2_switch some Delphi 2 extensions on'#000+
   '**2Sc_supports operators like C (*=,+=,/= and -=)'#000+
   '**2Sd_tries to be Delphi compatible'#000+
-  '**2Se_compiler stops after the first error'#000+
+  '**2Se_compile','r stops after the first error'#000+
   '**2Sg_allow LABEL and GOTO'#000+
-  '**2','Si_support C++ stlyed INLINE'#000+
+  '**2Si_support C++ stlyed INLINE'#000+
   '**2Sm_support macros like C (global)'#000+
   '**2So_tries to be TP/BP 7.0 compatible'#000+
   '**2Sp_tries to be gpc compatible'#000+
-  '**2Ss_constructor name must be init (destructor must be done)'#000+
+  '**2Ss_constructor name must be init (destr','uctor must be done)'#000+
   '**2St_allow static keyword in objects'#000+
-  '**','1s_don'#039't call assembler and linker (only with -a)'#000+
+  '**1s_don'#039't call assembler and linker (only with -a)'#000+
   '**1u<x>_undefines the symbol <x>'#000+
   '**1U_unit options'#000+
   '**2Un_don'#039't check the unit name'#000+
   '**2Up<x>_same as -Fu<x>'#000+
-  '**2Us_compile a system unit'#000+
-  '**1v<x>_Be verbose. <x> is a combination of the followi','ng letters :'#000+
+  '**2Us_compile a system ','unit'#000+
+  '**1v<x>_Be verbose. <x> is a combination of the following letters :'#000+
   '**2*_e : Show errors (default)       d : Show debug info'#000+
   '**2*_w : Show warnings               u : Show unit info'#000+
-  '**2*_n : Show notes                  t : Show tried/used files'#000+
-  '**2*_h : Show hints                  m : Show defin','ed macros'#000+
+  '**2*_n : Show notes                  t : Show tried/us','ed files'#000+
+  '**2*_h : Show hints                  m : Show defined macros'#000+
   '**2*_i : Show general info           p : Show compiled procedures'#000+
   '**2*_l : Show linenumbers            c : Show conditionals'#000+
-  '**2*_a : Show everything             0 : Show nothing (except errors)'#000+
-  '**2*_b : Show all procedure        ','  r : Rhide/GCC compatibility mod'+
-  'e'#000+
+  '**2*_a : Show everything             0 : Show',' nothing (except errors'+
+  ')'#000+
+  '**2*_b : Show all procedure          r : Rhide/GCC compatibility mode'#000+
   '**2*_    declarations if an error    x : Executable info (Win32 only)'#000+
   '**2*_    occurs'#000+
   '**1X_executable options'#000+
   '*L2Xc_link with the c library'#000+
-  '**2XD_link with dynamic libraries (defines FPC_LINK_DYNAMIC)'#000+
-  '**2X','s_strip all symbols from executable'#000+
+  '**2XD','_link with dynamic libraries (defines FPC_LINK_DYNAMIC)'#000+
+  '**2Xs_strip all symbols from executable'#000+
   '**2XS_link with static libraries (defines FPC_LINK_STATIC)'#000+
   '**0*_Processor specific options:'#000+
   '3*1A<x>_output format'#000+
   '3*2Ao_coff file using GNU AS'#000+
-  '3*2Anasmcoff_coff file using Nasm'#000+
-  '3*2Anasmelf_elf32 (linux) f','ile using Nasm'#000+
+  '3','*2Anasmcoff_coff file using Nasm'#000+
+  '3*2Anasmelf_elf32 (linux) file using Nasm'#000+
   '3*2Anasmobj_obj file using Nasm'#000+
   '3*2Amasm_obj using Masm (Mircosoft)'#000+
   '3*2Atasm_obj using Tasm (Borland)'#000+
   '3*1R<x>_assembler reading style'#000+
-  '3*2Ratt_read AT&T style assembler'#000+
+  '3*2Ratt_read AT&T style assembl','er'#000+
   '3*2Rintel_read Intel style assembler'#000+
-  '3*2Rdirect_copy asse','mbler text directly to assembler file'#000+
+  '3*2Rdirect_copy assembler text directly to assembler file'#000+
   '3*1O<x>_optimizations'#000+
   '3*2Og_generate smaller code'#000+
   '3*2OG_generate faster code (default)'#000+
-  '3*2Or_keep certain variables in registers (still BUGGY!!!)'#000+
+  '3*2Or_keep certain variables in registers (still BUGGY!','!!)'#000+
   '3*2Ou_enable uncertain optimizations (see docs)'#000+
-  '3*2O1_le','vel 1 optimizations (quick optimizations)'#000+
+  '3*2O1_level 1 optimizations (quick optimizations)'#000+
   '3*2O2_level 2 optimizations (-O1 + slower optimizations)'#000+
   '3*2O3_level 3 optimizations (same as -O2u)'#000+
   '3*2Op_target processor'#000+
-  '3*3Op1_set target processor to 386/486'#000+
-  '3*3Op2_set target processor to Penti','um/PentiumMMX (tm)'#000+
+  '3*3Op1_set targ','et processor to 386/486'#000+
+  '3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#000+
   '3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#000+
   '3*1T<x>_Target operating system'#000+
   '3*2TGO32V1_version 1 of DJ Delorie DOS extender'#000+
-  '3*2TGO32V2_version 2 of DJ Delorie DOS extender'#000+
+  '3*2TGO32V2_version 2 of DJ ','Delorie DOS extender'#000+
   '3*2TLINUX_Linux'#000+
   '3*2TOS2_OS/2 2.x'#000+
-  '3*2TWi','n32_Windows 32 Bit'#000+
+  '3*2TWin32_Windows 32 Bit'#000+
   '6*1A<x>_output format'#000+
   '6*2Ao_Unix o-file using GNU AS'#000+
   '6*2Agas_GNU Motorola assembler'#000+
   '6*2Amit_MIT Syntax (old GAS)'#000+
   '6*2Amot_Standard Motorola assembler'#000+
-  '6*1O_optimizations'#000+
+  '6*1O_optimiz','ations'#000+
   '6*2Oa_turn on the optimizer'#000+
-  '6*2Og_generate smaller co','de'#000+
+  '6*2Og_generate smaller code'#000+
   '6*2OG_generate faster code (default)'#000+
   '6*2Ox_optimize maximum (still BUGGY!!!)'#000+
   '6*2O2_set target processor to a MC68020+'#000+
   '6*1R<x>_assembler reading style'#000+
-  '6*2RMOT_read motorola style assembler'#000+
+  '6*2RMOT_read motorola style',' assembler'#000+
   '6*1T<x>_Target operating system'#000+
-  '6*2TAMIGA_Commodo','re Amiga'#000+
+  '6*2TAMIGA_Commodore Amiga'#000+
   '6*2TATARI_Atari ST/STe/TT'#000+
   '6*2TMACOS_Macintosh m68k'#000+
   '6*2TLINUX_Linux-68k'#000+

+ 18 - 30
compiler/tcadd.pas

@@ -371,30 +371,22 @@ implementation
                 convdone:=true;
               end
              else
-             { Both are chars? only convert to strings for addn }
+             { Both are chars? only convert to shortstrings for addn }
               if is_char(rd) and is_char(ld) then
                begin
                  if p^.treetype=addn then
                    begin
-                      if (cs_ansistrings in aktlocalswitches) then
-                       begin
-                         p^.left:=gentypeconvnode(p^.left,cansistringdef);
-                         p^.right:=gentypeconvnode(p^.right,cansistringdef);
-                       end
-                      else
-                       begin
-                         p^.left:=gentypeconvnode(p^.left,cshortstringdef);
-                         p^.right:=gentypeconvnode(p^.right,cshortstringdef);
-                       end;
-                      firstpass(p^.left);
-                      firstpass(p^.right);
-                      { here we call STRCOPY }
-                      procinfo.flags:=procinfo.flags or pi_do_call;
-                      calcregisters(p,0,0,0);
-                      p^.location.loc:=LOC_MEM;
+                     p^.left:=gentypeconvnode(p^.left,cshortstringdef);
+                     p^.right:=gentypeconvnode(p^.right,cshortstringdef);
+                     firstpass(p^.left);
+                     firstpass(p^.right);
+                     { here we call STRCOPY }
+                     procinfo.flags:=procinfo.flags or pi_do_call;
+                     calcregisters(p,0,0,0);
+                     p^.location.loc:=LOC_MEM;
                    end
                  else
-                  calcregisters(p,1,0,0);
+                   calcregisters(p,1,0,0);
                  convdone:=true;
                end
              else
@@ -907,21 +899,14 @@ implementation
               begin
                 if not assigned(p^.resulttype) then
                  begin
-                   { the result of a string addition is a string of length 255 }
-                   if (p^.left^.resulttype^.deftype=stringdef) or
-                      (p^.right^.resulttype^.deftype=stringdef) then
-                    begin
-                      if is_ansistring(p^.left^.resulttype) or
-                         is_ansistring(p^.right^.resulttype) then
-                       p^.resulttype:=cansistringdef
-                      else
-                       p^.resulttype:=cshortstringdef;
-                    end
+                 { for strings, return is always a 255 char string }
+                   if is_shortstring(p^.left^.resulttype) then
+                    p^.resulttype:=cshortstringdef
                    else
                     p^.resulttype:=p^.left^.resulttype;
                  end;
               end;
-            else if not assigned(p^.resulttype) then
+            else
               p^.resulttype:=p^.left^.resulttype;
          end;
       end;
@@ -930,7 +915,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.13  1998-11-16 15:33:05  peter
+  Revision 1.14  1998-11-17 00:36:47  peter
+    * more ansistring fixes
+
+  Revision 1.13  1998/11/16 15:33:05  peter
     * fixed return for ansistrings
 
   Revision 1.12  1998/11/05 14:28:16  peter

+ 17 - 4
compiler/tccon.pas

@@ -84,10 +84,20 @@ implementation
 
     procedure firststringconst(var p : ptree);
       begin
-        if cs_ansistrings in aktlocalswitches then
+{         if cs_ansistrings in aktlocalswitches then
           p^.resulttype:=cansistringdef
-        else
-          p^.resulttype:=cshortstringdef;
+         else
+          p^.resulttype:=cshortstringdef; }
+        case p^.stringtype of
+          st_shortstring :
+            p^.resulttype:=cshortstringdef;
+          st_ansistring :
+            p^.resulttype:=cansistringdef;
+          st_widestring :
+            p^.resulttype:=cwidestringdef;
+          st_longstring :
+            p^.resulttype:=clongstringdef;
+        end;
         p^.location.loc:=LOC_MEM;
       end;
 
@@ -116,7 +126,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.2  1998-11-05 12:03:04  peter
+  Revision 1.3  1998-11-17 00:36:48  peter
+    * more ansistring fixes
+
+  Revision 1.2  1998/11/05 12:03:04  peter
     * released useansistring
     * removed -Sv, its now available in fpc modes
 

+ 5 - 2
compiler/tcld.pas

@@ -227,7 +227,7 @@ implementation
           begin
             if not (is_shortstring(p^.right^.resulttype) or
                     is_ansistring(p^.right^.resulttype) or
-                    ((p^.right^.resulttype^.deftype=orddef) and (porddef(p^.right^.resulttype)^.typ=uchar))) then
+                    is_char(p^.right^.resulttype)) then
              begin
                p^.right:=gentypeconvnode(p^.right,p^.left^.resulttype);
                firstpass(p^.right);
@@ -423,7 +423,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.8  1998-11-10 10:09:18  peter
+  Revision 1.9  1998-11-17 00:36:49  peter
+    * more ansistring fixes
+
+  Revision 1.8  1998/11/10 10:09:18  peter
     * va_list -> array of const
 
   Revision 1.7  1998/11/05 14:26:48  peter