如何将重置程序从 Sun Pascal 转换为 Free Pascal?

问题描述 投票:0回答:3

我有一个使用Sun pascal 2.1编译的pascal程序,我现在想用fpc编译它,但遇到了一些麻烦。该程序中使用了重置过程,但是 Sun Pascal 的重置:reset(file,filename),其中 filename 是一个字符串(参见 Sun Pascal 3.0.2 参考手册); FPC复位时: 程序重置( var f:文件; l:长整型 );(http://www.freepascal.org/docs-html/rtl/system/reset.html),所以我得到了“不兼容类型”错误。

就我而言,reset的第二个参数是一个字符数组,是否可以将其更改为reset(file, sizeof(array)),或者我应该选择另一个编译器,例如gpc,在其中我发现了第二个参数重置也是字符串。

pascal freepascal
3个回答
0
投票

从这里开始:

http://wiki.freepascal.org/File_Handling_In_Pascal

但我赞同对流和/或字符串列表使用更现代的方式的动议。


0
投票

替代方案是 Modern Pascal 的 CLI (www.ModernPascal.com)。我编写它是为了将 Apple Pascal 和旧的 Turbo Pascal 迁移到现代平台上。我支持 99% 的旧语法,以及 Web、dBase 等(我通过这种方式将遗留解决方案移植到 Linux、Mac 等)。


0
投票

将文件变量(≈抽象句柄)与路径名(≈打开时的文件名之一)关联起来的 Borland Pascal 方法是

assign
。 您编写并放入
reset
的包装纸:

procedure reset(var fileDescriptor: text; const accessVia: string);
    begin
        assign(fileDescriptor, accessVia);
        {$push}
            {$IOChecks on}
            system.reset(fileDescriptor)
        {$pop}
    end;

编译器指令仅确保如果无法打开文件进行读取,reset

会失败,否则第一次尝试从文件中进行read
操作
将会失败无论如何早期失败,经常失败)原则)。

您需要为您访问的每个

file类型编写此

,例如:

type { Parameter list cannot contain local data type definition. } fileOfChar = file of char; procedure reset(var fileDescriptor: fileOfChar; const accessVia: string); begin assign(fileDescriptor, accessVia); {$push} {$IOChecks on} system.reset(fileDescriptor) {$pop} end;
如果您仍然打算

reset

文件
而不将文件变量与新路径名关联,则还必须为常规reset
插入一个包装器

procedure reset(var fileDescriptor: text); begin system.reset(fileDescriptor) end;
或在调用站点使用完全限定标识符 

system.reset

。
否则,FPC 认为您想要调用自定义 SunPascal 
reset
 并抱怨
太少参数。

:同时可以用 generic

specialize
 缩写。

© www.soinside.com 2019 - 2024. All rights reserved.