home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / misc / tinytools.lzh / INCLUDE / INIT.I
Encoding:
Text File  |  1990-10-10  |  3.6 KB  |  217 lines

  1. ; The stuff below is some pretty basic support and initialization, and
  2. ; should be replaced easily with the includes and macros used in your
  3. ; assembly system. I don't think you'll encounter many problems when
  4. ; trying to assemble this.
  5.  
  6.     OPT    A-,M-,O+,O3-,OW-,I+,P+,S-,T+,W+,D-,X-
  7.  
  8. ; Define global variable structure pointer
  9.  
  10. GP    EQUR    A5
  11.  
  12. ; Equs private to initialization code
  13.  
  14. InitError    EQU    100
  15. NormError    EQU    20
  16.  
  17. ; Some LVOs & equates (can be gotten by including dos*.i & arpbase.i etc.)
  18.  
  19. _LVOArpAlloc    EQU    -384
  20. _LVOArpAllocMem    EQU    -390
  21. _LVOArpLock    EQU    -408
  22. _LVOArpOpen    EQU    -396
  23. _LVOAtol    EQU    -258
  24. _LVOCheckAbort    EQU    -270
  25. _LVOClose    EQU    -36
  26. _LVOCloseDevice    EQU    -450
  27. _LVOCloseLibrary EQU    -414
  28. _LVODoIO    EQU    -456
  29. _LVODelay    EQU    -198
  30. _LVODeleteFile    EQU    -72
  31. _LVOExamine    EQU    -102
  32. _LVOForbid    EQU    -132
  33. _LVOFindPort    EQU    -390
  34. _LVOFindTask    EQU    -294
  35. _LVOGADS    EQU    -252
  36. _LVOInput    EQU    -54
  37. _LVOLock    EQU    -84
  38. _LVOOpen    EQU    -30
  39. _LVOOpenDevice    EQU    -444
  40. _LVOOpenLibrary    EQU    -552
  41. _LVOOpenWorkBench EQU    -210
  42. _LVOOutput    EQU    -60
  43. _LVOPermit    EQU    -138
  44. _LVOPuts    EQU    -240
  45. _LVORawDoFmt    EQU    -522
  46. _LVORead    EQU    -42
  47. _LVOSeek    EQU    -66
  48. _LVOSetProtection EQU    -186
  49. _LVOStamptoStr    EQU    -564
  50. _LVOStrcmp    EQU    -522
  51. _LVOUnLock    EQU    -90
  52. _LVOWBenchToFront EQU    -342
  53. _LVOWrite    EQU    -48
  54.  
  55. ACCESS_READ    EQU    -2
  56. ACCESS_WRITE    EQU    -1
  57. ArpVersion    EQU    39
  58. ds_Days        EQU    0
  59. ds_Minute    EQU    4
  60. ds_Tick        EQU    8
  61. fib_DateStamp    EQU    $84
  62. fib_SIZEOF    EQU    $104
  63. FORMAT_DOS    EQU    0
  64. IO_COMMAND    EQU    $1C
  65. IOTV_SIZE    EQU    $28
  66. IOTV_TIME    EQU    $20
  67. LEN_DATSTRING    EQU    10
  68. LN_NAME        EQU    $A
  69. MEMF_CLEAR    EQU    $10000
  70. MEMF_PUBLIC    EQU    1
  71. MN_REPLYPORT    EQU    $E
  72. MODE_NEWFILE    EQU    $3EE
  73. MODE_OLDFILE    EQU    $3ED
  74. OFFSET_END    EQU    1
  75. pr_MsgPort    EQU    $5C
  76. pr_WindowPtr    EQU    $B8
  77. RESIDENT_MAGIC    EQU    $4AFC
  78. ThisTask    EQU    $114
  79. TR_SETSYSTIME    EQU    $B
  80. TV_SECS        EQU    0
  81.  
  82. ; Negative structure building macros
  83.  
  84. ALIGN    MACRO
  85. soff    SET    soff-(soff&1)
  86.     ENDM
  87.  
  88. STRUCT    MACRO
  89. soff    SET    soff-\2
  90.     ALIGN
  91. \1    EQU    soff
  92.     ENDM
  93.  
  94. LONG    MACRO
  95.     ALIGN
  96. soff    SET    soff-4
  97. \1    EQU    soff
  98.     ENDM
  99.  
  100. WORD    MACRO
  101.     ALIGN
  102. soff    SET    soff-2
  103. \1    EQU    soff
  104.     ENDM
  105.  
  106. BYTE    MACRO
  107. soff    SET    soff-1
  108. \1    EQU    soff
  109.     ENDM
  110.  
  111. SIZE    MACRO
  112.     ALIGN
  113. StrcSize EQU    soff
  114.     ENDM
  115.  
  116. ; Define default variables.
  117.  
  118. soff    SET    0
  119.     LONG    ComLineBase
  120.     LONG    ComLineSize
  121.     WORD    ReturnCode
  122.  
  123. ; This requires A6 to be set properly! Keep track carefully or reload A6
  124.  
  125. CALL    MACRO
  126.     JSR    _LVO\1(A6)
  127.     ENDM
  128.  
  129. ; This tells ARP's shell and resident how large a stack we require.
  130.  
  131. STACK    MACRO
  132.     BRA.S    ResStart
  133.     DC.W    RESIDENT_MAGIC
  134.     DC.L    \1
  135.     DC.L    0
  136. ResStart:
  137.     ENDM
  138.  
  139. ; The big one.
  140.  
  141. INIT    MACRO
  142.  
  143. ; Setup the stack structure (on stack for reentrability) (GP=A5, do not modify)
  144.  
  145.     LINK    GP,#StrcSize
  146.     MOVE.L    SP,A1
  147. ClearStackStruct:
  148.     CLR.W    (A1)+
  149.     CMP.L    A1,GP
  150.     BNE    ClearStackStruct
  151.  
  152. ; Initialize default variables
  153.  
  154.     MOVE.W    #InitError,ReturnCode(GP)
  155.     MOVE.L    A0,ComLineBase(GP)
  156.     MOVE.L    D0,ComLineSize(GP)
  157.  
  158. ; Try to open ARP
  159.  
  160.     MOVE.L    $4.W,A6
  161.     LEA    ArpName(PC),A1
  162.     MOVEQ    #ArpVersion,D0
  163.     CALL    OpenLibrary
  164.     TST.L    D0
  165.     BNE.S    OpenedOK
  166.  
  167. ; Report that the ARP library could not be opened.
  168.  
  169. ;    MOVEQ    #0,D0        ; Already 0
  170.     LEA    DosName(PC),A1
  171.     CALL    OpenLibrary
  172.     TST.L    D0
  173.     BEQ.S    ThisIsHorrible
  174.     MOVE.L    D0,A6
  175.     CALL    Output
  176.     MOVE.L    D0,D1
  177.     BEQ.S    BackToDOS
  178.     LEA    LibErr(PC),A0
  179.     MOVE.L    A0,D2
  180.     MOVEQ    #StringEnd-LibErr,D3
  181.     CALL    Write
  182.  
  183. ; Return to DOS
  184.  
  185. BackToDOS:
  186.     MOVE.L    A6,A1
  187.     MOVE.L    $4.W,A6
  188.     CALL    CloseLibrary
  189. ThisIsHorrible:
  190.     MOVE.W    ReturnCode(GP),D0
  191.     EXT.W    D0
  192.     UNLK    GP
  193.     RTS
  194.  
  195. ; Support strings
  196.  
  197.     IFGE    ArpVersion-100
  198.     FAIL "Version > 3 digits"
  199.     ENDC
  200.  
  201. TMP      SET    ArpVersion/10
  202. DosName      DC.B    'dos.library',0
  203. LibErr      DC.B    'you need '
  204. ArpName      DC.B    'arp.library',0,' V',TMP+'0',(ArpVersion-(TMP*10))+'0','+',10
  205. StringEnd:
  206.     CNOP    0,2
  207.  
  208. ; A6 = ARP base (Do not modify A6 if you use CALL), lower error level, call user.
  209.  
  210. OpenedOK:
  211.     MOVE.L    D0,A6
  212.     MOVE.W    #NormError,ReturnCode(GP)
  213.     BSR.S    UserCode
  214.     BRA    BackToDOS
  215. UserCode:
  216.     ENDM
  217.