Saferoll писал(а):
Можно придумать синтаксис расширенной процедуры, например:
Код: "OBERON"
PROCEDURE −Name(par1,par2: T)
"Строка кода 1",
"Строка кода 2",
"Строка кода 3";
Но во что это должно превратиться в С-листинге, ведь макроопределения в С однострочные?
Более того, Олежек, именно такой способ предложил в итоге Йозеф Темпл. У меня в ближайших планах есть намерение реализовать в Ofront+ такие многострочные инлайн-процедуры, и транслироваться они конечно должны в функции, а не в макросы.
Saferoll писал(а):
Кстати, интересная недокументированная фича: похоже, строка здесь может быть задана не только в кавычках, но и перечислением кодов символов через запятую. Но не проверял, работает ли этот способ.
Да, работает. Вставляет в сишный текст символы с этими кодами. Именно поэтому оказалось возможным унифицировать метод разбора такой кодовой вставки, вплоть до того, что процедура OPP.GetCode будет иметь одинаковое устроение в Ofront и BlackBox.
На очереди ещё одно усовершенствование: убрать в Ofront+ лимит на макс. размер строк.
Helmut Zinn писал(а):
Dear Oleg
I test your changes about the procedure GetCode in DevCPP.
I send your solution to Josef.
Josef's answer and comments:
A string constant in a code proc can be seen as an undocumented feature but
both BB1.6 and Oleg's latest fix can also be seen to suffer from the same bug:
The grammar in "Platform-Specific Issues (Windows)" says that there can be a
sequence of constExpr separated by a comma.
So, any string constant should actually be appended to the code procedure.
In addition: what happens when a real constant is used? It is ignored. This
is an undetected error.
PROCEDURE [code] CodeProc() 1, 2.3;
It's even worse: GetCode does not support ConstExpr but only numeric and
string literals.
Grrr...
- Josef
Josef experiment with the strings inside the LOOP and improved the
readability.
He pointed out that his version is not tested. ConstExpr is not supported.
Here is his result:
StdCoder.Decode ..,, ..1S....3QwdONl9RhOO9vRbf9b8R7fJHPNGomCrlAyIhgs,CbKBhZ
xi2,CoruKu4qouqm8rtuGfa4.hOO9vRb1Y66wb8RTfQ9vQRtIdvPZHWKqtCa.E.U5UEw.2U.Qk
lbeZ3DPuP7PNNvQRtId9NPuP7X2hgnRAXDJ.QCPuP7PNG2sET1.PuP.MHT9N9nt.G2sIdvPZnt
gcghghZcZRC8T0E.kkH.T.nC,2U..X086.QC18RdfQHfMf9R9vQ7ONb1E...p.0.4U.EJYjyC.
6.VQ.EzG.zT0H6IZuH5OF7OJZOF,tF99R5uP7PNrN1HM0HcJ1eI,NNl9Rp767ONhvEV8JRtETf
Pb9R98SdvC,dPN76599,NOp76HeHdOFDOFZuC,tQp76VuHHeHdOFZ86duH,NEZeI1OK,tHB86b
8GTeIduEFOEZuCPM0Hk4ak2aEc83.9ePbPRZPNNONR98NPNRfC,NGRW5lIin4a.HcJcOp76H0s
CIau2YEx7cI....cE9uFHeHPM0HM0HMGB86NPNR96x76NOFR88bfLH76d8G9eHH68J76HfN,tP
hPNZfNNvPj96d9O9fP,NORvMZPN1vQ996bPOpPN,tPB961fQZPMn96b96JN8PM0Hk2od3xecQi
mYZUYd3p7EJ0GNamR0GXyId0Gp0GRqHE0HEGpb0Gr0mK0mM0GWyIECLNupheqi0GRqHECLjiJp
qZ3pd2RbUQiUIbx22ZtCP.HMFR8FPM0HM0669ePb1sCPM082.R96pND0nR0GbKofWWg2YqYadQ
bBA,H6HTuHVO1HM0akYsQnPP,ND,dPfPP3PNZ96d8G9GECKEenSYcZpCCJLaKrGLv4KqiHEKIr
C5EIuKEiGE4nIin4a.HkY68596t76VN8,tHZ86FtMuHE8nOKnI0mb837ONh1uquqKuaLs0mYuI
EiLtKqkmKK0GtKqkmqN8HKIiZFPGnyaGEGJYM1HU7km8LtWGPCnIiHECKEe1XtC,dP,dCvFMqk
2aU7MFsCPM0Hk2YcZpi1V5hgo3ZnBjhBZv2YnRfihfUI5CJYy2FtEFeIFtMHN8r76HeH588RP8
rN1M098HbOGB86bXUktGLtaKrSKEGJYKYU.G2ko.,N9,NAWGJKKwCKqKLmKKE0HgemIiHEKIr.
.CqIin4a.HEXyId0mo0GRqXk22QgUgZUA470rGEiGEaqi0GRqX2,QioJiPBhR3Y3p7qk2M0G2k
X.a0Ug22HtCk2KIb.AV7lt66QgjhhhBgUYe6V2hA.UdgV7A,HMFN0EEcP.UZJim3ZXxhhlIqk2
M09W33Y33f7ZeBA,akWuYB.Q5MGohUQYU2aUYe6h6uoWSZZ3joZZUohdQbUAhUI50nRqk2M0j8
GH8H986H96t76R967uH,NNl9RrOOv86pVnRfdhfv2Y7VdBZUgcC,gcAVZ3jo3YugbUod7ZdBAV
7Eb.0LtyqlumlyKrOrkmKLKKwGLEkmWbvgV7kYuoVmII0Ltyql.sQ99RhPMN99,7O1vQ3uP7PS
HN1HkW66DONd1cUXDJ9X1xhiZimxhgZhZJinpZHZC58RZ9P7ONbvM,Mwd0.UiQcjpho,YcZRiX
3.5uPAA.cQ...sQR,.G20EtF.0.G,,6.M00.,..1cUXDJcIf9P9fQbf9bWGhigFWE.4Te.sQRd
If9P9HWE.8z,E.0.L3DU.QI2U.sU.ktumdsIdPSNPN7ONbH.4D.o3aLq.,cwF.,.E2Eh6.,6.I
E.EL4Iu.6F6.G.0..676.16.6.665hK2.,sFnQ.ytrM.M.6.,U0Ky8.,..e,2.A.c80S45.2UE
C.6...nK1...
--- end of encoding ---
With Josef's changes I have not the trouble which I mentioned above.
That is the current state.
Oleg, please test Josef's changes and tell me if you are happy with his solution.
I send a copy of this e-mail to Josef.
With best regards
Helmut Zinn