home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / util / libs / sslib / ss.i < prev    next >
Text File  |  1994-12-12  |  18KB  |  488 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    5
  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. ; Version 5: Buffered I/O
  96.     Func    TrackOpenBuf    ; (A0=name,D0=openmode,D1=bufsize)
  97.     Func    TrackOpenBufFH    ; (A0=name,D0=openmode,D1=bufsize,D2=fh)
  98.     Func    TrackBufHandle    ; (A0=name,D0=openmode,D1=bufsize)
  99.     Func    ChkTryRead    ; (A0=tracker,A1=buffer,D0=size)
  100.     Func    BGetByte    ; (A2=tracker)
  101.     Func    BGetWord    ; (A2=tracker)
  102.     Func    BGetLong    ; (A2=tracker)
  103.     Func    BPutByte    ; (D0=char,A3=tracker)
  104.     Func    BPutWord    ; (D0=char,A3=tracker)
  105.     Func    BPutLong    ; (D0=char,A3=tracker)
  106.     Func    BPutChar    ; (D0=char,A3=tracker)
  107.     Func    BPutString    ; (A0=string,A3=tracker)
  108.     Func    BGetString    ; (A0=buf,D0=size,A2=tracker)
  109.     Func    BPuts        ; (A0=string,A3=tracker)
  110.     Func    BPutsNL        ; (A0=string,A3=tracker)
  111.     Func    BGets        ; (A0=buf,D0=size,A2=tracker)
  112.     Func    BPrintf        ; (A0=string,A1=data,A3=tracker)
  113.     Func    BRead        ; (A0=tracker,A2=buffer,D0=size)
  114.     Func    BWrite        ; (A0=tracker,A3=buffer,D0=size)
  115.     Func    BSeek        ; (A2=tracker,D0=offset)
  116.     Func    BRelSeek    ; (A2=tracker,D0=offset)
  117.     Func    BTell        ; (A2=tracker)
  118.     Func    BUnGetc        ; (D0=char,A2=tracker)
  119.     Func    BFlush        ; (A2=tracker)
  120. ; And some additional services:
  121.     Func    IPAlloc        ; (D0=size)
  122.     Func    IPFree        ; (A1=address,D0=size)
  123.  
  124. ; System Variables
  125.  
  126. _SysVarCnt    set    0
  127. SysVar    macro    *size,name
  128. _SysVarCnt    set    _SysVarCnt-\1
  129. \2    equ    _SysVarCnt
  130.     endm
  131.  
  132.     SysVar    0,ssbase    ;R Library base
  133.     SysVar    4,sv_basesize    ;P Size of system vars + user data above
  134.     SysVar    4,sv_wbmsg    ;R Workbench message (0=CLI)
  135.     SysVar    4,sv_thistask    ;R Pointer to task node
  136.     SysVar    4,sv_errsp    ;R Stack pointer to program return address
  137.     SysVar    4,sv_checkbase    ;P Base checkpoint - (0-BaseAddress)
  138.     SysVar    4,dosbase    ;R Dos base
  139.     SysVar    4,intuitionbase    ;R Intuition base
  140.     SysVar    4,gfxbase    ;R Graphics base
  141.     SysVar    4,gadtoolsbase    ;R Gadtools base
  142.     SysVar    4,utilitybase    ;R Utility base
  143.     SysVar    4,stdin        ;  Standard input stream
  144.     SysVar    4,stdout    ;  Standard output stream
  145.     SysVar    4,stderr    ;  Standard error stream
  146.     SysVar    4,sv_errsw    ;  Error switches (bitmap)
  147.     SysVar    4,sv_progname    ;  Program name
  148.     SysVar    4,sv_errrc    ;  ReturnCode for error, default=10
  149.  
  150.     SysVar    12,sv_reslistlist    ;P A list of resource lists
  151.     SysVar    8,sv_callernode    ;P Node of CallerList
  152.     SysVar    4,sv_rc        ;  ReturnCode
  153.  
  154.     SysVar    4,sv_wbcon    ;P Workbench console
  155.     SysVar    4,sv_template    ;P Program template
  156.     SysVar    4,sv_extrahelp    ;P Program extra help string
  157.     SysVar    4,sv_envvar    ;R Environment variable name
  158.     SysVar    4,sv_exitrout    ;  Subroutine called before res.freeing
  159.                 ;  (this pointer is cleared before calling)
  160.     SysVar    4,sv_msgrout    ;  Error message routine
  161.                 ;  (this pointer is cleared before calling)
  162.     SysVar    4,sv_oldexcept    ;P Pointer to original exception routine
  163.     SysVar    4,sv_flags    ;  Various flags (see below)
  164.     SysVar    4,sv_argdest    ;P Address to store arguments at
  165.     SysVar    4,sv_iconbase    ;P Pointer to IconBase
  166.     SysVar    4,sv_usertrk    ;  Pointer to UserTrkTypes structure or 0
  167.     SysVar    24,sv_mempool    ;P Task memory pool
  168.     SysVar    4,sv_lowmem    ;  Routine to be called when out of mem.
  169.     SysVar    4,sv_stklimit    ;  The lowest allowed SP value
  170.     SysVar    4,sv_defstderr    ;P Default stderr or 0
  171.     SysVar    4,sv_memattr    ;  Memory attributes for TrackAllocPub
  172.  
  173.     SysVar    0,sv_sizeof    ; Size of system variables block
  174.  
  175. ; Flags in sv_flags
  176.  
  177. svfb_nowbargs    equ    0        ;  Ignore WB arguments
  178. svfb_noprogname    equ    1        ;  Don't print program's name in CLI error msgs
  179. svfb_errorreq    equ    2        ;  Always use requesters for error msgs
  180. svfb_intrap    equ    3        ;P Running trap handler
  181. svfb_nostderr    equ    4        ;P sst_nostderr specified
  182. svfb_noiconarg    equ    5        ;  Don't pass names of multiselected icons as arg #1
  183. svfb_nocliargs    equ    6        ;  Pass CLI arguments directly w/o processing
  184. svfb_dontfree    equ    7        ;P Don't free memory from task mempool
  185.  
  186. svfm_nowbargs    equ    1
  187. svfm_noprogname    equ    2
  188. svfm_errorreq    equ    4
  189. svfm_intrap    equ    8
  190. svfm_nostderr    equ    16
  191. svfm_noiconarg    equ    32
  192. svfm_nocliargs    equ    64
  193. svfm_dontfree    equ    128
  194.  
  195. ; SS.library Base
  196.  
  197. _LibCnt    set    LIB_SIZE
  198. LibVar    macro    *size,name
  199. ssb_\2    equ    _LibCnt
  200. _LibCnt    set    _LibCnt+\1
  201.     endm
  202.  
  203.     LibVar    4,seglist    ;P SegList
  204.     LibVar    2,ksversion    ;R Kickstart version
  205.     LibVar    1,flags        ;  Some flags (see below)
  206.     LibVar    1,pad        ;P Not used yet
  207.     LibVar    4,dosbase    ;R DosBase
  208.     LibVar    4,intuibase    ;R IntuitionBase
  209.     LibVar    4,gfxbase    ;R GraphicsBase
  210.     LibVar    4,gadtoolsbase    ;R GadtoolsBase
  211.     LibVar    4,utilitybase    ;R UtilityBase
  212.     LibVar    12,callerlist    ;P A list of callers -used for crash recovery
  213.     LibVar    1,cputype    ;R CPU type (see tags for IDs)
  214.     LibVar    1,fputype    ;R FPU type ( --    ""    -- )
  215.     LibVar    16,extlist    ;P SS Extensions
  216.     LibVar    2,opencnt    ;P Private OpenCount
  217.     LibVar    SS_SIZE,callis    ;P Callerlist semaphore
  218.     LibVar    0,sizeof
  219.  
  220. ; Flags in ssb_flags
  221.  
  222. SSB_allow30    equ    0        ;R KS 3.0 services can be used
  223.  
  224. ; Startup structure
  225.  
  226. pa_varsize    equ    0        ;  Size of user's variables, incl. ssbase
  227. pa_reqssver    equ    2        ;  Required version of ss.library
  228. pa_firsttag    equ    4        ;  First tag
  229.  
  230. ; Tag types
  231.  
  232. sstag_old    equ    $0000        ; Old SSLib tags
  233. sstag_ext    equ    $4000        ; Extended tags
  234. sstag_std    equ    $8000        ; Standard tags (two longwords)
  235. sstag_new    equ    $C000        ; New tags (ignored when not understood)
  236.  
  237. sstag_nopar    equ    $0000        ; No parameters or special processing
  238. sstag_wor