明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 434|回复: 16

[经验] 了解下fas是怎么加载的

[复制链接]
发表于 2022-8-4 12:48 | 显示全部楼层 |阅读模式
本帖最后由 nzl1116 于 2022-8-4 12:55 编辑

(defun _al-load-file (UnVar0 UnVar1 / UnVar2 UnVar3 UNVar4 UNVar5)
  (setq UnVar2 nil)
  (setq UnVar3 nil)
  (if (setq UNVar2 (string-equal UNVar1 ".FAS"))
    (if (setq UNVar3 (make-encryptedfile-input-stream UNVar0))
      (al-fas-load UNVar3)
    )
    (if (setq UNVar3 (make-protectedfile-input-stream UNVar0))
      (al-load-stream UNVar3)
      (progn
        (setq UNVar4 (open UNVar0 :INPUT))
        (setq UNVar5 UNVar4)
        (defun -unwind-cleanup- ()
          (if (streamp UNVar4)
            (if (open-streamp UNVar4)
              (close UNVar4)
            )
          )
        )
        (defun -unwind-protect- (/ sUNVar0)
          (setq sUNVar0 _%sys-error-hook%)
          (defun UnFun (Arg0)
            (setq _%sys-error-hook% sUNVar0)
            (and (input-streamp UNVar5) (close UNVar5))
            (if sUNVar0 (sUNVar0 Arg0))
          )
          (setq _%sys-error-hook% UnFun)
          (if UnVar2
            (al-fas-load UNVar5)
            (al-load-stream UNVar5)
          )
        )
        (_unwinded-apply '-unwind-cleanup- '-unwind-protect- nil)
      )
    )
  )
)

评分

参与人数 3明经币 +3 收起 理由
ssyfeng + 1 赞一个!
baitang36 + 1 很给力!
tryhi + 1 很给力!

查看全部评分

 楼主| 发表于 2022-8-4 18:30 | 显示全部楼层
;;;总结下就如下这样了,返回的是模块的表
  1. (defun AYL-Load-Fas (fasFile / file Var0 Int0 Int1 mod0 mod1 mLst)
  2.   (setq mLst nil)
  3.   (setq file (open fasFile "r"))
  4.   (while (not (= (setq Var0 (as:read file nil file)) file))
  5.     (if (and
  6.           (= Var0 'FAS4-FILE)
  7.           (numberp (setq Int0 (as:read file nil nil)))
  8.         )
  9.       (progn
  10.         (setq mod0 (_rntm-module file nil Int0))
  11.         (if (numberp (setq Int1 (as:read file nil nil)))
  12.           (progn
  13.             (setq mod1 (_rntm-module file nil Int1))
  14.             ;;make-xsubr函数执行完,并没填充模块数据,但模块码有了
  15.             ;;执行完-tm-函数,才填充模块
  16.             ((make-xsubr mod1 0 '-tm-) mod0)
  17.             ;;(module-lit-vector mod1)
  18.             (setq mLst (cons (list mod0 mod1) mLst))
  19.           )
  20.         )
  21.       )
  22.     )
  23.   )
  24.   (close file)
  25.   (reverse mLst)
  26. )

评分

参与人数 1明经币 +1 收起 理由
xshrimp + 1 神马都是浮云

查看全部评分

 楼主| 发表于 2022-8-4 12:50 | 显示全部楼层
  1. (defun al-fas-load (UnVar0 / UnVar1 UnVar2 UnVar3)
  2.   (setq UnVar1 nil)
  3.   (setq UnVar2 nil)
  4.   (setq UnVar3 nil)
  5.   (setq UNVar1 0)
  6.   (while (not (= (setq UNVar3 (as:read UNVar0 nil UNVar0)) UNVar0))
  7.     (cond
  8.       ((= UNVar3 (find-symbol "FAS4-FILE" :AUTOLISP)) (setq UnVar2 (func-00004A8A UnVar0)))
  9.       ((= UNVar3 (find-symbol "FAS2-FILE" :AUTOLISP)) (setq UnVar2 (func-00004A47 UnVar0)))
  10.       ((= UNVar3 (find-symbol "FAS-FILE" :AUTOLISP))  (setq UnVar2 (func-000049F2 UnVar0)))
  11.       ((= UNVar3 (find-symbol "FAS3-FILE" :AUTOLISP)) (setq UnVar2 (func-00004BAA UnVar0)))
  12.       (T (func-00004892 UnVar0)) ;文件错误信息
  13.     )
  14.     (setq UnVar1 (1+ UnVar1))
  15.   )
  16.   (and *load-verbose* (load-verbose-print UNVar0 UnVar1))
  17.   UnVar2
  18. )
 楼主| 发表于 2022-8-4 12:51 | 显示全部楼层
  1. (defun func-00004A8A (UnVar0 / UnVar1 UnVar2)
  2.   (setq UnVar1 nil)
  3.   (setq UnVar2 nil)
  4.   (setq UnVar2 (func-000049B7 UnVar0))
  5.   (setq UnVar1 (func-000049B7 UnVar0))
  6.   (setq UnVar1 ((make-xsubr UnVar1 0 '-tm-) UnVar2))
  7.   (and *load-print* (print UnVar1))
  8.   UnVar1
  9. )
  10. (defun func-000049B7 (UnVar0 / UnVar1)
  11.   (setq UnVar1 (as:read UnVar0 nil nil))
  12.   (if (fixnump UnVar1)
  13.     (if (>= UnVar1 0)
  14.       nil
  15.       (func-00004892 UnVar0) ;文件错误信息
  16.     )
  17.     (func-00004892 UnVar0) ;文件错误信息
  18.   )
  19.   (_rntm-module UnVar0 nil UnVar1)
  20. )
发表于 2022-8-4 14:02 | 显示全部楼层
感谢分享,学习了
发表于 2022-8-4 19:32 | 显示全部楼层
晨语大侠把压箱底的东西都拿出来了,大家鼓掌👏
发表于 2022-8-4 21:59 | 显示全部楼层
太高级了,看不懂,那些不变色的函数是隐藏函数吗
发表于 2022-8-4 22:56 | 显示全部楼层
好东西。收藏了
发表于 2022-8-5 08:25 | 显示全部楼层
太高深了,有没有讲解一下
发表于 2022-8-5 09:56 | 显示全部楼层
有没有办法,在不生成本地文件的情况下,加载fas文件。
或者说有没有办法知道al-fas-load对应的arx函数是什么

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2022 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2022-8-8 17:56 , Processed in 0.155553 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表