home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / os20 / util / ssl / ss.i < prev    next >
Encoding:
Text File  |  1993-12-21  |  13.1 KB  |  392 lines

  1. ; The Special Support Library
  2. ; (c) 1993 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    3
  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.  
  85. ; System Variables
  86.  
  87. _SysVarCnt    set    0
  88. SysVar    macro    *size,name
  89. _SysVarCnt    set    _SysVarCnt-\1
  90. \2    equ    _SysVarCnt
  91.     endm
  92.  
  93.     SysVar    0,ssbase    ;R Library base
  94.     SysVar    4,sv_basesize    ;P Size of system vars + user data above
  95.     SysVar    4,sv_wbmsg    ;R Workbench message (0=CLI)
  96.     SysVar    4,sv_thistask    ;R Pointer to task node
  97.     SysVar    4,sv_errsp    ;R Stack pointer to program return address
  98.     SysVar    4,sv_checkbase    ;P Base checkpoint - (0-BaseAddress)
  99.     SysVar    4,dosbase    ;R Dos base
  100.     SysVar    4,intuitionbase    ;R Intuition base
  101.     SysVar    4,gfxbase    ;R Graphics base
  102.     SysVar    4,gadtoolsbase    ;R Gadtools base
  103.     SysVar    4,utilitybase    ;R Utility base
  104.     SysVar    4,stdin        ;  Standard input stream
  105.     SysVar    4,stdout    ;  Standard output stream
  106.     SysVar    4,stderr    ;  Standard error stream
  107.     SysVar    4,sv_errsw    ;  Error switches (bitmap)
  108.     SysVar    4,sv_progname    ;  Program name
  109.     SysVar    4,sv_errrc    ;  ReturnCode for error, default=10
  110.  
  111.     SysVar    12,sv_reslistlist    ;  A list of resource lists
  112.     SysVar    8,sv_callernode    ;P Node of CallerList
  113.     SysVar    4,sv_rc        ;  ReturnCode
  114.  
  115.     SysVar    4,sv_wbcon    ;P Workbench console
  116.     SysVar    4,sv_template    ;P Program template
  117.     SysVar    4,sv_extrahelp    ;P Program extra help string
  118.     SysVar    4,sv_envvar    ;R Environment variable name
  119.     SysVar    4,sv_exitrout    ;  Subroutine called before res.freeing
  120.                 ;  (this pointer is cleared before calling)
  121.     SysVar    4,sv_msgrout    ;  Error message routine
  122.                 ;  (this pointer is cleared before calling)
  123.     SysVar    4,sv_oldexcept    ;P Pointer to original exception routine
  124.     SysVar    4,sv_flags    ;  Various flags (see below)
  125.     SysVar    4,sv_argdest    ;P Address to store arguments at
  126.     SysVar    4,sv_iconbase    ;P Pointer to IconBase
  127.     SysVar    4,sv_usertrk    ;  Pointer to UserTrkTypes structure or 0
  128.  
  129.     SysVar    24,sv_mempool    ;P Task memory pool
  130.  
  131.     SysVar    0,sv_sizeof    ; Size of system variables block
  132.  
  133. ; Flags in sv_flags
  134.  
  135. svfb_nowbargs    equ    0        ;  Ignore WB arguments
  136. svfb_noprogname    equ    1        ;  Don't print program's name in CLI error msgs
  137. svfb_errorreq    equ    2        ;  Always use requesters for error msgs
  138. svfb_intrap    equ    3        ;P Running trap handler
  139. svfb_dontfree    equ    7        ;P Don't free memory from task mempool
  140.  
  141. svfm_nowbargs    equ    1
  142. svfm_noprogname    equ    2
  143. svfm_errorreq    equ    4
  144. svfm_intrap    equ    8
  145. svfm_dontfree    equ    128
  146.  
  147. ; SS.library Base
  148.  
  149.     ifnd    sizeof_Library
  150. sizeof_Library    equ    $0022
  151.     endc
  152. _LibCnt    set    sizeof_Library
  153. LibVar    macro    *size,name
  154. ssb_\2    equ    _LibCnt
  155. _LibCnt    set    _LibCnt+\1
  156.     endm
  157.  
  158.     LibVar    4,seglist    ;P SegList
  159.     LibVar    2,ksversion    ;R Kickstart version
  160.     LibVar    1,flags        ;  Some flags (see below)
  161.     LibVar    1,pad        ;P Not used yet
  162.     LibVar    4,dosbase    ;R DosBase
  163.     LibVar    4,intuibase    ;R IntuitionBase
  164.     LibVar    4,gfxbase    ;R GraphicsBase
  165.     LibVar    4,gadtoolsbase    ;R GadtoolsBase
  166.     LibVar    4,utilitybase    ;R UtilityBase
  167.     LibVar    12,callerlist    ;P A list of callers -used for crash recovery
  168.     LibVar    1,cputype    ;R CPU type (see tags for IDs)
  169.     LibVar    1,fputype    ;R FPU type ( --    ""    -- )
  170.     LibVar    16,extlist    ;P SS Extensions
  171.     LibVar    0,sizeof
  172.  
  173. ; Flags in ssb_flags
  174.  
  175. SSB_allow30    equ    0        ;R KS 3.0 services can be used
  176.  
  177. ; Startup structure
  178.  
  179. pa_varsize    equ    0        ;  Size of user's variables, incl. ssbase
  180. pa_reqssver    equ    2        ;  Required version of ss.library
  181. pa_firsttag    equ    4        ;  First tag
  182.  
  183. ; Tag types
  184.  
  185. sstag_old    equ    $0000        ; Old SSLib tags
  186. sstag_ext    equ    $4000        ; Extended tags
  187. sstag_std    equ    $8000        ; Standard tags (two longwords)
  188. sstag_new    equ    $C000        ; New tags (ignored when not understood)
  189.  
  190. sstag_nopar    equ    $0000        ; No parameters or special processing
  191. sstag_word    equ    $1000        ; One word
  192. sstag_long    equ    $2000        ; One longword
  193. sstag_string    equ    $3000        ; One string
  194.  
  195. ; Tags
  196. ; (The tag array = { DC.W TagType [ Parameters ] EVEN } ... )
  197. ; RelPtr = APTR - *
  198.  
  199. sst_finish    equ    0    ; End of the TagList
  200. sst_wbconsole    equ    1    ; Create console if started from WB
  201. sst_template    equ    2    ; Template: STR,A5-offset-to-store-args-on
  202. sst_usertrk    equ    3    ; Define UserTrkTypes: WORD RelPtr
  203. sst_extrahelp    equ    4    ; Extra help string: STR
  204. sst_exitrout    equ    5    ; Exit routine: WORD RelPTR
  205. sst_usererr    equ    6    ; Err routine: WORD RelPTR
  206. sst_nowbstart    equ    7    ; Forbid start from workbench
  207. sst_library    equ    8    ; Open library: STR,WORD MinVer,WORD BaseOffset
  208. sst_trylib    equ    9    ; Try to open library (don't fail) - same as ^
  209. sst_nowbargs    equ    10    ; Ignore WB arguments
  210. sst_noprogname    equ    11    ; Don't print program's name in error messages
  211. sst_cputype    equ    12    ; Required CPU type: BYTE Min,Max
  212.             ; 0..4=68000..68040,-1=NoMax
  213. sst_fputype    equ    13    ; Required FPU type: BYTE Min,-1 (max not supported)
  214.             ; 0=none,1=68881,2=68882,3=68040
  215. sst_sysver    equ    14    ; Required kickstart version: BYTE Min,Max(-1=NoMax)
  216. sst_errorreq    equ    15    ; Forces using of requesters for error messages
  217. sst_RESERVED004    equ    16    ; Not used
  218. sst_errors    equ    17    ; Disable automatic error processing:
  219.             ; (default is to write an error message and exit)
  220.             ; LONG ErrBitMap
  221. sst_wbconname    equ    18    ; WB Console specified by name: STR FileName
  222. sst_envvar    equ    19    ; ENV variable: STR
  223. sst_last    equ    20
  224.  
  225. sst_poolsize    equ    $E000    ; Set size of task private mempool: LONG size
  226. PMP_DEFSIZE    equ    512    ; Default value
  227. sst_poolthresh    equ    $E001    ; Set threshold of priv. mempool: LONG threshold
  228. PMP_DEFTHRESH    equ    373    ; Default value
  229.  
  230. ; Error numbers - normal errors - can be disabled (-> 0 is returned as a result)
  231.  
  232. err_memory    equ    0    ; Insufficient memory
  233. err_openread    equ    1    ; Unable to open file %s for reading
  234. err_openwrite    equ    2    ; Unable to open file %s for writing
  235. err_lock    equ    3    ; Unable to lock %s
  236. err_signal    equ    4    ; Unable to get free signal
  237. err_device    equ    5    ; Unable to open device %s
  238. err_read    equ    6    ; Error reading file %s
  239. err_write    equ    7    ; Error writing file %s
  240. err_break    equ    8    ; Break
  241. err_port    equ    9    ; Unable to get message port
  242. err_iorq    equ    10    ; Unable to get iorq
  243. err_library    equ    11    ; You need %s.library
  244. err_library2    equ    12    ; You need version %ld of %s.library
  245. err_number    equ    13    ; Bad number
  246. err_iofail    equ    14    ; %s: %s error #%ld (ChkDoIO failed, unknown error)
  247. err_iofail2    equ    15    ; %s: %s (ChkDoIO failed, error found in table)
  248. err_interact    equ    16    ; File %s is interactive and cannot be loaded
  249. err_maximal    equ    17
  250.  
  251. ; Alerts
  252.  
  253. AN_SSLIB    equ    $35530000
  254. AN_ExitCrash    equ    $35530001    ; ExitCleanup can't locate caller
  255. AN_BadTag    equ    $35530002    ; Invalid tag ID encountered
  256. AN_BadTracker    equ    $35530003    ; Invalid tracker ID in FreeObject()
  257. AN_BadUsrTrkr    equ    $35530004    ; Bad user tracker ID in FreeObject()
  258. AN_BadExtTrkr    equ    $35530005    ; Bad extension tracker ID, FreeObject()
  259. AN_FreeObject    equ    $35530006    ; Freeing already freed tracker
  260. AN_DupSlave    equ    $35530007    ; Slave of two masters (TrackSlave())
  261. AN_PoolFree    equ    $35530008    ; MemList not found
  262. AN_AllocZero    equ    $35530009    ; Attempt to allocate 0 bytes of memory
  263.  
  264. ; Resource list, must be allocated using CreateResList, freed using FreeResList
  265.  
  266. resl_node    equ    0        ;  Standard MinNode
  267. resl_list    equ    8        ;  Standard MinList of resource trackers
  268. resl_sizeof    equ    20
  269.  
  270. ; Resource tracker, must be allocated and freed using SSLib
  271.  
  272. trk_node    equ    0        ;R Standard MinNode
  273. trk_type    equ    8        ;R Tracker type (byte)
  274. trk_flags    equ    9        ;R Tracker flags (byte)
  275. trk_size    equ    10        ;R Size of tracker node (word)
  276. trk_chain    equ    12        ;R Pointer to next slave in chain
  277. trk_data    equ    16        ;  First data longword
  278. trk_ext    equ    20        ;  Second data longword
  279. trk_sizeof    equ    24
  280.  
  281. ; Tracker flags
  282.  
  283. trf_master    equ    0        ;P Is a master tracker
  284. trf_slave    equ    1        ;P Is a slave tracker
  285.  
  286. ; UserTrkTypes structure
  287.  
  288. utt_nr    equ    0        ;  Number of user tracker types
  289. utt_flags    equ    1        ;  Reserved for future use
  290. utt_addrs    equ    2        ;  Array of RelPtrs to freeing routines
  291.                 ;  Routines called with: A0=tracker
  292.                 ;  A2=pointer to trk_data in the tracker
  293.  
  294. ; Standard tracker types
  295.  
  296. trt_null    equ    0        ;  Do nothing - you can use it freely
  297. trt_routine    equ    1        ;  Call routine, trk_data=routine
  298. trt_memory    equ    2        ;P Free memory
  299. trt_file    equ    3        ;P Close file
  300. trt_lock    equ    4        ;P Unlock lock
  301. trt_port    equ    5        ;P Remove port
  302. trt_iorq    equ    6        ;P Remove IoRequest
  303. trt_signal    equ    7        ;P Free signal
  304. trt_device    equ    8        ;P Close device
  305. trt_library    equ    9        ;P Close library
  306. trt_dosobj    equ    10        ;P Free dos object
  307. trt_diskobj    equ    11        ;P FreeDiskObject() (used by WB startup)
  308. trt_mempool    equ    12        ;P Free memory pool
  309. trt_args    equ    13        ;P Free argument buffer
  310. trt_linpool    equ    14        ;P Free linear memory pool
  311. trt_max    equ    15        ;  Number of standard tracker types
  312.  
  313. trt_free    equ    $3F        ;P Freed tracker (Freeing causes alert)
  314. trt_ext    equ    $40        ;P First tracker type reserved for SSLib
  315.                 ;P extensions
  316. trt_extmax    equ    $7F        ;P Last type for extensions
  317. trt_user    equ    $80        ;  First tracker type available to user
  318. trt_usermax    equ    $FF        ;  Last tracker type available to user
  319.  
  320. ; Special open modes
  321.  
  322. OPEN_NEW    equ    -1        ;  Create new file (MODE_NEWFILE)
  323. OPEN_OLD    equ    -2        ;  Open old file R/W (MODE_OLDFILE)
  324. OPEN_APPEND    equ    -3        ;  MODE_OLDFILE and seek to end
  325.  
  326. ; Hashed tree - internal structure stored in HashTree tracker
  327.  
  328. htr_numbr    equ    trk_sizeof+0    ;P Number of branches - 1
  329. htr_flags    equ    trk_sizeof+4    ;P Flags
  330. htr_pad    equ    trk_sizeof+5    ;P Unused
  331. htr_partsize    equ    trk_sizeof+6    ;P Size of each tree part
  332. htr_firstpart    equ    trk_sizeof+10    ;P Pointer to first tree part
  333. htr_partfree    equ    trk_sizeof+14    ;P Free bytes in first tree part
  334. htr_hashtable    equ    trk_sizeof+18    ;P Pointer to hash table
  335. htr_sizeof    equ    22
  336.  
  337. partsize_def    equ    4096        ;P Default part size
  338.  
  339. ; Hashed tree flags
  340.  
  341. htf_nocase    equ    0        ;P Case insensitive
  342.  
  343. ; Hashed tree part
  344.  
  345. hpa_nextpart    equ    0        ;P Pointer to next part
  346. hpa_partdata    equ    4        ;P Data stored in this part
  347.  
  348. ; Hashed tree item
  349.  
  350. hit_next    equ    0        ;P Next entry with the same hash value
  351. hit_udsize    equ    4        ;R Size of user data
  352. hit_ud    equ    6        ;  User data followed by key string
  353.  
  354. ; Memory pool - internal structure stored in MemPool tracker
  355.  
  356. mpt_quantum    equ    trk_data    ;P Memory quantum
  357. mpt_thresh    equ    trk_ext        ;P Allocation threshold
  358. mpt_flags    equ    trk_sizeof+0    ;P Memory flags
  359. mpt_fraglist    equ    trk_sizeof+4    ;P List of memory fragments
  360. mpt_sizeof    equ    trk_sizeof+16
  361.  
  362. ; Memory fragment header
  363.  
  364. mfr_node    equ    0        ;P MemHeader of this fragment
  365. mfr_size    equ    MH_SIZE        ;P Size of memory fragment header
  366.  
  367. ; Linear memory pool - stored in LinPool tracker
  368.  
  369. lmp_quantum    equ    trk_data    ;P Memory quantum
  370. lmp_flags    equ    trk_ext        ;P Memory flags
  371. lmp_first    equ    trk_sizeof+0    ;P First fragment
  372. lmp_free    equ    trk_sizeof+4    ;P First free zone
  373. lmp_last    equ    trk_sizeof+8    ;P End of this free zone
  374. lmp_sizeof    equ    trk_sizeof+12
  375.  
  376. ; ParseArgs flags
  377.  
  378. pafb_nofail    equ    0        ;  Return 0 on errors (default: msg+exit)
  379. pafb_noclear    equ    1        ;  Don't clear argument field (leave defaults)
  380. pafb_ignorea    equ    2        ;  Don't check presence of /A arguments
  381.  
  382. pafm_nofail    equ    1
  383. pafm_noclear    equ    2
  384. pafm_ignorea    equ    4
  385.  
  386. ; Extension node (private)
  387.  
  388. exn_number    equ    0        ;P extension number (0-3)
  389. exn_rfu    equ    1        ;P should be 0
  390. exn_trktypes    equ    2        ;P pointer to UserTrk-style array
  391. exn_sizeof    equ    6
  392.