nzl1116 发表于 2022-8-4 12:48:29

了解下fas是怎么加载的

本帖最后由 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)
      )
    )
)
)

nzl1116 发表于 2022-8-4 18:30:49

;;;总结下就如下这样了,返回的是模块的表
(defun AYL-Load-Fas (fasFile / file Var0 Int0 Int1 mod0 mod1 mLst)
(setq mLst nil)
(setq file (open fasFile "r"))
(while (not (= (setq Var0 (as:read file nil file)) file))
    (if (and
          (= Var0 'FAS4-FILE)
          (numberp (setq Int0 (as:read file nil nil)))
        )
      (progn
      (setq mod0 (_rntm-module file nil Int0))
        (if (numberp (setq Int1 (as:read file nil nil)))
          (progn
          (setq mod1 (_rntm-module file nil Int1))
          ;;make-xsubr函数执行完,并没填充模块数据,但模块码有了
          ;;执行完-tm-函数,才填充模块
          ((make-xsubr mod1 0 '-tm-) mod0)
          ;;(module-lit-vector mod1)
          (setq mLst (cons (list mod0 mod1) mLst))
          )
        )
      )
    )
)
(close file)
(reverse mLst)
)

nzl1116 发表于 2022-8-4 12:50:01

(defun al-fas-load (UnVar0 / UnVar1 UnVar2 UnVar3)
(setq UnVar1 nil)
(setq UnVar2 nil)
(setq UnVar3 nil)
(setq UNVar1 0)
(while (not (= (setq UNVar3 (as:read UNVar0 nil UNVar0)) UNVar0))
    (cond
      ((= UNVar3 (find-symbol "FAS4-FILE" :AUTOLISP)) (setq UnVar2 (func-00004A8A UnVar0)))
      ((= UNVar3 (find-symbol "FAS2-FILE" :AUTOLISP)) (setq UnVar2 (func-00004A47 UnVar0)))
      ((= UNVar3 (find-symbol "FAS-FILE" :AUTOLISP))(setq UnVar2 (func-000049F2 UnVar0)))
      ((= UNVar3 (find-symbol "FAS3-FILE" :AUTOLISP)) (setq UnVar2 (func-00004BAA UnVar0)))
      (T (func-00004892 UnVar0)) ;文件错误信息
    )
    (setq UnVar1 (1+ UnVar1))
)
(and *load-verbose* (load-verbose-print UNVar0 UnVar1))
UnVar2
)

nzl1116 发表于 2022-8-4 12:51:18

(defun func-00004A8A (UnVar0 / UnVar1 UnVar2)
(setq UnVar1 nil)
(setq UnVar2 nil)
(setq UnVar2 (func-000049B7 UnVar0))
(setq UnVar1 (func-000049B7 UnVar0))
(setq UnVar1 ((make-xsubr UnVar1 0 '-tm-) UnVar2))
(and *load-print* (print UnVar1))
UnVar1
)
(defun func-000049B7 (UnVar0 / UnVar1)
(setq UnVar1 (as:read UnVar0 nil nil))
(if (fixnump UnVar1)
    (if (>= UnVar1 0)
      nil
      (func-00004892 UnVar0) ;文件错误信息
    )
    (func-00004892 UnVar0) ;文件错误信息
)
(_rntm-module UnVar0 nil UnVar1)
)

hhh454 发表于 2022-8-4 14:02:05

感谢分享,学习了

baitang36 发表于 2022-8-4 19:32:33

晨语大侠把压箱底的东西都拿出来了,大家鼓掌👏

caoliu023 发表于 2022-8-4 21:59:55

太高级了,看不懂,那些不变色的函数是隐藏函数吗

linzenghuo 发表于 2022-8-4 22:56:50

好东西。收藏了

springwillow 发表于 2022-8-5 08:25:23

太高深了,有没有讲解一下

雨的节奏 发表于 2022-8-5 09:56:51

有没有办法,在不生成本地文件的情况下,加载fas文件。
或者说有没有办法知道al-fas-load对应的arx函数是什么

页: [1] 2 3
查看完整版本: 了解下fas是怎么加载的