Advertisement
Testaware

Amiga - AMOSPro Explode Extension

Aug 15th, 2018
596
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         opt     O1+     ;Alarm! short branch
  2. ;-------------------------------------------------------------------------
  3.      **   **   **  ****   ****       *****  *****   ****
  4.     ****  *** *** **  ** **         **  ** **  ** **  **
  5.    **  ** ** * ** **  **  ****     *****  *****  **  **
  6.    ****** **   ** **  **     **   **     ****   **  **
  7.    **  ** **   ** **  ** **  **  **     ** **  **  **
  8.    **  ** **   **  ****   ****  **     **  **  ****    Explode Extension
  9. ;-------------------------------------------------------------------------
  10. ; Peace of Testaware, GenAm Macro Assembler V2.11D von HiSoft
  11. ;-------------------------------------------------------------------------
  12. ; AMOS, AMOSPro and AMOS Compiler V2.00+ (c) Europress Software 1990-2001
  13. ;-------------------------------------------------------------------------
  14. ; This V2.01 is public domain, last change ® Tuesday 10-06-02 23:22:48
  15. ;-------------------------------------------------------------------------
  16.  
  17. ExtNb   equ     7-1
  18.  
  19.         *
  20.  
  21.         Output  SYS:APSystem/AMOSPro_Explode.Lib
  22.  
  23.         Incdir  DH1:Asm/DevPac/Include/
  24.  
  25.         Include devices/trackdisk.i
  26.         Include exec/execbase.i
  27.         Include exec/types.i
  28.         Include exec/memory.i
  29.         Include libraries/dos.i
  30.         Include libraries/diskfont_lib.i
  31.         Include libraries/xpk.i
  32.         Include libraries/ppbase.i
  33.         Include libraries/powerpacker_lib.i
  34.         Include intuition/intuition_lib.i
  35.         Include intuition/intuitionbase.i
  36.         Include graphics/text.i
  37.         Include graphics/rastport.i
  38.         Include graphics/graphics_lib.i
  39.         Include amos/amos.i
  40.  
  41.         *
  42.  
  43.                 RsReset
  44.  
  45. * PowerPacker Data
  46. my_PpkLibBase   rs.l    1
  47. my_PpkSrc       rs.l    1
  48. my_PpkDst       rs.l    1
  49. my_PpkDstSize   rs.l    1
  50. my_PpkPackMode  rs.l    1
  51. my_PpkCInfo     rs.l    1
  52. my_PpkName      equ     0
  53. my_PpkEffPos    equ     4
  54. my_PpkCodePos   equ     8
  55. my_PpkCode      equ     12
  56. my_PpkCryptPos  equ     16
  57. my_PpkType      equ     20
  58. my_PpkSIZEOF    equ     24
  59. my_PpkKnow      equ     10
  60. my_PpkEffMode   equ     my_PpkSIZEOF*my_PpkKnow
  61.  
  62. * XPK Data
  63. my_XpkLibBase   rs.l    1               ;XpkLibrary
  64. my_XpkSrc       rs.l    1               ;XpkBankToPack
  65. my_XpkSrcSize   rs.l    1               ;XpkBankLength
  66. my_XpkDst       rs.l    1               ;XpkPackBuffer
  67. my_XpkDstSize   rs.l    1               ;XpkBufferLength
  68. my_XpkOutSize   rs.l    1               ;XpkPackedLength
  69. my_XpkName      rs.l    1               ;XpkBriefName
  70. my_XpkMode      rs.l    1               ;XpkPackMethod
  71. my_XpkPassWord  rs.l    1               ;XpkPassWord
  72. my_XpkErrNum    rs.l    1               ;XpkErrorNumber
  73. my_XpkErrLen    rs.w    1               ;XpkErrorMsgLen
  74. my_XpkErrMsg    rs.b    XPKERRMSGSIZE   ;XpkErrorMessage
  75.  
  76. * Decrunch Data
  77. my_DpkLibBase   rs.l    1
  78. _LVOdlAllocItem equ     -30
  79. _LVOdlFreeItem  equ     -36
  80. _LVOdlInitItem  equ     -42
  81. _LVOdlDecrunch  equ     -48
  82.  
  83. * Lh Data
  84. my_LpkLibBase   rs.l    1
  85. my_LpkSrc       rs.l    1
  86. my_LpkSize      rs.l    1
  87. my_LpkDst       rs.l    1
  88. my_LpkBuffer    rs.l    1
  89. my_LpkAux       rs.l    1
  90. my_LpkHeader    equ     8
  91. lh_Src          equ     0
  92. lh_SrcSize      equ     4
  93. lh_Dst          equ     8
  94. lh_DstSize      equ     12
  95. lh_Aux          equ     16
  96. lh_AuxSize      equ     20
  97. lh_Reserved     equ     24
  98. _LVOCreateBuffer        equ     -30
  99. _LVODeleteBuffer        equ     -36
  100. _LVOLhEncode            equ     -42
  101. _LVOLhDecode            equ     -48
  102.  
  103. * Rs Structure Data
  104. my_RsStart      equ     0
  105. my_RsLength     equ     4
  106. my_RsPosition   equ     8
  107. my_RsSIZEOF     equ     12
  108. my_RsMax        equ     8
  109. my_RsStruc      rs.b    my_RsSIZEOF*my_RsMax
  110.  
  111. * Amcaf Data
  112. my_AmcafCrack   rs.l    1
  113.  
  114. * FontList Data
  115. my_FntMax       equ     8
  116. my_FntStruc     rs.l    my_FntMax
  117.  
  118. * Iff Data
  119. my_IFFNORM      equ     0
  120. my_IFFCMPR      equ     1
  121. my_IFFACBM      equ     2
  122.  
  123. * File Data
  124. my_FileName     rs.l    1
  125. my_FileSize     rs.l    1
  126. my_FileBlocks   rs.l    1
  127. my_FileType     rs.l    1
  128. my_FileProtect  rs.l    1
  129. my_FileBnk      rs.l    1
  130. my_FileMsk      rs.l    1
  131.  
  132. * Current Dir Data
  133. my_CdLength     equ     256
  134. my_CdPath       rs.b    my_CdLength
  135.  
  136. * AMOS Bank Data
  137. my_BkDefault    equ     8
  138. my_BkHeader     equ     16
  139. my_BkName       equ     -8
  140. my_BkFuture     equ     -10
  141. my_BkFlag       equ     -12
  142. my_BkNumber     equ     -16
  143. my_BkLength     equ     -20
  144. my_BkNext       equ     -24
  145.  
  146. ET_SIZEOF       rs.w    0
  147.  
  148.         *
  149.  
  150. EXPLODE MACRO
  151.         dc.b    "AMOSPro Explode Extension V"
  152.         ENDM
  153. VERSION MACRO
  154.         dc.b    "2.01 © Testaware"
  155.         ENDM
  156.  
  157. DLEA    MACRO
  158.         move.l  ExtAdr+ExtNb*16(a5),\2
  159.         add.w   #\1-ET,\2
  160.         ENDM
  161.  
  162. XLEA    MACRO
  163.         move.l  ExtAdr+ExtNb*16(a5),\2
  164.         adda.l  #\1,\2
  165.         ENDM
  166.  
  167. DLOAD   MACRO
  168.         move.l  ExtAdr+ExtNb*16(a5),\1
  169.         ENDM
  170.  
  171. PUSH    MACRO
  172.         move.l  \1,-(sp)
  173.         ENDM
  174. PUSHM   MACRO
  175.         movem.l \1,-(sp)
  176.         ENDM
  177.  
  178. POP     MACRO
  179.         move.l  (sp)+,\1
  180.         ENDM
  181. POPM    MACRO
  182.         movem.l (sp)+,\1
  183.         ENDM
  184.  
  185. EXE     MACRO
  186.         movea.l $4.w,a6
  187.         LIB     \1
  188.         ENDM
  189.  
  190. DOS     MACRO
  191.         movea.l DosBase(a5),a6
  192.         LIB     \1
  193.         ENDM
  194.  
  195. INT     MACRO
  196.         movea.l T_IntBase(a5),a6
  197.         LIB     \1
  198.         ENDM
  199.  
  200. GFX     MACRO
  201.         movea.l T_GfxBase(a5),a6
  202.         LIB     \1
  203.         ENDM
  204.  
  205. FNT     MACRO
  206.         movea.l T_FntBase(a5),a6
  207.         LIB     \1
  208.         ENDM
  209.  
  210. LIB     MACRO
  211.         jsr     _LVO\1(a6)
  212.         ENDM
  213.  
  214. SYS     MACRO
  215.         PUSH    a6
  216.         movea.l \1,a6
  217.         jsr     _LVO\2(a6)
  218.         POP     a6
  219.         ENDM
  220.  
  221.         *
  222.  
  223. Start   dc.l    C_Tk-C_Off
  224.         dc.l    C_Lib-C_Tk
  225.         dc.l    C_Title-C_Lib
  226.         dc.l    C_End-C_Title
  227.         dc.w    0
  228.  
  229. **************************************************************************
  230. * OFFSETS TO FUNCTIONS
  231. *-------------------------------------------------------------------------
  232. C_Off   dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2,(L5-L4)/2
  233.         dc.w (L6-L5)/2,(L7-L6)/2,(L8-L7)/2,(L9-L8)/2,(L10-L9)/2
  234.         dc.w (L11-L10)/2,(L12-L11)/2,(L13-L12)/2,(L14-L13)/2,(L15-L14)/2
  235.         dc.w (L16-L15)/2,(L17-L16)/2,(L18-L17)/2,(L19-L18)/2,(L20-L19)/2
  236.         dc.w (L21-L20)/2,(L22-L21)/2,(L23-L22)/2,(L24-L23)/2,(L25-L24)/2
  237.         dc.w (L26-L25)/2,(L27-L26)/2,(L28-L27)/2,(L29-L28)/2,(L30-L29)/2
  238.         dc.w (L31-L30)/2,(L32-L31)/2,(L33-L32)/2,(L34-L33)/2,(L35-L34)/2
  239.         dc.w (L36-L35)/2,(L37-L36)/2,(L38-L37)/2,(L39-L38)/2,(L40-L39)/2
  240.         dc.w (L41-L40)/2,(L42-L41)/2,(L43-L42)/2,(L44-L43)/2,(L45-L44)/2
  241.         dc.w (L46-L45)/2,(L47-L46)/2,(L48-L47)/2,(L49-L48)/2,(L50-L49)/2
  242.         dc.w (L51-L50)/2,(L52-L51)/2,(L53-L52)/2,(L54-L53)/2,(L55-L54)/2
  243.         dc.w (L56-L55)/2,(L57-L56)/2,(L58-L57)/2,(L59-L58)/2,(L60-L59)/2
  244.         dc.w (L61-L60)/2,(L62-L61)/2,(L63-L62)/2,(L64-L63)/2,(L65-L64)/2
  245.         dc.w (L66-L65)/2,(L67-L66)/2,(L68-L67)/2,(L69-L68)/2,(L70-L69)/2
  246.         dc.w (L71-L70)/2,(L72-L71)/2,(L73-L72)/2,(L74-L73)/2,(L75-L74)/2
  247.         dc.w (L76-L75)/2,(L77-L76)/2,(L78-L77)/2,(L79-L78)/2,(L80-L79)/2
  248.         dc.w (L81-L80)/2,(L82-L81)/2,(L83-L82)/2,(L84-L83)/2,(L85-L84)/2
  249.         dc.w (L86-L85)/2,(L87-L86)/2,(L88-L87)/2,(L89-L88)/2,(L90-L89)/2
  250.         dc.w (L91-L90)/2,(L92-L91)/2,(L93-L92)/2,(L94-L93)/2,(L95-L94)/2
  251.         dc.w (L96-L95)/2,(L97-L96)/2,(L98-L97)/2,(L99-L98)/2,(L100-L99)/2
  252.         dc.w (L101-L100)/2,(L102-L101)/2,(L103-L102)/2,(L104-L103)/2,(L105-L104)/2
  253.         dc.w (L106-L105)/2,(L107-L106)/2,(L108-L107)/2,(L109-L108)/2,(L110-L109)/2
  254.         dc.w (L111-L110)/2,(L112-L111)/2,(L113-L112)/2,(L114-L113)/2,(L115-L114)/2
  255.         dc.w (L116-L115)/2,(L117-L116)/2,(L118-L117)/2,(L119-L118)/2,(L120-L119)/2
  256.         dc.w (L121-L120)/2,(L122-L121)/2,(L123-L122)/2,(L124-L123)/2,(L125-L124)/2
  257.         dc.w (L126-L125)/2,(L127-L126)/2,(L128-L127)/2,(L129-L128)/2,(L130-L129)/2
  258.         dc.w (L131-L130)/2,(L132-L131)/2,(L133-L132)/2,(L134-L133)/2,(L135-L134)/2
  259.         dc.w (L136-L135)/2,(L137-L136)/2,(L138-L137)/2,(L139-L138)/2,(L140-L139)/2
  260.         dc.w (L141-L140)/2,(L142-L141)/2,(L143-L142)/2,(L144-L143)/2,(L145-L144)/2
  261.         dc.w (L146-L145)/2,(L147-L146)/2,(L148-L147)/2,(L149-L148)/2,(L150-L149)/2
  262.         dc.w (L151-L150)/2,(L152-L151)/2,(L153-L152)/2,(L154-L153)/2,(L155-L154)/2
  263.         dc.w (L156-L155)/2,(L157-L156)/2,(L158-L157)/2,(L159-L158)/2,(L160-L159)/2
  264.         dc.w (L161-L160)/2,(L162-L161)/2,(L163-L162)/2,(L164-L163)/2,(L165-L164)/2
  265.         dc.w (L166-L165)/2,(L167-L166)/2,(L168-L167)/2,(L169-L168)/2,(L170-L169)/2
  266.         dc.w (L171-L170)/2,(L172-L171)/2,(L173-L172)/2,(L174-L173)/2,(L175-L174)/2
  267.         dc.w (L176-L175)/2,(L177-L176)/2,(L178-L177)/2,(L179-L178)/2,(L180-L179)/2
  268.         dc.w (L181-L180)/2,(L182-L181)/2,(L183-L182)/2,(L184-L183)/2,(L185-L184)/2
  269.         dc.w (L186-L185)/2,(L187-L186)/2,(L188-L187)/2,(L189-L188)/2,(L190-L189)/2
  270.         dc.w (L191-L190)/2,(L192-L191)/2,(L193-L192)/2,(L194-L193)/2,(L195-L194)/2
  271.         dc.w (L196-L195)/2,(L197-L196)/2,(L198-L197)/2,(L199-L198)/2,(L200-L199)/2
  272.         dc.w (L201-L200)/2,(L202-L201)/2,(L203-L202)/2,(L204-L203)/2,(L205-L204)/2
  273.         dc.w (L206-L205)/2,(L207-L206)/2,(L208-L207)/2
  274.  
  275. **************************************************************************
  276. * EXPLODE TOKENS
  277. *-------------------------------------------------------------------------
  278. C_Tk    dc.w    1,0
  279.         dc.b    $80,-1
  280. ;ExtensionCmd
  281.         dc.w    -1,L_Explode
  282.         dc.b    "explode","$"+$80,"2",-1        * =Explode$
  283.         dc.w    -1,L_ExpBase
  284.         dc.b    "explode bas","e"+$80,"0",-1    * =Explode Base
  285.         dc.w    -1,L_Extension
  286.         dc.b    "extension","$"+$80,"20",-1     * =Extension$(#)
  287.         dc.w    -1,L_ExtBase
  288.         dc.b    "extension bas","e"+$80,"00",-1 * =Extension Base(#)
  289. ;WaitCmd
  290.         dc.w    L_ClearMouse,-1
  291.         dc.b    "clear mous","e"+$80,"I",-1     * Clear Mouse
  292.         dc.w    -1,L_Pause
  293.         dc.b    "paus","e"+$80,"00",-1          * =Pause(tme)
  294.         dc.w    L_StopLoop,-1
  295.         dc.b    "stop loo","p"+$80,"I",-1       * Stop Loop
  296.         dc.w    -1,L_WaitLoop
  297.         dc.b    "wait loo","p"+$80,"0",-1       * =Wait Loop
  298.         dc.w    L_WaitMouse,-1
  299.         dc.b    "wait mous","e"+$80,"I",-1      * Wait Mouse
  300. ;FileCmd
  301.         dc.w    -1,L_FilePath
  302.         dc.b    "file path","$"+$80,"22",-1     * =File Path$(file)
  303.         dc.w    -1,L_FileBlocks
  304.         dc.b    "file block","s"+$80,"02",-1    * =File Blocks(file)
  305.         dc.w    -1,L_FileSize
  306.         dc.b    "file siz","e"+$80,"02",-1      * =File Size(file)
  307.         dc.w    -1,L_FileType
  308.         dc.b    "file typ","e"+$80,"02",-1      * =File Type(file)
  309.         dc.w    -1,L_Hof
  310.         dc.b    "ho","f"+$80,"00",-1            * =Hof(fh)
  311. ;TimeCmd
  312.         dc.w    -1,L_HardTime
  313.         dc.b    "hard time","$"+$80,"2",-1      * =Hard Time$
  314.         dc.w    -1,L_HardDate
  315.         dc.b    "hard date","$"+$80,"2",-1      * =Hard Date$
  316.         dc.w    L_SetHardTime,-1
  317.         dc.b    "set hard tim","e"+$80,"I2",-1  * Set Hard Time "HH:MM:SS"
  318.         dc.w    L_SetHardDate,-1
  319.         dc.b    "set hard dat","e"+$80,"I2",-1  * Set Hard Date "DD-MM-YY"
  320. ;BankCmd
  321.         dc.w    L_BankLoadA,-1
  322.         dc.b    "!bank loa","d"+$80,"I2",-2     * Bank Load name
  323.         dc.w    L_BankLoadB,-1
  324.         dc.b    $80,"I2,0",-2                   * Bank Load name,msk
  325.         dc.w    L_BankLoadC,-1
  326.         dc.b    $80,"I2t0",-2                   * Bank Load name To bk
  327.         dc.w    L_BankLoadD,-1
  328.         dc.b    $80,"I2t0,0",-1                 * Bank Load name To bk,msk
  329.         dc.w    L_BankSave,-1
  330.         dc.b    "bank sav","e"+$80,"I2,0",-1    * Bank Save name,bk
  331.         dc.w    L_BankAsWork,-1
  332.         dc.b    "bank as wor","k"+$80,"I0",-1   * Bank As Work bk
  333.         dc.w    L_BankAsData,-1
  334.         dc.b    "bank as dat","a"+$80,"I0",-1   * Bank As Data bk
  335.         dc.w    -1,L_BankFree
  336.         dc.b    "bank fre","e"+$80,"00",-1      * =Bank Free(minbk)
  337.         dc.w    L_BankClone,-1
  338.         dc.b    "bank clon","e"+$80,"I0t0",-1   * Bank Clone bk to bk
  339.         dc.w    -1,L_Number
  340.         dc.b    "numbe","r"+$80,"00",-1         * =Number(bk)
  341.         dc.w    -1,L_Finish
  342.         dc.b    "finis","h"+$80,"00",-1         * =Finish(bk)
  343.         dc.w    L_ImageSwap,-1
  344.         dc.b    "image swa","p"+$80,"I0,0,0",-1 * Image Swap bk,img1,img2
  345.         dc.w    -1,L_ImageWidth
  346.         dc.b    "image widt","h"+$80,"00,0",-1  * =Image Width(bk,img)
  347.         dc.w    -1,L_ImageHeight
  348.         dc.b    "image heigh","t"+$80,"00,0",-1 * =Image Height(bk,img)
  349. ;TextCmd
  350.         dc.w    -1,L_Pinv
  351.         dc.b    "pinv","$"+$80,"20",-1          * =Pinv$()
  352.         dc.w    -1,L_Psad
  353.         dc.b    "psad","$"+$80,"20",-1          * =Psad$()
  354.         dc.w    -1,L_Pund
  355.         dc.b    "pund","$"+$80,"20",-1          * =Pund$()
  356.         dc.w    -1,L_Pcpn
  357.         dc.b    "pcpn","$"+$80,"20",-1          * =Pcpn$()
  358.         dc.w    -1,L_Pjam
  359.         dc.b    "pjam","$"+$80,"20",-1          * =Pjam$()
  360.         dc.w    -1,L_Pcsr
  361.         dc.b    "pcsr","$"+$80,"20",-1          * =Pcsr$()
  362.         dc.w    -1,L_Pdef
  363.         dc.b    "pdef","$"+$80,"2",-1           * =Pdef$
  364.         dc.w    -1,L_Format
  365.         dc.b    "format","$"+$80,"22,0",-1      * =Format$(%$,ptr)
  366. ;StructureCmd
  367.         dc.w    L_RsStructure,-1
  368.         dc.b    "rs structur","e"+$80,"I0,0",-1 * Rs Structure n,size
  369.         dc.w    -1,L_RsStart
  370.         dc.b    "rs star","t"+$80,"00",-1       * =Rs Start(n)
  371.         dc.w    -1,L_RsFinish
  372.         dc.b    "rs finis","h"+$80,"00",-1      * =Rs Finish(n)
  373.         dc.w    -1,L_RsLength
  374.         dc.b    "rs lengt","h"+$80,"00",-1      * =Rs Length(n)
  375.         dc.w    L_RsClear,-1
  376.         dc.b    "rs clea","r"+$80,"I0",-1       * Rs Clear n
  377.         dc.w    L_RsFill,-1
  378.         dc.b    "rs fil","l"+$80,"I0,0,0",-1    * Rs Fill n,c,#
  379.         dc.w    L_RsByte,-1
  380.         dc.b    "rs byt","e"+$80,"I0,0",-1      * Rs Byte n,#
  381.         dc.w    L_RsWord,-1
  382.         dc.b    "rs wor","d"+$80,"I0,0",-1      * Rs Word n,#
  383.         dc.w    L_RsLong,-1
  384.         dc.b    "rs lon","g"+$80,"I0,0",-1      * Rs Long n,#
  385.         dc.w    L_RsAptr,-1
  386.         dc.b    "rs apt","r"+$80,"I0,2",-1      * Rs Aptr n,$
  387.         dc.w    L_RsChar,-1
  388.         dc.b    "rs cha","r"+$80,"I0,2",-1      * Rs Char n,$
  389.         dc.w    L_RsSet,-1
  390.         dc.b    "rs se","t"+$80,"I0,0",-1       * Rs Set n,#
  391.         dc.w    L_RsBset,-1
  392.         dc.b    "rs bse","t"+$80,"I0,0",-1      * Rs Bset n,#
  393.         dc.w    L_RsWset,-1
  394.         dc.b    "rs wse","t"+$80,"I0,0",-1      * Rs Wset n,#
  395.         dc.w    L_RsLset,-1
  396.         dc.b    "rs lse","t"+$80,"I0,0",-1      * Rs Lset n,#
  397.         dc.w    L_RsEraseA,-1
  398.         dc.b    "!rs eras","e"+$80,"I",-2       * Rs Erase
  399.         dc.w    L_RsEraseB,-1
  400.         dc.b    $80,"I0",-1                     * Rs Erase n
  401.         dc.w    -1,L_Rs
  402.         dc.b    "r","s"+$80,"00",-1             * =Rs(n)
  403. ;VariableCmd
  404.         dc.w    -1,L_ByteA
  405.         dc.b    "byt","e"+$80,"02",-1           * =Byte($)
  406.         dc.w    -1,L_ByteB
  407.         dc.b    "byte","$"+$80,"20",-1          * =Byte$(#)
  408.         dc.w    -1,L_WordA
  409.         dc.b    "wor","d"+$80,"02",-1           * =Word($)
  410.         dc.w    -1,L_WordB
  411.         dc.b    "word","$"+$80,"20",-1          * =Word$(#)
  412.         dc.w    -1,L_LongA
  413.         dc.b    "lon","g"+$80,"02",-1           * =Long($)
  414.         dc.w    -1,L_LongB
  415.         dc.b    "long","$"+$80,"20",-1          * =Long$(#)
  416.         dc.w    -1,L_LslB
  417.         dc.b    "lsl.","b"+$80,"00,0",-1        * =Lsl.b(#,var)
  418.         dc.w    -1,L_LslW
  419.         dc.b    "lsl.","w"+$80,"00,0",-1        * =Lsl.w(#,var)
  420.         dc.w    -1,L_LslL
  421.         dc.b    "lsl.","l"+$80,"00,0",-1        * =Lsl.l(#,var)
  422.         dc.w    -1,L_LsrB
  423.         dc.b    "lsr.","b"+$80,"00,0",-1        * =Lsr.b(#,var)
  424.         dc.w    -1,L_LsrW
  425.         dc.b    "lsr.","w"+$80,"00,0",-1        * =Lsr.w(#,var)
  426.         dc.w    -1,L_LsrL
  427.         dc.b    "lsr.","l"+$80,"00,0",-1        * =Lsr.l(#,var)
  428.         dc.w    -1,L_Even
  429.         dc.b    "eve","n"+$80,"00",-1           * =Even(var)
  430.         dc.w    -1,L_Odd
  431.         dc.b    "od","d"+$80,"00",-1            * =Odd(var)
  432.         dc.w    -1,L_Align
  433.         dc.b    "alig","n"+$80,"00,0",-1        * =Align(var,#)
  434. ;PackerCmd
  435.         dc.w    L_BpkUnpack,-1
  436.         dc.b    "bpk unpac","k"+$80,"I0",-1     * Bpk Unpack bk
  437.         dc.w    -1,L_BpkLength
  438.         dc.b    "bpk lengt","h"+$80,"00",-1     * =Bpk Length(bk)
  439.         dc.w    L_DpkUnpack,-1
  440.         dc.b    "dpk unpac","k"+$80,"I0",-1     * Dpk Unpack bk
  441.         dc.w    -1,L_DpkName
  442.         dc.b    "dpk name","$"+$80,"20",-1      * =Dpk Name$(bk)
  443.         dc.w    -1,L_IpkLength
  444.         dc.b    "ipk lengt","h"+$80,"00",-1     * =Ipk Length(bk)
  445.         dc.w    L_PpkPackA,-1
  446.         dc.b    "!ppk pac","k"+$80,"I0",-2      * Ppk Pack bk
  447.         dc.w    L_PpkPackB,-1
  448.         dc.b    $80,"I0,0",-1                   * Ppk Pack bk,eff
  449.         dc.w    L_PpkUnpackA,-1
  450.         dc.b    "!ppk unpac","k"+$80,"I0",-2    * Ppk Unpack bk
  451.         dc.w    L_PpkUnpackB,-1
  452.         dc.b    $80,"I0,2",-1                   * Ppk Unpack bk,pwd
  453.         dc.w    -1,L_PpkLength
  454.         dc.b    "ppk lengt","h"+$80,"00",-1     * =Ppk Length(bk)
  455.         dc.w    -1,L_PpkMode
  456.         dc.b    "ppk mod","e"+$80,"00",-1       * =Ppk Mode(bk)
  457.         dc.w    -1,L_PpkType
  458.         dc.b    "ppk typ","e"+$80,"00",-1       * =Ppk Type(bk)
  459.         dc.w    -1,L_PpkName
  460.         dc.b    "ppk name","$"+$80,"20",-1      * =Ppk Name$(bk)
  461.         dc.w    -1,L_PpkPasskey
  462.         dc.b    "ppk passke","y"+$80,"00",-1    * =Ppk Passkey(bk)
  463.         dc.w    -1,L_PpkPassword
  464.         dc.b    "ppk passwor","d"+$80,"00,2",-1 * =Ppk Password(bk,pwd)
  465.         dc.w    L_PpkDataA,-1
  466.         dc.b    "!ppk dat","a"+$80,"I0",-2      * Ppk Data bk
  467.         dc.w    L_PpkDataB,-1
  468.         dc.b    $80,"I0,2",-1                   * Ppk Data bk,pwd
  469.         dc.w    -1,L_XpkLength
  470.         dc.b    "xpk lengt","h"+$80,"00",-1     * =Xpk Length(bk)
  471.         dc.w    -1,L_XpkName
  472.         dc.b    "xpk name","$"+$80,"20",-1      * =Xpk Name$(bk)
  473.         dc.w    L_XpkUnpackA,-1
  474.         dc.b    "!xpk unpac","k"+$80,"I0",-2    * Xpk Unpack bk
  475.         dc.w    L_XpkUnpackB,-1
  476.         dc.b    $80,"I0,2",-1                   * Xpk Unpack bk,password
  477.         dc.w    -1,L_XpkErrn
  478.         dc.b    "xpk err","n"+$80,"0",-1        * =Xpk Errn
  479.         dc.w    -1,L_XpkErrs
  480.         dc.b    "xpk err","$"+$80,"2",-1        * =Xpk Err$
  481. ;GfxCmd
  482.         dc.w    -1,L_RastPort
  483.         dc.b    "rastpor","t"+$80,"0",-1        * =Rastport
  484.         dc.w    L_PlaneMask,-1
  485.         dc.b    "plane mas","k"+$80,"I0,0",-1   * Plane Mask pln,msk
  486.         dc.w    L_PlaneClear,-1
  487.         dc.b    "plane clea","r"+$80,"I0",-1    * Plane Clear pln
  488.         dc.w    L_PlaneGet,-1
  489.         dc.b    "plane ge","t"+$80,"I0t0",-1    * Plane Get pln To bk
  490.         dc.w    L_PlanePut,-1
  491.         dc.b    "plane pu","t"+$80,"I0t0",-1    * Plane Put pln To bk
  492.         dc.w    -1,L_PlaneLength
  493.         dc.b    "plane lengt","h"+$80,"0",-1    * =Plane Length
  494.         dc.w    L_PlaneCopy,-1
  495.         dc.b    "plane cop","y"+$80,"I0t0",-1   * Plane Copy pln To pln
  496.         dc.w    L_PlaneSwap,-1
  497.         dc.b    "plane swa","p"+$80,"I0,0",-1   * Plane Swap pln,pln
  498.         dc.w    L_PlaneNegative,-1
  499.         dc.b    "plane negativ","e"+$80,"I0",-1 * Plane Negative pln
  500.         dc.w    L_PlaneMerge,-1
  501.         dc.b    "plane merg","e"+$80,"I0t0",-1  * Plane Merge pln To pln
  502.         dc.w    L_PlaneCloseA,-1
  503.         dc.b    "!plane clos","e"+$80,"I0",-2   * Plane Close pln
  504.         dc.w    L_PlaneCloseB,-1
  505.         dc.b    $80,"I0t0",-1                   * Plane Close pln To pln
  506.         dc.w    L_PlaneOpenA,-1
  507.         dc.b    "!plane ope","n"+$80,"I0",-2    * Plane Open pln
  508.         dc.w    L_PlaneOpenB,-1
  509.         dc.b    $80,"I0t0",-1                   * Plane Open pln To pln
  510.         dc.w    -1,L_PlaneActive
  511.         dc.b    "plane activ","e"+$80,"00",-1   * =Plane Active(pln)
  512.         dc.w    L_IffBank,-1
  513.         dc.b    "iff ban","k"+$80,"I0t0",-1     * Iff Bank bk To scrn
  514. ;FontCmd
  515.         dc.w    L_FontOpen,-1
  516.         dc.b    "font ope","n"+$80,"I0,2,0",-1  * Font Open fnt,name,hi
  517.         dc.w    L_FontSet,-1
  518.         dc.b    "font se","t"+$80,"I0",-1       * Font Set fnt
  519.         dc.w    L_FontCloseA,-1
  520.         dc.b    "!font clos","e"+$80,"I",-2     * Font Close
  521.         dc.w    L_FontCloseB,-1
  522.         dc.b    $80,"I0",-1                     * Font Close fnt
  523.         dc.w    -1,L_FontName
  524.         dc.b    "font name","$"+$80,"20",-1     * =Font Name$(fnt)
  525.         dc.w    -1,L_FontHeight
  526.         dc.b    "font heigh","t"+$80,"00",-1    * =Font Height(fnt)
  527.         dc.w    -1,L_FontBase
  528.         dc.b    "font bas","e"+$80,"00",-1      * =Font Base(fnt)
  529. ;DeviceCmd
  530.         dc.w    -1,L_DriveState
  531.         dc.b    "drive stat","e"+$80,"00",-1    * =Drive State drv
  532.         dc.w    -1,L_DevState
  533.         dc.b    "dev stat","e"+$80,"02",-1      * =Dev State("dev")
  534.         dc.w    L_DriveBusy,-1
  535.         dc.b    "drive bus","y"+$80,"I0,0",-1   * Drive Busy drv,arg
  536. ;SpecialCmd
  537.         dc.w    -1,L_Vectorptr
  538.         dc.b    "vectorpt","r"+$80,"0",-1       * =Vectorptr
  539.         dc.w    L_Hardreset,-1
  540.         dc.b    "hardrese","t"+$80,"I",-1       * Hardreset
  541.         dc.w    L_Softreset,-1
  542.         dc.b    "softrese","t"+$80,"I",-1       * Softreset
  543.         dc.w    L_Flush,-1
  544.         dc.b    "flus","h"+$80,"I",-1           * Flush
  545.         dc.w    -1,L_AvailFree
  546.         dc.b    "avail fre","e"+$80,"0",-1      * =Avail Free
  547.         dc.w    L_OpenWorkbench,-1
  548.         dc.b    "open workbenc","h"+$80,"I",-1  * Open Workbench
  549.         dc.w    -1,L_Workbench
  550.         dc.b    "workbenc","h"+$80,"0",-1       * Workbench
  551.         dc.w    -1,L_AmosState
  552.         dc.b    "amos stat","e"+$80,"0",-1      * =Amos State
  553.         dc.w    L_AmcafCrackOn,-1
  554.         dc.b    "amcaf crack o","n"+$80,"I",-1  * Amcaf Crack On
  555.         dc.w    L_AmcafCrackOff,-1
  556.         dc.b    "amcaf crack of","f"+$80,"I",-1 * Amcaf Crack Off
  557.         dc.w    -1,L_CDPath
  558.         dc.b    "cd path","$"+$80,"2",-1        * =Cd Path$
  559.         dc.w    L_CDSet,-1
  560.         dc.b    "cd se","t"+$80,"I2",-1         * Cd Set path
  561.         dc.w    L_CDParent,-1
  562.         dc.b    "cd paren","t"+$80,"I",-1       * Cd Parent
  563. ;ExtPackerCmd
  564.         dc.w    L_XpkPack,-1
  565.         dc.b    "xpk pac","k"+$80,"I0,2,0",-1   * Xpk Pack bk,SLIB,mode
  566.         dc.w    L_XpkCrypt,-1
  567.         dc.b    "xpk cryp","t"+$80,"I0,2,2",-1  * Xpk Crypt bk,SLIB,pwd
  568.         dc.w    -1,L_LpkLength
  569.         dc.b    "lpk lengt","h"+$80,"00",-1     * =Lpk Length(bk)
  570.         dc.w    L_LpkPack,-1
  571.         dc.b    "lpk pac","k"+$80,"I0",-1       * Lpk Pack bk
  572.         dc.w    L_LpkUnpack,-1
  573.         dc.b    "lpk unpac","k"+$80,"I0",-1     * Lpk Unpack bk
  574. ;ExtBankCmd
  575.         dc.w    L_BankToChip,-1
  576.         dc.b    "bank to chi","p"+$80,"I0",-1   * Bank To Chip bk
  577. ;ExtFileCmd
  578.         dc.w    -1,L_FileProtection
  579.         dc.b    "file protectio","n"+$80,"02",-1 * =File Protecton(file)
  580.  
  581.         dc.w    0
  582.  
  583. **************************************************************************
  584. * START OF LIBRARY
  585. *-------------------------------------------------------------------------
  586. C_Lib
  587.  
  588. **************************************************************************
  589. * COLD START
  590. *-------------------------------------------------------------------------
  591. L0      PUSHM   a3-a6
  592.         lea     ET(pc),a3
  593.         move.l  a3,ExtAdr+ExtNb*16(a5)
  594.         lea     ExpDef(pc),a0
  595.         move.l  a0,ExtAdr+ExtNb*16+4(a5)        ;Default & Run Reset
  596.         lea     ExpEnd(pc),a0
  597.         move.l  a0,ExtAdr+ExtNb*16+8(a5)        ;End Reset
  598.         POPM    a3-a6
  599.         moveq   #ExtNb,d0
  600.         rts
  601.  
  602.         *
  603.  
  604. ExpDef
  605. ExpEnd  DLOAD   a3
  606.         Rbsr    L_PpkLibClose
  607.         Rbsr    L_XpkLibClose
  608.         Rbsr    L_DpkLibClose
  609.         Rbsr    L_LpkLibClose
  610.         Rbsr    L_FntLibClose
  611.         Rbra    L_RsEraseAll
  612.  
  613.         *
  614.  
  615. **************************************************************************
  616. * GLOBAL EXPLODE TABLE
  617. *-------------------------------------------------------------------------
  618.  
  619. ET              ds.b    ET_SIZEOF       ;NEVER EVER CHANGE THIS LINE!!!
  620.  
  621. * AmosBank Names
  622. my_BkNameData   dc.b    "Data    "
  623. my_BkNameWork   dc.b    "Work    "
  624.  
  625. **************************************************************************
  626. * EXPLODE$
  627. * EXPLODE BASE
  628. * EXTENSION BASE(#ext)
  629. * EXTENSION$    (#ext)
  630. *-------------------------------------------------------------------------
  631. L_Explode       equ     1
  632. L1      lea     .1(pc),a0
  633.         move.l  a0,d3
  634.         moveq   #2,d2
  635.         rts
  636. .1      dc.w    43
  637.         EXPLODE
  638.         VERSION
  639.         even
  640.  
  641.         *
  642.  
  643. L_ExpBase       equ     2
  644. L2      DLOAD   a0
  645.         move.l  a0,d3
  646.         moveq   #0,d2
  647.         rts
  648.  
  649.         *
  650.  
  651. L_Extension     equ     3
  652. L3      move.l  (a3)+,d0        ;Ext
  653.         move.l  ChVide(a5),d3   ;Immer Leer-String
  654.         lsl.l   #2,d0
  655.         lea     AdTokens(a5),a0
  656.         movea.l (a0,d0.l),a0
  657.         move.l  -16(a0),d0
  658.         ble.s   .Skip           ;Ext nicht verfügbar
  659.         movea.l d0,a0
  660.         movea.l d0,a1
  661. .1      tst.b   (a1)+
  662.         bne.s   .1
  663.         suba.l  d0,a1
  664.         move.l  a1,d3
  665.         subq.l  #1,d3
  666.         Rbsr    L_GetSpace
  667. .2      move.b  (a0)+,(a1)+
  668.         bne.s   .2
  669. .Skip   moveq   #2,d2           ;Stringmodus
  670.         rts
  671.  
  672.         *
  673.  
  674. L_ExtBase       equ     4
  675. L4      move.l  (a3)+,d0
  676.         moveq   #0,d3
  677.         subq.l  #1,d0
  678.         blt.s   .Skip
  679.         lsl.l   #4,d0
  680.         lea     ExtAdr(a5),a0
  681.         move.l  (a0,d0.l),d3
  682. .Skip   moveq   #0,d2
  683.         rts
  684.  
  685. **************************************************************************
  686. * CLEAR MOUSE
  687. * PAUSE         (#ticks)
  688. * STOP LOOP
  689. * WAIT LOOP
  690. * WAIT MOUSE
  691. *-------------------------------------------------------------------------
  692. L_ClearMouse    equ     5
  693. L5      Rjsr    L_Tests
  694.         SyCall  MouseKey
  695.         tst.w   d1
  696.         Rbne    L_ClearMouse
  697.         rts
  698.  
  699.         *
  700.  
  701. L_Pause         equ     6
  702. L6      move.l  (a3)+,d7        ;Ticks
  703. .1      SyCall  WaitVbl
  704.         Rjsr    L_Tests
  705.         SyCall  Inkey
  706.         tst.w   d1
  707.         bne.s   .2
  708.         SyCall  MouseKey
  709.         tst.w   d1
  710.         bne.s   .2
  711.         dbne    d7,.1
  712. .2      moveq   #0,d3
  713.         move.w  d1,d3
  714.         moveq   #0,d2
  715.         cmpi.w  #3,d3
  716.         bgt.s   .Skip
  717.         neg.l   d3
  718. .Skip   rts
  719.  
  720.         *
  721.  
  722. L_StopLoop      equ     7
  723. L7      Rjsr    L_Tests
  724.         SyCall  Inkey
  725.         tst.l   d1              ;auch AMIGA-Keys gültig
  726.         bne.s   .Skip
  727.         SyCall  MouseKey
  728.         tst.w   d1
  729.         bne.s   .Skip
  730.         btst    #7,$BFE001      ;Joystick Feuerknopf
  731.         Rbne    L_StopLoop
  732. .Skip   rts
  733.  
  734.         *
  735.  
  736. L_WaitLoop      equ     8
  737. L8      Rjsr    L_Tests
  738.         SyCall  Inkey
  739.         tst.w   d1
  740.         bne.s   .1
  741.         SyCall  MouseKey
  742.         tst.w   d1
  743.         Rbeq    L_WaitLoop
  744. .1      moveq   #0,d3
  745.         move.w  d1,d3   ;keine AMIGA-Keys
  746.         moveq   #0,d2
  747.         cmpi.w  #3,d3   ;Maustaste ?
  748.         bgt.s   .Skip   ;nein
  749.         neg.l   d3      ;negrieren
  750. .Skip   rts
  751.  
  752.         *
  753.  
  754. L_WaitMouse     equ     9
  755. L9      Rjsr    L_Tests
  756.         SyCall  MouseKey
  757.         tst.w   d1
  758.         Rbeq    L_WaitMouse
  759.         rts
  760.  
  761. **************************************************************************
  762. * FILE PATH$    ($file)
  763. * FILE BLOCKS   ($file)
  764. * FILE SIZE     ($file)
  765. * FILE TYPE     ($file)
  766. * HOF           (#channel)
  767. *-------------------------------------------------------------------------
  768. L_FilePath      equ     10
  769. L10     movea.l (a3)+,a0        ;File
  770.         move.w  (a0)+,d0
  771.         subq.w  #1,d0
  772.         cmpi.w  #128,d0
  773.         Rbcc    L_IFunc
  774.         movea.l Name1(a5),a1
  775. .1      move.b  (a0)+,(a1)+
  776.         dbra    d0,.1
  777.         clr.b   (a1)
  778.         Rjsr    L_Dsk.PathIt
  779.         movea.l Name1(a5),a0
  780.         clr.l   d0
  781. .2      tst.b   (a0)+
  782.         beq.s   .3
  783.         addq.l  #1,d0
  784.         bra.s   .2
  785. .3      move.l  d0,d3
  786.         Rbsr    L_GetSpace
  787.         movea.l Name1(a5),a0
  788. .4      move.b  (a0)+,(a1)+
  789.         dbra    d0,.4
  790.         moveq   #2,d2
  791.         rts
  792.  
  793.         *
  794.  
  795. L_FileBlocks    equ     11
  796. L11     DLOAD   a2
  797.         move.l  (a3)+,my_FileName(a2)
  798.         Rbsr    L_GetFileInfo
  799.         move.l  my_FileBlocks(a2),d3    ;-1 = Fehler
  800.         moveq   #0,d2
  801.         rts
  802.  
  803.         *
  804.  
  805. L_FileSize      equ     12
  806. L12     DLOAD   a2
  807.         move.l  (a3)+,my_FileName(a2)
  808.         Rbsr    L_GetFileInfo
  809.         move.l  my_FileSize(a2),d3      ;-1 = Fehler
  810.         moveq   #0,d2
  811.         rts
  812.  
  813.         *
  814.  
  815. L_FileType      equ     13
  816. L13     DLOAD   a2
  817.         move.l  (a3)+,my_FileName(a2)
  818.         Rbsr    L_GetFileInfo
  819.         moveq   #0,d3           ;0 = Nicht gefunden
  820.         tst.l   my_FileType(a2)
  821.         beq.s   .Skip
  822.         moveq   #-1,d3          ;-1 = Datei
  823.         tst.l   my_FileType(a2)
  824.         blt.s   .Skip
  825.         moveq   #-2,d3          ;-2 = Device
  826. .Skip   moveq   #0,d2
  827.         rts
  828.  
  829.         *
  830.  
  831. L_Hof           equ     14
  832. L14     move.l  (a3)+,d3        ;Channel
  833.         cmpi.l  #10,d3
  834.         Rbcc    L_IFunc
  835.         subq.l  #1,d3
  836.         Rbmi    L_IFunc
  837.         mulu    #TFiche,d3
  838.         lea     Fichiers(a5),a2
  839.         adda.w  d3,a2
  840.         move.l  FhA(a2),d3
  841.         Rbeq    L_FNopen
  842.         moveq   #0,d2
  843.         rts
  844.  
  845. **************************************************************************
  846. * HARD TIME$
  847. * HARD DATE$
  848. * SET HARD TIME $hh:mm:ss
  849. * SET HARD DATE $dd-mm-yy
  850. *-------------------------------------------------------------------------
  851. L_HardTime      equ     15
  852. L15     lea     $DC0000,a0
  853.         move.b  #":",d0
  854.         Rbra    L_HardTimeDate
  855.  
  856.         *
  857.  
  858. L_HardDate      equ     16
  859. L16     lea     $DC0018,a0
  860.         move.b  #"-",d0
  861.         Rbsr    L_HardTimeDate
  862.         movea.l d3,a0
  863.         move.w  2(a0),d0
  864.         move.w  8(a0),2(a0)
  865.         move.w  d0,8(a0)
  866.         rts
  867.  
  868.         *
  869.  
  870. L_SetHardTime   equ     17
  871. L17     movea.l (a3)+,a0        ;HH:MM:SS
  872.         cmpi.w  #8,(a0)+
  873.         Rbne    L_IFunc
  874.         lea     $DC0017,a1
  875.         Rbra    L_SetTimeDate
  876.  
  877.         *
  878.  
  879. L_SetHardDate   equ     18
  880. L18     movea.l (a3)+,a0        ;DD-MM-YY
  881.         cmpi.w  #8,(a0)+
  882.         Rbne    L_IFunc
  883.         movea.l Name1(a5),a1
  884.         move.l  (a0),(a1)
  885.         move.l  4(a0),4(a1)
  886.         move.w  (a0),6(a1)
  887.         move.w  6(a0),(a1)
  888.         movea.l a1,a0
  889.         lea     $DC002F,a1
  890.         Rbra    L_SetTimeDate
  891.  
  892. **************************************************************************
  893. * BANK LOAD     $file [TO bk] [,#mask]
  894. * BANK SAVE     $file,bk
  895. * BANK AS WORK  bk
  896. * BANK AS DATA  bk
  897. * BANK FREE     (bkmin)
  898. * BANK CLONE    bk TO bk
  899. * NUMBER        (start(#))
  900. * FINISH        (bk)
  901. * IMAGE SWAP    bk,#image,#image
  902. * IMAGE WIDTH   (bk,#image)
  903. * IMAGE HEIGHT  (bk,#image)
  904. *-------------------------------------------------------------------------
  905. L_BankLoadA     equ     19
  906. L19     DLOAD   a0
  907.         clr.l   my_FileMsk(a0)                  ;Mask
  908.         move.l  #my_BkDefault,my_FileBnk(a0)    ;Bank
  909.         move.l  (a3)+,my_FileName(a0)           ;File
  910.         Rbra    L_BankLoad
  911.  
  912. L_BankLoadB     equ     20
  913. L20     DLOAD   a0
  914.         move.l  (a3)+,my_FileMsk(a0)
  915.         move.l  (a3)+,my_FileName(a0)
  916.         move.l  #my_BkDefault,my_FileBnk(a0)
  917.         Rbra    L_BankLoad
  918.  
  919. L_BankLoadC     equ     21
  920. L21     DLOAD   a0
  921.         clr.l   my_FileMsk(a0)
  922.         move.l  (a3)+,my_FileBnk(a0)
  923.         move.l  (a3)+,my_FileName(a0)
  924.         Rbra    L_BankLoad
  925.  
  926. L_BankLoadD     equ     22
  927. L22     DLOAD   a0
  928.         move.l  (a3)+,my_FileMsk(a0)
  929.         move.l  (a3)+,my_FileBnk(a0)
  930.         move.l  (a3)+,my_FileName(a0)
  931.         Rbra    L_BankLoad
  932.  
  933.         *
  934.  
  935. L_BankSave      equ     23
  936. L23     move.l  (a3)+,d0        ;Bk
  937.         Rjsr    L_Bnk.OrAdr
  938.         move.w  my_BkFlag(a0),d0
  939.         btst    #Bnk_BitBob,d0
  940.         Rbne    L_IFunc
  941.         btst    #Bnk_BitIcon,d0
  942.         Rbne    L_IFunc
  943.         move.l  my_BkLength(a0),d3
  944.         move.l  a0,d6           ;BkAdr -> D6
  945.         movea.l (a3)+,a0        ;File
  946.         move.w  (a0)+,d0
  947.         subq.w  #1,d0
  948.         cmpi.w  #128,d0
  949.         Rbcc    L_IFunc
  950.         movea.l Name1(a5),a1
  951. .1      move.b  (a0)+,(a1)+
  952.         dbra    d0,.1
  953.         clr.b   (a1)
  954.         Rjsr    L_Dsk.PathIt
  955.         PUSH    a6
  956.         move.l  Name1(a5),d1
  957.         move.l  #MODE_NEWFILE,d2
  958.         DOS     Open
  959.         move.l  d0,d7           ;Handle -> d7
  960.         beq.s   .2              ;Fehler aufgetreten ?
  961.         move.l  d7,d1           ;Handle
  962.         move.l  d6,d2           ;BkAdr
  963.         subi.l  #my_BkHeader,d3 ;BkLen ohne Header
  964.         move.l  d3,d4           ;Überprüfen
  965.         LIB     Write
  966.         move.l  d0,d3
  967.         move.l  d7,d1
  968.         LIB     Close
  969.         cmp.l   d3,d4
  970.         beq.s   .Skip
  971. .2      POP     a6
  972.         Rbra    L_IOError
  973. .Skip   POP     a6
  974.         rts
  975.  
  976.         *
  977.  
  978. L_BankAsWork    equ     24
  979. L24     move.l  (a3)+,d0        ;Bk
  980.         Rjsr    L_Bnk.OrAdr
  981.         move.w  my_BkFlag(a0),d0
  982.         bclr    #Bnk_BitData,d0
  983.         move.w  d0,my_BkFlag(a0)
  984.         cmpi.l  #"Data",my_BkName(a0)
  985.         bne.s   .Skip
  986.         move.l  #"Work",my_BkName(a0)
  987. .Skip   rts
  988.  
  989.         *
  990.  
  991. L_BankAsData    equ     25
  992. L25     move.l  (a3)+,d0        ;Bk
  993.         Rjsr    L_Bnk.OrAdr
  994.         move.w  my_BkFlag(a0),d0
  995.         bset    #Bnk_BitData,d0
  996.         move.w  d0,my_BkFlag(a0)
  997.         cmpi.l  #"Work",my_BkName(a0)
  998.         bne.s   .Skip
  999.         move.l  #"Data",my_BkName(a0)
  1000. .Skip   rts
  1001.  
  1002.         *
  1003.  
  1004. L_BankFree      equ     26
  1005. L26     move.l  (a3)+,d0        ;BkMin
  1006.         Rbsr    L_Bnk.GetFree
  1007.         move.l  d0,d3
  1008.         moveq   #0,d2
  1009.         rts
  1010.  
  1011.         *
  1012.  
  1013. L_BankClone     equ     27
  1014. L27     move.l  (a3)+,d7        ;Bk
  1015.         move.l  (a3)+,d0        ;Bk to clone
  1016.         Rjsr    L_Bnk.OrAdr
  1017.         move.w  my_BkFlag(a0),d0
  1018.         btst    #Bnk_BitBob,d0
  1019.         Rbne    L_IFunc
  1020.         btst    #Bnk_BitIcon,d0
  1021.         Rbne    L_IFunc
  1022.         move.l  a0,d6
  1023.         move.l  d7,d0
  1024.         move.w  my_BkFlag(a0),d1
  1025.         ext.l   d1
  1026.         move.l  my_BkLength(a0),d2
  1027.         subi.l  #my_BkHeader,d2
  1028.         lea     my_BkName(a0),a0
  1029.         Rjsr    L_Bnk.Reserve
  1030.         Rbeq    L_OOfmem
  1031.         movea.l a0,a1
  1032.         movea.l d6,a0
  1033.         move.l  my_BkLength(a0),d0
  1034.         subi.l  #my_BkHeader,d0
  1035.         SYS     $4.w,CopyMem
  1036.         rts
  1037.  
  1038.         *
  1039.  
  1040. L_Number        equ     28
  1041. L28     move.l  (a3)+,d0        ;Bk
  1042.         Rjsr    L_Bnk.OrAdr
  1043.         move.l  my_BkNumber(a0),d3
  1044.         moveq   #0,d2
  1045.         rts
  1046.  
  1047.         *
  1048.  
  1049. L_Finish        equ     29
  1050. L29     move.l  (a3)+,d0        ;Bk
  1051.         Rjsr    L_Bnk.OrAdr
  1052.         move.l  a0,d3
  1053.         add.l   my_BkLength(a0),d3
  1054.         subi.l  #my_BkHeader,d3
  1055.         moveq   #0,d2
  1056.         rts
  1057.  
  1058.         *
  1059.  
  1060. L_ImageSwap     equ     30
  1061. L30     move.l  (a3)+,d6        ;Image 2
  1062.         move.l  (a3)+,d7        ;Image 1
  1063.         move.l  (a3)+,d0        ;Bk
  1064.         Rjsr    L_Bnk.OrAdr
  1065.         move.w  my_BkFlag(a0),d0
  1066.         btst    #Bnk_BitBob,d0
  1067.         bne.s   .1
  1068.         btst    #Bnk_BitIcon,d0
  1069.         beq.s   .Skip
  1070. .1      cmp.w   (a0),d6         ;Image definiert?
  1071.         bgt.s   .Skip
  1072.         cmp.w   (a0)+,d7
  1073.         bgt.s   .Skip
  1074.         subq.l  #1,d6
  1075.         blt.s   .Skip           ;< 0
  1076.         subq.l  #1,d7
  1077.         blt.s   .Skip
  1078.         lsl.l   #3,d6           ;× 8
  1079.         lsl.l   #3,d7
  1080.         move.l  (a0,d6),d0      ;Adr. Image
  1081.         move.l  4(a0,d6),d1     ;Msk. Image
  1082.         move.l  (a0,d7),(a0,d6)
  1083.         move.l  4(a0,d7),4(a0,d6)
  1084.         move.l  d0,(a0,d7)
  1085.         move.l  d1,4(a0,d7)
  1086. .Skip   rts
  1087.  
  1088.         *
  1089.  
  1090. L_ImageWidth    equ     31
  1091. L31     move.l  (a3)+,d7        ;Image
  1092.         move.l  (a3)+,d0        ;Bk
  1093.         Rjsr    L_Bnk.OrAdr
  1094.         moveq   #0,d3
  1095.         move.w  my_BkFlag(a0),d0
  1096.         btst    #Bnk_BitBob,d0
  1097.         bne.s   .1
  1098.         btst    #Bnk_BitIcon,d0
  1099.         beq.s   .Skip
  1100. .1      cmp.w   (a0)+,d7        ;Image definiert ?
  1101.         bgt.s   .Skip
  1102.         subq.l  #1,d7
  1103.         blt.s   .Skip           ;< 0
  1104.         lsl.l   #3,d7           ;× 8
  1105.         movea.l (a0,d7),a0      ;Adr. v. Image
  1106.         move.w  (a0),d3         ;Breite / 16
  1107.         lsl.l   #4,d3           ;Breite × 16
  1108. .Skip   moveq   #0,d2
  1109.         rts
  1110.  
  1111.         *
  1112.  
  1113. L_ImageHeight   equ     32
  1114. L32     move.l  (a3)+,d7        ;Image
  1115.         move.l  (a3)+,d0        ;Bk
  1116.         Rjsr    L_Bnk.OrAdr
  1117.         moveq   #0,d3
  1118.         move.w  my_BkFlag(a0),d0
  1119.         btst    #Bnk_BitBob,d0
  1120.         bne.s   .1
  1121.         btst    #Bnk_BitIcon,d0
  1122.         beq.s   .Skip
  1123. .1      cmp.w   (a0)+,d7
  1124.         bgt.s   .Skip
  1125.         subq.l  #1,d7
  1126.         blt.s   .Skip
  1127.         lsl.l   #3,d7
  1128.         movea.l (a0,d7),a0
  1129.         move.w  2(a0),d3        ;Höhe
  1130. .Skip   moveq   #0,d2
  1131.         rts
  1132.  
  1133. **************************************************************************
  1134. * PINV$         (#)
  1135. * PSAD$         (#)
  1136. * PUND$         (#)
  1137. * PCPN$         (#)
  1138. * PJAM$         (#)
  1139. * PCSR$         (#)
  1140. * PDEF$
  1141. * FORMAT$       ($fmtstring,#fmtbk)
  1142. *-------------------------------------------------------------------------
  1143. L_Pinv          equ     33
  1144. L33     move.b  #"I",d0
  1145.         Rbra    L_PrtSeq
  1146.  
  1147.         *
  1148.  
  1149. L_Psad          equ     34
  1150. L34     move.b  #"S",d0
  1151.         Rbra    L_PrtSeq
  1152.  
  1153.         *
  1154.  
  1155. L_Pund          equ     35
  1156. L35     move.b  #"U",d0
  1157.         Rbra    L_PrtSeq
  1158.  
  1159.         *
  1160.  
  1161. L_Pcpn          equ     36
  1162. L36     move.b  #"D",d0
  1163.         Rbra    L_PrtSeq
  1164.  
  1165.         *
  1166.  
  1167. L_Pjam          equ     37
  1168. L37     move.b  #"W",d0
  1169.         Rbra    L_PrtSeq
  1170.  
  1171.         *
  1172.  
  1173. L_Pcsr          equ     38
  1174. L38     move.b  #"C",d0
  1175.         Rbra    L_PrtSeq
  1176.  
  1177.         *
  1178.  
  1179. L_Pdef          equ     39
  1180. L39     lea     .0(pc),a0
  1181.         move.l  a0,d3
  1182.         moveq   #2,d2
  1183.         rts
  1184. .0      dc.w    24      ;StringLen
  1185.         dc.l    $1B49301B,$53301B55,$301B5031
  1186.         dc.l    $1B42301B,$44331B57,$301B4331
  1187.         even
  1188.  
  1189.         *
  1190.  
  1191. L_Format        equ     40
  1192. L40     move.l  (a3)+,d0        ;FmtBk
  1193.         Rjsr    L_Bnk.OrAdr
  1194.         movea.l a0,a1
  1195.         movea.l (a3)+,a0        ;FmtString
  1196.         lea     2(a0),a0        ;^Len() überspringen
  1197.         lea     .2(pc),a2
  1198.         PUSHM   a3-a6
  1199.         movea.l Name1(a5),a3
  1200.         EXE     RawDoFmt
  1201.         POPM    a3-a6
  1202.         movea.l Name1(a5),a0
  1203.         clr.l   d0
  1204. .0      addq.w  #1,d0
  1205.         tst.b   (a0)+
  1206.         bne.s   .0
  1207.         subq.w  #1,d0
  1208.         move.l  d0,d3
  1209.         Rbsr    L_GetSpace
  1210.         movea.l Name1(a5),a0
  1211. .1      move.b  (a0)+,(a1)+
  1212.         dbra    d0,.1
  1213.         moveq   #2,d2
  1214.         rts
  1215. .2      move.b  d0,(a3)+
  1216.         rts
  1217.  
  1218. **************************************************************************
  1219. * RS STRUCTURE  #struc,#size
  1220. * RS START      (#struc)
  1221. * RS FINISH     (#struc)
  1222. * RS LENGTH     (#struc)
  1223. * RS CLEAR      #struc
  1224. * RS FILL       #struc,#count,#ascii
  1225. * RS BYTE       #struc,#byte
  1226. * RS WORD       #struc,#word
  1227. * RS LONG       #struc,#long
  1228. * RS APTR       #struc,$string
  1229. * RS CHAR       #struc,$string
  1230. * RS SET        #struc,#offset
  1231. * RS BSET       #struc,#bytes
  1232. * RS WSET       #struc,#words
  1233. * RS LSET       #struc,#longs
  1234. * RS ERASE      [#struc]
  1235. * RS            (#struc)
  1236. *-------------------------------------------------------------------------
  1237. L_RsStructure   equ     41
  1238. L41     move.l  (a3)+,d6        ;Size
  1239.         move.l  (a3)+,d7        ;Struc
  1240.         cmpi.l  #my_RsMax,d7
  1241.         Rbge    L_IFunc
  1242.         mulu    #my_RsSIZEOF,d7
  1243.         XLEA    my_RsStruc,a0
  1244.         adda.l  d7,a0
  1245.         tst.l   my_RsStart(a0)
  1246.         beq.s   .1
  1247.         movea.l my_RsStart(a0),a1
  1248.         move.l  my_RsLength(a0),d0
  1249.         Rjsr    L_RamFree
  1250. .1      move.l  d6,d0
  1251.         Rjsr    L_RamFast
  1252.         Rbeq    L_OOfmem
  1253.         XLEA    my_RsStruc,a0
  1254.         adda.l  d7,a0
  1255.         move.l  d0,my_RsStart(a0)
  1256.         move.l  d6,my_RsLength(a0)
  1257.         move.l  d0,my_RsPosition(a0)
  1258.         rts
  1259.  
  1260.         *
  1261.  
  1262. L_RsStart       equ     42
  1263. L42     move.l  (a3)+,d7        ;Struc
  1264.         cmpi.l  #my_RsMax,d7
  1265.         Rbge    L_IFunc
  1266.         mulu    #my_RsSIZEOF,d7
  1267.         XLEA    my_RsStruc,a0
  1268.         adda.l  d7,a0
  1269.         move.l  my_RsStart(a0),d3
  1270.         Rbeq    L_IFunc
  1271.         moveq   #0,d2
  1272.         rts
  1273.  
  1274.         *
  1275.  
  1276. L_RsFinish      equ     43
  1277. L43     move.l  (a3)+,d7        ;Struc
  1278.         cmpi.l  #my_RsMax,d7
  1279.         Rbge    L_IFunc
  1280.         mulu    #my_RsSIZEOF,d7
  1281.         XLEA    my_RsStruc,a0
  1282.         adda.l  d7,a0
  1283.         move.l  my_RsStart(a0),d3
  1284.         Rbeq    L_IFunc
  1285.         add.l   my_RsLength(a0),d3
  1286.         moveq   #0,d2
  1287.         rts
  1288.  
  1289.         *
  1290.  
  1291. L_RsLength      equ     44
  1292. L44     move.l  (a3)+,d7        ;Struc
  1293.         moveq.l #0,d3
  1294.         cmpi.l  #my_RsMax,d7
  1295.         bge.s   .Skip
  1296.         mulu    #my_RsSIZEOF,d7
  1297.         XLEA    my_RsStruc,a0
  1298.         adda.l  d7,a0
  1299.         move.l  my_RsLength(a0),d3
  1300. .Skip   moveq   #0,d2
  1301.         rts
  1302.  
  1303.         *
  1304.  
  1305. L_RsClear       equ     45
  1306. L45     move.l  (a3)+,d0        ;Struc
  1307.         cmpi.l  #my_RsMax,d0
  1308.         Rbge    L_IFunc
  1309.         mulu    #my_RsSIZEOF,d0
  1310.         XLEA    my_RsStruc,a0
  1311.         adda.l  d0,a0
  1312.         movea.l my_RsStart(a0),a1
  1313.         move.l  my_RsLength(a0),d0
  1314.         subq.l  #1,d0
  1315. .0      clr.b   (a1)+
  1316.         dbra    d0,.0
  1317.         rts
  1318.  
  1319.         *
  1320.  
  1321. L_RsFill        equ     46
  1322. L46     move.l  (a3)+,d5        ;AscII
  1323.         move.l  (a3)+,d6        ;Count
  1324.         move.l  (a3)+,d7        ;Struc
  1325.         cmpi.l  #my_RsMax,d7
  1326.         Rbge    L_IFunc
  1327.         mulu    #my_RsSIZEOF,d7
  1328.         XLEA    my_RsStruc,a0
  1329.         adda.l  d7,a0
  1330.         move.l  my_RsPosition(a0),d0
  1331.         Rbeq    L_IFunc
  1332.         movea.l d0,a1
  1333. .1      cmp.l   my_RsLength(a0),d6
  1334.         bge.s   .2
  1335.         move.b  d5,(a1)+
  1336.         dbeq    d6,.1
  1337. .2      move.l  a1,my_RsPosition(a0)
  1338.         rts
  1339.  
  1340.         *
  1341.  
  1342. L_RsByte        equ     47
  1343. L47     move.l  (a3)+,d6        ;Byte
  1344.         move.l  (a3)+,d7        ;Struc
  1345.         cmpi.l  #my_RsMax,d7
  1346.         Rbge    L_IFunc
  1347.         mulu    #my_RsSIZEOF,d7
  1348.         XLEA    my_RsStruc,a0
  1349.         adda.l  d7,a0
  1350.         move.l  my_RsPosition(a0),d0
  1351.         Rbeq    L_IFunc
  1352.         movea.l d0,a1
  1353.         move.b  d6,(a1)+
  1354.         move.l  a1,my_RsPosition(a0)
  1355.         rts
  1356.  
  1357.         *
  1358.  
  1359. L_RsWord        equ     48
  1360. L48     movea.l a3,a2           ;Word (Adr)
  1361.         lea     4(a3),a3
  1362.         move.l  (a3)+,d7        ;Struc
  1363.         cmpi.l  #my_RsMax,d7
  1364.         Rbge    L_IFunc
  1365.         mulu    #my_RsSIZEOF,d7
  1366.         XLEA    my_RsStruc,a0
  1367.         adda.l  d7,a0
  1368.         move.l  my_RsPosition(a0),d0
  1369.         Rbeq    L_IFunc
  1370.         movea.l d0,a1
  1371.         move.b  2(a2),(a1)+     ;Auch ungerade Adresse
  1372.         move.b  3(a2),(a1)+
  1373.         move.l  a1,my_RsPosition(a0)
  1374.         rts
  1375.  
  1376.         *
  1377.  
  1378. L_RsLong        equ     49
  1379. L49     movea.l a3,a2           ;Long (Adr)
  1380.         lea     4(a3),a3
  1381.         move.l  (a3)+,d7        ;Struc
  1382.         cmpi.l  #my_RsMax,d7
  1383.         Rbge    L_IFunc
  1384.         mulu    #my_RsSIZEOF,d7
  1385.         XLEA    my_RsStruc,a0
  1386.         adda.l  d7,a0
  1387.         move.l  my_RsPosition(a0),d0
  1388.         Rbeq    L_IFunc
  1389.         movea.l d0,a1
  1390.         REPT    4
  1391.         move.b  (a2)+,(a1)+     ;Auch ungerade Adresse
  1392.         ENDR
  1393.         move.l  a1,my_RsPosition(a0)
  1394.         rts
  1395.  
  1396.         *
  1397.  
  1398. L_RsAptr        equ     50
  1399. L50     move.l  (a3)+,d6        ;String
  1400.         move.l  (a3)+,d7        ;Struc
  1401.         cmpi.l  #my_RsMax,d7
  1402.         Rbge    L_IFunc
  1403.         mulu    #my_RsSIZEOF,d7
  1404.         XLEA    my_RsStruc,a0
  1405.         adda.l  d7,a0
  1406.         tst.l   my_RsPosition(a0)
  1407.         Rbeq    L_IFunc
  1408.         movea.l d6,a2
  1409.         move.w  (a2)+,d0
  1410.         beq.s   .Skip
  1411.         moveq.l #0,d3
  1412.         move.w  d0,d3
  1413.         addq.w  #1,d3           ;+ 1 für NULL
  1414.         Rbsr    L_GetSpace
  1415.         move.l  a1,d3           ;Ohne Len()
  1416. .1      move.b  (a2)+,(a1)+
  1417.         dbeq    d0,.1
  1418.         clr.b   (a1)
  1419.         movea.l my_RsPosition(a0),a2
  1420.         move.l  d3,(a2)+
  1421.         move.l  a2,my_RsPosition(a0)
  1422. .Skip   rts
  1423.  
  1424.         *
  1425.  
  1426. L_RsChar        equ     51
  1427. L51     move.l  (a3)+,d6        ;String
  1428.         move.l  (a3)+,d7        ;Struc
  1429.         cmpi.l  #my_RsMax,d7
  1430.         Rbge    L_IFunc
  1431.         mulu    #my_RsSIZEOF,d7
  1432.         XLEA    my_RsStruc,a0
  1433.         adda.l  d7,a0
  1434.         move.l  my_RsPosition(a0),d0
  1435.         Rbeq    L_IFunc
  1436.         movea.l d0,a1
  1437.         movea.l d6,a2
  1438.         move.w  (a2)+,d0
  1439.         beq.s   .Skip
  1440. .1      move.b  (a2)+,(a1)+
  1441.         dbeq    d0,.1
  1442.         move.l  a1,my_RsPosition(a0)
  1443. .Skip   rts
  1444.  
  1445.         *
  1446.  
  1447. L_RsSet         equ     52
  1448. L52     move.l  (a3)+,d6        ;Offset
  1449.         move.l  (a3)+,d7        ;Struc
  1450.         cmpi.l  #my_RsMax,d7
  1451.         Rbge    L_IFunc
  1452.         mulu    #my_RsSIZEOF,d7
  1453.         XLEA    my_RsStruc,a0
  1454.         adda.l  d7,a0
  1455.         move.l  my_RsStart(a0),d0
  1456.         Rbeq    L_IFunc
  1457.         add.l   d6,d0
  1458.         move.l  d0,my_RsPosition(a0)
  1459.         rts
  1460.  
  1461.         *
  1462.  
  1463. L_RsBset        equ     53
  1464. L53     move.l  (a3)+,d6        ;Bytes
  1465.         move.l  (a3)+,d7        ;Struc
  1466.         cmpi.l  #my_RsMax,d7
  1467.         Rbge    L_IFunc
  1468.         mulu    #my_RsSIZEOF,d7
  1469.         XLEA    my_RsStruc,a0
  1470.         adda.l  d7,a0
  1471.         move.l  my_RsPosition(a0),d0
  1472.         Rbeq    L_IFunc
  1473.         add.l   d6,d0
  1474.         move.l  d0,my_RsPosition(a0)
  1475.         rts
  1476.  
  1477.         *
  1478.  
  1479. L_RsWset        equ     54
  1480. L54     move.l  (a3)+,d6        ;Words
  1481.         move.l  (a3)+,d7        ;Struc
  1482.         cmpi.l  #my_RsMax,d7
  1483.         Rbge    L_IFunc
  1484.         mulu    #my_RsSIZEOF,d7
  1485.         XLEA    my_RsStruc,a0
  1486.         adda.l  d7,a0
  1487.         move.l  my_RsPosition(a0),d0
  1488.         Rbeq    L_IFunc
  1489.         lsl.l   #1,d6           ;Words x 2
  1490.         add.l   d6,d0
  1491.         move.l  d0,my_RsPosition(a0)
  1492.         rts
  1493.  
  1494.         *
  1495.  
  1496. L_RsLset        equ     55
  1497. L55     move.l  (a3)+,d6        ;Longs
  1498.         move.l  (a3)+,d7        ;Struc
  1499.         cmpi.l  #my_RsMax,d7
  1500.         Rbge    L_IFunc
  1501.         mulu    #my_RsSIZEOF,d7
  1502.         XLEA    my_RsStruc,a0
  1503.         adda.l  d7,a0
  1504.         move.l  my_RsPosition(a0),d0
  1505.         Rbeq    L_IFunc
  1506.         lsl.l   #2,d6           ;Longs x 4
  1507.         add.l   d6,d0
  1508.         move.l  d0,my_RsPosition(a0)
  1509.         rts
  1510.  
  1511.         *
  1512.  
  1513. L_RsEraseA      equ     56
  1514. L56     Rbra    L_RsEraseAll
  1515.  
  1516. L_RsEraseB      equ     57
  1517. L57     move.l  (a3)+,d7        ;Struc
  1518.         cmpi.l  #my_RsMax,d7
  1519.         bge.s   .Skip
  1520.         mulu    #my_RsSIZEOF,d7
  1521.         XLEA    my_RsStruc,a0
  1522.         adda.l  d7,a0
  1523.         movea.l my_RsStart(a0),a1
  1524.         move.l  my_RsLength(a0),d0
  1525.         beq.s   .Skip
  1526.         clr.l   my_RsStart(a0)
  1527.         clr.l   my_RsLength(a0)
  1528.         clr.l   my_RsPosition(a0)
  1529.         Rjmp    L_RamFree
  1530. .Skip   rts
  1531.  
  1532.         *
  1533.  
  1534. L_Rs            equ     58
  1535. L58     move.l  (a3)+,d7        ;Struc
  1536.         cmpi.l  #my_RsMax,d7
  1537.         Rbge    L_IFunc
  1538.         mulu    #my_RsSIZEOF,d7
  1539.         XLEA    my_RsStruc,a0
  1540.         adda.l  d7,a0
  1541.         move.l  my_RsPosition(a0),d3
  1542.         Rbeq    L_IFunc
  1543.         sub.l   my_RsStart(a0),d3
  1544.         moveq   #0,d2
  1545.         rts
  1546.  
  1547. **************************************************************************
  1548. * BYTE          ($byte)
  1549. * BYTE$         (#byte)
  1550. * WORD          ($word)
  1551. * WORD$         (#word)
  1552. * LONG          ($long)
  1553. * LONG$         (#long)
  1554. * LSL.B         (#byte,#)
  1555. * LSL.W         (#word,#)
  1556. * LSL.L         (#long,#)
  1557. * LSR.B         (#byte,#)
  1558. * LSR.W         (#word,#)
  1559. * LSR.L         (#long,#)
  1560. * EVEN          (#)
  1561. * ODD           (#)
  1562. * ALIGN         (#,#align)
  1563. *-------------------------------------------------------------------------
  1564. L_ByteA         equ     59
  1565. L59     movea.l (a3)+,a0        ;Byte$
  1566.         moveq.l #0,d3
  1567.         move.b  2(a0),d3
  1568.         moveq   #0,d2
  1569.         rts
  1570.  
  1571.         *
  1572.  
  1573. L_ByteB         equ     60
  1574. L60     move.l  (a3)+,d0        ;Byte
  1575.         moveq   #1,d3
  1576.         Rbsr    L_GetSpace      ;D3 = StrPtr
  1577.         move.b  d0,(a1)
  1578.         moveq   #2,d2
  1579.         rts
  1580.  
  1581.         *
  1582.  
  1583. L_WordA         equ     61
  1584. L61     movea.l (a3)+,a0        ;Word$
  1585.         moveq.l #0,d3
  1586.         move.w  2(a0),d3
  1587.         moveq   #0,d2
  1588.         rts
  1589.  
  1590.         *
  1591.  
  1592. L_WordB         equ     62
  1593. L62     move.l  (a3)+,d0        ;Word
  1594.         moveq   #2,d3
  1595.         Rbsr    L_GetSpace
  1596.         move.w  d0,(a1)
  1597.         moveq   #2,d2
  1598.         rts
  1599.  
  1600.         *
  1601.  
  1602. L_LongA         equ     63
  1603. L63     movea.l (a3)+,a0        ;Long$
  1604.         move.l  2(a0),d3
  1605.         moveq   #0,d2
  1606.         rts
  1607.  
  1608.         *
  1609.  
  1610. L_LongB         equ     64
  1611. L64     moveq   #4,d3
  1612.         Rbsr    L_GetSpace
  1613.         move.l  (a3)+,(a1)      ;Long
  1614.         moveq   #2,d2
  1615.         rts
  1616.  
  1617.         *
  1618.  
  1619. L_LslB          equ     65
  1620. L65     move.l  (a3)+,d3
  1621.         move.l  (a3)+,d2
  1622.         lsl.b   d2,d3
  1623.         moveq   #0,d2
  1624.         rts
  1625.  
  1626.         *
  1627.  
  1628. L_LslW          equ     66
  1629. L66     move.l  (a3)+,d3
  1630.         move.l  (a3)+,d2
  1631.         lsl.w   d2,d3
  1632.         moveq   #0,d2
  1633.         rts
  1634.  
  1635.         *
  1636.  
  1637. L_LslL          equ     67
  1638. L67     move.l  (a3)+,d3
  1639.         move.l  (a3)+,d2
  1640.         lsl.l   d2,d3
  1641.         moveq   #0,d2
  1642.         rts
  1643.  
  1644.         *
  1645.  
  1646. L_LsrB          equ     68
  1647. L68     move.l  (a3)+,d3
  1648.         move.l  (a3)+,d2
  1649.         lsr.b   d2,d3
  1650.         moveq   #0,d2
  1651.         rts
  1652.  
  1653.         *
  1654.  
  1655. L_LsrW          equ     69
  1656. L69     move.l  (a3)+,d3
  1657.         move.l  (a3)+,d2
  1658.         lsr.w   d2,d3
  1659.         moveq   #0,d2
  1660.         rts
  1661.  
  1662.         *
  1663.  
  1664. L_LsrL          equ     70
  1665. L70     move.l  (a3)+,d3
  1666.         move.l  (a3)+,d2
  1667.         lsr.l   d2,d3
  1668.         moveq   #0,d2
  1669.         rts
  1670.  
  1671.         *
  1672.  
  1673. L_Even          equ     71
  1674. L71     move.l  (a3)+,d0
  1675.         moveq   #0,d3
  1676.         btst    #0,d0
  1677.         bne.s   .Skip
  1678.         moveq   #-1,d3
  1679. .Skip   moveq   #0,d2
  1680.         rts
  1681.  
  1682.         *
  1683.  
  1684. L_Odd           equ     72
  1685. L72     move.l  (a3)+,d0
  1686.         moveq   #0,d3
  1687.         btst    #0,d0
  1688.         beq.s   .Skip
  1689.         moveq   #-1,d3
  1690. .Skip   moveq   #0,d2
  1691.         rts
  1692.  
  1693.         *
  1694.  
  1695. L_Align         equ     73
  1696. L73     move.l  (a3)+,d0        ;Align
  1697.         move.l  (a3)+,d1        ;Variabel
  1698.         tst.l   d0
  1699.         Rbeq    L_IFunc         ;/0 dann Fehler
  1700.         move.l  d1,d3
  1701.         divs    d0,d1
  1702.         swap    d1
  1703.         andi.l  #$FFFF,d1
  1704.         tst.l   d1
  1705.         beq.s   .Skip
  1706.         add.l   d0,d3
  1707.         sub.l   d1,d3
  1708. .Skip   moveq   #0,d2
  1709.         rts
  1710.  
  1711. **************************************************************************
  1712. * BPK UNPACK    bk
  1713. * BPK LENGTH    (bk)
  1714. * DPK UNPACK    bk
  1715. * DPK NAME$     (bk)
  1716. * IPK LENGTH    (bk)
  1717. * PPK PACK      bk [,#efficiency]
  1718. * PPK UNPACK    bk [,$password]
  1719. * PPK LENGTH    (bk)
  1720. * PPK MODE      (bk)
  1721. * PPK TYPE      (bk)
  1722. * PPK NAME$     (bk)
  1723. * PPK PASSKEY   (bk)
  1724. * PPK PASSWORD  (bk,$password)
  1725. * PPK DATA      bk [,$password]
  1726. * XPK LENGTH    (bk)
  1727. * XPK NAME$     (bk)
  1728. * XPK UNPACK    bk [,$password]
  1729. * XPK ERRN
  1730. * XPK ERR$
  1731. *-------------------------------------------------------------------------
  1732. L_BpkUnpack     equ     74
  1733. L74     move.l  (a3)+,d0                ;Bk
  1734.         Rjsr    L_Bnk.OrAdr
  1735.         Rbsr    L_GetBpkLen
  1736.         move.l  d0,d2
  1737.         beq     Bk9                     ;Kein ByteKiller Format
  1738.         move.l  a0,d6
  1739.         moveq   #0,d1
  1740.         DLEA    my_BkNameWork,a0
  1741.         moveq   #1,d0
  1742.         Rbsr    L_Bnk.GetFree
  1743.         Rjsr    L_Bnk.Reserve
  1744.         Rbeq    L_OOfmem
  1745.         movea.l a0,a1                   ;DBk -> A1
  1746.         movea.l d6,a0                   ;SBk -> A0
  1747.         PUSHM   a0-a6/d0-d7
  1748.         cmpi.l  #$61766532,$4C(a0)      ;Ausführbar?
  1749.         bne.s   .1                      ;Nein!
  1750.         lea     234(a0),a0              ;ExecHeader überspringen
  1751. .1      move.l  (a0)+,d0
  1752.         move.l  (a0)+,d1
  1753.         move.l  (a0)+,d5
  1754.         movea.l a1,a2
  1755.         adda.l  d0,a0
  1756.         adda.l  d1,a2
  1757.         move.l  -(a0),d0
  1758.         eor.l   d0,d5
  1759. Bk1     lsr.l   #1,d0
  1760.         bne.s   .1
  1761.         bsr.s   Bk7
  1762. .1      bcs.s   Bk4
  1763.         moveq   #8,d1
  1764.         moveq   #1,d3
  1765.         lsr.l   #1,d0
  1766.         bne.s   .2
  1767.         bsr.s   Bk7
  1768. .2      bcs.s   Bk5
  1769.         moveq   #3,d1
  1770.         clr.w   d4
  1771. Bk2     bsr.s   Bk8
  1772.         move.w  d2,d3
  1773.         add.w   d4,d3
  1774. .1      moveq   #7,d1
  1775. .2      lsr.l   #1,d0
  1776.         bne.s   .3
  1777.         bsr.s   Bk7
  1778. .3      roxl.l  #1,d2
  1779.         dbra    d1,.2
  1780.         move.b  d2,-(a2)
  1781.         dbra    d3,.1
  1782.         bra.s   Bk6
  1783. Bk3     moveq   #8,d1
  1784.         moveq   #8,d4
  1785.         bra.s   Bk2
  1786. Bk4     moveq   #2,d1
  1787.         bsr.s   Bk8
  1788.         cmpi.b  #2,d2
  1789.         blt.s   .1
  1790.         cmpi.b  #3,d2
  1791.         beq.s   Bk3
  1792.         moveq   #8,d1
  1793.         bsr.s   Bk8
  1794.         move.w  d2,d3
  1795.         move.w  #$C,d1
  1796.         bra.s   Bk5
  1797. .1      move.w  #9,d1
  1798.         add.w   d2,d1
  1799.         addq.w  #2,d2
  1800.         move.w  d2,d3
  1801. Bk5     bsr.s   Bk8
  1802. .1      subq.w  #1,a2
  1803.         move.b  (a2,d2.w),(a2)
  1804.         dbra    d3,.1
  1805. Bk6     cmpa.l  a2,a1
  1806.         blt.s   Bk1
  1807.         POPM    a0-a6/d0-d7
  1808.         Rbra    L_Bnk.HeadClone
  1809. Bk7     move.l  -(a0),d0
  1810.         eor.l   d0,d5
  1811.         move.w  #$10,CCR
  1812.         roxr.l  #1,d0
  1813.         rts
  1814. Bk8     subq.w  #1,d1
  1815.         clr.w   d2
  1816. .1      lsr.l   #1,d0
  1817.         bne.s   .2
  1818.         move.l  -(a0),d0
  1819.         eor.l   d0,d5
  1820.         move.w  #$10,CCR
  1821.         roxr.l  #1,d0
  1822. .2      roxl.l  #1,d2
  1823.         dbra    d1,.1
  1824. Bk9     rts
  1825.  
  1826.         *
  1827.  
  1828. L_BpkLength     equ     75
  1829. L75     move.l  (a3)+,d0        ;Bk
  1830.         Rjsr    L_Bnk.OrAdr
  1831.         Rbsr    L_GetBpkLen
  1832.         move.l  d0,d3
  1833.         moveq   #0,d2
  1834.         rts
  1835.  
  1836.         *
  1837.  
  1838. L_DpkUnpack     equ     76
  1839. L76     move.l  (a3)+,d0                ;Bk
  1840.         Rjsr    L_Bnk.OrAdr
  1841.         move.l  a0,d6                   ;BkSAdr
  1842.         move.l  my_BkLength(a0),d7      ;BkSLen
  1843.         subi.l  #my_BkHeader,d7
  1844.         Rbsr    L_DpkLibOpen
  1845.         PUSHM   a3/a6
  1846.         DLOAD   a2
  1847.         movea.l my_DpkLibBase(a2),a6
  1848.         LIB     dlAllocItem
  1849.         movea.l d0,a3           ;DcTagItem -> A3
  1850.         move.l  d6,(a3)         ;BkSAdr
  1851.         move.l  d7,22(a3)       ;BkSLen
  1852.         movea.l a3,a0
  1853.         LIB     dlInitItem
  1854.         tst.l   d0
  1855.         beq.s   .Skip
  1856.         movea.l a3,a0
  1857.         LIB     dlDecrunch
  1858.         tst.l   d0
  1859.         beq.s   .Skip
  1860.         movea.l d6,a0
  1861.         move.l  my_BkNumber(a0),d0
  1862.         moveq   #0,d1           ;Work+Fast
  1863.         move.l  12(a3),d2       ;BkLen ungepackt -> D2
  1864.         DLEA    my_BkNameWork,a0
  1865.         Rjsr    L_Bnk.Reserve
  1866.         beq.s   .1
  1867.         movea.l a0,a1
  1868.         movea.l 8(a3),a0        ;entpackte BereichsAdr.
  1869.         move.l  12(a3),d0       ;entpackte Byteanzahl
  1870.         SYS     $4.w,CopyMem
  1871. .1      movea.l 8(a3),a1        ;Decrunchbuffer
  1872.         move.l  16(a3),d0       ;DecrunchbufferLen
  1873.         SYS     $4.w,FreeMem
  1874. .Skip   movea.l a3,a0
  1875.         LIB     dlFreeItem
  1876.         POPM    a3/a6
  1877.         rts
  1878.  
  1879.         *
  1880.  
  1881. L_DpkName       equ     77
  1882. L77     move.l  (a3)+,d0        ;Bk
  1883.         Rjsr    L_Bnk.OrAdr
  1884.         move.l  a0,d6           ;BkSAdr
  1885.         Rbsr    L_DpkLibOpen
  1886.         PUSHM   a3/a6
  1887.         DLOAD   a2
  1888.         movea.l my_DpkLibBase(a2),a6
  1889.         LIB     dlAllocItem
  1890.         movea.l d0,a3           ;DcTagItem -> A3
  1891.         move.l  d6,(a3)         ;BkSAdr
  1892.         movea.l a3,a0           ;DcTagItem -> A0
  1893.         LIB     dlInitItem
  1894.         move.l  ChVide(a5),d3   ;Leer-String falls ungepackt
  1895.         tst.l   d0
  1896.         beq.s   .Skip           ;Nicht/unbekannt gepackt
  1897.         movea.l 4(a3),a0        ;Adr. v. Packername
  1898.         moveq.l #-1,d0
  1899. .1      addq.l  #1,d0
  1900.         tst.b   (a0)+
  1901.         bne.s   .1
  1902.         move.l  d0,d3
  1903.         Rbsr    L_GetSpace
  1904.         movea.l 4(a3),a0
  1905. .2      move.b  (a0)+,(a1)+
  1906.         dbra    d0,.2
  1907. .Skip   movea.l a3,a0
  1908.         LIB     dlFreeItem
  1909.         POPM    a3/a6
  1910.         moveq   #2,d2
  1911.         rts
  1912.  
  1913.         *
  1914.  
  1915. L_IpkLength     equ     78
  1916. L78     move.l  (a3)+,d0
  1917.         Rjsr    L_Bnk.OrAdr
  1918.         moveq   #0,d3
  1919.         cmpi.l  #"IMP!",(a0)    ;ID_IMPLODER Bk
  1920.         bne.s   .Skip           ;No imploded data
  1921.         move.l  4(a0),d3        ;ExplodedLen
  1922. .Skip   moveq   #0,d2
  1923.         rts
  1924.  
  1925.         *
  1926.  
  1927. L_PpkPackA      equ     79
  1928. L79     DLOAD   a2
  1929.         move.l  (a3)+,my_PpkSrc(a2)
  1930.         move.l  #2,my_PpkPackMode(a2)           ;Default - Good [2]
  1931.         Rbra    L_PpkPack
  1932.  
  1933. L_PpkPackB      equ     80
  1934. L80     DLOAD   a2
  1935.         move.l  (a3)+,my_PpkPackMode(a2)        ;Efficiency
  1936.         move.l  (a3)+,my_PpkSrc(a2)
  1937.         Rbra    L_PpkPack
  1938.  
  1939.         *
  1940.  
  1941. L_PpkUnpackA    equ     81
  1942. L81     DLOAD   a2
  1943.         move.l  (a3)+,my_PpkSrc(a2)
  1944.         movea.l Name1(a5),a1
  1945.         clr.b   (a1)            ;Kein Passwort
  1946.         Rbra    L_PpkUnpack
  1947.  
  1948. L_PpkUnpackB    equ     82
  1949. L82     DLOAD   a2
  1950.         movea.l (a3)+,a0        ;Passwort - Version: Passwort
  1951.         move.w  (a0)+,d0        ;PasswortLen
  1952.         subq.w  #1,d0
  1953.         cmpi.w  #128,d0
  1954.         Rbcc    L_IFunc
  1955.         movea.l Name1(a5),a1
  1956. .1      move.b  (a0)+,(a1)+     ;Passwort installieren
  1957.         dbra    d0,.1
  1958.         clr.b   (a1)
  1959.         move.l  (a3)+,my_PpkSrc(a2)
  1960.         Rbra    L_PpkUnpack
  1961.  
  1962.         *
  1963.  
  1964. L_PpkLength     equ     83
  1965. L83     DLOAD   a2
  1966.         move.l  (a3)+,my_PpkSrc(a2)
  1967.         Rbsr    L_GetPpkLen
  1968.         move.l  d0,d3
  1969.         moveq   #0,d2
  1970.         rts
  1971.  
  1972.         *
  1973.  
  1974. L_PpkMode       equ     84
  1975. L84     move.l  (a3)+,d0
  1976.         Rjsr    L_Bnk.OrAdr
  1977.         Rbsr    L_PpkID
  1978.         moveq   #my_PpkKnow-1,d2
  1979. .1      move.l  my_PpkCodePos(a1),d0
  1980.         move.l  my_PpkCode(a1),d1
  1981.         cmp.l   (a0,d0.l),d1            ;pp/x.Bk ?
  1982.         beq.s   .2                      ;Ja !
  1983.         lea     my_PpkSIZEOF(a1),a1
  1984.         dbeq    d2,.1
  1985.         moveq   #-1,d3                  ;Nicht pp/x.Gepackt
  1986.         bra.s   .Skip
  1987. .2      move.l  my_PpkEffPos(a1),d0
  1988.         Rbsr    L_PpkID
  1989.         lea     my_PpkEffMode(a1),a1
  1990.         moveq   #4,d2
  1991.         moveq   #0,d3
  1992. .3      move.l  (a1)+,d1                ;pp/x.Effizienz Code
  1993.         cmp.l   (a0,d0.l),d1
  1994.         beq.s   .Skip
  1995.         addq    #1,d3
  1996.         dbeq    d2,.3
  1997. .Skip   moveq   #0,d2
  1998.         rts
  1999.  
  2000.         *
  2001.  
  2002. L_PpkType       equ     85
  2003. L85     move.l  (a3)+,d0
  2004.         Rjsr    L_Bnk.OrAdr
  2005.         Rbsr    L_PpkID
  2006.         moveq   #my_PpkKnow-1,d2
  2007. .1      move.l  my_PpkType(a1),d3
  2008.         move.l  my_PpkCodePos(a1),d0
  2009.         move.l  my_PpkCode(a1),d1
  2010.         cmp.l   (a0,d0.l),d1
  2011.         beq.s   .Skip
  2012.         lea     my_PpkSIZEOF(a1),a1
  2013.         dbeq    d2,.1
  2014.         moveq   #0,d3
  2015. .Skip   moveq   #0,d2
  2016.         rts
  2017.  
  2018.         *
  2019.  
  2020. L_PpkName       equ     86
  2021. L86     move.l  (a3)+,d0
  2022.         Rjsr    L_Bnk.OrAdr
  2023.         Rbsr    L_PpkID
  2024.         movea.l a1,a2
  2025.         moveq   #my_PpkKnow-1,d2
  2026. .1      move.l  my_PpkCodePos(a2),d0
  2027.         move.l  my_PpkCode(a2),d1
  2028.         cmp.l   (a0,d0.l),d1
  2029.         beq.s   .2
  2030.         lea     my_PpkSIZEOF(a2),a2
  2031.         dbeq    d2,.1
  2032.         move.l  ChVide(a5),d3
  2033.         bra.s   .Skip
  2034. .2      moveq   #4,d3
  2035.         Rbsr    L_GetSpace
  2036.         move.l  (a2),(a1)
  2037. .Skip   moveq   #2,d2
  2038.         rts
  2039.  
  2040.         *
  2041.  
  2042. L_PpkPasskey    equ     87
  2043. L87     move.l  (a3)+,d0
  2044.         Rjsr    L_Bnk.OrAdr
  2045.         Rbsr    L_PpkID
  2046.         moveq   #0,d3
  2047.         moveq   #my_PpkKnow-1,d2
  2048. .1      move.l  my_PpkCodePos(a1),d0
  2049.         move.l  my_PpkCode(a1),d1
  2050.         cmp.l   (a0,d0.l),d1
  2051.         beq.s   .2
  2052.         lea     my_PpkSIZEOF(a1),a1
  2053.         dbeq    d2,.1
  2054.         bra.s   .Skip
  2055. .2      move.l  my_PpkCryptPos(a1),d0
  2056.         beq.s   .Skip                   ;Keine pp.Crypt Bk
  2057.         move.w  (a0,d0.l),d3            ;px.PassKey
  2058. .Skip   moveq   #0,d2
  2059.         rts
  2060.  
  2061.         *
  2062.  
  2063. L_PpkPassword   equ     88
  2064. L88     movea.l (a3)+,a0        ;Passwort
  2065.         move.w  (a0)+,d0        ;PasswortLen
  2066.         subq.w  #1,d0
  2067.         cmpi.w  #128,d0
  2068.         Rbcc    L_IFunc
  2069.         movea.l Name1(a5),a1
  2070. .1      move.b  (a0)+,(a1)+     ;Passwort installieren
  2071.         dbra    d0,.1
  2072.         clr.b   (a1)
  2073.         move.l  (a3)+,d0        ;Bk
  2074.         Rjsr    L_Bnk.OrAdr
  2075.         Rbsr    L_PxPassKey     ;D3 = True oder False
  2076.         moveq   #0,d2
  2077.         rts
  2078.  
  2079.         *
  2080.  
  2081. L_PpkDataA      equ     89
  2082. L89     DLOAD   a2
  2083.         move.l  (a3)+,my_PpkSrc(a2)     ;Bk
  2084.         Rbra    L_PpkTransform
  2085.  
  2086. L_PpkDataB      equ     90
  2087. L90     DLOAD   a2
  2088.         movea.l (a3)+,a0        ;Passwort
  2089.         move.w  (a0)+,d0
  2090.         subq.w  #1,d0
  2091.         cmpi.w  #128,d0
  2092.         Rbcc    L_IFunc
  2093.         movea.l Name1(a5),a1
  2094. .1      move.b  (a0)+,(a1)+
  2095.         dbra    d0,.1
  2096.         clr.b   (a1)
  2097.         move.l  (a3)+,my_PpkSrc(a2)     ;Bk
  2098.         Rbra    L_PpkTransform
  2099.  
  2100.         *
  2101.  
  2102. L_XpkLength     equ     91
  2103. L91     move.l  (a3)+,d0
  2104.         Rjsr    L_Bnk.OrAdr
  2105.         moveq   #0,d2
  2106.         moveq   #0,d3
  2107.         cmpi.l  #"XPKF",(a0)    ;ID_XPK Bk
  2108.         bne.s   .Skip           ;Not compressed
  2109.         move.l  12(a0),d3       ;Unpacked len
  2110. .Skip   rts
  2111.  
  2112.         *
  2113.  
  2114. L_XpkName       equ     92
  2115. L92     move.l  (a3)+,d0
  2116.         Rjsr    L_Bnk.OrAdr
  2117.         moveq   #2,d2
  2118.         move.l  ChVide(a5),d3
  2119.         cmpi.l  #"XPKF",(a0)
  2120.         bne.s   .Skip           ;Not compressed
  2121.         moveq   #4,d3
  2122.         Rbsr    L_GetSpace
  2123.         move.l  8(a0),(a1)      ;ID_XPK_COMPRESSOR
  2124. .Skip   rts
  2125.  
  2126.         *
  2127.  
  2128. L_XpkUnpackA    equ     93
  2129. L93     DLOAD   a2
  2130.         move.l  (a3)+,my_XpkSrc(a2)
  2131.         clr.l   my_XpkPassWord(a2)
  2132.         Rbra    L_XpkUnpack
  2133.  
  2134. L_XpkUnpackB    equ     94
  2135. L94     DLOAD   a2
  2136.         movea.l (a3)+,a0
  2137.         move.w  (a0)+,d0
  2138.         move.l  (a3)+,my_XpkSrc(a2)
  2139.         subq.w  #1,d0
  2140.         cmpi.w  #128,d0
  2141.         Rbcc    L_IFunc
  2142.         movea.l Name1(a5),a1
  2143. .0      move.b  (a0)+,(a1)+     ;Passwort installieren
  2144.         dbra    d0,.0
  2145.         clr.b   (a1)
  2146.         move.l  Name1(a5),my_XpkPassWord(a2)
  2147.         Rbra    L_XpkUnpack
  2148.  
  2149.         *
  2150.  
  2151. L_XpkErrn       equ     95
  2152. L95     DLOAD   a2
  2153.         move.l  my_XpkErrNum(a2),d3
  2154.         moveq   #0,d2
  2155.         rts
  2156.  
  2157.         *
  2158.  
  2159. L_XpkErrs       equ     96
  2160. L96     XLEA    my_XpkErrMsg,a0
  2161.         moveq   #-1,d0
  2162. .1      addq.w  #1,d0
  2163.         tst.b   (a0)+
  2164.         bne.s   .1
  2165.         XLEA    my_XpkErrLen,a0
  2166.         move.w  d0,(a0)                 ;APStrLen
  2167.         move.l  a0,d3
  2168.         moveq   #2,d2
  2169.         rts
  2170.  
  2171. **************************************************************************
  2172. * RASTPORT
  2173. * PLANE MASK    #plane,#mask
  2174. * PLANE CLEAR   #plane
  2175. * PLANE GET     #plane TO bk
  2176. * PLANE PUT     bk TO #plane
  2177. * PLANE LENGTH
  2178. * PLANE COPY    #plane TO #plane
  2179. * PLANE SWAP    #plane,#plane
  2180. * PLANE NEGATIVE#plane
  2181. * PLANE MERGE   #plane TO #plane
  2182. * PLANE CLOSE   #plane [TO #plane]
  2183. * PLANE OPEN    #plane [TO #plane]
  2184. * PLANE ACTIVE  (#plane)
  2185. * IFF BANK      bk TO #screen
  2186. * ------------------------------------------------------------------------
  2187. L_RastPort      equ     97
  2188. L97     move.l  T_RastPort(a5),d3
  2189.         moveq   #0,d2
  2190.         rts
  2191.  
  2192.         *
  2193.  
  2194. L_PlaneMask     equ     98
  2195. L98     move.l  (a3)+,d6        ;Mask
  2196.         move.l  (a3)+,d7        ;Plane
  2197.         cmpi.l  #EcMaxPlans,d7  ;> 6 ?
  2198.         bpl.s   .Skip
  2199.         tst.l   ScOnAd(a5)      ;Screen geöffnet
  2200.         Rbeq    L_SNopen        ;Nein
  2201.         lsl.l   #2,d7           ;PlanePtr × 4
  2202.         movea.l T_RastPort(a5),a1
  2203.         movea.l rp_BitMap(a1),a1
  2204.         move.l  bm_Planes(a1,d7.l),d7
  2205.         beq.s   .Skip           ;Nicht vorhanden
  2206.         moveq   #0,d0
  2207.         moveq   #0,d1
  2208.         move.w  bm_BytesPerRow(a1),d0
  2209.         move.w  bm_Rows(a1),d1
  2210.         mulu    d1,d0           ;Planegröße = Breite × Linien
  2211.         movea.l d7,a0           ;Source
  2212.         lsr.l   #2,d0           ;/ 4
  2213.         subq    #1,d0
  2214. .1      or.l    d6,(a0)+        ;Maske installieren
  2215.         dbra    d0,.1
  2216. .Skip   rts
  2217.  
  2218.         *
  2219.  
  2220. L_PlaneClear    equ     99
  2221. L99     move.l  (a3)+,d0
  2222.         cmpi.l  #EcMaxPlans,d0
  2223.         bpl.s   .Skip
  2224.         tst.l   ScOnAd(a5)              ;Screen geöffnet
  2225.         Rbeq    L_SNopen                ;Nein
  2226.         lsl.l   #2,d0
  2227.         movea.l T_RastPort(a5),a0
  2228.         movea.l rp_BitMap(a0),a0
  2229.         move.l  bm_Planes(a0,d0.l),d1   ;PlanePtr
  2230.         beq.s   .Skip
  2231.         moveq   #0,d0
  2232.         move.w  bm_BytesPerRow(a0),d0
  2233.         mulu    bm_Rows(a0),d0          ;AnzBytes löschen
  2234.         movea.l d1,a1
  2235.         moveq   #0,d1                   ;Flags
  2236.         SYS     T_GfxBase(a5),BltClear
  2237. .Skip   rts
  2238.  
  2239.         *
  2240.  
  2241. L_PlaneGet      equ     100
  2242. L100    move.l  (a3)+,d0        ;Bk
  2243.         move.l  (a3)+,d7        ;Plane
  2244.         cmpi.l  #EcMaxPlans,d7
  2245.         bpl.s   .Skip
  2246.         tst.l   ScOnAd(a5)
  2247.         Rbeq    L_SNopen
  2248.         lsl.l   #2,d7
  2249.         movea.l T_RastPort(a5),a0
  2250.         movea.l rp_BitMap(a0),a0
  2251.         move.l  bm_Planes(a0,d7.l),d7
  2252.         beq.s   .Skip
  2253.         moveq   #0,d1
  2254.         moveq   #0,d2
  2255.         move.w  bm_BytesPerRow(a0),d1
  2256.         move.w  bm_Rows(a0),d2
  2257.         mulu    d1,d2
  2258.         move.l  d2,d6
  2259.         moveq   #0,d1
  2260.         DLEA    my_BkNameWork,a0
  2261.         Rjsr    L_Bnk.Reserve
  2262.         Rbeq    L_OOfmem
  2263.         movea.l a0,a1
  2264.         movea.l d7,a0
  2265.         move.l  d6,d0
  2266.         SYS     $4.w,CopyMem
  2267. .Skip   rts
  2268.  
  2269.         *
  2270.  
  2271. L_PlanePut      equ     101
  2272. L101    move.l  (a3)+,d7        ;Plane
  2273.         move.l  (a3)+,d0        ;Bk
  2274.         cmpi.l  #EcMaxPlans,d7
  2275.         bpl.s   .Skip
  2276.         tst.l   ScOnAd(a5)
  2277.         Rbeq    L_SNopen
  2278.         Rjsr    L_Bnk.OrAdr
  2279.         move.l  a0,d6           ;BkAdr
  2280.         move.l  my_BkLength(a0),d5
  2281.         subi.l  #my_BkHeader,d5 ;BkLen
  2282.         lsl.l   #2,d7
  2283.         movea.l T_RastPort(a5),a1
  2284.         movea.l rp_BitMap(a1),a1
  2285.         move.l  bm_Planes(a1,d7.l),d7
  2286.         beq.s   .Skip
  2287.         moveq   #0,d0
  2288.         moveq   #0,d1
  2289.         move.w  bm_BytesPerRow(a1),d0
  2290.         move.w  bm_Rows(a1),d1
  2291.         mulu    d1,d0
  2292.         cmp.l   d0,d5           ;Max. Datentransfer
  2293.         ble.s   .1              ;Ok
  2294.         move.l  d0,d5
  2295. .1      movea.l d6,a0           ;Source
  2296.         move.l  d5,d0           ;Bytes
  2297.         movea.l d7,a1           ;Dest
  2298.         SYS     $4.w,CopyMem
  2299. .Skip   rts
  2300.  
  2301.         *
  2302.  
  2303. L_PlaneLength   equ     102
  2304. L102    moveq   #0,d3
  2305.         tst.l   ScOnAd(a5)
  2306.         beq.s   .Skip
  2307.         movea.l T_RastPort(a5),a0
  2308.         movea.l rp_BitMap(a0),a0
  2309.         moveq   #0,d2
  2310.         moveq   #0,d3
  2311.         move.w  bm_BytesPerRow(a0),d2
  2312.         move.w  bm_Rows(a0),d3
  2313.         mulu    d2,d3
  2314. .Skip   moveq   #0,d2
  2315.         rts
  2316.  
  2317.         *
  2318.  
  2319. L_PlaneCopy     equ     103
  2320. L103    move.l  (a3)+,d6        ;Destplane
  2321.         move.l  (a3)+,d7        ;Sourceplane
  2322.         cmpi.l  #EcMaxPlans,d6
  2323.         bpl.s   .Skip
  2324.         cmpi.l  #EcMaxPlans,d7
  2325.         bpl.s   .Skip
  2326.         tst.l   ScOnAd(a5)
  2327.         Rbeq    L_SNopen
  2328.         movea.l T_RastPort(a5),a0
  2329.         movea.l rp_BitMap(a0),a0
  2330.         lsl.l   #2,d6
  2331.         lsl.l   #2,d7
  2332.         move.l  bm_Planes(a0,d6.l),d6
  2333.         beq.s   .Skip
  2334.         move.l  bm_Planes(a0,d7.l),d7
  2335.         beq.s   .Skip
  2336.         cmp.l   d6,d7
  2337.         beq.s   .Skip
  2338.         moveq   #0,d0
  2339.         moveq   #0,d1
  2340.         move.w  bm_BytesPerRow(a0),d0
  2341.         move.w  bm_Rows(a0),d1
  2342.         mulu    d1,d0
  2343.         movea.l d7,a0
  2344.         movea.l d6,a1
  2345.         SYS     $4.w,CopyMem
  2346. .Skip   rts
  2347.  
  2348.         *
  2349.  
  2350. L_PlaneSwap     equ     104
  2351. L104    move.l  (a3)+,d6                ;PlaneA
  2352.         move.l  (a3)+,d7                ;PlaneB
  2353.         cmpi.l  #EcMaxPlans,d6
  2354.         bpl.s   .Skip
  2355.         cmpi.l  #EcMaxPlans,d7
  2356.         bpl.s   .Skip
  2357.         tst.l   ScOnAd(a5)              ;Screen geöffnet
  2358.         Rbeq    L_SNopen                ;Nein!
  2359.         movea.l T_RastPort(a5),a0
  2360.         movea.l rp_BitMap(a0),a0        ;BitMap Struktur
  2361.         lsl.l   #2,d6
  2362.         lsl.l   #2,d7
  2363.         move.l  bm_Planes(a0,d6.l),d6   ;PAdr. PlaneA
  2364.         beq.s   .Skip
  2365.         move.l  bm_Planes(a0,d7.l),d7   ;PAdr. PlaneB
  2366.         beq.s   .Skip
  2367.         cmp.l   d6,d7
  2368.         beq.s   .Skip
  2369.         moveq   #0,d0
  2370.         moveq   #0,d1
  2371.         move.w  bm_BytesPerRow(a0),d0   ;Bytes in X (/8)
  2372.         move.w  bm_Rows(a0),d1          ;Zeilen
  2373.         mulu    d1,d0                   ;Bytegröße
  2374.         lsr.l   #2,d0
  2375.         subq    #1,d0
  2376.         movea.l d6,a0
  2377.         movea.l d7,a1
  2378. .1      move.l  (a0),d1
  2379.         move.l  (a1),(a0)+
  2380.         move.l  d1,(a1)+
  2381.         dbra    d0,.1
  2382. .Skip   rts
  2383.  
  2384.         *
  2385.  
  2386. L_PlaneNegative equ     105
  2387. L105    move.l  (a3)+,d7
  2388.         cmpi.l  #EcMaxPlans,d7
  2389.         bpl.s   .Skip
  2390.         tst.l   ScOnAd(a5)
  2391.         Rbeq    L_SNopen
  2392.         lsl.l   #2,d7
  2393.         movea.l T_RastPort(a5),a1
  2394.         movea.l rp_BitMap(a1),a1
  2395.         move.l  bm_Planes(a1,d7.l),d7
  2396.         beq.s   .Skip
  2397.         moveq   #0,d0
  2398.         moveq   #0,d1
  2399.         move.w  bm_BytesPerRow(a1),d0
  2400.         move.w  bm_Rows(a1),d1
  2401.         mulu    d1,d0
  2402.         movea.l d7,a0
  2403.         lsr.l   #2,d0
  2404.         subq    #1,d0
  2405. .1      not.l   (a0)+   ;Negativ erstellen
  2406.         dbra    d0,.1
  2407. .Skip   rts
  2408.  
  2409.         *
  2410.  
  2411. L_PlaneMerge    equ     106
  2412. L106    move.l  (a3)+,d6        ;Plane für Ausgabe
  2413.         move.l  (a3)+,d7        ;Plane für Merge
  2414.         cmpi.l  #EcMaxPlans,d6
  2415.         bpl.s   .Skip
  2416.         cmpi.l  #EcMaxPlans,d7
  2417.         bpl.s   .Skip
  2418.         tst.l   ScOnAd(a5)
  2419.         Rbeq    L_SNopen
  2420.         movea.l T_RastPort(a5),a0
  2421.         movea.l rp_BitMap(a0),a0
  2422.         lsl.l   #2,d6
  2423.         lsl.l   #2,d7
  2424.         move.l  bm_Planes(a0,d6.l),d6
  2425.         beq.s   .Skip
  2426.         move.l  bm_Planes(a0,d7.l),d7
  2427.         beq.s   .Skip
  2428.         cmp.l   d6,d7
  2429.         beq.s   .Skip
  2430.         moveq   #0,d0
  2431.         moveq   #0,d1
  2432.         move.w  bm_BytesPerRow(a0),d0
  2433.         move.w  bm_Rows(a0),d1
  2434.         mulu    d1,d0
  2435.         lsr.l   #2,d0
  2436.         subq    #1,d0
  2437.         movea.l d6,a0
  2438.         movea.l d7,a1
  2439. .1      move.l  (a1)+,d1
  2440.         or.l    d1,(a0)+        ;Plane mergen
  2441.         dbra    d0,.1
  2442. .Skip   rts
  2443.  
  2444.         *
  2445.  
  2446. L_PlaneCloseA   equ     107
  2447. L107    move.l  (a3)+,d0
  2448.         cmpi.l  #EcMaxPlans,d0
  2449.         bpl.s   .Skip
  2450.         movea.l T_RastPort(a5),a0
  2451.         bclr    d0,rp_Mask(a0)
  2452. .Skip   rts
  2453.  
  2454. L_PlaneCloseB   equ     108
  2455. L108    move.l  (a3)+,d0
  2456.         move.l  (a3)+,d1
  2457.         cmpi.l  #EcMaxPlans,d0
  2458.         bpl.s   .Skip
  2459.         cmpi.l  #EcMaxPlans,d1
  2460.         bpl.s   .Skip
  2461.         movea.l T_RastPort(a5),a0
  2462.         cmp.l   d1,d0
  2463.         bge.s   .1
  2464.         exg.l   d0,d1
  2465. .1      sub.l   d1,d0
  2466. .2      bclr    d1,rp_Mask(a0)
  2467.         addq.l  #1,d1
  2468.         dbeq    d0,.2
  2469. .Skip   rts
  2470.  
  2471.         *
  2472.  
  2473. L_PlaneOpenA    equ     109
  2474. L109    move.l  (a3)+,d0
  2475.         cmpi.l  #EcMaxPlans,d0
  2476.         bpl.s   .Skip
  2477.         movea.l T_RastPort(a5),a0
  2478.         bset    d0,rp_Mask(a0)
  2479. .Skip   rts
  2480.  
  2481. L_PlaneOpenB    equ     110
  2482. L110    move.l  (a3)+,d0
  2483.         move.l  (a3)+,d1
  2484.         cmpi.l  #EcMaxPlans,d0
  2485.         bpl.s   .Skip
  2486.         cmpi.l  #EcMaxPlans,d1
  2487.         bpl.s   .Skip
  2488.         movea.l T_RastPort(a5),a0
  2489.         cmp.l   d1,d0
  2490.         bge.s   .1
  2491.         exg.l   d0,d1
  2492. .1      sub.l   d1,d0
  2493. .2      bset    d1,rp_Mask(a0)
  2494.         addq.l  #1,d1
  2495.         dbeq    d0,.2
  2496. .Skip   rts
  2497.  
  2498.         *
  2499.  
  2500. L_PlaneActive   equ     111
  2501. L111    move.l  (a3)+,d0
  2502.         moveq   #0,d3
  2503.         cmpi.l  #EcMaxPlans,d0
  2504.         bpl.s   .Skip
  2505.         move.l  d0,d1
  2506.         lsl.l   #2,d1
  2507.         movea.l T_RastPort(a5),a0
  2508.         movea.l rp_BitMap(a0),a1
  2509.         tst.l   bm_Planes(a1,d1.l)      ;Plane vorhanden?
  2510.         beq.s   .Skip                   ;Nein
  2511.         btst    d0,rp_Mask(a0)          ;Plane closed?
  2512.         beq.s   .Skip                   ;Ja
  2513.         moveq   #-1,d3
  2514. .Skip   moveq   #0,d2
  2515.         rts
  2516.  
  2517.         *
  2518.  
  2519. L_IffBank       equ     112
  2520. L112    move.l  (a3)+,d1        ;Screen
  2521.         cmpi.l  #8,d1
  2522.         Rbcc    L_IFunc
  2523.         PUSH    d1
  2524.         move.l  (a3)+,d0        ;Bk
  2525.         Rjsr    L_Bnk.OrAdr
  2526.         POP     d1
  2527.  
  2528.         movea.l a0,a1
  2529.         move.l  #1024,d0
  2530. .0      cmpi.l  #"BMHD",(a1)
  2531.         beq.s   Chunk0
  2532.         adda.l  #2,a1
  2533.         dbf     d0,.0
  2534.         Rbne    L_NoIff
  2535.  
  2536. Chunk0  lea     8(a1),a1                ;BitMapHeaDer Daten
  2537.         moveq.l #0,d2
  2538.         moveq.l #0,d3
  2539.         moveq.l #0,d4
  2540.         moveq.l #0,d5
  2541.         moveq.l #0,d6
  2542.         move.w  (a1),d2                 ;Breite
  2543.         move.w  2(a1),d3                ;Höhe
  2544.         move.b  8(a1),d4                ;Tiefe
  2545.         bset    d4,d6                   ;Faben
  2546.         move.b  10(a1),d7               ;Kompression
  2547.         cmpi.w  #352,d2
  2548.         bls.s   .0
  2549.         cmpi.w  #16,d6                  ;Zu viel Farben für Hires?
  2550.         bgt.s   .0                      ;Ja, dann Lowres!
  2551.         ori.w   #V_HIRES,d5
  2552. .0      cmpi.w  #300,d3                 ;Zu viele Zeilen?
  2553.         bls.s   Chunk1
  2554.         ori.w   #V_LACE,d5              ;Ja, dann Laced!
  2555.  
  2556. Chunk1  cmpi.l  #"CMAP",(a0)
  2557.         bne.s   .1
  2558.         lea     8(a0),a0
  2559.         PUSHM   a0/a1/d0-d2
  2560.         movea.l Name1(a5),a1
  2561.         moveq   #31,d2
  2562. .0      moveq.l #0,d0
  2563.         move.b  (a0)+,d0                ;R
  2564.         andi.b  #$F0,d0
  2565.         lsl.w   #4,d0
  2566.         moveq.l #0,d1
  2567.         move.b  (a0)+,d1                ;G
  2568.         andi.b  #$F0,d1
  2569.         or.w    d1,d0
  2570.         moveq.l #0,d1
  2571.         move.b  (a0)+,d1                ;B
  2572.         andi.b  #$F0,d1
  2573.         lsr.b   #4,d1
  2574.         or.w    d1,d0
  2575.         move.w  d0,(a1)+
  2576.         dbra    d2,.0
  2577.         POPM    a0/a1/d0-d2
  2578.  
  2579. .1      cmpi.l  #"CAMG",(a0)
  2580.         bne.s   .2
  2581.         move.w  10(a0),d5               ;ViewMode
  2582.  
  2583. .2      cmpi.l  #"ABIT",(a0)
  2584.         bne.s   .3
  2585.         move.b  #my_IFFACBM,d7
  2586.         bra.s   .4
  2587.  
  2588. .3      cmpi.l  #"BODY",(a0)
  2589.         beq.s   .4
  2590.         adda.l  #2,a0                   ;Chunks weitersuchen
  2591.         bra.s   Chunk1
  2592.  
  2593. .4      PUSHM   a0-a6/d2/d7
  2594.         cmpi.w  #64,d6
  2595.         bne.s   .5
  2596.         btst    #7,d5                   ;EXTRA HALFBRIGHT?
  2597.         bne.s   .5                      ;Ja!
  2598.         ori.w   #V_HAM,d5
  2599.  
  2600. .5      andi.w  #%1000100010000100,d5   ;Nur AMOS-gültige Flags
  2601.         movea.l Name1(a5),a1            ;Farb-Palette -> A1
  2602.  
  2603.         moveq.l #0,d7
  2604.         move.w  d2,d7                   ;Test ob Breite/16
  2605.         ext.l   d7
  2606.         divs    #16,d7
  2607.         swap    d7                      ;Rest ermitteln
  2608.         tst.w   d7                      ;Rest vorhanden?
  2609.         Rbne    L_IScrn                 ;Illegaler Parameter
  2610.  
  2611. .6      EcCall  Cree
  2612.         Rbne    L_OOfmem
  2613.         move.l  a0,ScOnAd(a5)
  2614.         move.w  EcNumber(a0),ScOn(a5)
  2615.         addq.w  #1,ScOn(a5)
  2616.  
  2617.         lea     CsrOff(pc),a1
  2618.         WiCall  Print                   ;Cursor ausstellen
  2619.         POPM    a0-a6/d2/d7
  2620.  
  2621.         lsr.w   #3,d2                   ;Breite/8 (BytesPerRow)
  2622.  
  2623.         PUSHM   a3-a6
  2624.         lea     8(a0),a4                ;Body-Daten -> A4
  2625.         movea.l T_RastPort(a5),a3
  2626.         movea.l rp_BitMap(a3),a3
  2627.  
  2628.         cmpi.b  #my_IFFNORM,d7
  2629.         beq.s   IffRaw
  2630.         cmpi.b  #my_IFFCMPR,d7
  2631.         beq.s   IffRle
  2632.         cmpi.b  #my_IFFACBM,d7
  2633.         beq.s   IffAcb
  2634.         bra     IffEnd
  2635.  
  2636. IffRaw  move.w  d2,d5                   ;BytesPerRow
  2637.         move.w  bm_Rows(a3),d6
  2638.         ext.l   d5
  2639.         moveq.l #0,d3
  2640. .1      moveq.l #bm_Planes,d4
  2641. .2      move.l  (a3,d4.l),d0
  2642.         beq.s   .3
  2643.         movea.l a4,a0
  2644.         add.l   d3,d0
  2645.         movea.l d0,a1
  2646.         move.l  d5,d0
  2647.         EXE     CopyMem
  2648.         adda.l  d5,a4
  2649.         addq.l  #4,d4
  2650.         bra.s   .2
  2651. .3      subq.w  #1,d6
  2652.         beq.s   IffEnd
  2653.         add.l   d5,d3
  2654.         bra.s   .1
  2655.  
  2656. IffRle  lea     bm_Planes(a3),a0
  2657.         movea.l Name1(a5),a1
  2658. .1      move.l  (a0)+,(a1)+             ;BitMap Zeiger kopieren
  2659.         bne.s   .1
  2660.         move.w  bm_Rows(a3),d6
  2661. .2      move.b  bm_Depth(a3),d5
  2662.         movea.l Name1(a5),a1
  2663. .3      movea.l (a1),a0
  2664.         move.w  d2,d1                   ;BytesPerRow
  2665. .4      move.b  (a4)+,d0
  2666.         bmi.s   .6
  2667. .5      move.b  (a4)+,(a0)+
  2668.         subq.w  #1,d1
  2669.         subq.b  #1,d0
  2670.         bpl.s   .5
  2671.         bra.s   .8
  2672. .6      neg.b   d0
  2673.         bmi.s   .4
  2674.         move.b  (a4)+,d3
  2675. .7      move.b  d3,(a0)+
  2676.         subq.w  #1,d1
  2677.         subq.b  #1,d0
  2678.         bpl.s   .7
  2679. .8      tst.w   d1
  2680.         bne.s   .4
  2681.         move.l  a0,(a1)+
  2682.         subq.b  #1,d5                   ;Depth-1
  2683.         bne.s   .3
  2684.         subq.w  #1,d6                   ;Rows-1
  2685.         bne.s   .2
  2686.         bra.s   IffEnd
  2687.  
  2688. IffAcb  move.w  d2,d7                   ;BytesPerRow
  2689.         mulu    bm_Rows(a3),d7          ;Größe der Planes -> D7
  2690.         lea     bm_Planes(a3),a2
  2691. .1      movea.l a4,a0                   ;Zeiger Grafikdaten
  2692.         move.l  (a2)+,d0                ;Zeiger BitPlane
  2693.         beq.s   IffEnd                  ;Keine weitere Plane
  2694.         movea.l d0,a1
  2695.         move.l  d7,d0
  2696.         EXE     CopyMem
  2697.         adda.l  d7,a4
  2698.         bra.s   .1
  2699.  
  2700. IffEnd  POPM    a3-a6
  2701.         rts
  2702.  
  2703. CsrOff  dc.b    27,"C0",0
  2704.         even
  2705.  
  2706. **************************************************************************
  2707. * FONT OPEN     #fnt,$fontname,#height
  2708. * FONT SET      #fnt
  2709. * FONT CLOSE    [#fnt]
  2710. * FONT NAME$    (#fnt)
  2711. * FONT HEIGHT   (#fnt)
  2712. * FONT BASE     (#fnt)
  2713. * ------------------------------------------------------------------------
  2714. L_FontOpen      equ     113
  2715. L113    move.l  (a3)+,d5                ;Height
  2716.         movea.l (a3)+,a0                ;$Fontname
  2717.         move.w  (a0)+,d0                ;^Len
  2718.         move.l  (a3)+,d6                ;Fnt
  2719.  
  2720.         cmpi.l  #my_FntMax,d6           ;Fnt Test
  2721.         Rbpl    L_IFunc                 ;Zu hoch
  2722.         subq.l  #1,d6
  2723.         Rbmi    L_IFunc                 ;Zu niedrig
  2724.         lsl.l   #2,d6                   ;x4
  2725.  
  2726. .1      XLEA    my_FntStruc,a1          ;A1 <= my_FntStruc
  2727.         tst.l   (a1,d6.l)               ;Fnt schon belegt
  2728.         bne.s   .Skip                   ;Ja, my_FntStruc Fnt
  2729.  
  2730.         movea.l Name1(a5),a1            ;FontAttr installieren
  2731.         move.l  a0,ta_Name(a1)          ;Fontname
  2732.         move.w  d5,ta_YSize(a1)         ;Fonthöhe
  2733.         clr.b   ta_Style(a1)            ;Stil-Bits
  2734.         clr.b   ta_Flags(a1)            ;Prefs
  2735.  
  2736.         movea.l Name1(a5),a0            ;FontAttr
  2737.         SYS     T_GfxBase(a5),OpenFont  ;ROM Font öffnen
  2738.         tst.l   d0                      ;geklappt
  2739.         beq.s   .2                      ;Nein evtl. DiskFont
  2740.  
  2741.         XLEA    my_FntStruc,a1          ;A1 <= my_FntStruc
  2742.         move.l  d0,(a1,d6)              ;TextFont eintragen
  2743.         bra.s   .Skip
  2744.  
  2745. .2      Rbsr    L_FntLibOpen
  2746.         movea.l Name1(a5),a0            ;A0 <= FontAttr
  2747.         SYS     T_FntBase(a5),OpenDiskFont
  2748.         tst.l   d0                      ;Geklappt?
  2749.         beq.s   .Skip                   ;Nein!
  2750.         XLEA    my_FntStruc,a0          ;A0 <= my_FntStruc
  2751.         move.l  d0,(a0,d6.l)            ;TextFont eintragen
  2752. .Skip   rts
  2753.  
  2754.         *
  2755.  
  2756. L_FontSet       equ     114
  2757. L114    move.l  (a3)+,d0                ;Fnt -  Nicht SET FONT!
  2758.         cmpi.l  #my_FntMax,d0
  2759.         Rbpl    L_IFunc
  2760.         subq.l  #1,d0
  2761.         Rbmi    L_IFunc
  2762.         lsl.l   #2,d0
  2763.         XLEA    my_FntStruc,a0
  2764.         move.l  (a0,d0.l),d0            ;Fnt installiert
  2765.         beq.s   .Skip                   ;Nein
  2766.         movea.l d0,a0                   ;A0 <= TextFnt
  2767.         movea.l T_RastPort(a5),a1       ;A1 <= RastPort
  2768.         SYS     T_GfxBase(a5),SetFont   ;Fnt aktivieren
  2769. .Skip   rts
  2770.  
  2771.         *
  2772.  
  2773. L_FontCloseA    equ     115
  2774. L115    XLEA    my_FntStruc,a0          ;A0 <= FntList
  2775.         moveq   #my_FntMax-1,d3         ;max. Fnt-1 für dbra
  2776. .1      move.l  (a0),d0                 ;D0 <= TextFnt
  2777.         clr.l   (a0)+
  2778.         tst.l   d0
  2779.         beq.s   .2                      ;Nicht installiert
  2780.         movea.l d0,a1                   ;A1 <= TextFnt
  2781.         SYS     T_GfxBase(a5),CloseFont ;Fnt schließen
  2782. .2      dbra    d3,.1
  2783.         rts
  2784.  
  2785. L_FontCloseB    equ     116
  2786. L116    move.l  (a3)+,d0                ;Fnt
  2787.         cmpi.l  #my_FntMax,d0
  2788.         Rbpl    L_IFunc
  2789.         subq.l  #1,d0
  2790.         Rbmi    L_IFunc
  2791.         lsl.l   #2,d0
  2792.         XLEA    my_FntStruc,a1
  2793.         move.l  (a1,d0.l),d1            ;D1 <= TextFnt
  2794.         beq.s   .Skip                   ;Nicht installiert
  2795.         clr.l   (a1,d0.l)               ;FntNb austragen
  2796.         movea.l d1,a1                   ;A1 <= TextFnt
  2797.         SYS     T_GfxBase(a5),CloseFont ;Fnt schließen
  2798. .Skip   rts
  2799.  
  2800.         *
  2801.  
  2802. L_FontName      equ     117
  2803. L117    move.l  (a3)+,d0                ;Fnt
  2804.         move.l  ChVide(a5),d3           ;Immer Leerstring
  2805.         cmpi.l  #my_FntMax,d0
  2806.         Rbpl    L_IFunc
  2807.         subq.l  #1,d0
  2808.         Rbmi    L_IFunc
  2809.         lsl.l   #2,d0
  2810.         XLEA    my_FntStruc,a0
  2811.         move.l  (a0,d0.l),d0            ;Fnt installiert
  2812.         beq.s   .Skip                   ;Nein
  2813.         movea.l d0,a0
  2814.         movea.l 10(a0),a0               ;Zeiger auf FntName
  2815.         PUSH    a0
  2816.         moveq   #0,d0
  2817. .1      addq.w  #1,d0
  2818.         tst.b   (a0)+
  2819.         bne.s   .1
  2820.         subq.l  #1,d0
  2821.         move.l  d0,d3
  2822.         Rbsr    L_GetSpace              ;A1/D3 <= Varptr
  2823.         POP     a0
  2824. .2      move.b  (a0)+,(a1)+
  2825.         dbra    d0,.2
  2826. .Skip   moveq   #2,d2
  2827.         rts
  2828.  
  2829.         *
  2830.  
  2831. L_FontHeight    equ     118
  2832. L118    move.l  (a3)+,d0
  2833.         moveq   #0,d3                   ;Def => 0
  2834.         cmpi.l  #my_FntMax,d0
  2835.         Rbpl    L_IFunc
  2836.         subq.l  #1,d0
  2837.         Rbmi    L_IFunc
  2838.         lsl.l   #2,d0
  2839.         XLEA    my_FntStruc,a0
  2840.         move.l  (a0,d0.l),d0            ;Fnt installiert
  2841.         beq.s   .Skip                   ;Nein
  2842.         movea.l d0,a0
  2843.         move.w  20(a0),d3               ;Fnt Höhe
  2844. .Skip   moveq   #0,d2
  2845.         rts
  2846.  
  2847.         *
  2848.  
  2849. L_FontBase      equ     119
  2850. L119    move.l  (a3)+,d0
  2851.         moveq   #0,d3
  2852.         cmpi.l  #my_FntMax,d0
  2853.         Rbpl    L_IFunc
  2854.         subq.l  #1,d0
  2855.         Rbmi    L_IFunc
  2856.         lsl.l   #2,d0
  2857.         XLEA    my_FntStruc,a0
  2858.         move.l  (a0,d0.l),d3            ;FontBase (TextFont Struktur)
  2859. .Skip   moveq   #0,d2
  2860.         rts
  2861.  
  2862. **************************************************************************
  2863. * DRIVE STATE   (#drive)
  2864. * DEV STATE     ($device)
  2865. * DRIVE BUSY    #drive,#argument
  2866. *-------------------------------------------------------------------------
  2867. L_DriveState    equ     120
  2868. L120    PUSH    a6
  2869.         moveq   #0,d3
  2870.         suba.l  a1,a1
  2871.         EXE     FindTask
  2872.         lea     DiskRep(pc),a0
  2873.         move.l  d0,16(a0)
  2874.         movea.l Name1(a5),a1    ;StdIOBuffer
  2875.         move.l  a0,14(a1)
  2876.         lea     TrackName(pc),a0
  2877.         move.l  (a3)+,d0        ;Nummer des Laufwerk (0-3)
  2878.         moveq   #0,d1
  2879.         LIB     OpenDevice
  2880.         tst.l   d0
  2881.         bne.s   .Skip           ; 0 = nicht angeschlossen
  2882.         moveq   #-1,d3          ;-1 = angeschlossen
  2883.         move.w  #TD_CHANGESTATE,IO_COMMAND(a1)
  2884.         LIB     DoIO
  2885.         tst.l   IO_ACTUAL(a1)   ;False = eingelegt
  2886.         bne.s   .1              ;nein
  2887.         subq    #1,d3           ;-2 = Disk ist eingelegt
  2888.         move.w  #TD_PROTSTATUS,IO_COMMAND(a1)
  2889.         LIB     DoIO
  2890.         tst.l   IO_ACTUAL(a1)   ;False = nicht schreibgeschützt
  2891.         bne.s   .1
  2892.         subq    #1,d3           ;-3 = nicht schreibgeschützt
  2893. .1      move.w  #TD_MOTOR,IO_COMMAND(a1)
  2894.         move.l  #0,IO_LENGTH(a1)
  2895.         LIB     DoIO
  2896.         LIB     CloseDevice
  2897. .Skip   moveq   #0,d2
  2898.         POP     a6
  2899.         rts
  2900. DiskRep         ds.b    32
  2901. TrackName       TD_NAME
  2902.  
  2903.         *
  2904.  
  2905. L_DevState      equ     121
  2906. L121    movea.l (a3)+,a0
  2907.         move.w  (a0)+,d0
  2908.         subq.w  #1,d0
  2909.         cmpi.w  #128,d0
  2910.         Rbcc    L_IFunc
  2911.         movea.l Name1(a5),a1
  2912. .1      move.b  (a0)+,(a1)+
  2913.         dbra    d0,.1
  2914.         clr.b   (a1)
  2915.         Rjsr    L_Dsk.PathIt
  2916.         PUSH    a6
  2917.         move.l  Name1(a5),d1
  2918.         moveq   #ACCESS_READ,d2
  2919.         DOS     Lock
  2920.         moveq   #0,d3           ;False (0) = default
  2921.         move.l  d0,d7           ;FileLock -> D7
  2922.         beq.s   .Skip           ;Disk nicht vorhanden (0)
  2923.         move.l  d7,d1           ;Lock
  2924.         move.l  Name1(a5),d2
  2925.         LIB     Info            ;Informationen ermitteln
  2926.         movea.l Name1(a5),a1    ;InfoBlk -> A1
  2927.         moveq   #-1,d3          ;Status -1
  2928.         cmpi.l  #ID_WRITE_PROTECTED,8(a1)
  2929.         beq.s   .2
  2930.         moveq   #-2,d3          ;Status -2
  2931.         cmpi.l  #ID_VALIDATING,8(a1)
  2932.         beq.s   .2
  2933.         moveq   #-3,d3          ;Beschreibbar -3
  2934. .2      move.l  d7,d1           ;Lock
  2935.         LIB     UnLock          ;freigeben
  2936. .Skip   moveq   #0,d2           ;Integerwert
  2937.         POP     a6
  2938.         rts
  2939.  
  2940.         *
  2941.  
  2942. L_DriveBusy     equ     122
  2943. L122    PUSH    a6
  2944.         move.l  (a3)+,d7        ;Argument
  2945.         move.l  (a3)+,d6        ;Laufwerk
  2946.         addi.l  #48,d6
  2947.         lea     DFx(pc),a0
  2948.         move.b  d6,2(a0)
  2949.         move.l  a0,d1
  2950.         DOS     DeviceProc
  2951.         move.l  d0,d6
  2952.         beq.s   .Skip
  2953.         suba.l  a1,a1
  2954.         EXE     FindTask
  2955.         move.l  d0,d5
  2956.         addi.l  #$5C,d5
  2957.         movea.l Name1(a5),a0
  2958.         movea.l Name1(a5),a1
  2959.         lea     $14(a0),a0
  2960.         move.l  a0,10(a1)
  2961.         move.l  a1,(a0)
  2962.         move.l  d5,4(a0)
  2963.         move.l  #$1F,8(a0)
  2964.         move.l  d7,$14(a0)
  2965.         movea.l d6,a0
  2966.         LIB     PutMsg
  2967.         movea.l d5,a0
  2968.         LIB     WaitPort
  2969.         movea.l d5,a0
  2970.         LIB     GetMsg
  2971. .Skip   POP     a6
  2972.         rts
  2973. DFx     dc.b    "DFx:",0
  2974.         even
  2975.  
  2976. **************************************************************************
  2977. * VECTORPTR
  2978. * HARDRESET
  2979. * SOFTRESET
  2980. * FLUSH
  2981. * AVAIL FREE
  2982. * OPEN WORKBENCH
  2983. * WORKBENCH
  2984. * AMOS STATE
  2985. * AMCAF CRACK ON
  2986. * AMCAF CRACK OFF
  2987. * CD PATH$
  2988. * CD SET        $path
  2989. * CD PARENT
  2990. * XPK PACK      bk,$lib,mode
  2991. * XPK CRYPT     bk,$lib,$password
  2992. * LPK LENGTH    bk
  2993. * LPK PACK      bk
  2994. * LPK UNPACK    bk
  2995. * BANK TO CHIP  bk
  2996. *-------------------------------------------------------------------------
  2997. L_Vectorptr     equ     123
  2998. L123    movea.l $4.w,a0
  2999.         move.l  ColdCapture(a0),d3
  3000.         bne.s   .Skip
  3001.         move.l  CoolCapture(a0),d3
  3002.         bne.s   .Skip
  3003.         move.l  WarmCapture(a0),d3
  3004.         bne.s   .Skip
  3005.         move.l  KickMemPtr(a0),d3
  3006.         bne.s   .Skip
  3007.         move.l  KickTagPtr(a0),d3
  3008.         bne.s   .Skip
  3009.         move.l  KickCheckSum(a0),d3
  3010. .Skip   moveq   #0,d2
  3011.         rts
  3012.  
  3013.         *
  3014.  
  3015. L_Hardreset     equ     124
  3016. L124    movea.l $4.w,a6
  3017.         move.w  #$4000,$DFF09A
  3018.         move.l  #$AAAABBBB,d1
  3019.         move.l  d1,$24(a6)
  3020.         move.l  d1,$26(a6)
  3021.         move.l  d1,$3E(a6)
  3022.         move.l  d1,$4E(a6)
  3023.         move.l  d1,$52(a6)
  3024.         move.l  d1,$22A(a6)
  3025.         cmpi.w  #$24,$14(a6)
  3026.         blt.s   .1
  3027.         jmp     -726(a6)
  3028. .1      lea     .2(pc),a5
  3029.         jsr     -30(a6)
  3030.         cnop    0,4
  3031. .2      movea.l #$1000000,a0
  3032.         suba.l  -$14(a0),a0
  3033.         movea.l 4(a0),a0
  3034.         lea     -2(a0),a0
  3035.         reset
  3036.         jmp     (a0)
  3037.  
  3038.         *
  3039.  
  3040. L_Softreset     equ     125
  3041. L125    lea     .1(pc),a0
  3042.         move.w  #$4000,$DFF09A
  3043.         move.l  a0,$B4.w
  3044.         trap    #13
  3045. .1      move.w  #$2700,sr
  3046.         jmp     $FC0000
  3047.  
  3048.         *
  3049.  
  3050. L_Flush         equ     126
  3051. L126    Rbsr    L_PpkLibClose
  3052.         Rbsr    L_XpkLibClose
  3053.         Rbsr    L_DpkLibClose
  3054.         Rbsr    L_LpkLibClose
  3055.         Rbsr    L_FntLibClose
  3056.         PUSHM   a0-a6/d0-d7
  3057.         move.l  #$7FFFFFFF,d0
  3058.         moveq.l #MEMF_PUBLIC|MEMF_CHIP,d1
  3059.         EXE     AllocMem
  3060.         move.l  #$7FFFFFFF,d0
  3061.         moveq.l #MEMF_PUBLIC|MEMF_FAST,d1
  3062.         EXE     AllocMem
  3063.         POPM    a0-a6/d0-d7
  3064.         rts
  3065.  
  3066.         *
  3067.  
  3068. L_AvailFree     equ     127
  3069. L127    moveq   #0,d1
  3070.         SYS     $4.w,AvailMem
  3071.         move.l  d0,d3
  3072.         moveq   #0,d2
  3073.         rts
  3074.  
  3075.         *
  3076.  
  3077. L_OpenWorkbench equ     128
  3078. L128    PUSH    a6
  3079.         tst.b   WB_Closed(a5)   ;Workbench geschlossen
  3080.         beq.s   .Skip           ;nein!
  3081.         INT     OpenWorkBench
  3082.         tst.l   d0              ;Workbench geöffnet ?
  3083.         beq.s   .Skip           ;nein!
  3084.         LIB     RemakeDisplay
  3085.         clr.b   WB_Closed(a5)   ;FLAG! Workbench geöffnet
  3086. .Skip   POP     a6
  3087.         rts
  3088.  
  3089.         *
  3090.  
  3091. L_Workbench     equ     129
  3092. L129    moveq   #0,d3
  3093.         moveq   #0,d2
  3094.         tst.b   WB_Closed(a5)   ;Workbench geschlossen?
  3095.         bne.s   .Skip           ;False = nein
  3096.         moveq   #-1,d3          ;True  = ja
  3097. .Skip   rts
  3098.  
  3099.         *
  3100.  
  3101. L_AmosState     equ     130
  3102. L130    suba.l  a1,a1
  3103.         SYS     $4.w,FindTask
  3104.         movea.l d0,a1
  3105.         moveq   #0,d3
  3106.         tst.l   $AC(a1)         ;pr_CLI von wo gestartet
  3107.         beq.s   .Skip           ;Workbench - False (0)
  3108.         moveq   #-1,d3          ;CLI - True (-1)
  3109. .Skip   moveq   #0,d2
  3110.         rts
  3111.  
  3112.         *
  3113.  
  3114. L_AmcafCrackOn  equ     131
  3115. L131    DLOAD   a0
  3116.         move.w  -22(a5),my_AmcafCrack(a0)
  3117.         move.w  #1,-22(a5)
  3118.         rts
  3119.  
  3120.         *
  3121.  
  3122. L_AmcafCrackOff equ     132
  3123. L132    DLOAD   a0
  3124.         move.w  my_AmcafCrack(a0),-22(a5)
  3125.         rts
  3126.  
  3127.         *
  3128.  
  3129. L_CDPath        equ     133
  3130. L133    XLEA    my_CdPath,a0
  3131.         tst.w   (a0)
  3132.         bne.s   .4
  3133.         movea.l Name1(a5),a1
  3134.         clr.b   (a1)
  3135.         Rjsr    L_Dsk.PathIt
  3136.         movea.l Name1(a5),a0
  3137.         clr.l   d0
  3138. .1      tst.b   (a0)+
  3139.         beq.s   .2
  3140.         addq.w  #1,d0
  3141.         bra.s   .1
  3142. .2      XLEA    my_CdPath,a0
  3143.         movea.l a0,a1
  3144.         move.w  d0,(a1)+
  3145.         movea.l Name1(a5),a0
  3146. .3      move.b  (a0)+,(a1)+
  3147.         dbra    d0,.3
  3148. .4      XLEA    my_CdPath,a0
  3149.         move.l  a0,d3
  3150.         moveq   #2,d2
  3151.         rts
  3152.  
  3153.         *
  3154.  
  3155. L_CDSet         equ     134
  3156. L134    movea.l (a3)+,a0        ;Path
  3157.         move.w  (a0)+,d0
  3158.         move.w  d0,d1
  3159.         subq.w  #1,d0
  3160.         cmpi.w  #my_CdLength,d0
  3161.         Rbcc    L_IFunc
  3162.         XLEA    my_CdPath,a1
  3163.         adda.l  #2,a1
  3164. .1      move.b  (a0)+,(a1)+
  3165.         dbra    d0,.1
  3166.         cmpi.b  #":",-1(a1)
  3167.         beq.s   .2
  3168.         cmpi.b  #"/",-1(a1)
  3169.         beq.s   .2
  3170.         move.b  #"/",(a1)
  3171.         addq.w  #1,d1
  3172. .2      XLEA    my_CdPath,a0
  3173.         move.w  d1,(a0)
  3174.         rts
  3175.  
  3176.         *
  3177.  
  3178. L_CDParent      equ     135
  3179. L135    XLEA    my_CdPath,a0
  3180.         tst.w   (a0)
  3181.         beq.s   .2
  3182.         clr.l   d0
  3183.         move.w  (a0)+,d0
  3184.         subq.w  #1,d0
  3185.         cmpi.b  #":",(a0,d0.w)
  3186.         beq.s   .2
  3187.         subq.w  #1,d0
  3188. .0      move.b  (a0,d0.w),d1
  3189.         cmpi.b  #"/",d1
  3190.         beq.s   .1
  3191.         cmpi.b  #":",d1
  3192.         beq.s   .1
  3193.         dbra    d0,.0
  3194.         bra.s   .2
  3195. .1      addq.w  #1,d0
  3196.         XLEA    my_CdPath,a0
  3197.         move.w  d0,(a0)
  3198. .2      rts
  3199.  
  3200.         *
  3201.  
  3202. L_XpkPack       equ     136
  3203. L136    DLOAD   a2
  3204.         move.l  (a3)+,my_XpkMode(a2)
  3205.         movea.l (a3)+,a0
  3206.         adda.l  #2,a0
  3207.         move.l  a0,my_XpkName(a2)
  3208.         move.l  (a3)+,my_XpkSrc(a2)
  3209.         clr.l   my_XpkPassWord(a2)
  3210.         Rbra    L_XpkWork
  3211.  
  3212.         *
  3213.  
  3214. L_XpkCrypt      equ     137
  3215. L137    DLOAD   a2
  3216.         movea.l (a3)+,a0                ;Pwd
  3217.         move.w  (a0)+,d0                ;PwdLen
  3218.         movea.l (a3)+,a1                ;SLIB
  3219.         adda.l  #2,a1
  3220.         move.l  a1,my_XpkName(a2)
  3221.         move.l  (a3)+,my_XpkSrc(a2)     ;Bk
  3222.         subq.w  #1,d0
  3223.         cmpi.w  #128,d0
  3224.         Rbcc    L_IFunc
  3225.         movea.l Name1(a5),a1
  3226. .0      move.b  (a0)+,(a1)+             ;Pwd installieren
  3227.         dbra    d0,.0
  3228.         clr.b   (a1)
  3229.         move.l  Name1(a5),my_XpkPassWord(a2)
  3230.         Rbra    L_XpkWork
  3231.  
  3232.         *
  3233.  
  3234. L_XpkWork       equ     138
  3235. L138    Rbsr    L_XpkLibOpen
  3236.         PUSHM   a0-a6/d0-d7
  3237.         DLOAD   a2
  3238.         move.l  my_XpkSrc(a2),d0
  3239.         Rjsr    L_Bnk.OrAdr
  3240.         move.l  a0,my_XpkSrc(a2)
  3241.         move.l  my_BkLength(a0),d0
  3242.         subi.l  #my_BkHeader,d0
  3243.         move.l  d0,my_XpkSrcSize(a2)
  3244.         move.l  d0,d2
  3245.         lsr.l   #5,d2
  3246.         add.l   d2,d0
  3247.         add.l   #1024,d0
  3248.         move.l  d0,my_XpkDstSize(a2)
  3249.  
  3250.         Rjsr    L_RamFast
  3251.         Rbeq    L_OOfmem        ;MemAdr => D0
  3252.  
  3253.         move.l  d0,my_XpkDst(a2)
  3254.  
  3255.         lea     .1(pc),a0
  3256.         move.l  my_XpkSrc(a2),4(a0)             ;Xpk_InBuf
  3257.         move.l  my_XpkSrcSize(a2),12(a0)        ;Xpk_InBufLen
  3258.         move.l  my_XpkDst(a2),20(a0)            ;Xpk_OutBuf
  3259.         move.l  my_XpkDstSize(a2),28(a0)        ;Xpk_OutBufLen
  3260.         lea     my_XpkOutSize(a2),a1
  3261.         move.l  a1,36(a0)                       ;Xpk_GetOutLen
  3262.         move.l  my_XpkName(a2),44(a0)           ;Xpk_PackMethod
  3263.         move.l  my_XpkMode(a2),52(a0)           ;Xpk_Mode
  3264.         move.l  my_XpkPassWord(a2),60(a0)       ;Xpk_Password
  3265.         lea     my_XpkErrMsg(a2),a1
  3266.         move.l  a1,68(a0)                       ;Xpk_GetError
  3267.         movea.l my_XpkLibBase(a2),a6
  3268.         LIB     XpkPack
  3269.         move.l  d0,my_XpkErrNum(a2)
  3270.         tst.l   d0
  3271.         bne.s   .0
  3272.  
  3273.         moveq   #1,d0
  3274.         moveq   #0,d1
  3275.         move.l  my_XpkOutSize(a2),d2
  3276.         DLEA    my_BkNameWork,a0
  3277.         Rbsr    L_Bnk.GetFree
  3278.         Rjsr    L_Bnk.Reserve
  3279.         beq.s   .0
  3280.  
  3281.         move.l  a0,d6                   ;D6 => DBnk
  3282.         movea.l a0,a1
  3283.         movea.l my_XpkDst(a2),a0
  3284.         move.l  my_XpkOutSize(a2),d0
  3285.         EXE     CopyMem
  3286.  
  3287.         movea.l my_XpkSrc(a2),a0        ;SBnk
  3288.         movea.l d6,a1                   ;DBnk
  3289.         Rbsr    L_Bnk.HeadClone
  3290.  
  3291. .0      movea.l my_XpkDst(a2),a1
  3292.         move.l  my_XpkDstSize(a2),d0
  3293.         Rjsr    L_RamFree
  3294.         POPM    a0-a6/d0-d7
  3295.         rts
  3296.  
  3297. .1      dc.l    XPK_InBuf,0             ;4
  3298.         dc.l    XPK_InLen,0             ;12
  3299.         dc.l    XPK_OutBuf,0            ;20
  3300.         dc.l    XPK_OutBufLen,0         ;28
  3301.         dc.l    XPK_GetOutLen,0         ;36
  3302.         dc.l    XPK_PackMethod,0        ;44
  3303.         dc.l    XPK_PackMode,0          ;52
  3304.         dc.l    XPK_Password,0          ;60
  3305.         dc.l    XPK_GetError,0          ;68
  3306.         dc.l    XPK_ShortError
  3307.         dc.l    XPK_PassThru,-1
  3308.         dc.l    TAG_DONE
  3309.  
  3310.         *
  3311.  
  3312. L_LpkLength     equ     139
  3313. L139    move.l  (a3)+,d0
  3314.         Rjsr    L_Bnk.OrAdr
  3315.         moveq   #0,d2
  3316.         moveq   #0,d3
  3317.         cmpi.l  #"LH18",(a0)    ;ID_LH Bk
  3318.         bne.s   .Skip           ;Not encoded
  3319.         move.l  4(a0),d3        ;lhDecoded len
  3320. .Skip   rts
  3321.  
  3322.         *
  3323.  
  3324. L_LpkPack       equ     140
  3325. L140    move.l  (a3)+,d0
  3326.         Rjsr    L_Bnk.OrAdr
  3327.         Rbsr    L_LpkLibOpen
  3328.         PUSHM   a0-a6/d0-d7
  3329.         DLOAD   a2
  3330.         move.l  a0,my_LpkSrc(a2)
  3331.         moveq   #0,d0                   ;EncodeBuffer[0] (40000 bytes)
  3332.         movea.l my_LpkLibBase(a2),a6
  3333.         LIB     CreateBuffer
  3334.         tst.l   d0
  3335.         beq     .Skip
  3336.         move.l  d0,my_LpkBuffer(a2)
  3337.  
  3338.         movea.l my_LpkBuffer(a2),a0
  3339.         movea.l my_LpkSrc(a2),a1
  3340.         move.l  a1,lh_Src(a0)
  3341.         move.l  my_BkLength(a1),d0
  3342.         subi.l  #my_BkHeader,d0
  3343.         move.l  d0,lh_SrcSize(a0)
  3344.         move.l  d0,d1                   ;SrcSize
  3345.         lsr.l   #3,d1                   ;1/8
  3346.         add.l   d1,d0                   ;addieren
  3347.         move.l  d0,lh_DstSize(a0)
  3348.         move.l  d0,my_LpkSize(a2)
  3349.  
  3350.         Rjsr    L_RamFast
  3351.         beq.s   .1
  3352.         move.l  d0,lh_Dst(a0)
  3353.  
  3354.         movea.l my_LpkBuffer(a2),a0
  3355.         LIB     LhEncode
  3356.  
  3357.         movea.l my_LpkBuffer(a2),a0
  3358.         moveq   #1,d0
  3359.         moveq   #0,d1
  3360.         move.l  lh_DstSize(a0),d2
  3361.         addi.l  #my_LpkHeader,d2        ;+Header
  3362.         DLEA    my_BkNameWork,a0
  3363.         Rbsr    L_Bnk.GetFree
  3364.         Rjsr    L_Bnk.Reserve
  3365.         beq.s   .0
  3366.         move.l  a0,d6                   ;D6 => Dst
  3367.  
  3368.         movea.l my_LpkBuffer(a2),a2
  3369.         movea.l lh_Dst(a2),a0
  3370.         move.l  lh_DstSize(a2),d0
  3371.         movea.l d6,a1
  3372.         move.l  #"LH18",(a1)+
  3373.         move.l  lh_SrcSize(a2),(a1)+
  3374.         EXE     CopyMem
  3375.  
  3376.         DLOAD   a2
  3377.         movea.l my_LpkSrc(a2),a0        ;SBnk
  3378.         movea.l d6,a1                   ;DBnk
  3379.         Rbsr    L_Bnk.HeadClone
  3380.  
  3381. .0      movea.l my_LpkBuffer(a2),a0
  3382.         movea.l lh_Dst(a0),a1
  3383.         move.l  my_LpkSize(a2),d0
  3384.         Rjsr    L_RamFree
  3385.  
  3386. .1      DLOAD   a2
  3387.         movea.l my_LpkBuffer(a2),a0
  3388.         movea.l my_LpkLibBase(a2),a6
  3389.         LIB     DeleteBuffer
  3390.  
  3391. .Skip   POPM    a0-a6/d0-d7
  3392.         rts
  3393.  
  3394.         *
  3395.  
  3396. L_LpkUnpack     equ     141
  3397. L141    move.l  (a3)+,d0
  3398.         Rjsr    L_Bnk.OrAdr
  3399.  
  3400.         DLOAD   a2
  3401.         cmpi.l  #"LH18",(a0)
  3402.         bne     .Skip
  3403.         move.l  a0,my_LpkSrc(a2)
  3404.  
  3405.         move.l  #4500,d0
  3406.         Rjsr    L_RamFast
  3407.         beq.s   .Skip
  3408.         move.l  d0,my_LpkAux(a2)
  3409.  
  3410.         movea.l my_LpkSrc(a2),a0
  3411.         moveq   #1,d0
  3412.         moveq   #0,d1
  3413.         move.l  4(a0),d2
  3414.         DLEA    my_BkNameWork,a0
  3415.         Rbsr    L_Bnk.GetFree
  3416.         Rjsr    L_Bnk.Reserve
  3417.         beq.s   .0
  3418.         move.l  a0,my_LpkDst(a2)
  3419.  
  3420.         movea.l my_LpkSrc(a2),a1
  3421.         move.l  my_BkLength(a1),d0
  3422.         subi.l  #my_BkHeader+my_LpkHeader,d0
  3423.         move.l  d0,my_LpkSize(a2)
  3424.  
  3425.         movea.l Name1(a5),a0
  3426.         movea.l my_LpkSrc(a2),a1
  3427.         lea     my_LpkHeader(a1),a1
  3428.         move.l  a1,(a0)+
  3429.         move.l  my_LpkSize(a2),(a0)+
  3430.         move.l  my_LpkDst(a2),(a0)+
  3431.         clr.l   (a0)+
  3432.         move.l  my_LpkAux(a2),(a0)+
  3433.         clr.l   (a0)+
  3434.         movea.l Name1(a5),a0
  3435.         bsr.s   .LhD
  3436.  
  3437.         movea.l my_LpkSrc(a2),a0        ;SBnk
  3438.         movea.l my_LpkDst(a2),a1        ;DBnk
  3439.         Rbsr    L_Bnk.HeadClone
  3440.  
  3441. .0      movea.l my_LpkAux(a2),a1
  3442.         move.l  #4500,d0
  3443.         Rjsr    L_RamFree
  3444.  
  3445. .Skip   rts
  3446.  
  3447. .LhD    dc.l    $48E73F3E,$48506100,$00902009,$205F90A8,$00082140,$000C4CDF
  3448.         dc.l    $7CFC4E75
  3449.         dcb.w   60,$12DA
  3450.         dc.l    $6000008A,$48502C68,$0010204E,$43EE0C60,$45EE076E,$70FE7600
  3451.         dc.l    $72017402,$3E3C013C,$30C132C0,$35039042,$D64251CF,$FFF47C00
  3452.         dc.l    $2E3C0000,$027A204E,$43EE027A,$45EE0EDA,$47EE076E,$78047402
  3453.         dc.l    $323C013B,$3018D058,$32C034C6,$36C736C7,$DC44DE42,$51C9FFEE
  3454.         dc.l    $3281426E,$0C5E2A5F,$2055226D,$00082C6D,$00102A4E,$49EE076E
  3455.         dc.l    $47EE0C60,$78017A0F,$3C186008,$4447E86F,$9E4412C7,$3E2B04F0
  3456.         dc.l    $DC466400,$00143E33,$70025BCD,$FFF46B00,$00127A0F,$3C1860E8
  3457.         dc.l    $3E337000,$5BCDFFE2,$6AF051CD,$00063C18,$7A0F0C6D,$800004F0
  3458.         dc.l    $67000056,$30347000,$45F50000,$3212D244,$34C1B25A,$633CB25A
  3459.         dc.l    $62FC598A,$240A948D,$3B920000,$34813233,$00006B04,$39821002
  3460.         dc.l    $39821000,$36332000,$6B043980,$30023781,$20003980,$30003783
  3461.         dc.l    $00003034,$200066B8,$60063034,$000066B0,$0C47FE00,$6C00FF66
  3462.         dc.l    $0C47FD86,$6E024E75,$E15E5F45,$641A7600,$36184843,$4445EBBB
  3463.         dc.l    $32038206,$48433C03,$4445740F,$DA42600E,$72001206,$420651CD
  3464.         dc.l    $00063C18,$7A0F3601,$D643363B,$30284242,$14034203,$E44BDC46
  3465.         dc.l    $D34151CD,$00067A0F,$3C1851CA,$FFF20241,$003F8243,$45D194C1
  3466.         dc.l    $4EFB707E
  3467.         dcb.w   32,$0000
  3468.         dcb.w   16,$0101
  3469.         dcb.w   16,$0201
  3470.         dcb.w   16,$0301
  3471.         dcb.w   8,$0402
  3472.         dcb.w   8,$0502
  3473.         dcb.w   8,$0602
  3474.         dcb.w   8,$0702
  3475.         dcb.w   8,$0802
  3476.         dcb.w   8,$0902
  3477.         dcb.w   8,$0A02
  3478.         dcb.w   8,$0B02
  3479.         dcb.w   4,$0C03
  3480.         dcb.w   4,$0D03
  3481.         dcb.w   4,$0E03
  3482.         dcb.w   4,$0F03
  3483.         dcb.w   4,$1003
  3484.         dcb.w   4,$1103
  3485.         dcb.w   4,$1203
  3486.         dcb.w   4,$1303
  3487.         dcb.w   4,$1403
  3488.         dcb.w   4,$1503
  3489.         dcb.w   4,$1603
  3490.         dcb.w   4,$1703
  3491.         dc.l    $18041804,$19041904,$1A041A04,$1B041B04,$1C041C04,$1D041D04
  3492.         dc.l    $1E041E04,$1F041F04,$20042004,$21042104,$22042204,$23042304
  3493.         dc.l    $24042404,$25042504,$26042604,$27042704,$28042804,$29042904
  3494.         dc.l    $2A042A04,$2B042B04,$2C042C04,$2D042D04,$2E042E04,$2F042F04
  3495.         dc.l    $30053105,$32053305,$34053505,$36053705,$38053905,$3A053B05
  3496.         dc.l    $3C053D05,$3E053F05
  3497.  
  3498.         *
  3499.  
  3500. L_BankToChip    equ     142
  3501. L142    move.l  (a3)+,d0
  3502.         Rjsr    L_Bnk.OrAdr
  3503.         move.w  my_BkFlag(a0),d1
  3504.         btst    #Bnk_BitChip,d1
  3505.         bne.s   .Skip
  3506.         bset    #Bnk_BitChip,d1
  3507.         move.w  d1,my_BkFlag(a0)
  3508.         move.l  a0,d6
  3509.         moveq   #1,d0
  3510.         move.l  my_BkLength(a0),d2
  3511.         subi.l  #my_BkHeader,d2
  3512.         DLEA    my_BkNameWork,a0
  3513.         Rbsr    L_Bnk.GetFree
  3514.         Rjsr    L_Bnk.Reserve
  3515.         Rbeq    L_OOfmem
  3516.         movea.l a0,a1                   ;a1 => BkChip
  3517.         movea.l d6,a0
  3518.         move.l  my_BkLength(a0),d0
  3519.         subi.l  #my_BkHeader,d0
  3520.         PUSHM   a0/a1/a6
  3521.         EXE     CopyMem
  3522.         POPM    a0/a1/a6
  3523.         Rbsr    L_Bnk.HeadClone
  3524. .Skip   rts
  3525.  
  3526.         *
  3527.  
  3528. L_FileProtection        equ     143
  3529. L143    DLOAD   a2
  3530.         move.l  (a3)+,my_FileName(a2)
  3531.         Rbsr    L_GetFileInfo
  3532.         move.l  my_FileProtect(a2),d3
  3533.         moveq   #0,d2
  3534.         rts
  3535.  
  3536. **************************************************************************
  3537.  
  3538. ;Reservierte Offsets für neue AMOSPro Instruktionen
  3539.  
  3540. L144
  3541. L145
  3542. L146
  3543. L147
  3544. L148
  3545. L149
  3546. L150
  3547. L151
  3548. L152
  3549. L153
  3550. L154
  3551. L155
  3552. L156
  3553. L157
  3554.  
  3555. **************************************************************************
  3556.  
  3557. ;Entpacken der Xpk! Funktionen  Xpk Pack / Xpk Crypt
  3558.  
  3559. L_XpkUnpack     equ     158
  3560. L158    Rbsr    L_XpkLibOpen
  3561.         PUSHM   a0-a6/d0-d7
  3562.         DLOAD   a2
  3563.         move.l  my_XpkSrc(a2),d0
  3564.         Rjsr    L_Bnk.OrAdr
  3565.  
  3566.         cmpi.l  #"XPKF",(a0)
  3567.         bne     .Skip
  3568.  
  3569.         move.l  a0,my_XpkSrc(a2)
  3570.         move.l  my_BkLength(a0),d0
  3571.         subi.l  #my_BkHeader,d0
  3572.         move.l  d0,my_XpkSrcSize(a2)
  3573.         move.l  12(a0),d0
  3574.         addi.l  #XPK_MARGIN,d0
  3575.         move.l  d0,my_XpkDstSize(a2)
  3576.  
  3577.         Rjsr    L_RamFast
  3578.         Rbeq    L_OOfmem
  3579.         move.l  d0,my_XpkDst(a2)
  3580.  
  3581.         lea     .1(pc),a0
  3582.         move.l  my_XpkSrc(a2),4(a0)
  3583.         move.l  my_XpkSrcSize(a2),12(a0)
  3584.         move.l  my_XpkDst(a2),20(a0)
  3585.         move.l  my_XpkDstSize(a2),28(a0)
  3586.         lea     my_XpkOutSize(a2),a1
  3587.         move.l  a1,36(a0)
  3588.         move.l  my_XpkPassWord(a2),44(a0)
  3589.         lea     my_XpkErrMsg(a2),a1
  3590.         move.l  a1,52(a0)
  3591.  
  3592.         movea.l my_XpkLibBase(a2),a6
  3593.         LIB     XpkUnpack
  3594.         move.l  d0,my_XpkErrNum(a2)
  3595.         tst.l   d0
  3596.         bne.s   .0
  3597.  
  3598.         moveq   #1,d0
  3599.         moveq   #0,d1
  3600.         move.l  my_XpkOutSize(a2),d2
  3601.         DLEA    my_BkNameWork,a0
  3602.         Rbsr    L_Bnk.GetFree
  3603.         Rjsr    L_Bnk.Reserve
  3604.         beq.s   .0
  3605.  
  3606.         move.l  a0,d6                   ;D6 => DBnk
  3607.         movea.l a0,a1
  3608.         movea.l my_XpkDst(a2),a0
  3609.         move.l  my_XpkOutSize(a2),d0
  3610.         EXE     CopyMem
  3611.  
  3612.         movea.l my_XpkSrc(a2),a0        ;SBnk
  3613.         movea.l d6,a1                   ;DBnk
  3614.         Rbsr    L_Bnk.HeadClone
  3615.  
  3616. .0      movea.l my_XpkDst(a2),a1
  3617.         move.l  my_XpkDstSize(a2),d0
  3618.         Rjsr    L_RamFree
  3619.  
  3620. .Skip   POPM    a0-a6/d0-d7
  3621.         rts
  3622.  
  3623. .1      dc.l    XPK_InBuf,0     ;4
  3624.         dc.l    XPK_InLen,0     ;12
  3625.         dc.l    XPK_OutBuf,0    ;20
  3626.         dc.l    XPK_OutBufLen,0 ;28
  3627.         dc.l    XPK_GetOutLen,0 ;36
  3628.         dc.l    XPK_Password,0  ;44
  3629.         dc.l    XPK_GetError,0  ;52
  3630.         dc.l    XPK_PassThru,-1
  3631.         dc.l    XPK_ShortError
  3632.         dc.l    TAG_DONE
  3633.  
  3634. **************************************************************************
  3635.  
  3636. ;Ausführen der Ppk! Funktionen
  3637.  
  3638. L_PpkUnpack     equ     159
  3639. L159    DLOAD   a2
  3640.         move.l  my_PpkSrc(a2),d0
  3641.         Rjsr    L_Bnk.OrAdr
  3642.         move.l  a0,my_PpkSrc(a2)
  3643.         Rbsr    L_PpkTransform
  3644.         cmpi.l  #"PP20",(a0)
  3645.         bne.s   .Skip
  3646.         move.l  a0,d7
  3647.         Rbsr    L_GetPpkLen
  3648.         move.l  d0,d2
  3649.         beq.s   .Skip
  3650.         moveq   #0,d1
  3651.         DLEA    my_BkNameWork,a0
  3652.         moveq   #1,d0
  3653.         Rbsr    L_Bnk.GetFree
  3654.         Rjsr    L_Bnk.Reserve
  3655.         Rbeq    L_OOfmem
  3656.         movea.l a0,a1
  3657.         movea.l d7,a0
  3658.         move.l  my_BkLength(a0),d0
  3659.         subi.l  #my_BkHeader,d0
  3660.         PUSHM   a0-a3
  3661.         bsr.s   Pp0             ;ppDeCrunch: A0=SBk / A1=DBk / D0=SBkLen
  3662.         POPM    a0-a3
  3663.         Rbsr    L_Bnk.HeadClone
  3664. .Skip   rts
  3665.  
  3666. Pp0     lea     4(a0),a3
  3667.         adda.l  d0,a0
  3668.         movea.l a1,a2
  3669.         moveq   #1,d5
  3670.         moveq   #3,d6
  3671.         moveq   #7,d7
  3672.         move.l  -(a0),d1
  3673.         tst.b   d1
  3674.         beq.s   .1
  3675.         bsr.s   Pp2
  3676.         subq.b  #1,d1
  3677.         lsr.l   d1,d5
  3678. .1      lsr.l   #8,d1
  3679.         adda.l  d1,a2
  3680. Pp1     bsr.s   Pp2
  3681.         bcs.s   Pp5
  3682.         moveq   #0,d2
  3683. .1      moveq   #1,d0
  3684.         bsr.s   Pp4
  3685.         add.w   d1,d2
  3686.         cmp.w   d6,d1
  3687.         beq.s   .1
  3688. .2      moveq   #7,d0
  3689.         bsr.s   Pp4
  3690.         move.b  d1,-(a2)
  3691.         dbra    d2,.2
  3692.         cmpa.l  a2,a1
  3693.         bcs.s   Pp5
  3694.         rts
  3695. Pp2     lsr.l   #1,d5
  3696.         beq.s   .1
  3697.         rts
  3698. .1      move.l  -(a0),d5
  3699.         roxr.l  #1,d5
  3700.         rts
  3701. Pp3     subq.w  #1,d0
  3702. Pp4     moveq   #0,d1
  3703. .1      lsr.l   #1,d5
  3704.         beq.s   .3
  3705. .2      roxl.l  #1,d1
  3706.         dbra    d0,.1
  3707.         rts
  3708. .3      move.l  -(a0),d5
  3709.         roxr.l  #1,d5
  3710.         bra.s   .2
  3711. Pp5     moveq   #1,d0
  3712.         bsr.s   Pp4
  3713.         moveq   #0,d0
  3714.         move.b  (a3,d1.w),d0
  3715.         move.w  d1,d2
  3716.         cmp.w   d6,d2
  3717.         bne.s   .3
  3718.         bsr.s   Pp2
  3719.         bcs.s   .1
  3720.         moveq   #7,d0
  3721. .1      bsr.s   Pp3
  3722.         move.w  d1,d3
  3723. .2      moveq   #2,d0
  3724.         bsr.s   Pp4
  3725.         add.w   d1,d2
  3726.         cmp.w   d7,d1
  3727.         beq.s   .2
  3728.         bra.s   .4
  3729. .3      bsr.s   Pp3
  3730.         move.w  d1,d3
  3731. .4      addq.w  #1,d2
  3732. .5      move.b  (a2,d3.w),-(a2)
  3733.         dbra    d2,.5
  3734.         cmpa.l  a2,a1
  3735.         bcs.s   Pp1
  3736.         rts
  3737.  
  3738. **************************************************************************
  3739.  
  3740. ;Bank Header Clonen
  3741.  
  3742. ;A0 <= SBk
  3743. ;A1 <= DBk
  3744.  
  3745. ;A0 => SBk als DBk ge'cloned'
  3746.  
  3747. L_Bnk.HeadClone equ     160
  3748. L160    PUSH    a1
  3749.         move.l  my_BkNumber(a0),my_BkNumber(a1)
  3750.         move.w  my_BkFlag(a0),my_BkFlag(a1)
  3751.         move.w  my_BkFuture(a0),my_BkFuture(a1)
  3752.         move.l  my_BkName(a0),my_BkName(a1)
  3753.         move.l  my_BkName+4(a0),my_BkName+4(a1)
  3754.         Rjsr    L_Bnk.EffA0
  3755.         POP     a0
  3756.         rts
  3757.  
  3758. **************************************************************************
  3759.  
  3760. ;Entpackte Bytelänge einer PP - Bank (Data/Executable)
  3761.  
  3762. ;D0 => Entpackte Bytelänge der Bk - NULL => Kein PP Format
  3763.  
  3764. L_GetPpkLen     equ     161
  3765. L161    PUSHM   a0/a1/d1-d3
  3766.         DLOAD   a0
  3767.         move.l  my_PpkSrc(a0),d0
  3768.         Rjsr    L_Bnk.OrAdr
  3769.         moveq   #my_PpkKnow-1,d2
  3770.         Rbsr    L_PpkID
  3771. .1      move.l  my_PpkCodePos(a1),d0
  3772.         move.l  my_PpkCode(a1),d1
  3773.         cmp.l   (a0,d0.l),d1
  3774.         beq.s   .2
  3775.         lea     my_PpkSIZEOF(a1),a1
  3776.         dbeq    d2,.1
  3777.         moveq   #0,d0
  3778.         bra.s   .Skip
  3779. .2      move.b  (a0),d0
  3780.         adda.l  my_BkLength(a0),a0
  3781.         cmpi.b  #"P",d0
  3782.         beq.s   .3
  3783.         move.l  -24(a0),d0
  3784.         bra.s   .4
  3785. .3      move.l  -20(a0),d0
  3786. .4      lsr.l   #8,d0
  3787. .Skip   POPM    a0/a1/d1-d3
  3788.         rts
  3789.  
  3790. **************************************************************************
  3791.  
  3792. ;Typ & Bytelänge einer Datei bestimmen
  3793.  
  3794. L_GetFileInfo   equ     162
  3795. L162    PUSHM   a0-a2/a6/d0-d6
  3796.         DLOAD   a2
  3797.         clr.l   my_FileType(a2)
  3798.         clr.l   my_FileProtect(a2)
  3799.         move.l  #-1,my_FileSize(a2)
  3800.         move.l  #-1,my_FileBlocks(a2)
  3801.         movea.l my_FileName(a2),a0
  3802.         move.w  (a0)+,d0
  3803.         subq.w  #1,d0
  3804.         cmpi.w  #128,d0
  3805.         Rbcc    L_IFunc
  3806.         movea.l Name1(a5),a1
  3807. .1      move.b  (a0)+,(a1)+
  3808.         dbra    d0,.1
  3809.         clr.b   (a1)
  3810.         Rjsr    L_Dsk.PathIt
  3811.         move.l  Name1(a5),d1
  3812.         moveq   #ACCESS_READ,d2
  3813.         DOS     Lock
  3814.         move.l  d0,d4           ;D4 = Lock
  3815.         beq.s   .Skip           ;Fehler
  3816.         move.l  #fib_SIZEOF,d0  ;Speicher für InfoBlk
  3817.         Rjsr    L_RamChip       ;bereitstellen (Chip weil align 4)
  3818.         Rbeq    L_OOfmem
  3819.         move.l  d0,d6           ;InfoBlk in D6 sichern
  3820.         move.l  d4,d1           ;Lock
  3821.         move.l  d6,d2           ;InfoBlk
  3822.         LIB     Examine         ;FileInfo ermitteln
  3823.         movea.l d6,a1           ;InfoBlk in A1
  3824.         move.l  fib_DirEntryType(a1),my_FileType(a2)
  3825.         move.l  fib_Protection(a1),my_FileProtect(a2)
  3826.         move.l  fib_Size(a1),my_FileSize(a2)
  3827.         move.l  fib_NumBlocks(a1),my_FileBlocks(a2)
  3828.         move.l  #fib_SIZEOF,d0
  3829.         Rjsr    L_RamFree
  3830.         move.l  d4,d1           ;Lock
  3831.         LIB     UnLock
  3832. .Skip   POPM    a0-a2/a6/d0-d6
  3833.         rts
  3834.  
  3835. **************************************************************************
  3836.  
  3837. ;AMOSPro spezifische Print Sequence erzeugen
  3838.  
  3839. ;D0 <= Sequencecode
  3840.  
  3841. L_PrtSeq        equ     163
  3842. L163    move.l  (a3)+,d1
  3843.         moveq   #3,d3
  3844.         Rbsr    L_GetSpace
  3845.         addi.b  #"0",d1
  3846.         move.b  #27,(a1)+       ;Escape
  3847.         move.b  d0,(a1)+        ;I, S, U, D, W, C
  3848.         move.b  d1,(a1)+        ;0, 1, ...
  3849.         moveq   #2,d2           ;Stringmodus
  3850.         rts
  3851.  
  3852. **************************************************************************
  3853.  
  3854. ;Freie AMOS Banknummer bestimmen
  3855.  
  3856. ;D0 <= Minimale BkNb
  3857.  
  3858. ;D0 => Freie BkNb
  3859.  
  3860. L_Bnk.GetFree   equ     164
  3861. L164    PUSHM   a0-a2/d1-d2
  3862.         move.l  d0,d2
  3863.         Rble    L_IFunc
  3864.         subq.l  #1,d2
  3865. .1      addq.l  #1,d2
  3866.         cmpi.l  #$10000,d2
  3867.         Rbge    L_IFunc
  3868.         move.l  d2,d0
  3869.         Rjsr    L_Bnk.GetAdr
  3870.         bne.s   .1
  3871.         POPM    a0-a2/d1-d2
  3872.         rts
  3873.  
  3874. **************************************************************************
  3875.  
  3876. ;Stringkette reservieren
  3877.  
  3878. ;D3 <= Bytelänge des String
  3879.  
  3880. ;A1 => StrPtr
  3881. ;D3 => Len+StrPtr
  3882.  
  3883. L_GetSpace      equ     165
  3884. L165    PUSHM   a0/d0
  3885.         move.w  d3,d0
  3886.         andi.w  #$FFFE,d3
  3887.         addq.w  #2,d3
  3888.         Rjsr    L_Demande
  3889.         lea     2(a0,d3.w),a0
  3890.         move.l  a0,HiChaine(a5)
  3891.         move.l  a1,d3
  3892.         move.w  d0,(a1)+
  3893.         POPM    a0/d0
  3894.         rts
  3895.  
  3896. **************************************************************************
  3897.  
  3898. ;Hardware-Uhrzeit/Datum in String wandeln
  3899.  
  3900. ;A0 <= Hardware-Adresse
  3901. ;D0 <= Trennzeichen
  3902.  
  3903. ;D3 => Stringadresse
  3904.  
  3905. L_HardTimeDate  equ     166
  3906. L166    movea.l Name1(a5),a1
  3907.         lea     16(a1),a1
  3908.         moveq.l #5,d1
  3909. .1      move.l  (a0)+,d2
  3910.         andi.w  #15,d2
  3911.         addi.w  #"0",d2
  3912.         move.b  d2,-(a1)
  3913.         dbra    d1,.1
  3914.         movea.l Name1(a5),a0
  3915.         move.l  a0,d3
  3916.         move.w  #8,(a0)+
  3917.         moveq   #2,d2
  3918. .2      move.b  (a1)+,(a0)+
  3919.         move.b  (a1)+,(a0)+
  3920.         move.b  d0,(a0)+
  3921.         dbra    d2,.2
  3922.         moveq   #2,d2
  3923.         rts
  3924.  
  3925. **************************************************************************
  3926.  
  3927. ;Datei in Bank einlesen
  3928.  
  3929. L_BankLoad      equ     167
  3930. L167    PUSH    a6
  3931.         DLOAD   a2
  3932.         move.l  my_FileBnk(a2),d0
  3933.         move.l  my_FileMsk(a2),d1
  3934.         andi.l  #%11,d1
  3935.         cmpi.l  #$10000,d0
  3936.         Rbge    L_IFunc
  3937.         Rbsr    L_GetFileInfo
  3938.         move.l  my_FileSize(a2),d2      ;ByteLen -> D2
  3939.         tst.l   d2
  3940.         Rblt    L_IOError               ;-1 = IO Fehler
  3941.         btst    #Bnk_BitData,d1
  3942.         beq.s   .1
  3943.         DLEA    my_BkNameData,a0
  3944.         bra.s   .2
  3945. .1      DLEA    my_BkNameWork,a0
  3946. .2      Rjsr    L_Bnk.Reserve
  3947.         Rbeq    L_OOfmem
  3948.         move.l  a0,d5                   ;BkDAdr -> D5
  3949.         move.l  Name1(a5),d1
  3950.         move.l  #MODE_OLDFILE,d2
  3951.         DOS     Open
  3952.         move.l  d0,d4                   ;Handle -> D4
  3953.         Rbeq    L_IOError
  3954.         move.l  d4,d1                   ;Handle
  3955.         move.l  d5,d2                   ;Adresse
  3956.         move.l  my_FileSize(a2),d3      ;Länge
  3957.         LIB     Read
  3958.         move.l  d0,d5
  3959.         move.l  d4,d1
  3960.         LIB     Close
  3961.         POP     a6
  3962.         cmp.l   my_FileSize(a2),d5      ;Lesefehler?
  3963.         Rbne    L_IOError               ;Ja!
  3964.         rts
  3965.  
  3966. **************************************************************************
  3967.  
  3968. ;Bank in PowerPacker-Datenformat packen (powerpacker.library!)
  3969.  
  3970. L_PpkPack       equ     168
  3971. L168    Rbsr    L_PpkLibOpen
  3972.         PUSH    a6
  3973.         DLOAD   a2
  3974.         move.l  my_PpkSrc(a2),d0        ;Bk
  3975.         Rjsr    L_Bnk.OrAdr
  3976.         move.l  a0,my_PpkSrc(a2)        ;Start()
  3977.         Rbsr    L_GetPpkLen             ;Bereits pp.Format
  3978.         tst.l   d0
  3979.         bne     .Skip                   ;Ja!
  3980.         movea.l my_PpkLibBase(a2),a6
  3981.         moveq.l #SPEEDUP_BUFFLARGE,d4   ;pp.Speedup default
  3982. .1      move.l  d4,d1                   ;pp.Speedup in D1
  3983.         cmpi.l  #SPEEDUP_BUFFSMALL,d1
  3984.         Rbpl    L_OOfmem
  3985.         move.l  my_PpkPackMode(a2),d0   ;ppEffizienz (0-4)
  3986.         suba.l  a0,a0
  3987.         suba.l  a1,a1
  3988.         LIB     ppAllocCrunchInfo
  3989.         addq.l  #1,d4                   ;pp.Speedup
  3990.         move.l  d4,d1                   ;Falls BuffOver
  3991.         move.l  d0,my_PpkCInfo(a2)      ;pp.Info
  3992.         beq.s   .1
  3993.         movea.l d0,a0
  3994.         movea.l my_PpkSrc(a2),a1        ;BkAdr -> A1
  3995.         move.l  my_BkLength(a1),d0
  3996.         subi.l  #my_BkHeader,d0         ;-16
  3997.         LIB     ppCrunchBuffer
  3998.         move.l  d0,my_PpkDstSize(a2)
  3999.         movea.l my_PpkCInfo(a2),a0
  4000.         LIB     ppFreeCrunchInfo
  4001.         move.l  my_PpkDstSize(a2),d2    ;pp.CrunchedLen
  4002.         Rble    L_OOfmem
  4003.         movea.l my_PpkSrc(a2),a0        ;BkAdr -> A0
  4004.         move.w  my_BkFlag(a0),d1
  4005.         moveq   #1,d0                   ;BkMin = 1
  4006.         Rbsr    L_Bnk.GetFree           ;BkNb -> D0
  4007.         addq.l  #8,d2                   ;pp.Len + 8 (pp.Header)
  4008.         DLEA    my_BkNameWork,a0
  4009.         Rjsr    L_Bnk.Reserve
  4010.         Rble    L_OOfmem
  4011.         move.l  a0,my_PpkDst(a2)        ;Crunched buffer
  4012.         lea     8(a0),a1
  4013.         movea.l my_PpkSrc(a2),a0        ;Source Bk
  4014.         move.l  my_PpkDstSize(a2),d0
  4015.         SYS     $4.w,CopyMem
  4016.         Rbsr    L_PpkID
  4017.         movea.l my_PpkSrc(a2),a0
  4018.         movea.l my_PpkDst(a2),a1
  4019.         Rbsr    L_Bnk.HeadClone
  4020.         move.l  #"PP20",(a0)+
  4021.         Rbsr    L_PpkID
  4022.         move.l  my_PpkPackMode(a2),d0
  4023.         lsl.l   #2,d0                   ;× 4
  4024.         lea     my_PpkEffMode(a1),a1
  4025.         move.l  (a1,d0.l),(a0)          ;Effeciency-Code
  4026. .Skip   POP     a6
  4027.         rts
  4028.  
  4029.         *
  4030.  
  4031. L_PpkLibOpen    equ     169
  4032. L169    PUSHM   a0-a2/a6/d0
  4033.         DLOAD   a2
  4034.         tst.l   my_PpkLibBase(a2)
  4035.         bne.s   .Skip
  4036.         lea     PpkLibName(pc),a1
  4037.         moveq   #0,d0
  4038.         EXE     OpenLibrary
  4039.         move.l  d0,my_PpkLibBase(a2)
  4040.         Rbeq    L_LibError
  4041. .Skip   POPM    a0-a2/a6/d0
  4042.         rts
  4043. PpkLibName      PPNAME
  4044.         even
  4045.  
  4046.         *
  4047.  
  4048. L_PpkLibClose   equ     170
  4049. L170    PUSHM   a1/a2/a6/d0
  4050.         DLOAD   a2
  4051.         tst.l   my_PpkLibBase(a2)
  4052.         beq.s   .Skip
  4053.         movea.l my_PpkLibBase(a2),a1
  4054.         clr.l   my_PpkLibBase(a2)
  4055.         EXE     CloseLibrary
  4056. .Skip   POPM    a1/a2/a6/d0
  4057.         rts
  4058.  
  4059. **************************************************************************
  4060.  
  4061. ;Bereitstellen / schließen der lh.library
  4062.  
  4063. L_LpkLibOpen    equ     171
  4064. L171    PUSHM   a0-a2/a6/d0
  4065.         DLOAD   a2
  4066.         tst.l   my_LpkLibBase(a2)
  4067.         bne.s   .Skip
  4068.         lea     LpkLibName(pc),a1
  4069.         moveq   #0,d0
  4070.         EXE     OpenLibrary
  4071.         tst.l   d0
  4072.         Rbeq    L_LibError
  4073.         move.l  d0,my_LpkLibBase(a2)
  4074. .Skip   POPM    a0-a2/a6/d0
  4075.         rts
  4076. LpkLibName      dc.b    "lh.library",0
  4077.         even
  4078.  
  4079.         *
  4080.  
  4081. L_LpkLibClose   equ     172
  4082. L172    PUSHM   a1/a2/a6/d0
  4083.         DLOAD   a2
  4084.         tst.l   my_LpkLibBase(a2)
  4085.         beq.s   .Skip
  4086.         movea.l my_LpkLibBase(a2),a1
  4087.         clr.l   my_LpkLibBase(a2)
  4088.         EXE     CloseLibrary
  4089. .Skip   POPM    a1/a2/a6/d0
  4090.         rts
  4091.  
  4092. **************************************************************************
  4093.  
  4094. ;Entpackte Byte-Größe einer ByteKiller gepackten Bank ermitteln
  4095.  
  4096. ;A0 <= Bk
  4097.  
  4098. ;D0 => Entpackte Byte-Größe oder NULL
  4099.  
  4100. L_GetBpkLen     equ     173
  4101. L173    moveq.l #0,d0
  4102.         cmpi.l  #$61766532,$4C(a0)      ;Executable?
  4103.         bne.s   .1                      ;Nein!
  4104.         move.l  238(a0),d0              ;Byte-Größe
  4105.         bra.s   .Skip
  4106. .1      cmpi.l  #$3F3,(a0)              ;Data-Test
  4107.         beq.s   .Skip
  4108.         tst.b   (a0)
  4109.         bne.s   .Skip
  4110.         tst.b   5(a0)
  4111.         bne.s   .Skip
  4112.         tst.l   8(a0)
  4113.         beq.s   .Skip
  4114.         move.l  4(a0),d0                ;Byte-Größe
  4115. .Skip   rts
  4116.  
  4117. **************************************************************************
  4118.  
  4119. ;xpkmaster.library öffnen / schließen
  4120.  
  4121. L_XpkLibOpen    equ     174
  4122. L174    PUSHM   a0-a2/a6/d0/d1
  4123.         DLOAD   a2
  4124.         tst.l   my_XpkLibBase(a2)
  4125.         bne.s   .Skip
  4126.         lea     XpkLibName(pc),a1
  4127.         moveq   #0,d0
  4128.         EXE     OpenLibrary
  4129.         move.l  d0,my_XpkLibBase(a2)
  4130.         Rbeq    L_LibError
  4131. .Skip   POPM    a0-a2/a6/d0/d1
  4132.         rts
  4133. XpkLibName      XPKNAME
  4134.         even
  4135.  
  4136.         *
  4137.  
  4138. L_XpkLibClose   equ     175
  4139. L175    PUSHM   a1/a2/a6/d0
  4140.         DLOAD   a2
  4141.         tst.l   my_XpkLibBase(a2)
  4142.         beq.s   .Skip
  4143.         movea.l my_XpkLibBase(a2),a1
  4144.         clr.l   my_XpkLibBase(a2)
  4145.         EXE     CloseLibrary
  4146.         clr.l   my_XpkErrNum(a2)
  4147.         clr.l   my_XpkErrMsg(a2)
  4148. .Skip   POPM    a1/a2/a6/d0
  4149.         rts
  4150.  
  4151. **************************************************************************
  4152.  
  4153. ;Hardware-Uhrzeit/Datum setzen
  4154.  
  4155. ;A0 <= Zeichenkette
  4156. ;A1 <= Hardware-Adresse der Uhr
  4157.  
  4158. L_SetTimeDate   equ     176
  4159. L176    moveq.l #2,d0
  4160. .1      move.b  (a0)+,d1
  4161.         subi.b  #"0",d1
  4162.         move.b  d1,(a1)
  4163.         lea     -4(a1),a1
  4164.         move.b  (a0)+,d1
  4165.         subi.b  #"0",d1
  4166.         move.b  d1,(a1)
  4167.         lea     -4(a1),a1
  4168.         tst.b   (a0)+
  4169.         dbra    d0,.1
  4170.         rts
  4171.  
  4172. **************************************************************************
  4173.  
  4174. ;Bereitstellen bzw. schließen der decrunch.library
  4175.  
  4176. L_DpkLibOpen    equ     177
  4177. L177    PUSHM   a0-a2/a6/d0
  4178.         DLOAD   a2
  4179.         tst.l   my_DpkLibBase(a2)
  4180.         bne.s   .Skip
  4181.         lea     DpkLibName(pc),a1
  4182.         moveq   #0,d0
  4183.         EXE     OpenLibrary
  4184.         move.l  d0,my_DpkLibBase(a2)
  4185.         Rbeq    L_LibError
  4186. .Skip   POPM    a0-a2/a6/d0
  4187.         rts
  4188. DpkLibName      dc.b    "decrunch.library",0
  4189.         even
  4190.  
  4191.         *
  4192.  
  4193. L_DpkLibClose   equ     178
  4194. L178    PUSHM   a1/a2/a6/d0
  4195.         DLOAD   a2
  4196.         tst.l   my_DpkLibBase(a2)
  4197.         beq.s   .Skip
  4198.         movea.l my_DpkLibBase(a2),a1
  4199.         clr.l   my_DpkLibBase(a2)
  4200.         EXE     CloseLibrary
  4201. .Skip   POPM    a1/a2/a6/d0
  4202.         rts
  4203.  
  4204. **************************************************************************
  4205.  
  4206. ;Transformieren eines pp/x.Format in PP20.Format
  4207.  
  4208. ;z.Z. transferierbar: PPLS/PPBK/PPLB/PPEX/PX20/PXLB/PXEX
  4209.  
  4210. ;A0 <= Bk pp/x.Format
  4211.  
  4212. ;A0 => Bk PP20.Format
  4213.  
  4214. L_PpkTransform  equ     179
  4215. L179    PUSHM   a1-a6/d0-d7
  4216.         DLOAD   a2
  4217.         move.l  my_PpkSrc(a2),d0
  4218.         Rjsr    L_Bnk.OrAdr
  4219.         move.l  a0,my_PpkSrc(a2)
  4220.         move.l  a0,d7                   ;Bk in D7 sichern
  4221.  
  4222.         Rbsr    L_PpkID
  4223.         moveq   #my_PpkKnow-1,d2
  4224. .1      move.l  my_PpkCodePos(a1),d0
  4225.         move.l  my_PpkCode(a1),d1
  4226.         cmp.l   (a0,d0.l),d1
  4227.         beq.s   .ppok
  4228.         lea     my_PpkSIZEOF(a1),a1
  4229.         dbeq    d2,.1
  4230.         bra     .Skip
  4231.  
  4232. .ppok   move.l  my_PpkType(a1),d3
  4233.         cmpi.l  #1,d3
  4234.         beq     .Skip
  4235.         cmpi.l  #2,d3
  4236.         beq.s   .ppls
  4237.         cmpi.l  #3,d3
  4238.         beq.s   .ppbk
  4239.         cmpi.l  #4,d3
  4240.         beq     .pplb
  4241.         cmpi.l  #5,d3
  4242.         beq     .ppex
  4243.  
  4244.         movea.l Name1(a5),a1
  4245.         tst.b   (a1)            ;px.Passwort ?
  4246.         beq     .Skip           ;Nein.. kein entpacken !
  4247.  
  4248.         move.l  d3,d0
  4249.         Rbsr    L_PxPassKey     ;Passwort prüfen
  4250.         tst.l   d3              ;Stimmt überein ?
  4251.         beq     .Skip           ;Nein !
  4252.  
  4253.         cmpi.l  #6,d0
  4254.         beq     .px20
  4255.         cmpi.l  #7,d0
  4256.         beq     .pxlb
  4257.         cmpi.l  #8,d0
  4258.         beq     .pxex
  4259.  
  4260. .ppls   lea     4(a0),a1
  4261.         move.l  my_BkLength(a0),d0
  4262.         subi.l  #24,d0
  4263.         lea     8(a0),a0
  4264.         EXE     CopyMem
  4265.         movea.l d7,a0
  4266.         move.l  my_BkLength(a0),d0
  4267.         subq    #4,d0
  4268.         move.l  d0,my_BkLength(a0)
  4269.         bra     .pp20
  4270.  
  4271. .ppbk   move.l  my_BkLength(a0),d2
  4272.         subi.l  #my_BkHeader+16,d2      ;-16 pp.AbkInfo
  4273.         moveq   #1,d0
  4274.         Rbsr    L_Bnk.GetFree
  4275.         moveq   #0,d1
  4276.         DLEA    my_BkNameWork,a0
  4277.         Rjsr    L_Bnk.Reserve
  4278.         Rbeq    L_OOfmem
  4279.         movea.l a0,a1
  4280.         movea.l d7,a0
  4281.         move.l  a1,d6
  4282.         move.l  my_BkLength(a1),d0
  4283.         subi.l  #my_BkHeader,d0
  4284.         lea     my_BkHeader(a0),a0
  4285.         EXE     CopyMem
  4286.         movea.l d6,a1
  4287.         movea.l d7,a0
  4288.         Rbsr    L_Bnk.HeadClone
  4289.         bra     .pp20
  4290.  
  4291. .pplb   move.l  my_BkLength(a0),d2
  4292.         subi.l  #my_BkHeader+148,d2     ;-148 pp.ExecChunk
  4293.         moveq   #1,d0
  4294.         Rbsr    L_Bnk.GetFree
  4295.         moveq   #0,d1
  4296.         DLEA    my_BkNameWork,a0
  4297.         Rjsr    L_Bnk.Reserve
  4298.         Rbeq    L_OOfmem
  4299.         movea.l a0,a1
  4300.         movea.l d7,a0
  4301.         move.l  a1,d6
  4302.         move.l  my_BkLength(a1),d0
  4303.         subi.l  #my_BkHeader,d0
  4304.         lea     144(a0),a0
  4305.         EXE     CopyMem
  4306.         movea.l d6,a1
  4307.         movea.l d7,a0
  4308.         Rbsr    L_Bnk.HeadClone
  4309.         bra     .pp20
  4310.  
  4311. .ppex   cmpi.l  #$65804E75,my_PpkCode(a1)       ;Pk V4.x?
  4312.         beq     .ppexv4
  4313.         cmpi.l  #$6472611A,my_PpkCode(a1)       ;Pk V2.x?
  4314.         beq.s   .ppexv2
  4315.         move.l  my_BkLength(a0),d2
  4316.         subi.l  #my_BkHeader+576,d2     ;-576 pp.ExecChunk
  4317.         moveq   #1,d0
  4318.         Rbsr    L_Bnk.GetFree
  4319.         moveq   #0,d1
  4320.         DLEA    my_BkNameWork,a0
  4321.         Rjsr    L_Bnk.Reserve
  4322.         Rbeq    L_OOfmem
  4323.         movea.l a0,a1
  4324.         movea.l d7,a0
  4325.         move.l  a1,d6
  4326.         move.l  my_BkLength(a1),d0
  4327.         subi.l  #my_BkHeader,d0
  4328.         lea     572(a0),a0
  4329.         EXE     CopyMem
  4330.         movea.l d6,a1
  4331.         movea.l d7,a0
  4332.         Rbsr    L_Bnk.HeadClone
  4333.         bra     .pp20
  4334.  
  4335. .ppexv2 move.l  my_PpkEffPos(a1),d5
  4336.         move.l  (a0,d5.l),d5            ;D5 => Effizienz-Code
  4337.         move.l  my_BkLength(a0),d2
  4338.         subi.l  #my_BkHeader+564,d2     ;-564 pp.ExecChunk 2.x
  4339.         moveq   #1,d0
  4340.         Rbsr    L_Bnk.GetFree
  4341.         moveq   #0,d1
  4342.         DLEA    my_BkNameWork,a0
  4343.         Rjsr    L_Bnk.Reserve
  4344.         Rbeq    L_OOfmem
  4345.         movea.l a0,a1
  4346.         movea.l d7,a0
  4347.         move.l  a1,d6
  4348.         move.l  my_BkLength(a1),d0
  4349.         subi.l  #my_BkHeader,d0
  4350.         lea     560(a0),a0
  4351.         EXE     CopyMem
  4352.         movea.l d6,a1
  4353.         movea.l d7,a0
  4354.         Rbsr    L_Bnk.HeadClone
  4355.         move.l  d5,4(a0)                ;Effizienz-Code
  4356.         bra     .pp20
  4357.  
  4358. .ppexv4 move.l  my_PpkEffPos(a1),d5
  4359.         move.l  (a0,d5.l),d5            ;D5 => Effizienz-Code
  4360.         move.l  my_BkLength(a0),d2
  4361.         subi.l  #my_BkHeader+$2A4,d2    ;-676 pp.ExecChunk 2.x
  4362.         moveq   #1,d0
  4363.         Rbsr    L_Bnk.GetFree
  4364.         moveq   #0,d1
  4365.         DLEA    my_BkNameWork,a0
  4366.         Rjsr    L_Bnk.Reserve
  4367.         Rbeq    L_OOfmem
  4368.         movea.l a0,a1
  4369.         movea.l d7,a0
  4370.         move.l  a1,d6
  4371.         move.l  my_BkLength(a1),d0
  4372.         subi.l  #my_BkHeader,d0
  4373.         lea     $2A0(a0),a0
  4374.         EXE     CopyMem
  4375.         movea.l d6,a1
  4376.         movea.l d7,a0
  4377.         Rbsr    L_Bnk.HeadClone
  4378.         move.l  d5,4(a0)                ;Effizienz-Code
  4379.         bra     .pp20
  4380.  
  4381. .px20   Rbsr    L_PpkLibOpen
  4382.         DLOAD   a2
  4383.         movea.l my_PpkLibBase(a2),a6
  4384.         movea.l Name1(a5),a0
  4385.         LIB     ppCalcPasskey
  4386.         move.l  d0,d1                   ;px.Passkey
  4387.         movea.l d7,a0                   ;BkAdr
  4388.         move.l  my_BkLength(a0),d0      ;BkLen
  4389.         subi.l  #my_BkHeader+14,d0      ;-14 px.Chunk
  4390.         lea     10(a0),a0               ;+10 px.Header
  4391.         LIB     ppDecrypt
  4392.         movea.l d7,a0
  4393.         movea.l d7,a1
  4394.         lea     4(a1),a1
  4395.         move.l  my_BkLength(a0),d0
  4396.         subi.l  #22,d0
  4397.         lea     6(a0),a0
  4398.         EXE     CopyMem
  4399.         movea.l d7,a0
  4400.         move.l  my_BkLength(a0),d0
  4401.         subq.l  #2,d0                   ;-2 px.CryptChunk
  4402.         move.l  d0,my_BkLength(a0)
  4403.         bra     .pp20
  4404.  
  4405. .pxlb   move.w  $4A(a0),d4
  4406.         move.l  $98(a0),d5
  4407.         move.l  my_BkLength(a0),d2
  4408.         subi.l  #$B6,d2
  4409.         moveq   #1,d0
  4410.         Rbsr    L_Bnk.GetFree
  4411.         moveq   #0,d1
  4412.         DLEA    my_BkNameWork,a0
  4413.         Rjsr    L_Bnk.Reserve
  4414.         Rbeq    L_OOfmem
  4415.         movea.l a0,a1
  4416.         movea.l d7,a0
  4417.         move.l  a1,d6
  4418.         move.l  my_BkLength(a0),d0
  4419.         subi.l  #$B6,d0
  4420.         lea     $A2(a0),a0
  4421.         EXE     CopyMem
  4422.         movea.l d6,a1
  4423.         movea.l d7,a0
  4424.         Rbsr    L_Bnk.HeadClone
  4425.         move.l  a0,d7
  4426.         move.w  d4,4(a0)
  4427.         move.l  d5,6(a0)
  4428.         bra     .px20
  4429.  
  4430. .pxex   move.w  $8E(a0),d4              ;px.PassKey   => D4
  4431.         move.l  $2FE(a0),d5             ;px.Effizienz => D5
  4432.         move.l  my_BkLength(a0),d2
  4433.         subi.l  #my_BkHeader+$30A,d2    ;-$30A px.ExecChunk
  4434.         moveq   #1,d0
  4435.         Rbsr    L_Bnk.GetFree
  4436.         moveq   #0,d1
  4437.         DLEA    my_BkNameWork,a0
  4438.         Rjsr    L_Bnk.Reserve
  4439.         Rbeq    L_OOfmem
  4440.         movea.l a0,a1
  4441.         movea.l d7,a0
  4442.         move.l  a1,d6
  4443.         move.l  my_BkLength(a0),d0
  4444.         subi.l  #my_BkHeader+$30A,d0
  4445.         lea     $306(a0),a0
  4446.         EXE     CopyMem
  4447.         movea.l d6,a1
  4448.         movea.l d7,a0
  4449.         Rbsr    L_Bnk.HeadClone
  4450.         move.l  a0,d7
  4451.         move.w  d4,4(a0)
  4452.         move.l  d5,6(a0)
  4453.         bra     .px20
  4454.  
  4455. .pp20   move.l  #"PP20",(a0)
  4456.         DLOAD   a2
  4457.         move.l  a0,my_PpkSrc(a2)
  4458. .Skip   POPM    a1-a6/d0-d7
  4459.         rts
  4460.  
  4461. **************************************************************************
  4462.  
  4463. ;PX?? Passwort-Test
  4464.  
  4465. ;A0 <= Bk
  4466.  
  4467. ;D3 => True/False
  4468.  
  4469. L_PxPassKey     equ     180
  4470. L180    PUSHM   a0-a6/d0-d2/d4
  4471.         Rbsr    L_PpkID
  4472.         moveq   #my_PpkKnow-1,d2
  4473.  
  4474. .1      move.l  my_PpkCodePos(a1),d0
  4475.         move.l  my_PpkCode(a1),d1
  4476.         cmp.l   (a0,d0.l),d1    ;Vergleich mit ppAbk
  4477.         beq.s   .2
  4478.         lea     my_PpkSIZEOF(a1),a1
  4479.         dbeq    d2,.1
  4480.         moveq   #0,d3
  4481.         bra.s   .Skip
  4482.  
  4483. .2      move.l  my_PpkCryptPos(a1),d0
  4484.         move.w  (a0,d0.l),d4
  4485.         Rbsr    L_PpkLibOpen
  4486.         DLOAD   a2
  4487.         movea.l my_PpkLibBase(a2),a6
  4488.         movea.l Name1(a5),a0
  4489.         LIB     ppCalcChecksum  ;D0 -> CheckSum 16 Bit
  4490.         moveq   #0,d3           ;False! für ungleich
  4491.         cmp.w   d0,d4           ;CheckSum vergleichen (Word)
  4492.         bne.s   .Skip           ;Ungleich!
  4493.  
  4494.         moveq   #-1,d3          ;True! für gleich
  4495. .Skip   POPM    a0-a6/d0-d2/d4
  4496.         rts
  4497.  
  4498. *************************************************************************
  4499.  
  4500. ;Bereitstellen bzw. schließen der diskfont.library
  4501.  
  4502. L_FntLibOpen    equ     181
  4503. L181    PUSHM   a0-a2/a6/d0
  4504.         tst.l   T_FntBase(a5)
  4505.         bne.s   .Skip
  4506.         lea     FntLibName(pc),a1
  4507.         moveq   #0,d0
  4508.         EXE     OpenLibrary
  4509.         move.l  d0,T_FntBase(a5)
  4510.         Rbeq    L_LibError
  4511. .Skip   POPM    a0-a2/a6/d0
  4512.         rts
  4513. FntLibName      dc.b    "diskfont.library",0
  4514.         even
  4515.  
  4516.         *
  4517.  
  4518. L_FntLibClose   equ     182
  4519. L182    PUSHM   a1/a2/a6/d0
  4520.         tst.l   T_FntBase(a5)
  4521.         beq.s   .Skip
  4522.         movea.l T_FntBase(a5),a1
  4523.         clr.l   T_FntBase(a5)
  4524.         EXE     CloseLibrary
  4525. .Skip   POPM    a1/a2/a6/d0
  4526.         rts
  4527.  
  4528. **************************************************************************
  4529.  
  4530. ;Ppk_ID-Strukturdefinition global in A1
  4531.  
  4532. L_PpkID         equ     183
  4533. L183    lea     .0(pc),a1
  4534.         rts
  4535.         *    Name      EffPos CodePos Code      CryptPos Type
  4536. .0      dc.l $50503230,$00004,$000000,$50503230,$0000000,$001   ;PP20
  4537.         dc.l $50504C53,$00008,$000000,$50504C53,$0000000,$002   ;PPLS
  4538.         dc.l $5050424B,$00014,$000000,$5050626B,$0000000,$003   ;PPBK
  4539.         dc.l $50504C42,$00094,$000080,$706F7765,$0000000,$004   ;PPLB
  4540.         dc.l $50504558,$00290,$00028C,$65804E75,$0000000,$005   ;PPEX V4.x
  4541.         dc.l $50504558,$00240,$000054,$504B2E1B,$0000000,$005   ;PPEX V3.x
  4542.         dc.l $50504558,$00228,$000118,$6472611A,$0000000,$005   ;PPEX V2.x
  4543.         dc.l $50583230,$00006,$000000,$50583230,$0000004,$006   ;PX20
  4544.         dc.l $50584C42,$00098,$000084,$706F7765,$000004A,$007   ;PXLB
  4545.         dc.l $50584558,$002FE,$0002E2,$50617373,$000008E,$008   ;PXEX
  4546.  
  4547.         *    Fast      Mediocre  Good      VeryGood  Best
  4548.         dc.l $09090909,$090A0A0A,$090A0B0B,$090A0C0C,$090A0C0D  ;MODE
  4549.  
  4550. **************************************************************************
  4551.  
  4552. ;Speicher aller RS_Strukturen freigeben
  4553.  
  4554. L_RsEraseAll    equ     184
  4555. L184    PUSHM   a0-a6/d0-d7
  4556.         moveq.l #0,d6
  4557.         moveq.l #0,d7
  4558. .1      mulu    #my_RsSIZEOF,d7
  4559.         XLEA    my_RsStruc,a2
  4560.         adda.l  d7,a2
  4561.         movea.l my_RsStart(a2),a1
  4562.         move.l  my_RsLength(a2),d0
  4563.         beq.s   .2
  4564.         Rjsr    L_RamFree
  4565. .2      clr.l   my_RsStart(a2)
  4566.         clr.l   my_RsLength(a2)
  4567.         clr.l   my_RsPosition(a2)
  4568.         addq.l  #1,d6
  4569.         move.l  d6,d7
  4570.         cmpi.l  #my_RsMax,d6
  4571.         bne.s   .1
  4572.         POPM    a0-a6/d0-d7
  4573.         rts
  4574.  
  4575. **************************************************************************
  4576.  
  4577. ;Reservierte Offsets für Rjumps
  4578.  
  4579. L185
  4580. L186
  4581. L187
  4582. L188
  4583. L189
  4584. L190
  4585. L191
  4586. L192
  4587. L193
  4588. L194
  4589. L195
  4590. L196
  4591. L197
  4592. L198
  4593. L199
  4594.  
  4595. **************************************************************************
  4596.  
  4597. ;Fehlerroutine aktivieren
  4598.  
  4599. L_OOfmem        equ     200
  4600. L200    moveq   #24,d0          ;Out of memory
  4601.         Rjmp    L_Error
  4602. L_IFunc         equ     201
  4603. L201    moveq   #23,d0          ;Illegal function call
  4604.         Rjmp    L_Error
  4605. L_SNopen        equ     202
  4606. L202    moveq   #47,d0          ;Screen not open
  4607.         Rjmp    L_Error
  4608. L_FNopen        equ     203
  4609. L203    moveq   #97,d0          ;File not open
  4610.         Rjmp    L_Error
  4611. L_IOError       equ     204
  4612. L204    moveq   #94,d0          ;I/O Error
  4613.         Rjmp    L_Error
  4614. L_LibError      equ     205
  4615. L205    move.l  #170,d0         ;Cannot open library
  4616.         Rjmp    L_Error
  4617. L_NoIff         equ     206
  4618. L206    moveq   #31,d0          ;IFF cmpr not recognised
  4619.         Rjmp    L_Error
  4620. L_IScrn         equ     207
  4621. L207    moveq   #48,d0          ;Illegal screen params
  4622.         Rjmp    L_Error
  4623. L208
  4624.  
  4625. **************************************************************************
  4626.  
  4627. ;Welcome message
  4628.  
  4629. C_Title EXPLODE
  4630.         VERSION
  4631.         dc.b    0,"$VER: "
  4632.         VERSION
  4633.         dc.b    0
  4634.         even
  4635.  
  4636. **************************************************************************
  4637. C_End   dc.w    0
  4638.  
  4639.         END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement