我尝试编译一个我编写的简单程序,但是我收到以下错误:
:compile chris_programs fileprinter
fileprinter
.
[235] attempt to write into update protected file!
chris_programs文件是指向目录/ u / chris_programs的Q指针。
# pwd
/u/chris_programs
# ls -al
total 16
drwxrwxrwx 2 root system 256 Jun 16 06:58 .
drwxrwxrwx 15 root system 4096 Jun 13 17:40 ..
-rw-rw-rw- 1 root system 72 Jun 16 07:03 fileprinter
这是chris_programs文件的md条目:
DICT md 'chris_programs' size = 45
01 Q
02
03 /u/chris_programs
答案 0 :(得分:1)
很高兴看到你对这些超级指针感到满意。这里的问题是对象模块进入托管BASIC源文件的Dict。但是当您使用主机OS路径而未指定字典时,它不知道放置目标代码的位置。为此,我建议如下:
create-file dict chris_programs 3
(首先将你的md q指针复制到另一个名称,否则你将无法使用相同的名称。)
将有一个默认的q指针放入该dict文件中,它将对数据文件的任何引用指向dict(因此dict和数据是相同的空间)。然后,您可以将已经拥有的q指针(在上面重命名)复制到dict中以替换该项目:
copy md renamed_pointer (o
to: (dict chris_programs
所以现在你的源代码将在主机文件系统中,对象将在D3中。
有一种方法可以在主机操作系统中同时使用dict和data,但我不记得此时的语法。如果我收到信息,我会稍后再尝试更新。
我建议不要跟进“但我真的想要主机操作系统中的所有内容!”目标代码在DBMS之外没有用处,因此您可以将其保留在那里。至于源代码,我也在OS级别为源代码控制(与Subversion集成),与其他编辑器一起使用以及与其他MV DBMS共享。除非您正在做这样的事情,否则我建议您将所有源和对象保留在DBMS中。如果你想要一个更好的编辑器,AccuTerm wED(Windows编辑器)是一个具有语法高亮和许多其他功能的GUI。如果那是你的目标,我们可以单独讨论。
编辑:以下内容旨在提供所需问题的解决方案,超出已采取的错误步骤的限制。
让我们回到基础:源代码在数据文件中,对象在字典中。以下是将OS级别源与DBMS级别对象链接的方法。
create-file dict bp1 3
将有一个默认的q指针放入该dict文件中,它将对数据文件的任何引用指向dict(因此dict和数据是相同的空间)。您可以将新的反射指针替换为主机操作系统。使用ED或您喜欢的任何编辑工具但想法是:
ed dict bp1 bp1
dict中的指针项与dict同名。用以下内容替换该项目:
01 q
02
03 /path/foldername
行号仅供参考,请勿输入。请根据需要替换路径。您的D3用户(在pick0 OS文件中指定)必须具有对该路径的r / w访问权限。
所以现在你应该能够做到这样的事情:
ED BP1 TEST1
01 CRT "SUCCESS"
COMPILE BP1 TEST1
RUN BP1 TEST1
你会在/ path / foldername中找到TEST1。如果您列出DICT BP1,您将看到指向数据文件的BP1指针以及TEST1的对象模块的项目。
请点击此处,而不是改造您所拥有的东西,您应该在几分钟内取得成功。
请参阅上面关于“但我真的想要主机操作系统中的所有内容的注释!”
另一种源代码控制方法(不同但接近):将所有内容保存在DBMS中。定期将源转储到操作系统级备份文件,或复制到文件夹。然后源控制OS数据。这消除了操作系统和程序之间的直接连接,大多数D3人员无论如何都不理解。