home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / asm / ssl / ss.i < prev    next >
Text File  |  1994-06-03  |  14KB  |  414 lines

  1. ; The Special Support Library
  2. ; (c) 1993,1994 Martin Mares, MJSoft System Software
  3. ; --------------------------------------------------------------------------
  4.  
  5. ; Fields marked with 'R' are read-only, 'P' are private...
  6.  
  7. ; Library Version
  8.  
  9. SSVer    equ    4
  10.  
  11. ; Library Vector Offsets
  12.  
  13. _FuncOffset    set    -30
  14. Func    macro    *fname
  15. _LVO\1    equ    _FuncOffset
  16. _FuncOffset    set    _FuncOffset-6
  17.     endm
  18.  
  19. ; Program startup and exit
  20.     Func    StartupInit    ; (A0=StartupStruct,D7=WbMsg)
  21.     Func    ExitCleanup    ; ()
  22.     Func    ExitError    ; (A0=Text,A1=Params)
  23.     Func    DisplayError    ; (A0=Text,A1=Params)
  24.     Func    DosError    ; (A0=optional text,A1=Params)
  25.     Func    ReportError    ; (D0=ErrorCode,A1/D2/D3=Params)
  26.     Func    TestBreak    ; ()
  27. ; Miscellaneous services
  28.     Func    Printf        ; (A0=Text,A1=Params)
  29.     Func    Puts        ; (A0=Text)
  30.     Func    PutsNL        ; (A0=Text)
  31.     Func    FormatStr    ; (A0=Format,A1=Data,A2=DestBuf)
  32.     Func    StrCat        ; (A0=Dest,A1=Source) -> A0=AfterPtr
  33.     Func    StrToL        ; (A0=String)
  34.     Func    ParseArgs    ; (A0=Src,A1=Tmpl,A2=ExHelp,A3=StoreTo,
  35.                 ;  D0=Flags)
  36. ; General tracking services
  37.     Func    CreateResList    ; ()
  38.     Func    GetResList    ; ()
  39.     Func    FreeResList    ; ()
  40.     Func    FreeAllResLists    ; ()
  41.     Func    TrackObject    ; (D0=type)
  42.     Func    FreeObject    ; (A0=tracker)
  43.     Func    TrackRoutine    ; (A0=routine,A1=args)
  44.     Func    TrackExtd    ; (D0=type,D1=extsize)
  45.     Func    TrackSlave    ; (A0=master,A1=slave)
  46. ; Special tracking services
  47.     Func    TrackAllocMem    ; (D0=size,D1=requirements)
  48.     Func    TrackAlloc    ; (D0=size)
  49.     Func    TrackOpen    ; (A0=name,D0=openmode)
  50.     Func    TrackLock    ; (A0=name,D0=lockmode)
  51.     Func    TrackPort    ; ()
  52.     Func    TrackIoRq    ; (A0=OptionalPort,D0=size or 0)
  53.     Func    TrackSignal    ; ()
  54.     Func    TrackDevice    ; (A0=DevName,A1=IORQ,D0=unit,D1=flags,
  55.                 ;  A2=ErrorTable)
  56.     Func    TrackLibrary    ; (A0=LibName,D0=version)
  57.     Func    TrackDosObject    ; (D0=Type,A0=Tags)
  58. ; File operations
  59.     Func    LoadFile    ; (A0=name)
  60.     Func    ChkRead        ; (A0=tracker,A1=buffer,D0=size)
  61.     Func    ChkWrite    ; (A0=tracker,A1=buffer,D0=size)
  62. ; Hashed trees
  63.     Func    InitHashTree    ; (D0=NumBranches,D1=Flags)
  64.     Func    AddHashItem    ; (A0=HashTree,A1=Name,D0=DataSize)
  65.     Func    FindHashItem    ; (A0=HashTree,A1=Name)
  66. ; Filename manipulation
  67.     Func    AddExtension    ; (A0=Source,A1=Dest,A2=Ext,D0=MaxSize)
  68.     Func    SetExtension    ; (A0=Source,A1=Dest,A2=Ext,D0=MaxSize)
  69.     Func    GetExtension    ; (A0=FileName)
  70.     Func    RemExtension    ; (A0=FileName)
  71. ; Next generation of names ...
  72.     Func    ChkDoIO        ; (A0=Messsage,A1=DeviceTracker)
  73.     Func    SimpleRequest    ; (A0=Msg,A1=Params,A2=Gadgets)
  74. ; Private functions allowing SS extensions
  75.     Func    AddSSExtens    ; (A0=ExtNode)
  76.     Func    RemSSExtens    ; (A0=ExtNode)
  77. ; Version 3: Memory allocation with pools
  78.     Func    TrackPool    ; (D0=Quantum,D1=Threshold,D2=Flags)
  79.     Func    PoolAlloc    ; (A0=Pool,D0=size)
  80.     Func    PoolFree    ; (A0=Pool,A1=Address,D0=Size)
  81.     Func    TrackLinPool    ; (D0=Quantum,D1=Flags)
  82.     Func    LinearAlloc    ; (A0=Pool,D1=size)
  83.     Func    LinearAllocN    ; (A0=Pool,D1=size)
  84. ; Version 4: Sorting and misc
  85.     Func    MergeResLists    ; ()
  86.     Func    CallBlock    ; (A0=Routine,D0=LeaveResources)
  87.     Func    QuickSort    ; (A0=Field,D0=NumEl,D1=ElSize,A1=CFunc)
  88.     Func    SortStrings    ; (A0=Field,D0=NumEl)
  89.     Func    SortLongs    ; (A0=Field,D0=NumEl)
  90.     Func    SortList    ; (A0=List,A1=CompFunc)
  91.     Func    SortListName    ; (A0=List)
  92.     Func    TrackAllocPub    ; (D0=Size)
  93.     Func    RelinkObject    ; (A0=Object)
  94.     Func    TestStack    ; ()
  95.  
  96. ; System Variables
  97.  
  98. _SysVarCnt    set    0
  99. SysVar    macro    *size,name
  100. _SysVarCnt    set    _SysVarCnt-\1
  101. \2    equ    _SysVarCnt
  102.     endm
  103.  
  104.     SysVar    0,ssbase    ;R Library base
  105.     SysVar    4,sv_basesize    ;P Size of system vars + user data above
  106.     SysVar    4,sv_wbmsg    ;R Workbench message (0=CLI)
  107.     SysVar    4,sv_thistask    ;R Pointer to task node
  108.     SysVar    4,sv_errsp    ;R Stack pointer to program return address
  109.     SysVar    4,sv_checkbase    ;P Base checkpoint - (0-BaseAddress)
  110.     SysVar    4,dosbase    ;R Dos base
  111.     SysVar    4,intuitionbase    ;R Intuition base
  112.     SysVar    4,gfxbase    ;R Graphics base
  113.     SysVar    4,gadtoolsbase    ;R Gadtools base
  114.     SysVar    4,utilitybase    ;R Utility base
  115.     SysVar    4,stdin        ;  Standard input stream
  116.     SysVar    4,stdout    ;  Standard output stream
  117.     SysVar    4,stderr    ;  Standard error stream
  118.     SysVar    4,sv_errsw    ;  Error switches (bitmap)
  119.     SysVar    4,sv_progname    ;  Program name
  120.     SysVar    4,sv_errrc    ;  ReturnCode for error, default=10
  121.  
  122.     SysVar    12,sv_reslistlist    ;P A list of resource lists
  123.     SysVar    8,sv_callernode    ;P Node of CallerList
  124.     SysVar    4,sv_rc        ;  ReturnCode
  125.  
  126.     SysVar    4,sv_wbcon    ;P Workbench console
  127.     SysVar    4,sv_template    ;P Program template
  128.     SysVar    4,sv_extrahelp    ;P Program extra help string
  129.     SysVar    4,sv_envvar    ;R Environment variable name
  130.     SysVar    4,sv_exitrout    ;  Subroutine called before res.freeing
  131.                 ;  (this pointer is cleared before calling)
  132.     SysVar    4,sv_msgrout    ;  Error message routine
  133.                 ;  (this pointer is cleared before calling)
  134.     SysVar    4,sv_oldexcept    ;P Pointer to original exception routine
  135.     SysVar    4,sv_flags    ;  Various flags (see below)
  136.     SysVar    4,sv_argdest    ;P Address to store arguments at
  137.     SysVar    4,sv_iconbase    ;P Pointer to IconBase
  138.     SysVar    4,sv_usertrk    ;  Pointer to UserTrkTypes structure or 0
  139.     SysVar    24,sv_mempool    ;P Task memory pool
  140.     SysVar    4,sv_lowmem    ;  Routine to be called when out of mem.
  141.     SysVar    4,sv_stklimit    ;  The lowest allowed SP value
  142.     SysVar    4,sv_defstderr    ;P Default stderr or 0
  143.  
  144.     SysVar    0,sv_sizeof    ; Size of system variables block
  145.  
  146. ; Flags in sv_flags
  147.  
  148. svfb_nowbargs    equ    0        ;  Ignore WB arguments
  149. svfb_noprogname    equ    1        ;  Don't print program's name in CLI error msgs
  150. svfb_errorreq    equ    2        ;  Always use requesters for error msgs
  151. svfb_intrap    equ    3        ;P Running trap handler
  152. svfb_nostderr    equ    4        ;P sst_nostderr specified
  153. svfb_noiconarg    equ    5        ;  Don't pass names of multiselected icons as arg #1
  154. svfb_dontfree    equ    7        ;P Don't free memory from task mempool
  155.  
  156. svfm_nowbargs    equ    1
  157. svfm_noprogname    equ    2
  158. svfm_errorreq    equ    4
  159. svfm_intrap    equ    8
  160. svfm_nostderr    equ    16
  161. svfm_noiconarg    equ    32
  162. svfm_dontfree    equ    128
  163.  
  164. ; SS.library Base
  165.  
  166.     ifnd    sizeof_Library
  167. sizeof_Library    equ    $0022
  168.     endc
  169. _LibCnt    set    sizeof_Library
  170. LibVar    macro    *size,name
  171. ssb_\2    equ    _LibCnt
  172. _LibCnt    set    _LibCnt+\1
  173.     endm
  174.  
  175.     LibVar    4,seglist    ;P SegList
  176.     LibVar    2,ksversion    ;R Kickstart version
  177.     LibVar    1,flags        ;  Some flags (see below)
  178.     LibVar    1,pad        ;P Not used yet
  179.     LibVar    4,dosbase    ;R DosBase
  180.     LibVar    4,intuibase    ;R IntuitionBase
  181.     LibVar    4,gfxbase    ;R GraphicsBase
  182.     LibVar    4,gadtoolsbase    ;R GadtoolsBase
  183.     LibVar    4,utilitybase    ;R UtilityBase
  184.     LibVar    12,callerlist    ;P A list of callers -used for crash recovery
  185.     LibVar    1,cputype    ;R CPU type (see tags for IDs)
  186.     LibVar    1,fputype    ;R FPU type ( --    ""    -- )
  187.     LibVar    16,extlist    ;P SS Extensions
  188.     LibVar    2,opencnt    ;P Private OpenCount
  189.     LibVar    SS_SIZE,callis    ;P Callerlist semaphore
  190.     LibVar    0,sizeof
  191.  
  192. ; Flags in ssb_flags
  193.  
  194. SSB_allow30    equ    0        ;R KS 3.0 services can be used
  195.  
  196. ; Startup structure
  197.  
  198. pa_varsize    equ    0        ;  Size of user's variables, incl. ssbase
  199. pa_reqssver    equ    2        ;  Required version of ss.library
  200. pa_firsttag    equ    4        ;  First tag
  201.  
  202. ; Tag types
  203.  
  204. sstag_old    equ    $0000        ; Old SSLib tags
  205. sstag_ext    equ    $4000        ; Extended tags
  206. sstag_std    equ    $8000        ; Standard tags (two longwords)
  207. sstag_new    equ    $C000        ; New tags (ignored when not understood)
  208.  
  209. sstag_nopar    equ    $0000        ; No parameters or special processing
  210. sstag_word    equ    $1000        ; One word
  211. sstag_long    equ    $2000        ; One longword
  212. sstag_string    equ    $3000        ; One string
  213.  
  214. ; Tags
  215. ; (The tag array = { DC.W TagType [ Parameters ] EVEN } ... )
  216. ; RelPtr = APTR - *
  217.  
  218. sst_finish    equ    0    ; End of the TagList
  219. sst_wbconsole    equ    1    ; Create console if started from WB
  220. sst_template    equ    2    ; Template: STR,A5-offset-to-store-args-on
  221. sst_usertrk    equ    3    ; Define UserTrkTypes: WORD RelPtr
  222. sst_extrahelp    equ    4    ; Extra help string: STR
  223. sst_exitrout    equ    5    ; Exit routine: WORD RelPTR
  224. sst_usererr    equ    6    ; Err routine: WORD RelPTR
  225. sst_nowbstart    equ    7    ; Forbid start from workbench
  226. sst_library    equ    8    ; Open library: STR,WORD MinVer,WORD BaseOffset
  227. sst_trylib    equ    9    ; Try to open library (don't fail) - same as ^
  228. sst_nowbargs    equ    10    ; Ignore WB arguments
  229. sst_noprogname    equ    11    ; Don't print program's name in error messages
  230. sst_cputype    equ    12    ; Required CPU type: BYTE Min,Max
  231.             ; 0..4=68000..68040,-1=NoMax
  232. sst_fputype    equ    13    ; Required FPU type: BYTE Min,-1 (max not supported)
  233.             ; 0=none,1=68881,2=68882,3=68040
  234. sst_sysver    equ    14    ; Required kickstart version: BYTE Min,Max(-1=NoMax)
  235. sst_errorreq    equ    15    ; Forces using of requesters for error messages
  236. sst_nostderr    equ    16    ; stderr=stdout (don't open '*')
  237. sst_errors    equ    17    ; Disable automatic error processing:
  238.             ; (default is to write an error message and exit)
  239.             ; LONG ErrBitMap
  240. sst_wbconname    equ    18    ; WB Console specified by name: STR FileName
  241. sst_envvar    equ    19    ; ENV variable: STR
  242. sst_last    equ    20
  243.  
  244. sst_poolsize    equ    $E000    ; Set size of task private mempool: LONG size
  245. PMP_DEFSIZE    equ    512    ; Default value
  246. sst_poolthresh    equ    $E001    ; Set threshold of priv. mempool: LONG threshold
  247. PMP_DEFTHRESH    equ    373    ; Default value
  248. sst_noiconarg    equ    $C002    ; Don't use names of multiselected icons as arg #1
  249.  
  250. ; Error numbers - normal errors - can be disabled (-> 0 is returned as a result)
  251.  
  252. err_memory    equ    0    ; Insufficient memory
  253. err_openread    equ    1    ; Unable to open file %s for reading
  254. err_openwrite    equ    2    ; Unable to open file %s for writing
  255. err_lock    equ    3    ; Unable to lock %s
  256. err_signal    equ    4    ; Unable to get free signal
  257. err_device    equ    5    ; Unable to open device %s
  258. err_read    equ    6    ; Error reading file %s
  259. err_write    equ    7    ; Error writing file %s
  260. err_break    equ    8    ; Break
  261. err_port    equ    9    ; Unable to get message port
  262. err_iorq    equ    10    ; Unable to get iorq
  263. err_library    equ    11    ; You need %s.library
  264. err_library2    equ    12    ; You need version %ld of %s.library
  265. err_number    equ    13    ; Bad number
  266. err_iofail    equ    14    ; %s: %s error #%ld (ChkDoIO failed, unknown error)
  267. err_iofail2    equ    15    ; %s: %s (ChkDoIO failed, error found in table)
  268. err_interact    equ    16    ; File %s is interactive and cannot be loaded
  269. err_stack    equ    17    ; Stack overflow. Turning off ignored.
  270. err_maximal    equ    18
  271.  
  272. ; Alerts
  273.  
  274. AN_SSLIB    equ    $35530000
  275. AN_ExitCrash    equ    $35530001    ; ExitCleanup can't locate caller
  276. AN_BadTag    equ    $35530002    ; Invalid tag ID encountered
  277. AN_BadTracker    equ    $35530003    ; Invalid tracker ID in FreeObject()
  278. AN_BadUsrTrkr    equ    $35530004    ; Bad user tracker ID in FreeObject()
  279. AN_BadExtTrkr    equ    $35530005    ; Bad extension tracker ID, FreeObject()
  280. AN_FreeObject    equ    $35530006    ; Freeing already freed tracker
  281. AN_DupSlave    equ    $35530007    ; Slave of two masters (TrackSlave())
  282. AN_PoolFree    equ    $35530008    ; MemList not found
  283. AN_AllocZero    equ    $35530009    ; Attempt to allocate 0 bytes of memory
  284.  
  285. ; Resource list, must be allocated by CreateResList, freed by FreeResList
  286.  
  287. resl_node    equ    0        ;  Standard MinNode
  288. resl_list    equ    8        ;  Standard MinList of resource trackers
  289. resl_sizeof    equ    20
  290.  
  291. ; Resource tracker, must be allocated and freed using SSLib
  292.  
  293. trk_node    equ    0        ;  Standard MinNode
  294. trk_type    equ    8        ;R Tracker type (byte)
  295. trk_flags    equ    9        ;R Tracker flags (byte)
  296. trk_size    equ    10        ;R Size of tracker node (word)
  297. trk_chain    equ    12        ;R Pointer to next slave in chain
  298. trk_data    equ    16        ;  First data longword
  299. trk_ext    equ    20        ;  Second data longword
  300. trk_sizeof    equ    24
  301.  
  302. ; Tracker flags
  303.  
  304. trf_master    equ    0        ;P Is a master tracker
  305. trf_slave    equ    1        ;P Is a slave tracker
  306.  
  307. ; UserTrkTypes structure
  308.  
  309. utt_nr    equ    0        ;  Number of user tracker types
  310. utt_flags    equ    1        ;  Reserved for future use
  311. utt_addrs    equ    2        ;  Array of RelPtrs to freeing routines
  312.                 ;  Routines called with: A0=tracker
  313.                 ;  A2=pointer to trk_data in the tracker
  314.  
  315. ; Standard tracker types
  316.  
  317. trt_null    equ    0        ;  Do nothing - you can use it freely
  318. trt_routine    equ    1        ;  Call routine (trk_data=routine)
  319. trt_memory    equ    2        ;  Free memory (address,length)
  320. trt_file    equ    3        ;  Close file (handle,name)
  321. trt_lock    equ    4        ;  Unlock lock (lock,name)
  322. trt_port    equ    5        ;  Remove port (port)
  323. trt_iorq    equ    6        ;  Remove IoRequest (iorq,port tracker)
  324. trt_signal    equ    7        ;  Free signal (signal)
  325. trt_device    equ    8        ;  Close device (iorq,-,errtable)
  326. trt_library    equ    9        ;  Close library (libbase)
  327. trt_dosobj    equ    10        ;  Free dos object (object,type)
  328. trt_diskobj    equ    11        ;P FreeDiskObject() (used by WB startup)
  329. trt_mempool    equ    12        ;P Free memory pool
  330. trt_args    equ    13        ;P Free argument buffer
  331. trt_linpool    equ    14        ;P Free linear memory pool
  332. trt_max    equ    15        ;  Number of standard tracker types
  333.  
  334. trt_free    equ    $3F        ;P Freed tracker (Freeing causes alert)
  335. trt_ext    equ    $40        ;P First tracker type reserved for SSLib
  336.                 ;P extensions
  337. trt_extmax    equ    $7F        ;P Last type for extensions
  338. trt_user    equ    $80        ;  First tracker type available to user
  339. trt_usermax    equ    $FF        ;  Last tracker type available to user
  340.  
  341. ; Special open modes
  342.  
  343. OPEN_NEW    equ    -1        ;  Create new file (MODE_NEWFILE)
  344. OPEN_OLD    equ    -2        ;  Open old file R/W (MODE_OLDFILE)
  345. OPEN_APPEND    equ    -3        ;  MODE_READWRITE and seek to end
  346.  
  347. ; Hashed tree - internal structure stored in HashTree tracker
  348.  
  349. htr_numbr    equ    trk_sizeof+0    ;P Number of branches - 1
  350. htr_flags    equ    trk_sizeof+4    ;P Flags
  351. htr_pad    equ    trk_sizeof+5    ;P Unused
  352. htr_partsize    equ    trk_sizeof+6    ;P Size of each tree part
  353. htr_firstpart    equ    trk_sizeof+10    ;P Pointer to first tree part
  354. htr_partfree    equ    trk_sizeof+14    ;P Free bytes in first tree part
  355. htr_hashtable    equ    trk_sizeof+18    ;P Pointer to hash table
  356. htr_sizeof    equ    22
  357.  
  358. partsize_def    equ    4096        ;P Default part size
  359.  
  360. ; Hashed tree flags
  361.  
  362. htf_nocase    equ    0        ;  Case insensitive
  363. htb_nocase    equ    1
  364.  
  365. ; Hashed tree part
  366.  
  367. hpa_nextpart    equ    0        ;P Pointer to next part
  368. hpa_partdata    equ    4        ;P Data stored in this part
  369.  
  370. ; Hashed tree item
  371.  
  372. hit_next    equ    0        ;P Next entry with the same hash value
  373. hit_udsize    equ    4        ;R Size of user data
  374. hit_ud    equ    6        ;  User data followed by key string
  375.  
  376. ; Memory pool - internal structure stored in MemPool tracker
  377.  
  378. mpt_quantum    equ    trk_data    ;P Memory quantum
  379. mpt_thresh    equ    trk_ext        ;P Allocation threshold
  380. mpt_flags    equ    trk_sizeof+0    ;P Memory flags
  381. mpt_fraglist    equ    trk_sizeof+4    ;P List of memory fragments
  382. mpt_sizeof    equ    trk_sizeof+16
  383.  
  384. ; Memory fragment header
  385.  
  386. mfr_node    equ    0        ;P MemHeader of this fragment
  387. mfr_size    equ    MH_SIZE        ;P Size of memory fragment header
  388.  
  389. ; Linear memory pool - stored in LinPool tracker
  390.  
  391. lmp_quantum    equ    trk_data    ;P Memory quantum
  392. lmp_flags    equ    trk_ext        ;P Memory flags
  393. lmp_first    equ    trk_sizeof+0    ;P First fragment
  394. lmp_free    equ    trk_sizeof+4    ;P First free zone
  395. lmp_last    equ    trk_sizeof+8    ;P End of this free zone
  396. lmp_sizeof    equ    trk_sizeof+12
  397.  
  398. ; ParseArgs flags
  399.  
  400. pafb_nofail    equ    0        ;  Return 0 on errors (default: msg+exit)
  401. pafb_noclear    equ    1        ;  Don't clear argument field (leave defaults)
  402. pafb_ignorea    equ    2        ;  Don't check presence of /A arguments
  403.  
  404. pafm_nofail    equ    1
  405. pafm_noclear    equ    2
  406. pafm_ignorea    equ    4
  407.  
  408. ; Extension node (private)
  409.  
  410. exn_number    equ    0        ;P extension number (0-3)
  411. exn_rfu    equ    1        ;P should be 0
  412. exn_trktypes    equ    2        ;P pointer to UserTrk-style array
  413. exn_sizeof    equ    6
  414.