1

我试图编译我编写的一个简单程序,但出现以下错误:

: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
4

1 回答 1

1

很高兴看到您对这些超级 q 指针感到满意。这里的问题是对象模块进入了托管 BASIC 源的文件的字典。但是,当您使用主机操作系统路径而不指定字典时,它不知道将目标代码放在哪里。为此,我建议以下内容:

create-file dict chris_programs 3

(首先将您的 md q 指针复制到其他名称,否则您将无法使用相同的名称。)

将有一个默认的 q-pointer 放入该 dict 文件中,它将对数据文件的任何引用指向 dict (因此 dict 和 data 是相同的空间)。然后,您可以将已有的 q 指针(根据上面重命名)复制到 dict 中以替换该项目:

copy md renamed_pointer (o
to: (dict chris_programs

所以现在您的源将在主机文件系统中,而对象将在 D3 中。

有一种方法可以在主机操作系统中同时拥有字典和数据,但我现在不记得语法了。如果我得到信息,我会在稍后尝试更新它。

我建议不要跟进“但我真的想要主机操作系统中的所有内容!” 目标代码在 DBMS 之外没有任何用途,因此您不妨将其保留在那里。至于源代码,我也在操作系统级别放置了一些源代码,用于源代码控制(与 Subversion 集成),与其他编辑器一起使用,并与其他 MV DBMS 共享。除非您正在做这样的事情,否则我建议您将所有源和对象保留在 DBMS 中。如果您想要一个更好的编辑器,AccuTerm wED(Windows 编辑器)是一个带有语法高亮和许多其他功能的 GUI。如果这是您的目标,我们可以单独讨论。


编辑:以下内容旨在为所需问题提供解决方案,超出已采取的错误步骤的限制。

让我们回到基础:源代码在数据文件中,对象在字典中。以下是如何将操作系统级别的源链接到 DBMS 级别的对象。

create-file dict bp1 3

将有一个默认的 q-pointer 放入该 dict 文件中,它将对数据文件的任何引用指向 dict (因此 dict 和 data 是相同的空间)。您可以用主机操作系统的新指针替换该自反指针。使用 ED 或您喜欢的任何编辑工具,但想法是:

ed dict bp1 bp1

dict中的指针项与dict同名。将该项目替换为以下内容:

01 q
02
03 /path/foldername

行号仅供参考,请勿输入。根据需要替换路径。您的 D3 用户(在 pick0 操作系统文件中指定)必须具有对该路径的读/写访问权限。

所以现在你应该能够做这样的事情:

ED BP1 TEST1
01 CRT "SUCCESS"

COMPILE BP1 TEST1
RUN BP1 TEST1

您会在 /path/foldername 中找到 TEST1。如果您列出 DICT BP1,您将看到指向数据文件的 BP1 指针以及 TEST1 的对象模块的项。

与其改造你所拥有的,不如按照这个来,你应该在几分钟内就成功了。

请参阅上面关于“但我真的想要主机操作系统中的所有内容!”的注释。

另一种源代码控制方法(不一样但很接近):将所有内容保存在 DBMS 中。定期将您的源转储到操作系统级别的备份文件,或复制到文件夹。然后对该操作系统数据进行源代码控制。这消除了操作系统和程序之间的直接联系,这是大多数 D3 人无论如何都不理解的。

于 2014-06-16T19:14:08.297 回答