📄 release.txt
字号:
const KUidOplSkeletonApp&=&100002C4
const KAppName$="SkelOpl"
APP SkelOpl,KUidOplSkeletonApp&
CAPTION KAppName$,KLangEnglish%
ENDA
- Also does the following check at the very start to stop developers accidentally using
the skeleton's UID and just changing the caption:
if KUidOplSkeletonApp&=&100002C4
if KAppName$<>"SkelOpl"
alert("The UID &"+hex$(KUidOplSkeletonApp&)+" has been reserved", "You need to reserve your own through Symbian")
rem The UID defined above must be changed. Not changing it will result in incorrect identification of your application
rem and of its documents by the System screen and by other system components.
stop
endif
endif
- Support INI file using IOOPEN, with App's Uid3 as required
- Handles "R" command-line parameter using INI file
- Saves the bitmap file on exit and last opened file used to INI
The new procedures and code to do this:
- OpenIniFile%:(AppUid&)
This opens and existing ini file and checks the uids. If there are any errors doing this
(other than access denied, in which case it returns the error) it replaces the file with a
new ini file and puts in the uids. It returns the file handle leaving the file position at
the end of the uids
- SetLastUsedFile%:(FileName$,AppUid&)
This opens the ini file using the above function and then writes the filename (always 256
bytes) to the file. The file is then closed and any errors are returned.
- GetLastUsedFile$:(AppUid&) Similar to the above only errors trying to read the name result
in a zero length string being returned.
- The processCmdLine procedure has been modified to handle the 'R' command letter. Basically
it tries to get the last used file, if the name returned is null or the file doesn't exist it
changes to using the cmd$(2) file name. If this file exists the cmd3$ copy of the command
letter is changed to "O", otherwise it is changed to "C"
- Also added SetLastUsedFile%:(GetDoc$,970406151) call to the exit command to set this in the
INI file
v0.43
-----
For ROM 017, 019 and 020
Uses: FBSERV 058, DBMS 034, OPLT 034, EIKON 188 and dependencies
(Released by Howard on 12 May 1997)
Rebuilt for APPARC 064
1) Fixed group\MNT VALID. Now validates all ARM release DLLs:
opl.app
oplr.dll
system.opx
date.opx
dbase.opx
bmp.opx
printer.opx
recopl.rdl
2) Fixed discrepancy between count of IMPORT_C decl. in released
headers and exports in DEF/FRZ files:
Component MARM exp. WINS exp. IMPORT_C decl.
========= ========= ========= ==============
OPL 138 138 135
- 2 exports in OPLDOC.H now released in INCC.PRJ:
void TOplDocRootStream::ExternalizeL(RWriteStream& aStream) const;
void TOplDocRootStream::InternalizeL(RReadStream& aStream);
- 2 extra IMPORT_Cs explained by OPLR.H not being released:
IMPORT_C COplRuntime();
IMPORT_C TDesC& CurrentDocumentName();
These are for internal use only. OPL.APP needs them to exist in OPLR.DLL.
- 1 export removed from OPLDB.H (function does not exist at all!):
IMPORT_C COplRowSet::PositionAnyL(TUint aPos)
3) MAKTRAN for RECOPL.RDL was missing -z..\..\epoc32\release\marm\rec.frz
4) OplAPI::MapTranslatorError() now calls OplUtil::GetErrResource()
with 16-bit value as required. Was 32-bit value with some extra flag
bits.
5) OplAPI::MapTranslatorError() was mapping EErrLineTooLong and
EErrAssignToConstant incorrectly (to IllegalOpcode and
ArgumentError).
Now mapped to RecordTooLarge and BadAssignment instead.
6) COplWindow::GetClockPositionAndSize() now ignores minimum size
passed except for first time - i.e. uses original size.
7) SYSTEM.OPX:
- IrDARead() fixed
- IrDAReadA() added
The OPLR release notes haven't previously listed the following SYSTEM.OPX
procedures added last week:
SendKeyEventToApp&:(threadId&,previous&,code&,scanCode&,modifiers&,repeats&) : 61
IrDAConnectToSend&:(port&) : 62
IrDAConnectToReceive:(port&, BYREF statusW&) : 63
IrDAWrite:(chunk$, BYREF statusW&) : 64
IrDARead$: : 65
IrDAReadA:(stringAddr&, BYREF statusW&): 66
IrDAWaitForDisconnect: : 67
IrDADisconnect: : 68
v0.42
-----
For ROM 016 Test (No ROM 016)
(Released by Howard on 8/5/97)
Uses: Oplt 034,Dbms 034, Fbserv 058, Eikon 184 and Eikon's dependencies
For Rom 016
Ready for freeze verification.
New releasables (debugger interface coming soon):
MARM freeze release MARMFRZ.PRJ:
- \epoc32\release\marm\OPX.FRZ
- \epoc32\release\marm\OPXD.FRZ
WINS freeze release WINSFRZ.PRJ:
- \epoc32\release\wins\OPX.FRZ
- \epoc32\release\wins\OPXD.FRZ
\System\Opx\Eon.opx renamed to \System\Opx\System.opx
\System\Opl\Eon.oxh renamed to \System\Opl\System.oxh
All OPX loading modules will need retranslating with that release.
GETTEXTED, GETSHELL and GETREL all now do INSTLANG UK on
completion.
Resource changes
----------------
1) OPLR.DSC released.
2) Added resource for "Incompatible declaration" translator error
3) Resource file changed as recommended by Terry.
Also "Service not supported" changed to less specific "Not supported".
Configuration changes
---------------------
1) BMARM/BWINS directories now exist just to contain the freeze
files for the moment. MAKs aren't yet stored there, nor is building
done there. FRZs/DEFs must be copied/generated to there.
2) OPX[D].FRZ/.DEF temporarily exist in both INC and BMARM/BWINS
directories - because current OPX builds need them in INC.
Released from BMARM/BWINS though using MARMFRZ.PRJ and WINSFRZ.PRJ.
3) WINS OPLR uses Names configs and links against the DEFs.
4) Program.h changed so OPLEDIT needs to use it
Other changes
-------------
1) Implemented calling OPX procedures by ordinal for efficiency.
OPXs must now have a 3rd Uid which is specified after the OPX name in the DECLARE OPX statement. This is checked
on loading the OPX and a 'This item is unavailable' error is presented if incorrect.
New syntax:
DECLARE OPX fred,&12345678,$1234
func:(1rg2,arg2) : 23
ENDP
i.e. the function name is followed by a colon and the function number. The function number is
the number for linking by ordinal. In the qcode this is emitted in place of the function index used previously.
ALIAS is no longer required - just change the name declared itself (and comment the original name for documentation).
In the module, the OPX table is as before except that the function count and function names
are no longer included.
2) The name of the OPX is now given in the error messages when an invalid OPX version or Uid is used.
3) OplAPI::MapTranslatorError() now maps
EErrIconMaskMissing to KOplErrIconMaskMissing (-132)
EErrIncompatibleDeclaration to KOplErrIncompatibleDeclaration (-133)
4) Changed resource "Media is corrupt" to "File is corrupt" because
OPL doesn't have enough information to know when media is corrupt in
fact. Better to say file is corrupt and leave it to the Shell to
confirm the worst. (The problem is that OPL maps KErrCorrupt via
Opl1993Util, which gives error -66 E_FILE_CORRUPT which has error text
"Media is corrupt" maybe OPL1993UTIL should change - KErrCorrupt is used
e.g. by FBSERV to mean a corrupt file).
5) Manual change needed: Translator now supports TRAP RAISE err%.
This clears the TRAP flag and sets ERR value to err%.
(Not for manual: Being able to clear the flag is helpful in case forgotten in a runtime
- as occurred with some graphics keywords in Opl1993. The POKEing Opl1993 fix is not possible in
OPL32.)
6) gCLOCK now takes offset& rather than offset%. If you OR $100 with
mode%, offset& now specifies seconds offset rather than minutes.
7) Font Uid is now returned in gINFO32 info&() as info&(9)
Important changes affecting OPX authors
---------------------------------------
1) The interface to OPXs has now been changed. See \OPLR\TOPX\TOPX.MAK for new template code. All the following
extracts are from that project.
Instead of the 3 exports previously required, the OPL runtime now requires only 1 export.
This must be the 1st export of an OPX (note that it has similar body to the previously exported OpxSetTlsL()):
EXPORT_C COpxBase* NewOpxL(OplAPI& aOplAPI)
// Creates a COpxBase instance as required by the OPL runtime
// This object is to be stored in the OPX's TLS as shown below
{
COpxRoot* tls=((COpxRoot*)Dll::Tls());
if (tls==NULL)
{
tls=COpxRoot::NewL(aOplAPI);
Dll::SetTls(tls); // this object must be stored in the Tls
}
return (COpxBase *)tls;
}
The COpxRoot class above derives from the abstract class COpxBase defined
by OPLR in released header OPX.H as:
class OplAPI;
class COpxModule;
class COpxBase : public CBase
{
friend class COpxModule;
public:
IMPORT_C COpxBase(OplAPI& aOplAPI);
virtual void RunL(TInt aProcNum)=0; // run extension procedure aProcNum
virtual TInt CheckVersion(TInt aVersion) =0; // check DECLARE OPX version is ok
protected:
OplAPI& iOplAPI;
private:
IMPORT_C void IncAccessCount();
IMPORT_C TInt DecAccessCount();
private:
TInt iAccessCount;
};
The COpxRoot class can be renamed as appropriate to your OPX.
class COpxRoot : public COpxBase
// An instance of this class is created immediately after the OPX is loaded (using LOADM)
// and the object pointer must be stored in the Tls (Thread local static).
// See the 1st EXPORT function NewOpxL(), which does this for you.
// The Tls contains the single global (32-bit) value available to any EPOC32 DLL.
// No other non-const static data may be used.
//
{
public:
static COpxRoot* NewL(OplAPI& aOplAPI);
virtual void RunL(TInt aProcNum);
virtual TInt CheckVersion(TInt aVersion);
// Add any other members specific to your OPX
// ...
private:
// the language extension procedures
enum TExtensions
{
EAdd3=1,
EIncNumericArgsPassedByref
};
void Add3() const;
void IncNumericArgsPassedByref() const;
private:
void ConstructL();
COpxRoot(OplAPI& aOplAPI);
~COpxRoot() ;
};
With dynamic linkage by ordinal, the function name table is no longer required. An OPX's COpxRoot must now implement
the COpxBase interface providing RunL() and CheckVersion() functions.
The OPL runtime calls CheckVersion() immediately after calling the exported NewOpxL().
RunL() is passed the ordinal of the OPX procedure to be called.
All OPX extension procedures are now private members of the COpxBase
derived class, so the COpxRoot and OplAPI references no longer need
to be passed to these procedures.
v0.41
-----
For ROM 015
Uses: eikon=180,fbserv=058+,dbms=034,oplt=031 and Eikon's dependencies
Compatible with OplEdit (TEXTED) 038
FBSERV 058 needed by translator - otherwise get 'Not found' error in ICON
instead of 'Eof' error when bitmap index out of range, making ICON fail
1) Added:
gCIRCLE radius[,fill%]
gELLIPSE w%,h%[,fill%]
fill%<>0 means fill
2) Added:
gSETPENWIDTH width%
width% in pixels
3) Added:
dEditMulti ptrData&,prompt$,widthInChars%,numberLines%,maxLength%
Defines a multi-line edit box, to go in a dialog.
ptrData& is the address of a buffer to take the edited data. It can be the address
of an array as returned by ADDR, or of a heap cell, as returned by ALLOC.
Special characters from \epoc32\include\txtetext.h still need adding to const.oph:
EParagraphDelimiter=0x06,
ELineBreak=0x07,
EPageBreak=0x08,
ETabCharacter=0x09,
ENonBreakingTab=0x0a,
ENonBreakingHyphen=0x0b,
EPotentialHyphen=0x0c,
ENonBreakingSpace=0x10,
EPictureCharacter=0x0e,
EVisibleSpaceCharacter=0x0f
prompt$ be displayed on the left side of the edit box.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -