home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / cbm / nduk-v37.lha / V37 / include / rexx / storage.i < prev   
Text File  |  1991-11-27  |  10KB  |  243 lines

  1.      IFND REXX_STORAGE_I
  2. REXX_STORAGE_I SET    1
  3. **
  4. **    $Filename: rexx/storage.i $
  5. **    $Release: 2.04 Includes, V37.4 $
  6. **    $Revision: 1.8 $
  7. **    $Date: 91/11/08 $
  8. **
  9. **    Include file for REXX data structures and memory/storage management.
  10. **
  11. **    (C) Copyright 1986,1987,1988,1989,1990 William S. Hawes.
  12. **    (C) Copyright 1990-1991 Commodore-Amiga, Inc.
  13. **        All Rights Reserved
  14. **
  15.  
  16.      IFND EXEC_TYPES_I
  17.      INCLUDE "exec/types.i"
  18.      ENDC
  19.  
  20.      IFND EXEC_NODES_I
  21.      INCLUDE "exec/nodes.i"
  22.      ENDC
  23.  
  24.      IFND EXEC_LISTS_I
  25.      INCLUDE "exec/lists.i"
  26.      ENDC
  27.  
  28.      IFND EXEC_PORTS_I
  29.      INCLUDE "exec/ports.i"
  30.      ENDC
  31.  
  32.      IFND EXEC_LIBRARIES_I
  33.      INCLUDE "exec/libraries.i"
  34.      ENDC
  35.  
  36. * The NexxStr structure is used to maintain the internal strings in REXX.
  37. * It includes the buffer area for the string and associated attributes.
  38. * This is actually a variable-length structure; it is allocated for a
  39. * specific length string, and the length is never modified thereafter
  40. * (since it's used for recycling).
  41.  
  42.          STRUCTURE NexxStr,0
  43.          LONG     ns_Ivalue            ; integer value
  44.          UWORD    ns_Length            ; length in bytes (excl null byte)
  45.          UBYTE    ns_Flags             ; attribute flags
  46.          UBYTE    ns_Hash              ; sum-of-characters hash code
  47.          STRUCT   ns_Buff,8            ; buffer area for strings
  48.          LABEL    NSMINSIZE            ; 16 bytes (minimum)
  49.  
  50. NXADDLEN EQU      ns_Buff+1            ; structure offset plus null byte
  51. IVALUE   EQU      ns_Ivalue            ; integer value
  52.  
  53. * String attribute flag bit definitions
  54. NSB_KEEP    EQU   0                    ; permanent string? (in Symbol Table)
  55. NSB_STRING  EQU   1                    ; string form valid?
  56. NSB_NOTNUM  EQU   2                    ; non-numeric?
  57. NSB_NUMBER  EQU   3                    ; a valid number?
  58. NSB_BINARY  EQU   4                    ; integer value saved?
  59. NSB_FLOAT   EQU   5                    ; floating point format?
  60. NSB_EXT     EQU   6                    ; an external string?
  61. NSB_SOURCE  EQU   7                    ; part of the program source?
  62.  
  63. * The flag form of the string attributes
  64. NSF_KEEP    EQU   1<<NSB_KEEP
  65. NSF_STRING  EQU   1<<NSB_STRING
  66. NSF_NOTNUM  EQU   1<<NSB_NOTNUM
  67. NSF_NUMBER  EQU   1<<NSB_NUMBER
  68. NSF_BINARY  EQU   1<<NSB_BINARY
  69. NSF_FLOAT   EQU   1<<NSB_FLOAT
  70. NSF_EXT     EQU   1<<NSB_EXT
  71. NSF_SOURCE  EQU   1<<NSB_SOURCE
  72.  
  73. * Combinations of flags
  74. NSF_INTNUM  EQU   (NSF_NUMBER!NSF_BINARY!NSF_STRING)
  75. NSF_DPNUM   EQU   (NSF_NUMBER!NSF_FLOAT)
  76. NSF_ALPHA   EQU   (NSF_NOTNUM!NSF_STRING)
  77. NSF_OWNED   EQU   (NSF_SOURCE!NSF_EXT!NSF_KEEP)
  78. KEEPSTR     EQU   (NSF_STRING!NSF_SOURCE!NSF_NOTNUM)
  79. KEEPNUM     EQU   (NSF_STRING!NSF_SOURCE!NSF_NUMBER!NSF_BINARY)
  80.  
  81. * The RexxArg structure is identical to the NexxStr structure, but
  82. * is allocated from system memory rather than from internal storage.
  83. * This structure is used for passing arguments to external programs.
  84. * It is usually passed as an "argstring", a pointer to the string buffer.
  85.  
  86.          STRUCTURE RexxArg,0
  87.          LONG     ra_Size              ; total allocated length
  88.          UWORD    ra_Length            ; length of string
  89.          UBYTE    ra_Flags             ; attribute flags
  90.          UBYTE    ra_Hash              ; hash code
  91.          STRUCT   ra_Buff,8            ; buffer area
  92.          LABEL    RexxArg_SIZEOF       ; size: 16 bytes
  93. ; Changed to RexxArg_SIZEOF from ra_SIZEOF
  94.  
  95. * The RexxMsg structure is used for all communications with Rexx programs.
  96. * It is an EXEC message with a parameter block appended.
  97.  
  98.          STRUCTURE RexxMsg,MN_SIZE
  99.          APTR     rm_TaskBlock         ; pointer to RexxTask structure
  100.          APTR     rm_LibBase           ; library pointer
  101.          LONG     rm_Action            ; command (action) code
  102.          LONG     rm_Result1           ; return code
  103.          LONG     rm_Result2           ; secondary result
  104.          STRUCT   rm_Args,16*4         ; argument block (ARG0-ARG15)
  105.          APTR     rm_PassPort          ; forwarding port
  106.          APTR     rm_CommAddr          ; host address (port name)
  107.          APTR     rm_FileExt           ; file extension
  108.          LONG     rm_Stdin             ; input stream
  109.          LONG     rm_Stdout            ; output stream
  110.          LONG     rm_avail             ; future expansion
  111.          LABEL    RMSIZEOF             ; size: 128 bytes
  112. ; Ranamed from rm_SIZEOF
  113.  
  114. * Field definitions
  115. ACTION   EQU      rm_Action            ; action code
  116. RESULT1  EQU      rm_Result1           ; primary return/error level
  117. RESULT2  EQU      rm_Result2           ; secondary return/result string
  118. ARG0     EQU      rm_Args              ; start of argblock
  119. ARG1     EQU      rm_Args+4            ; first argument
  120. ARG2     EQU      rm_Args+8            ; second argument
  121.  
  122. MAXRMARG EQU      15                   ; maximum arguments
  123.  
  124. * Command (action) codes for message packets
  125. RXCOMM   EQU      $01000000            ; a command-level invocation
  126. RXFUNC   EQU      $02000000            ; a function call
  127. RXCLOSE  EQU      $03000000            ; close the port
  128. RXQUERY  EQU      $04000000            ; query for information
  129. RXADDFH  EQU      $07000000            ; add a function host
  130. RXADDLIB EQU      $08000000            ; add a function library
  131. RXREMLIB EQU      $09000000            ; remove a function library
  132. RXADDCON EQU      $0A000000            ; add/update a ClipList string
  133. RXREMCON EQU      $0B000000            ; remove a ClipList string
  134. RXTCOPN  EQU      $0C000000            ; open the trace console
  135. RXTCCLS  EQU      $0D000000            ; close the trace console
  136.  
  137. * Command modifier flag bits
  138. RXFB_NOIO   EQU   16                   ; suppress I/O inheritance?
  139. RXFB_RESULT EQU   17                   ; result string expected?
  140. RXFB_STRING EQU   18                   ; program is a "string file"?
  141. RXFB_TOKEN  EQU   19                   ; tokenize the command line?
  142. RXFB_NONRET EQU   20                   ; a "no-return" message?
  143.  
  144. * Modifier flags
  145. RXFF_RESULT EQU   1<<RXFB_RESULT
  146. RXFF_STRING EQU   1<<RXFB_STRING
  147. RXFF_TOKEN  EQU   1<<RXFB_TOKEN
  148. RXFF_NONRET EQU   1<<RXFB_NONRET
  149.  
  150. RXCODEMASK  EQU   $FF000000
  151. RXARGMASK   EQU   $0000000F
  152.  
  153. * The RexxRsrc structure is used to manage global resources.
  154. * The name string for each node is created as a RexxArg structure,
  155. * and the total size of the node is saved in the "rr_Size" field.
  156. * Functions are provided to allocate and release resource nodes.
  157. * If special deletion operations are required, an offset and base can
  158. * be provided in "rr_Func" and "rr_Base", respectively.  This function
  159. * will be called with the base in register A6 and the node in A0.
  160.  
  161.          STRUCTURE RexxRsrc,LN_SIZE
  162.          WORD     rr_Func              ; "auto-delete" offset
  163.          APTR     rr_Base              ; "auto-delete" base
  164.          LONG     rr_Size              ; total size of node
  165.          LONG     rr_Arg1              ; available ...
  166.          LONG     rr_Arg2              ; available ...
  167.          LABEL    RRSIZEOF             ; size: 32 bytes
  168. ; Changed from rr_SIZEOF to RRSIZEOF
  169.  
  170. * Field definitions
  171. RRTYPE   EQU      LN_TYPE              ; node type
  172. RRNAME   EQU      LN_NAME              ; node name (argstring)
  173. RRSIZE   EQU      rr_Size              ; total size of node
  174.  
  175. * Resource node types
  176. RRT_ANY  EQU      0                    ; any node type ...
  177. RRT_LIB  EQU      1                    ; a function library
  178. RRT_PORT EQU      2                    ; a public port
  179. RRT_FILE EQU      3                    ; a file IoBuff
  180. RRT_HOST EQU      4                    ; a function host
  181. RRT_CLIP EQU      5                    ; a Clip List node
  182.  
  183. * The RexxTask structure holds the fields used by REXX to communicate with
  184. * external processes, including the client task.  It includes the global
  185. * data structure (and the base environment).  The structure is passed to
  186. * the newly-created task in its "wake-up" message.
  187.  
  188. GLOBALSZ EQU      200                  ; space for the Global Data structure
  189.  
  190.          STRUCTURE RexxTask,GLOBALSZ   ; global data structure
  191.          STRUCT   rt_MsgPort,MP_SIZE   ; message port
  192.          UBYTE    rt_Flags             ; task flag bits
  193.          BYTE     rt_SigBit            ; signal bit
  194.  
  195.          APTR     rt_ClientID          ; the client's task ID
  196.      APTR      rt