d3选择尝试写入更新受保护文件

时间:2014-06-16 11:24:47

标签: pick

我尝试编译一个我编写的简单程序,但是我收到以下错误:

: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

1 个答案:

答案 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人员无论如何都不理解。