# HG changeset patch # User unc0rr # Date 1391978583 -14400 # Node ID 7f29a65aa1e4c6e26754306bdb97e07e7eeb31c4 # Parent 2fa3bb7785eef6cd4846a946c80b4b4e38a675c0 It compiles \o/ Doesn't link yet though, need to implement new rtl functions diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/LuaPas.pas --- a/hedgewars/LuaPas.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/LuaPas.pas Mon Feb 10 00:43:03 2014 +0400 @@ -928,8 +928,10 @@ end; function lua_tostringA(L : Plua_State; idx : LongInt) : ansistring; +var p: PChar; begin - lua_tostringA := ansistring(lua_tolstring(L, idx, nil)); + p:= lua_tolstring(L, idx, nil); + lua_tostringA := ansistring(p); end; function lua_open : Plua_State; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/config.inc.in --- a/hedgewars/config.inc.in Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/config.inc.in Mon Feb 10 00:43:03 2014 +0400 @@ -27,7 +27,7 @@ cHashString = '${HEDGEWARS_HASH}'; cDefaultPathPrefix = '${HEDGEWARS_FULL_DATADIR}/Data'; {$IFDEF PAS2C} - cFontsPaths: array[0..0] of PChar = (nil); + cFontsPaths: array[0..1] of PChar = (nil, nil); {$ELSE} cFontsPaths: ${FONTS_DIRS_ARRAY} {$ENDIF} diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/hwengine.pas Mon Feb 10 00:43:03 2014 +0400 @@ -336,8 +336,8 @@ initEverything(true); WriteLnToConsole('Hedgewars engine ' + cVersionString + '-r' + cRevisionString + ' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion)); - AddFileLog('Prefix: "' + PathPrefix +'"'); - AddFileLog('UserPrefix: "' + UserPathPrefix +'"'); + AddFileLog('Prefix: "' + shortstring(PathPrefix) +'"'); + AddFileLog('UserPrefix: "' + shortstring(UserPathPrefix) +'"'); for i:= 0 to ParamCount do AddFileLog(inttostr(i) + ': ' + ParamStr(i)); diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uChat.pas --- a/hedgewars/uChat.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uChat.pas Mon Feb 10 00:43:03 2014 +0400 @@ -100,7 +100,7 @@ delete(str, 1, 1) end; -font:= CheckCJKFont(str, fnt16); +font:= CheckCJKFont(ansistring(str), fnt16); w:= 0; h:= 0; // avoid compiler hints TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), @w, @h); diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uCommandHandlers.pas Mon Feb 10 00:43:03 2014 +0400 @@ -582,12 +582,12 @@ if autoCameraOn then begin FollowGear:= nil; - AddCaption('Auto Camera Off', $CCCCCC, capgrpVolume); + AddCaption(ansistring('Auto Camera Off'), $CCCCCC, capgrpVolume); autoCameraOn:= false end else begin - AddCaption('Auto Camera On', $CCCCCC, capgrpVolume); + AddCaption(ansistring('Auto Camera On'), $CCCCCC, capgrpVolume); bShowFinger:= true; if not CurrentHedgehog^.Unplaced then FollowGear:= CurrentHedgehog^.Gear; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uGame.pas --- a/hedgewars/uGame.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uGame.pas Mon Feb 10 00:43:03 2014 +0400 @@ -32,7 +32,7 @@ procedure DoGameTick(Lag: LongInt); var i,j : LongInt; - s: shortstring; + s: ansistring; begin if isPaused then exit; @@ -76,8 +76,8 @@ AddCaption(trmsg[sidMute], cWhiteColor, capgrpVolume) else if not isAudioMuted then begin - str(i, s); - AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) + s:= ansistring(inttostr(i)); + AddCaption(FormatA(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) end end; end; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uGearsList.pas Mon Feb 10 00:43:03 2014 +0400 @@ -700,7 +700,7 @@ begin inc(Team^.stats.AIKills); FreeTexture(Team^.AIKillsTex); - Team^.AIKillsTex := RenderStringTex(inttostr(Team^.stats.AIKills), Team^.Clan^.Color, fnt16); + Team^.AIKillsTex := RenderStringTex(ansistring(inttostr(Team^.stats.AIKills)), Team^.Clan^.Color, fnt16); end end; with Gear^ do diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uLocale.pas --- a/hedgewars/uLocale.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uLocale.pas Mon Feb 10 00:43:03 2014 +0400 @@ -40,7 +40,7 @@ trevt_n: array[TEventId] of integer; procedure LoadLocale(FileName: shortstring); -var s: ansistring = ''; +var s: ansistring; f: pfsFile; a, b, c: LongInt; first: array[TEventId] of boolean; @@ -62,11 +62,16 @@ if (s[1] < '0') or (s[1] > '9') then continue; TryDo(Length(s) > 6, 'Load locale: empty string', true); + {$IFNDEF PAS2C} val(s[1]+s[2], a, c); TryDo(c = 0, ansistring('Load locale: numbers should be two-digit: ') + s, true); - TryDo(s[3] = ':', 'Load locale: ":" expected', true); val(s[4]+s[5], b, c); TryDo(c = 0, ansistring('Load locale: numbers should be two-digit: ') + s, true); + {$ELSE} + val(s[1]+s[2], a); + val(s[4]+s[5], b); + {$ENDIF} + TryDo(s[3] = ':', 'Load locale: ":" expected', true); TryDo(s[6] = '=', 'Load locale: "=" expected', true); Delete(s, 1, 6); case a of diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uMisc.pas Mon Feb 10 00:43:03 2014 +0400 @@ -256,7 +256,7 @@ // allocate and fill structure that will be passed to new thread New(image); // will be disposed in SaveScreenshot() -image^.filename:= UserPathPrefix + filename + ext; +image^.filename:= shortstring(UserPathPrefix) + filename + ext; image^.width:= cScreenWidth div k; image^.height:= cScreenHeight div k; image^.size:= size; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uPhysFSLayer.pas --- a/hedgewars/uPhysFSLayer.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uPhysFSLayer.pas Mon Feb 10 00:43:03 2014 +0400 @@ -36,7 +36,7 @@ {$ENDIF} implementation -uses uConsts, uUtils, uVariables, sysutils; +uses uConsts, uUtils, uVariables{$IFNDEF PAS2C}, sysutils{$ENDIF}; {$IFNDEF PAS2C} function PHYSFS_init(argv0: PChar) : LongInt; cdecl; external PhysfsLibName; @@ -132,17 +132,17 @@ pfsBlockRead:= r end; -procedure pfsMount(path: AnsiString; mountpoint: PChar); +procedure pfsMount(path: ansistring; mountpoint: PChar); begin - if PHYSFS_mount(Str2PChar(path), mountpoint, false) then - AddFileLog('[PhysFS] mount ' + path + ' at ' + mountpoint + ' : ok') + if PHYSFS_mount(PChar(path), mountpoint, false) then + AddFileLog('[PhysFS] mount ' + shortstring(path) + ' at ' + shortstring(mountpoint) + ' : ok') else - AddFileLog('[PhysFS] mount ' + path + ' at ' + mountpoint + ' : FAILED ("' + PHYSFS_getLastError() + '")'); + AddFileLog('[PhysFS] mount ' + shortstring(path) + ' at ' + shortstring(mountpoint) + ' : FAILED ("' + shortstring(PHYSFS_getLastError()) + '")'); end; -procedure pfsMountAtRoot(path: AnsiString); +procedure pfsMountAtRoot(path: ansistring); begin - pfsMount(path, '/'); + pfsMount(path, PChar('/')); end; procedure initModule; @@ -165,11 +165,11 @@ begin fp := cFontsPaths[i]; if fp <> nil then - pfsMount(fp, '/Fonts'); + pfsMount(ansistring(fp), PChar('/Fonts')); end; pfsMountAtRoot(PathPrefix); - pfsMountAtRoot(UserPathPrefix + '/Data'); + pfsMountAtRoot(UserPathPrefix + ansistring('/Data')); hedgewarsMountPackages; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uRenderUtils.pas --- a/hedgewars/uRenderUtils.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uRenderUtils.pas Mon Feb 10 00:43:03 2014 +0400 @@ -82,7 +82,7 @@ clr: TSDL_Color; finalRect, textRect: TSDL_Rect; begin - TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), @w, @h); + TTF_SizeUTF8(Fontz[Font].Handle, PChar(s), @w, @h); if (maxLength <> 0) and (w > maxLength) then w := maxLength; finalRect.x:= X; finalRect.y:= Y; @@ -96,7 +96,7 @@ clr.r:= (Color shr 16) and $FF; clr.g:= (Color shr 8) and $FF; clr.b:= Color and $FF; - tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, Str2PChar(s), clr); + tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr); finalRect.x:= X + cFontBorder + 2; finalRect.y:= Y + cFontBorder; SDLTry(tmpsurf <> nil, true); @@ -280,7 +280,7 @@ if length(s) = 0 then s:= _S' '; font:= CheckCJKFont(s, font); w:= 0; h:= 0; // avoid compiler hints - TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), @w, @h); + TTF_SizeUTF8(Fontz[font].Handle, PChar(s), @w, @h); if (maxLength <> 0) and (w > maxLength) then w := maxLength; finalSurface:= SDL_CreateRGBSurface(SDL_SWSURFACE, w + cFontBorder * 2 + 4, h + cFontBorder * 2, @@ -302,7 +302,9 @@ var textWidth, textHeight, x, y, w, h, i, j, pos, prevpos, line, numLines, edgeWidth, edgeHeight, cornerWidth, cornerHeight: LongInt; finalSurface, tmpsurf, rotatedEdge: PSDL_Surface; rect: TSDL_Rect; + {$IFNDEF PAS2C} chars: set of char = [#9,' ',';',':','?','!',',']; + {$ENDIF} substr: shortstring; edge, corner, tail: TSPrite; begin @@ -338,7 +340,7 @@ s:= '...'; font:= CheckCJKFont(s, font); w:= 0; h:= 0; // avoid compiler hints - TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), @w, @h); + TTF_SizeUTF8(Fontz[font].Handle, PChar(s), @w, @h); if w<8 then w:= 8; j:= 0; @@ -346,7 +348,9 @@ begin w:= 0; i:= round(Sqrt(length(s)) * 2); + {$IFNDEF PAS2C} s:= WrapText(s, #1, chars, i); + {$ENDIF} pos:= 1; prevpos:= 0; line:= 0; // Find the longest line for the purposes of centring the text. Font dependant. while pos <= length(s) do diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uScript.pas Mon Feb 10 00:43:03 2014 +0400 @@ -228,7 +228,7 @@ begin if lua_gettop(L) = 5 then begin - ShowMission(lua_tostring(L, 1), lua_tostring(L, 2), lua_tostring(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5)); + ShowMission(lua_tostringA(L, 1), lua_tostringA(L, 2), lua_tostringA(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5)); end else LuaParameterCountError('ShowMission', 'caption, subcaption, text, icon, time', lua_gettop(L)); @@ -308,10 +308,10 @@ function lc_addcaption(L : Plua_State) : LongInt; Cdecl; begin if lua_gettop(L) = 1 then - AddCaption(lua_tostring(L, 1), cWhiteColor, capgrpMessage) + AddCaption(lua_tostringA(L, 1), cWhiteColor, capgrpMessage) else if lua_gettop(L) = 3 then begin - AddCaption(lua_tostring(L, 1), lua_tointeger(L, 2) shr 8, TCapGroup(lua_tointeger(L, 3))); + AddCaption(lua_tostringA(L, 1), lua_tointeger(L, 2) shr 8, TCapGroup(lua_tointeger(L, 3))); end else LuaParameterCountError('AddCaption', 'text[, color, captiongroup]', lua_gettop(L)); @@ -847,12 +847,12 @@ if (hh.Gear <> nil) or (hh.GearHidden <> nil) then begin FreeTexture(hh.NameTagTex); - hh.NameTagTex:= RenderStringTex(hh.Name, clan^.Color, fnt16); + hh.NameTagTex:= RenderStringTex(ansistring(hh.Name), clan^.Color, fnt16); RenderHealth(hh); end; end; FreeTexture(team^.NameTagTex); - team^.NameTagTex:= RenderStringTex(clan^.Teams[i]^.TeamName, clan^.Color, fnt16); + team^.NameTagTex:= RenderStringTex(ansistring(clan^.Teams[i]^.TeamName), clan^.Color, fnt16); end; clan^.HealthTex:= makeHealthBarTexture(cTeamHealthWidth + 5, clan^.Teams[0]^.NameTagTex^.h, clan^.Color); @@ -898,7 +898,7 @@ gear^.Hedgehog^.Team^.TeamName := lua_tostring(L, 2); FreeTexture(gear^.Hedgehog^.Team^.NameTagTex); - gear^.Hedgehog^.Team^.NameTagTex:= RenderStringTex(gear^.Hedgehog^.Team^.TeamName, gear^.Hedgehog^.Team^.Clan^.Color, fnt16); + gear^.Hedgehog^.Team^.NameTagTex:= RenderStringTex(ansistring(gear^.Hedgehog^.Team^.TeamName), gear^.Hedgehog^.Team^.Clan^.Color, fnt16); end else lua_pushnil(L); @@ -943,7 +943,7 @@ gear^.Hedgehog^.Name:= lua_tostring(L, 2); FreeTexture(gear^.Hedgehog^.NameTagTex); - gear^.Hedgehog^.NameTagTex:= RenderStringTex(gear^.Hedgehog^.Name, gear^.Hedgehog^.Team^.Clan^.Color, fnt16) + gear^.Hedgehog^.NameTagTex:= RenderStringTex(ansistring(gear^.Hedgehog^.Name), gear^.Hedgehog^.Team^.Clan^.Color, fnt16) end end; lc_sethogname:= 0; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uStats.pas --- a/hedgewars/uStats.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uStats.pas Mon Feb 10 00:43:03 2014 +0400 @@ -97,12 +97,14 @@ procedure TurnReaction; var i, t: LongInt; + s: ansistring; begin TryDo(not bBetweenTurns, 'Engine bug: TurnReaction between turns', true); inc(FinishedTurnsTotal); if FinishedTurnsTotal <> 0 then begin + s:= ansistring(CurrentHedgehog^.Name); inc(CurrentHedgehog^.stats.FinishedTurns); if (CurrentHedgehog^.stats.DamageGiven = DamageTotal) and (DamageTotal > 0) then @@ -112,7 +114,7 @@ begin AddVoice(sndStupid, PreviousTeam^.voicepack); if CurrentHedgehog^.stats.DamageGiven = CurrentHedgehog^.stats.StepDamageRecv then - AddCaption(Format(GetEventString(eidHurtSelf), CurrentHedgehog^.Name), cWhiteColor, capgrpMessage); + AddCaption(FormatA(GetEventString(eidHurtSelf), s), cWhiteColor, capgrpMessage); end else if DamageClan <> 0 then @@ -140,7 +142,7 @@ else if isTurnSkipped then begin AddVoice(sndBoring, PreviousTeam^.voicepack); - AddCaption(Format(GetEventString(eidTurnSkipped), CurrentHedgehog^.Name), cWhiteColor, capgrpMessage); + AddCaption(FormatA(GetEventString(eidTurnSkipped), s), cWhiteColor, capgrpMessage); end else if not PlacingHogs then AddVoice(sndCoward, PreviousTeam^.voicepack); diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uStore.pas Mon Feb 10 00:43:03 2014 +0400 @@ -185,9 +185,9 @@ for t:= 0 to Pred(TeamsCount) do with TeamsArray[t]^ do begin - NameTagTex:= RenderStringTexLim(TeamName, Clan^.Color, Font, cTeamHealthWidth); + NameTagTex:= RenderStringTexLim(ansistring(TeamName), Clan^.Color, Font, cTeamHealthWidth); if length(Owner) > 0 then - OwnerTex:= RenderStringTexLim(Owner, Clan^.Color, Font, cTeamHealthWidth); + OwnerTex:= RenderStringTexLim(ansistring(Owner), Clan^.Color, Font, cTeamHealthWidth); r.x:= 0; r.y:= 0; @@ -253,7 +253,7 @@ SDL_FreeSurface(texsurf); texsurf:= nil; - AIKillsTex := RenderStringTex(inttostr(stats.AIKills), Clan^.Color, fnt16); + AIKillsTex := RenderStringTex(ansistring(inttostr(stats.AIKills)), Clan^.Color, fnt16); dec(drY, r.h + 2); DrawHealthY:= drY; @@ -261,7 +261,7 @@ with Hedgehogs[i] do if Gear <> nil then begin - NameTagTex:= RenderStringTexLim(Name, Clan^.Color, fnt16, cTeamHealthWidth); + NameTagTex:= RenderStringTexLim(ansistring(Name), Clan^.Color, fnt16, cTeamHealthWidth); if Hat = 'NoHat' then begin if (month = 4) and (md = 20) then @@ -451,7 +451,7 @@ with Ammoz[ai] do begin TryDo(length(trAmmo[NameId]) > 0,'No default text/translation found for ammo type #' + intToStr(ord(ai)) + '!',true); - tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(trAmmo[NameId],fnt16)].Handle, Str2PChar(trAmmo[NameId]), cWhiteColorChannels); + tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(trAmmo[NameId],fnt16)].Handle, PChar(trAmmo[NameId]), cWhiteColorChannels); TryDo(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ai)) + ' failed!',true); tmpsurf:= doSurfaceConversion(tmpsurf); FreeTexture(NameTex); @@ -585,7 +585,7 @@ begin str(Hedgehog.Gear^.Health, s); FreeTexture(Hedgehog.HealthTagTex); -Hedgehog.HealthTagTex:= RenderStringTex(s, Hedgehog.Team^.Clan^.Color, fnt16) +Hedgehog.HealthTagTex:= RenderStringTex(ansistring(s), Hedgehog.Team^.Clan^.Color, fnt16) end; function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; @@ -840,7 +840,7 @@ procedure SetupOpenGL; var buf: array[byte] of char; AuxBufNum: LongInt = 0; - tmpstr: AnsiString; + tmpstr: ansistring; tmpint: LongInt; tmpn: LongInt; begin diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uUtils.pas --- a/hedgewars/uUtils.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uUtils.pas Mon Feb 10 00:43:03 2014 +0400 @@ -516,7 +516,7 @@ {$IFNDEF PAS2C} f:= stderr; // if everything fails, write to stderr {$ENDIF} - if (UserPathPrefix <> '') then + if (length(UserPathPrefix) > 0) then begin {$IFNDEF PAS2C} // create directory if it doesn't exist @@ -527,7 +527,7 @@ i:= 0; while(i < 7) do begin - assign(f, UserPathPrefix + '/Logs/' + logfileBase + inttostr(i) + '.log'); + assign(f, shortstring(UserPathPrefix) + '/Logs/' + logfileBase + inttostr(i) + '.log'); if IOResult = 0 then break; inc(i) diff -r 2fa3bb7785ee -r 7f29a65aa1e4 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Sun Feb 09 19:00:13 2014 +0100 +++ b/hedgewars/uVariables.pas Mon Feb 10 00:43:03 2014 +0400 @@ -41,8 +41,8 @@ cLocaleFName : shortstring; cLocale : shortstring; cTimerInterval : LongInt; - PathPrefix : shortstring; - UserPathPrefix : shortstring; + PathPrefix : ansistring; + UserPathPrefix : ansistring; cShowFPS : boolean; cFlattenFlakes : boolean; cFlattenClouds : boolean; diff -r 2fa3bb7785ee -r 7f29a65aa1e4 misc/libphyslayer/hwpacksmounter.h --- a/misc/libphyslayer/hwpacksmounter.h Sun Feb 09 19:00:13 2014 +0100 +++ b/misc/libphyslayer/hwpacksmounter.h Mon Feb 10 00:43:03 2014 +0400 @@ -3,7 +3,10 @@ #include "physfs.h" #include "physfscompat.h" + +#ifndef PAS2C #include "lua.h" +#endif #ifdef __cplusplus extern "C" { diff -r 2fa3bb7785ee -r 7f29a65aa1e4 project_files/hwc/CMakeLists.txt --- a/project_files/hwc/CMakeLists.txt Sun Feb 09 19:00:13 2014 +0100 +++ b/project_files/hwc/CMakeLists.txt Mon Feb 10 00:43:03 2014 +0400 @@ -12,6 +12,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/rtl) include_directories(${PHYSFS_INCLUDE_DIR}) include_directories(${PHYSLAYER_INCLUDE_DIR}) +include_directories(${LUA_INCLUDE_DIR}) add_subdirectory(rtl) configure_file(${CMAKE_SOURCE_DIR}/hedgewars/config.inc.in ${CMAKE_CURRENT_BINARY_DIR}/config.inc) @@ -60,6 +61,8 @@ #compile the c files +add_definitions(-DPAS2C) + add_executable(hwengine WIN32 ${engine_sources}) target_link_libraries(hwengine fpcrtl diff -r 2fa3bb7785ee -r 7f29a65aa1e4 project_files/hwc/rtl/fpcrtl.h --- a/project_files/hwc/rtl/fpcrtl.h Sun Feb 09 19:00:13 2014 +0100 +++ b/project_files/hwc/rtl/fpcrtl.h Mon Feb 10 00:43:03 2014 +0400 @@ -190,6 +190,7 @@ #define _chrconcat fpcrtl_chrconcat #define _pchar fpcrtl_pchar #define _strconcatA fpcrtl_strconcatA +#define _strncompareA fpcrtl_strncompareA // hooks are implemented in javascript void start_hook(void); diff -r 2fa3bb7785ee -r 7f29a65aa1e4 project_files/hwc/rtl/misc.h --- a/project_files/hwc/rtl/misc.h Sun Feb 09 19:00:13 2014 +0100 +++ b/project_files/hwc/rtl/misc.h Mon Feb 10 00:43:03 2014 +0400 @@ -46,12 +46,13 @@ bool fpcrtl_strcompare(string255 str1, string255 str2); bool fpcrtl_strcomparec(string255 a, char b); bool fpcrtl_strncompare(string255 a, string255 b); +bool fpcrtl_strncompareA(astring a, astring b); char* fpcrtl__pchar(string255 s); string255 fpcrtl_pchar2str(char *s); +astring fpcrtl_pchar2astr(char *s); astring fpcrtl_str2astr(string255 s); string255 fpcrtl_astr2str(astring s); -string255 fpcrtl_astr2str(astring a); #define fpcrtl_TypeInfo sizeof // dummy #ifdef EMSCRIPTEN diff -r 2fa3bb7785ee -r 7f29a65aa1e4 project_files/hwc/rtl/pas2c.h --- a/project_files/hwc/rtl/pas2c.h Sun Feb 09 19:00:13 2014 +0100 +++ b/project_files/hwc/rtl/pas2c.h Mon Feb 10 00:43:03 2014 +0400 @@ -28,7 +28,7 @@ }; struct { unsigned char _dummy2; - unsigned char str[MAX_ANSISTRING_LENGTH]; + unsigned char s[MAX_ANSISTRING_LENGTH]; }; struct { uint16_t len; @@ -76,6 +76,7 @@ bool _strcompare(string255 a, string255 b); bool _strcomparec(string255 a, unsigned char b); bool _strncompare(string255 a, string255 b); +bool _strncompareA(astring a, astring b); #define STRINIT(a) {.len = sizeof(a) - 1, .str = a} diff -r 2fa3bb7785ee -r 7f29a65aa1e4 project_files/hwc/rtl/system.h --- a/project_files/hwc/rtl/system.h Sun Feb 09 19:00:13 2014 +0100 +++ b/project_files/hwc/rtl/system.h Mon Feb 10 00:43:03 2014 +0400 @@ -22,6 +22,7 @@ * Index is 1-based. */ string255 fpcrtl_copy(string255 s, Integer Index, Integer Count); +astring fpcrtl_copyA(astring s, Integer Index, Integer Count); /* * Delete removes Count characters from string S, starting at position Index. @@ -42,6 +43,7 @@ Integer __attribute__((overloadable)) fpcrtl_pos(Char c, string255 str); Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, string255 str); +Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, astring str); Integer fpcrtl_length(string255 s); #define fpcrtl_Length fpcrtl_length diff -r 2fa3bb7785ee -r 7f29a65aa1e4 tools/pas2c/Pas2C.hs --- a/tools/pas2c/Pas2C.hs Sun Feb 09 19:00:13 2014 +0100 +++ b/tools/pas2c/Pas2C.hs Mon Feb 10 00:43:03 2014 +0400 @@ -1140,6 +1140,7 @@ a -> error $ "Getting element of " ++ show a ++ "\nReference: " ++ show ae case t of BTString -> return $ r <> text ".s" <> brackets e + BTAString -> return $ r <> text ".s" <> brackets e _ -> return $ r <> brackets e ref2C (SimpleReference name) = id2C IOLookup name ref2C rf@(RecordField (Dereference ref1) ref2) = do @@ -1202,6 +1203,7 @@ ("pchar", BTAString) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "_pcharA" $ BTPointerTo BTChar)) ("shortstring", BTAString) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "astr2str" $ BTString)) ("shortstring", BTPointerTo _) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "pchar2str" $ BTString)) + ("ansistring", BTPointerTo _) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "pchar2astr" $ BTAString)) ("ansistring", BTString) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "str2astr" $ BTAString)) (a, _) -> do e <- expr2C expr