Just a thought ! (OpenInsight 32-bit Specific)
At 13 AUG 2003 05:18:59AM Colin Rule wrote:
As OI 32 supports long filenames, wouldn't it be wonderful if the Rev files for LK and OV were combined into one file, and the filename actually reflected the files nane and not REVnnnnn.
Whats the chance?
It would make it a lot easier to maintain, and our dear old friends 'the end user' would actually know what files were actually what.
Colin
At 13 AUG 2003 06:48AM The Sprezzatura Group wrote:
Colin
We'd guess neglible given how linear hash actually works. The removal of REVNNNNN is trivial - the combination of LK and OV less so.
The Sprezzatura Group
World Leaders in all things RevSoft
At 13 AUG 2003 11:03AM Colin Rule wrote:
I'd settle for FILENAME.LK and FILENAME.OV
Would be a good improvement.
One added benefit would be that you could copy files from one folder to another and not have to worry about the Rev numbers linked to the Revmedia table.
Colin
At 13 AUG 2003 11:48AM Don Miller - C3 Inc. wrote:
I think that RTP57 would be a major undertaking. Think about Indexing and the very "guts" of the system. You'll probably grow old and grey before this gets changed in the near term.
Don M
At 13 AUG 2003 11:58AM Richard Hunt wrote:
I agree with you Colin. It would be nice to be able to use long filenames.
Although, It would probably become difficult because the "FILEVAR" of the "OPEN" statement is structured somewhat unique.
Other development software uses the "VOC" file to "point" (path) to the actual data file and dictionary file. Very convienent when you want to move or organize the files. And there would be no need for attaching volumes.
At 13 AUG 2003 02:36PM Gerald Lovel wrote:
Colin,
The .LK and .OV cannot be combined easily, but in the old AREV days there were utilities which would open REVMEDIA, display the file names, and allow you to change the DOS filename and REVMEDIA pointer record to anything you like (within the 8-char limitation). This doesn't eliminate the need for REVMEDIA, of course, and database attach images are also an issue.
But go to it. This utility can't be hard to write (or it isn't hard in AREV).
Gerald
At 14 AUG 2003 05:39AM Steve Smith wrote:
The REVG LNK file system used one file with the overflow frames appended to the end of the hashed portion. One physical file. Hash/modulo structure. RTP52.
I have seen EMPMAST.LK and EMPMAST.OV used - this was the subject of a REVELATION Compuserve forum thread circa 1995. I think the revmedia map was "adjusted" and the REVnnnnn.* files renamed in DOS. There may have been a REVMEDIA article - search sprezzatura.com
I believe there might have been a catch - possibly indexing - or maybe the Novell lock tokens / file handles were dependent on the filename having a number under Novell. Can't recall now. But it did work.
A lot of time has passed since then….
Steve
At 14 AUG 2003 06:04AM Oystein Reigem wrote:
I discussed readable LK/OV file names with Sprezzatura UK while visiting last year. According to my notes this is the procedure for changing names:
- start OI
- remove indexing
- detach volume
- close OI
- rename files (e.g, CLIENTS.LK/OV for a CLIENTS table and DCLIENT.LK/OV for its dict)
- start OI
- change REVMEDIA entries
- re-attach volume.
I was told that index tables are difficult to rename.
I didn't do it, though. Can't remember if there was a catch.
- Oystein -
At 14 AUG 2003 07:41AM Peter Lynch wrote:
Yes - and now you could easily write a MFS to emulate Universe's "UD" file type - where the OS directory name is the (Arev) file name and the file names in that directory are the keys (and of course the contents of the files are the data).
At 14 AUG 2003 07:50AM Peter Lynch wrote:
I had one for DOS - so i thought id post it here - it is useless in Arev anyway because of the 64k and long file name problems.
And you dont need to do the fiddling i do with the keys in OI. So some of it is redundant.
FUNCTION MANAGE.DOS.MFS (DOS.MFS.FUNCTION, DOS.WILDCARDS, ENTITY.NAME, KEY, MFS.PARAMETERS, ACCESS.MODE, RECORD, DOS.RECORD, DOS.PATH.NAME, DOS.DIRECTORY, FILE.TYPE)
DECLARE FUNCTION GET.TEMPORARY.FILE
*
*
*
* Date Written 14 JUL 1992
* Time Written 22:41
* Written by Peter Lynch
*
*
EQUATE PROCESS.NAME@ TO 'MANAGE.DOS.MFS'
$INSERT OUR.OPERATING.SYSTEM, RUN.PROCESS
RETURN RETURNED.TUPLE
MAINLINE.:
RETURNED.TUPLE='
*
*
COMMON /ARG.M.DOS.MFS/ DOS.RECORDS.ON@
IF DOS.RECORDS.ON@=' THEN
_ DOS.RECORDS.ON@=TRUE END BEGIN CASE _ CASE DOS.MFS.FUNCTION=LOAD.DIRECTORY'
_ GOSUB LOAD.DIRECTORY _ CASE DOS.MFS.FUNCTION=BEFORE.MFS'
_ IF DOS.RECORDS.ON@ THEN _ GOSUB BEFORE.MFS
_ END _ CASE DOS.MFS.FUNCTION=AFTER.MFS'
_ IF DOS.RECORDS.ON@ THEN _ GOSUB AFTER.MFS
_ END _ CASE DOS.MFS.FUNCTION=SET'
_ ATTRIBUTE.NAME=DOS.WILDCARDS _ VALUE=ENTITY.NAME
_ GOSUB SET _ CASE DOS.MFS.FUNCTION=GET'
_ ATTRIBUTE.NAME=DOS.WILDCARDS _ GOSUB GET
_ RETURNED.TUPLE=VALUE _ CASE OTHERWISE
_ NOTIFY.MSG('Process %1% | Unknown function %2%', PROCESS.NAME@: @FM: DOS.MFS.FUNCTION) END CASE * * RETURN SET: _ BEGIN CASE
_ CASE ATTRIBUTE.NAME=DOS.RECORDS.ON' _ DOS.RECORDS.ON@=VALUE
_ CASE OTHERWISE _ NOTIFY.MSG('Process %1% | %2% cannot be Set', PROCESS.NAME@: @FM: ATTRIBUTE.NAME)
_ END CASE RETURN GET: _ VALUE='
_ BEGIN CASE _ CASE ATTRIBUTE.NAME=DOS.RECORDS.ON'
_ VALUE=DOS.RECORDS.ON@ _ CASE OTHERWISE
_ NOTIFY.MSG("Process %1% | %2% cannot be Got | You can't always get what you want", PROCESS.NAME@: @FM: ATTRIBUTE.NAME) _ END CASE
RETURN
LOAD.DIRECTORY:
_ DOS.RECORDS.ON=DOS.RECORDS.ON@ _ DOS.RECORDS.ON@=FALSE
_ DOS.FILE.NAMES=SELECT.DATA('DOS', DOS.WILDCARDS,
) _ TEMPORARY.FILE.NAME=GET.TEMPORARY.FILE(
) _ FILE.KEYS=SELECT.DATA(ENTITY.NAME,
, DOS.PATH.NAME) _ END CASE RETURN READ.DOS: _ IF DOS.FILE.NAME) _ FILE.KEY.COUNT=COUNT.FIELDS(FILE.KEYS) _ FOR FILE.KEY.NO=1 TO FILE.KEY.COUNT _ FILE.KEY=FILE.KEYS _ FILE.NAME=GET.DATA(ENTITY.NAME, 1, FILE.KEY) _ SAVE.DATA(TEMPORARY.FILE.NAME, 1, FILE.NAME, FILE.KEY) _ NEXT FILE.KEY.NO _ FILE.COUNT=COUNT.FIELDS(DOS.FILE.NAMES) _ FOR FILE.NO=1 TO FILE.COUNT _ DOS.FILE.NAME=DOS.FILE.NAMES _ CURRENT.KEY=GET.DATA(TEMPORARY.FILE.NAME, 1, DOS.FILE.NAME) _ IF CURRENT.KEY=' THEN _ SAVE.DATA(ENTITY.NAME, '1', DOS.FILE.NAME, DOS.FILE.NAME) _ SAVE.DATA(TEMPORARY.FILE.NAME, 1, DOS.FILE.NAME, DOS.FILE.NAME) _ END _ NEXT FILE.NO _ COMMAND.LINE('DELETE-FILE ': TEMPORARY.FILE.NAME: ' (S)',
,) _ DOS.RECORDS.ON@=DOS.RECORDS.ON RETURN BEFORE.MFS: _ DOS.DIRECTORY=MFS.PARAMETERS _ FILE.TYPE=MFS.PARAMETERS _ BEGIN CASE _ CASE ACCESS.MODE=UPDATE' _ GOSUB GET.DOS.FILE.NAME _ IF DOS.FILE.NAME=' THEN _ OK=TRUE _ PART1=KEY1, 'F.' _ PART2=FIELD(KEY, '.', 2) _ IF LEN(PART2) ] 4 THEN _ OK=FALSE _ END _ IF OK THEN _ IF LEN(PART1) ] 8 THEN _ OK=FALSE _ END _ END _ IF OK THEN _ IF LEN(PART2) THEN _ DOS.FILE.NAME=PART1: '.': PART2 _ END ELSE _ DOS.FILE.NAME=PART1 _ END _ END _ END _ IF DOS.FILE.NAME=' THEN _ DOS.DIRECTORY.DEFINITION=GET.DATA('DICT.':ENTITY.NAME,
, 'DOS.FILE.INFO') _ DOS.FILE.NUMBER=DOS.DIRECTORY.DEFINITION _ DOS.EXTENSIONS=PROMOTE(MFS.PARAMETERS) _ DOS.EXTENSION=DOS.EXTENSIONS _ LOOP _ DOS.FILE.NUMBER += 1 _ DOS.DIRECTORY.DEFINITION=DOS.FILE.NUMBER _ DOS.FILE.NAME=F': DOS.FILE.NUMBER: DOS.EXTENSION _ UNTIL GET.DATA('DOS',, DOS.DIRECTORY:'\':DOS.FILE.NAME)=' _ REPEAT _ SAVE.DATA('DICT.': ENTITY.NAME,
,'DOS.FILE.INFO', DOS.DIRECTORY.DEFINITION) _ END _ DOS.RECORD=RECORD _ RECORD=' _ RECORD=DOS.FILE.NAME _ RECORD=DOS.DIRECTORY _ DOS.PATH.NAME=DOS.DIRECTORY:'\':DOS.FILE.NAME _ * The RECORD gets written to the DOS File Name lists. _ * then the DOS.RECORD gets written to the DOS file _ * The pointer record is always updated since the _ * DOS directory may change. _ CASE ACCESS.MODE=READ' _ RECORD=' _ CASE ACCESS.MODE=DELETE' _ GOSUB GET.DOS.FILE.NAME _ DOS.PATH.NAME=DOS.DIRECTORY:'\':DOS.FILE.NAME _ END CASE RETURN GET.DOS.FILE.NAME: _ DOS.RECORDS.ON=DOS.RECORDS.ON@ _ DOS.RECORDS.ON@=FALSE _ DOS.FILE.NAME=GET.DATA(ENTITY.NAME, '1', KEY) _ DOS.RECORDS.ON@=DOS.RECORDS.ON RETURN AFTER.MFS: _ BEGIN CASE _ CASE ACCESS.MODE=READ' _ DOS.FILE.NAME=RECORD _ GOSUB READ.DOS _ CASE ACCESS.MODE=UPDATE' _ IF DOS.RECORDTHEN _ IF FILE.TYPE=UNIX' THEN _ SWAP @FM WITH \0A\ IN DOS.RECORD _ IF DOS.RECORD-1,1 \0A\ THEN _ DOS.RECORD := \0A\ _ END _ END ELSE _ SWAP @FM WITH \0D0A\ IN DOS.RECORD _ END _ END _ SAVE.DATA('DOS',
, DOS.PATH.NAME, DOS.RECORD) _ RECORD=DOS.RECORD _ CASE ACCESS.MODE=DELETE' _ DELETE.DATA('DOS',THEN _ DOS.PATH.NAME=DOS.DIRECTORY:'\':DOS.FILE.NAME _ RECORD=GET.DATA('DOS',
, DOS.PATH.NAME) _ SWAP \0D0A\ WITH @FM IN RECORD _ SWAP \0A\ WITH @FM IN RECORD _ SWAP @FM:CHAR(9) WITH @FM:' ' IN RECORD _ SWAP CHAR(9) WITH ' ' IN RECORD _ END RETURN </QUOTE> View this thread on the forum...