home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / oslib / oslib_1 / OSLib / Computer / h / osfile < prev    next >
Encoding:
Text File  |  1995-08-22  |  37.9 KB  |  1,175 lines

  1. #ifndef osfile_H
  2. #define osfile_H
  3.  
  4. /* C header file for OSFile
  5.  * written by DefMod (Jul 24 1995) on Tue Aug 22 14:42:45 1995
  6.  * Jonathan Coxhead, Acorn Computers Ltd
  7.  */
  8.  
  9. #ifndef types_H
  10. #include "types.h"
  11. #endif
  12.  
  13. #ifndef os_H
  14. #include "os.h"
  15. #endif
  16.  
  17. #ifndef fileswitch_H
  18. #include "fileswitch.h"
  19. #endif
  20.  
  21. /**********************************
  22.  * SWI names and SWI reason codes *
  23.  **********************************/
  24. #undef  OS_File
  25. #define OS_File                                 0x8
  26. #undef  XOS_File
  27. #define XOS_File                                0x20008
  28. #undef  OSFile_SaveStamped
  29. #define OSFile_SaveStamped                      0xA
  30. #undef  OSFile_Write
  31. #define OSFile_Write                            0x1
  32. #undef  OSFile_WriteLoad
  33. #define OSFile_WriteLoad                        0x2
  34. #undef  OSFile_WriteExec
  35. #define OSFile_WriteExec                        0x3
  36. #undef  OSFile_WriteAttr
  37. #define OSFile_WriteAttr                        0x4
  38. #undef  OSFile_Stamp
  39. #define OSFile_Stamp                            0x9
  40. #undef  OSFile_SetType
  41. #define OSFile_SetType                          0x12
  42. #undef  OSFile_Delete
  43. #define OSFile_Delete                           0x6
  44. #undef  OSFile_CreateStamped
  45. #define OSFile_CreateStamped                    0xB
  46. #undef  OSFile_CreateDir
  47. #define OSFile_CreateDir                        0x8
  48. #undef  OSFile_LoadStamped
  49. #define OSFile_LoadStamped                      0xFF
  50. #undef  OSFile_LoadStampedPath
  51. #define OSFile_LoadStampedPath                  0xC
  52. #undef  OSFile_LoadStampedPathVar
  53. #define OSFile_LoadStampedPathVar               0xE
  54. #undef  OSFile_LoadStampedNoPath
  55. #define OSFile_LoadStampedNoPath                0x10
  56. #undef  OSFile_MakeError
  57. #define OSFile_MakeError                        0x13
  58. #undef  OSFile_ReadStamped
  59. #define OSFile_ReadStamped                      0x14
  60. #undef  OSFile_ReadStampedPath
  61. #define OSFile_ReadStampedPath                  0x15
  62. #undef  OSFile_ReadStampedPathVar
  63. #define OSFile_ReadStampedPathVar               0x16
  64. #undef  OSFile_ReadStampedNoPath
  65. #define OSFile_ReadStampedNoPath                0x17
  66. #undef  OSFile_ReadBlockSize
  67. #define OSFile_ReadBlockSize                    0x18
  68. #undef  OSFile_Save
  69. #define OSFile_Save                             0x0
  70. #undef  OSFile_Read
  71. #define OSFile_Read                             0x5
  72. #undef  OSFile_ReadPath
  73. #define OSFile_ReadPath                         0xD
  74. #undef  OSFile_ReadPathVar
  75. #define OSFile_ReadPathVar                      0xF
  76. #undef  OSFile_ReadNoPath
  77. #define OSFile_ReadNoPath                       0x11
  78. #undef  OSFile_Create
  79. #define OSFile_Create                           0x7
  80. #undef  OSFile_Load
  81. #define OSFile_Load                             0xFF
  82. #undef  OSFile_LoadPath
  83. #define OSFile_LoadPath                         0xC
  84. #undef  OSFile_LoadPathVar
  85. #define OSFile_LoadPathVar                      0xE
  86. #undef  OSFile_LoadNoPath
  87. #define OSFile_LoadNoPath                       0x10
  88. #undef  FileV
  89. #define FileV                                   0x8
  90. #undef  UpCallFile_Save
  91. #define UpCallFile_Save                         0x0
  92. #undef  UpCallFile_SetArgs
  93. #define UpCallFile_SetArgs                      0x1
  94. #undef  UpCallFile_SetLoadAddr
  95. #define UpCallFile_SetLoadAddr                  0x2
  96. #undef  UpCallFile_SetExecAddr
  97. #define UpCallFile_SetExecAddr                  0x3
  98. #undef  UpCallFile_SetAttr
  99. #define UpCallFile_SetAttr                      0x4
  100. #undef  UpCallFile_Delete
  101. #define UpCallFile_Delete                       0x6
  102. #undef  UpCallFile_Create
  103. #define UpCallFile_Create                       0x7
  104. #undef  UpCallFile_CreateDir
  105. #define UpCallFile_CreateDir                    0x8
  106.  
  107. /************************
  108.  * Constant definitions *
  109.  ************************/
  110. #define osfile_NOT_FOUND                        ((fileswitch_object_type) 0x0u)
  111. #define osfile_IS_FILE                          ((fileswitch_object_type) 0x1u)
  112. #define osfile_IS_DIR                           ((fileswitch_object_type) 0x2u)
  113. #define osfile_IS_IMAGE                         ((fileswitch_object_type) 0x3u)
  114. #define osfile_FILE_TYPE                        0xFFF00u
  115. #define osfile_FILE_TYPE_SHIFT                  8
  116. #define osfile_TYPE_DRAW                        0xAFFu
  117. #define osfile_TYPE_BBCROM                      0xBBCu
  118. #define osfile_TYPE_DOS_DISC                    0xFC8u
  119. #define osfile_TYPE_DEVICE                      0xFCCu
  120. #define osfile_TYPE_CACHE                       0xFCFu
  121. #define osfile_TYPE_TASK_EXEC                   0xFD6u
  122. #define osfile_TYPE_TASK_OBEY                   0xFD7u
  123. #define osfile_TYPE_DOS                         0xFE4u
  124. #define osfile_TYPE_DESKTOP                     0xFEAu
  125. #define osfile_TYPE_OBEY                        0xFEBu
  126. #define osfile_TYPE_TEMPLATE                    0xFECu
  127. #define osfile_TYPE_PALETTE                     0xFEDu
  128. #define osfile_TYPE_CONFIG                      0xFF2u
  129. #define osfile_TYPE_PRINTOUT                    0xFF4u
  130. #define osfile_TYPE_POSTSCRIPT                  0xFF5u
  131. #define osfile_TYPE_FONT                        0xFF6u
  132. #define osfile_TYPE_BBC_FONT                    0xFF7u
  133. #define osfile_TYPE_ABSOLUTE                    0xFF8u
  134. #define osfile_TYPE_SPRITE                      0xFF9u
  135. #define osfile_TYPE_MODULE                      0xFFAu
  136. #define osfile_TYPE_BASIC                       0xFFBu
  137. #define osfile_TYPE_UTILITY                     0xFFCu
  138. #define osfile_TYPE_DATA                        0xFFDu
  139. #define osfile_TYPE_COMMAND                     0xFFEu
  140. #define osfile_TYPE_TEXT                        0xFFFu
  141. #define osfile_TYPE_DIR                         0x1000u
  142. #define osfile_TYPE_APPLICATION                 0x2000u
  143. #define osfile_TYPE_UNTYPED                     0xFFFFFFFFu
  144.  
  145. /*************************
  146.  * Function declarations *
  147.  *************************/
  148.  
  149. #ifdef __cplusplus
  150.    extern "C" {
  151. #endif
  152.  
  153. /* ------------------------------------------------------------------------
  154.  * Function:      osfile_save_stamped()
  155.  *
  156.  * Description:   Saves a block of memory as a file
  157.  *
  158.  * Input:         file_name - value of R1 on entry
  159.  *                file_type - value of R2 on entry
  160.  *                data - value of R4 on entry
  161.  *                end - value of R5 on entry
  162.  *
  163.  * Other notes:   Calls SWI 0x8 with R0 = 0xA.
  164.  */
  165.  
  166. extern os_error *xosfile_save_stamped (char const *file_name,
  167.       bits file_type,
  168.       byte const *data,
  169.       byte const *end);
  170. extern void osfile_save_stamped (char const *file_name,
  171.       bits file_type,
  172.       byte const *data,
  173.       byte const *end);
  174.  
  175. /* ------------------------------------------------------------------------
  176.  * Function:      osfile_write()
  177.  *
  178.  * Description:   Writes the load and execution addresses and attributes
  179.  *                for an object
  180.  *
  181.  * Input:         file_name - value of R1 on entry
  182.  *                load_addr - value of R2 on entry
  183.  *                exec_addr - value of R3 on entry
  184.  *                attr - value of R5 on entry
  185.  *
  186.  * Other notes:   Calls SWI 0x8 with R0 = 0x1.
  187.  */
  188.  
  189. extern os_error *xosfile_write (char const *file_name,
  190.       bits load_addr,
  191.       bits exec_addr,
  192.       fileswitch_attr attr);
  193. extern void osfile_write (char const *file_name,
  194.       bits load_addr,
  195.       bits exec_addr,
  196.       fileswitch_attr attr);
  197.  
  198. /* ------------------------------------------------------------------------
  199.  * Function:      osfile_write_load()
  200.  *
  201.  * Description:   Writes the load address for an object
  202.  *
  203.  * Input:         file_name - value of R1 on entry
  204.  *                load_addr - value of R2 on entry
  205.  *
  206.  * Other notes:   Calls SWI 0x8 with R0 = 0x2.
  207.  */
  208.  
  209. extern os_error *xosfile_write_load (char const *file_name,
  210.       bits load_addr);
  211. extern void osfile_write_load (char const *file_name,
  212.       bits load_addr);
  213.  
  214. /* ------------------------------------------------------------------------
  215.  * Function:      osfile_write_exec()
  216.  *
  217.  * Description:   Writes the execution address for an object
  218.  *
  219.  * Input:         file_name - value of R1 on entry
  220.  *                exec_addr - value of R3 on entry
  221.  *
  222.  * Other notes:   Calls SWI 0x8 with R0 = 0x3.
  223.  */
  224.  
  225. extern os_error *xosfile_write_exec (char const *file_name,
  226.       bits exec_addr);
  227. extern void osfile_write_exec (char const *file_name,
  228.       bits exec_addr);
  229.  
  230. /* ------------------------------------------------------------------------
  231.  * Function:      osfile_write_attr()
  232.  *
  233.  * Description:   Writes the attributes for an object
  234.  *
  235.  * Input:         file_name - value of R1 on entry
  236.  *                attr - value of R5 on entry
  237.  *
  238.  * Other notes:   Calls SWI 0x8 with R0 = 0x4.
  239.  */
  240.  
  241. extern os_error *xosfile_write_attr (char const *file_name,
  242.       fileswitch_attr attr);
  243. extern void osfile_write_attr (char const *file_name,
  244.       fileswitch_attr attr);
  245.  
  246. /* ------------------------------------------------------------------------
  247.  * Function:      osfile_stamp()
  248.  *
  249.  * Description:   Writes the date stamp for an object
  250.  *
  251.  * Input:         file_name - value of R1 on entry
  252.  *
  253.  * Other notes:   Calls SWI 0x8 with R0 = 0x9.
  254.  */
  255.  
  256. extern os_error *xosfile_stamp (char const *file_name);
  257. extern void osfile_stamp (char const *file_name);
  258.  
  259. /* ------------------------------------------------------------------------
  260.  * Function:      osfile_set_type()
  261.  *
  262.  * Description:   Writes the file type for an object
  263.  *
  264.  * Input:         file_name - value of R1 on entry
  265.  *                file_type - value of R2 on entry
  266.  *
  267.  * Other notes:   Calls SWI 0x8 with R0 = 0x12.
  268.  */
  269.  
  270. extern os_error *xosfile_set_type (char const *file_name,
  271.       bits file_type);
  272. extern void osfile_set_type (char const *file_name,
  273.       bits file_type);
  274.  
  275. /* ------------------------------------------------------------------------
  276.  * Function:      osfile_delete()
  277.  *
  278.  * Description:   Deletes an object
  279.  *
  280.  * Input:         file_name - value of R1 on entry
  281.  *
  282.  * Output:        obj_type - value of R0 on exit (X version only)
  283.  *                load_addr - value of R2 on exit
  284.  *                exec_addr - value of R3 on exit
  285.  *                size - value of R4 on exit
  286.  *                attr - value of R5 on exit
  287.  *
  288.  * Returns:       R0 (non-X version only)
  289.  *
  290.  * Other notes:   Calls SWI 0x8 with R0 = 0x6.
  291.  */
  292.  
  293. extern os_error *xosfile_delete (char const *file_name,
  294.       fileswitch_object_type *obj_type,
  295.       bits *load_addr,
  296.       bits *exec_addr,
  297.       int *size,
  298.       fileswitch_attr *attr);
  299. extern fileswitch_object_type osfile_delete (char const *file_name,
  300.       bits *load_addr,
  301.       bits *exec_addr,
  302.       int *size,
  303.       fileswitch_attr *attr);
  304.  
  305. /* ------------------------------------------------------------------------
  306.  * Function:      osfile_create_stamped()
  307.  *
  308.  * Description:   Creates an empty file
  309.  *
  310.  * Input:         file_name - value of R1 on entry
  311.  *                file_type - value of R2 on entry
  312.  *                size - value of R5 on entry
  313.  *
  314.  * Other notes:   Calls SWI 0x8 with R0 = 0xB, R4 = 0x0.
  315.  */
  316.  
  317. extern os_error *xosfile_create_stamped (char const *file_name,
  318.       bits file_type,
  319.       int size);
  320. extern void osfile_create_stamped (char const *file_name,
  321.       bits file_type,
  322.       int size);
  323.  
  324. /* ------------------------------------------------------------------------
  325.  * Function:      osfile_create_dir()
  326.  *
  327.  * Description:   Creates a directory
  328.  *
  329.  * Input:         dir_name - value of R1 on entry
  330.  *                entry_count - value of R4 on entry
  331.  *
  332.  * Other notes:   Calls SWI 0x8 with R0 = 0x8.
  333.  */
  334.  
  335. extern os_error *xosfile_create_dir (char const *dir_name,
  336.       int entry_count);
  337. extern void osfile_create_dir (char const *dir_name,
  338.       int entry_count);
  339.  
  340. /* ------------------------------------------------------------------------
  341.  * Function:      osfile_load_stamped()
  342.  *
  343.  * Description:   Loads a file using the directory list in File$Path
  344.  *
  345.  * Input:         file_name - value of R1 on entry
  346.  *                addr - value of R2 on entry
  347.  *
  348.  * Output:        obj_type - value of R0 on exit (X version only)
  349.  *                load_addr - value of R2 on exit
  350.  *                exec_addr - value of R3 on exit
  351.  *                size - value of R4 on exit
  352.  *                attr - value of R5 on exit
  353.  *
  354.  * Returns:       R0 (non-X version only)
  355.  *
  356.  * Other notes:   Calls SWI 0x8 with R0 = 0xFF, R3 = 0x0.
  357.  */
  358.  
  359. extern os_error *xosfile_load_stamped (char const *file_name,
  360.       byte *addr,
  361.       fileswitch_object_type *obj_type,
  362.       bits *load_addr,
  363.       bits *exec_addr,
  364.       int *size,
  365.       fileswitch_attr *attr);
  366. extern fileswitch_object_type osfile_load_stamped (char const *file_name,
  367.       byte *addr,
  368.       bits *load_addr,
  369.       bits *exec_addr,
  370.       int *size,
  371.       fileswitch_attr *attr);
  372.  
  373. /* ------------------------------------------------------------------------
  374.  * Function:      osfile_load_stamped_path()
  375.  *
  376.  * Description:   Loads a file using a specified directory list
  377.  *
  378.  * Input:         file_name - value of R1 on entry
  379.  *                addr - value of R2 on entry
  380.  *                path - value of R4 on entry
  381.  *
  382.  * Output:        obj_type - value of R0 on exit (X version only)
  383.  *                load_addr - value of R2 on exit
  384.  *                exec_addr - value of R3 on exit
  385.  *                size - value of R4 on exit
  386.  *                attr - value of R5 on exit
  387.  *
  388.  * Returns:       R0 (non-X version only)
  389.  *
  390.  * Other notes:   Calls SWI 0x8 with R0 = 0xC, R3 = 0x0.
  391.  */
  392.  
  393. extern os_error *xosfile_load_stamped_path (char const *file_name,
  394.       byte *addr,
  395.       char const *path,
  396.       fileswitch_object_type *obj_type,
  397.       bits *load_addr,
  398.       bits *exec_addr,
  399.       int *size,
  400.       fileswitch_attr *attr);
  401. extern fileswitch_object_type osfile_load_stamped_path (char const *file_name,
  402.       byte *addr,
  403.       char const *path,
  404.       bits *load_addr,
  405.       bits *exec_addr,
  406.       int *size,
  407.       fileswitch_attr *attr);
  408.  
  409. /* ------------------------------------------------------------------------
  410.  * Function:      osfile_load_stamped_path_var()
  411.  *
  412.  * Description:   Loads a file using the directory list in a specified
  413.  *                variable
  414.  *
  415.  * Input:         file_name - value of R1 on entry
  416.  *                addr - value of R2 on entry
  417.  *                var - value of R4 on entry
  418.  *
  419.  * Output:        obj_type - value of R0 on exit (X version only)
  420.  *                load_addr - value of R2 on exit
  421.  *                exec_addr - value of R3 on exit
  422.  *                size - value of R4 on exit
  423.  *                attr - value of R5 on exit
  424.  *
  425.  * Returns:       R0 (non-X version only)
  426.  *
  427.  * Other notes:   Calls SWI 0x8 with R0 = 0xE, R3 = 0x0.
  428.  */
  429.  
  430. extern os_error *xosfile_load_stamped_path_var (char const *file_name,
  431.       byte *addr,
  432.       char const *var,
  433.       fileswitch_object_type *obj_type,
  434.       bits *load_addr,
  435.       bits *exec_addr,
  436.       int *size,
  437.       fileswitch_attr *attr);
  438. extern fileswitch_object_type osfile_load_stamped_path_var (char const *file_name,
  439.       byte *addr,
  440.       char const *var,
  441.       bits *load_addr,
  442.       bits *exec_addr,
  443.       int *size,
  444.       fileswitch_attr *attr);
  445.  
  446. /* ------------------------------------------------------------------------
  447.  * Function:      osfile_load_stamped_no_path()
  448.  *
  449.  * Description:   Loads a file
  450.  *
  451.  * Input:         file_name - value of R1 on entry
  452.  *                addr - value of R2 on entry
  453.  *
  454.  * Output:        obj_type - value of R0 on exit (X version only)
  455.  *                load_addr - value of R2 on exit
  456.  *                exec_addr - value of R3 on exit
  457.  *                size - value of R4 on exit
  458.  *                attr - value of R5 on exit
  459.  *
  460.  * Returns:       R0 (non-X version only)
  461.  *
  462.  * Other notes:   Calls SWI 0x8 with R0 = 0x10, R3 = 0x0.
  463.  */
  464.  
  465. extern os_error *xosfile_load_stamped_no_path (char const *file_name,
  466.       byte *addr,
  467.       fileswitch_object_type *obj_type,
  468.       bits *load_addr,
  469.       bits *exec_addr,
  470.       int *size,
  471.       fileswitch_attr *attr);
  472. extern fileswitch_object_type osfile_load_stamped_no_path (char const *file_name,
  473.       byte *addr,
  474.       bits *load_addr,
  475.       bits *exec_addr,
  476.       int *size,
  477.       fileswitch_attr *attr);
  478.  
  479. /* ------------------------------------------------------------------------
  480.  * Function:      osfile_make_error()
  481.  *
  482.  * Description:   Generates an error message
  483.  *
  484.  * Input:         file_name - value of R1 on entry
  485.  *                obj_type - value of R2 on entry
  486.  *
  487.  * Other notes:   Calls SWI 0x8 with R0 = 0x13.
  488.  */
  489.  
  490. extern os_error *xosfile_make_error (char const *file_name,
  491.       fileswitch_object_type obj_type);
  492. extern void osfile_make_error (char const *file_name,
  493.       fileswitch_object_type obj_type);
  494.  
  495. /* ------------------------------------------------------------------------
  496.  * Function:      osfile_read_stamped()
  497.  *
  498.  * Description:   Reads catalogue information and file type for an object
  499.  *                using the directory list in File$Path
  500.  *
  501.  * Input:         file_name - value of R1 on entry
  502.  *
  503.  * Output:        obj_type - value of R0 on exit (X version only)
  504.  *                load_addr - value of R2 on exit
  505.  *                exec_addr - value of R3 on exit
  506.  *                size - value of R4 on exit
  507.  *                attr - value of R5 on exit
  508.  *                file_type - value of R6 on exit
  509.  *
  510.  * Returns:       R0 (non-X version only)
  511.  *
  512.  * Other notes:   Calls SWI 0x8 with R0 = 0x14.
  513.  */
  514.  
  515. extern os_error *xosfile_read_stamped (char const *file_name,
  516.       fileswitch_object_type *obj_type,
  517.       bits *load_addr,
  518.       bits *exec_addr,
  519.       int *size,
  520.       fileswitch_attr *attr,
  521.       bits *file_type);
  522. extern fileswitch_object_type osfile_read_stamped (char const *file_name,
  523.       bits *load_addr,
  524.       bits *exec_addr,
  525.       int *size,
  526.       fileswitch_attr *attr,
  527.       bits *file_type);
  528.  
  529. /* ------------------------------------------------------------------------
  530.  * Function:      osfile_read_stamped_path()
  531.  *
  532.  * Description:   Reads catalogue information and file type for an object
  533.  *                using a specified directory list
  534.  *
  535.  * Input:         file_name - value of R1 on entry
  536.  *                path - value of R4 on entry
  537.  *
  538.  * Output:        obj_type - value of R0 on exit (X version only)
  539.  *                load_addr - value of R2 on exit
  540.  *                exec_addr - value of R3 on exit
  541.  *                size - value of R4 on exit
  542.  *                attr - value of R5 on exit
  543.  *                file_type - value of R6 on exit
  544.  *
  545.  * Returns:       R0 (non-X version only)
  546.  *
  547.  * Other notes:   Calls SWI 0x8 with R0 = 0x15.
  548.  */
  549.  
  550. extern os_error *xosfile_read_stamped_path (char const *file_name,
  551.       char const *path,
  552.       fileswitch_object_type *obj_type,
  553.       bits *load_addr,
  554.       bits *exec_addr,
  555.       int *size,
  556.       fileswitch_attr *attr,
  557.       bits *file_type);
  558. extern fileswitch_object_type osfile_read_stamped_path (char const *file_name,
  559.       char const *path,
  560.       bits *load_addr,
  561.       bits *exec_addr,
  562.       int *size,
  563.       fileswitch_attr *attr,
  564.       bits *file_type);
  565.  
  566. /* ------------------------------------------------------------------------
  567.  * Function:      osfile_read_stamped_path_var()
  568.  *
  569.  * Description:   Reads catalogue information and file type for an object
  570.  *                using the directory list in a specified variable
  571.  *
  572.  * Input:         file_name - value of R1 on entry
  573.  *                var - value of R4 on entry
  574.  *
  575.  * Output:        obj_type - value of R0 on exit (X version only)
  576.  *                load_addr - value of R2 on exit
  577.  *                exec_addr - value of R3 on exit
  578.  *                size - value of R4 on exit
  579.  *                attr - value of R5 on exit
  580.  *                file_type - value of R6 on exit
  581.  *
  582.  * Returns:       R0 (non-X version only)
  583.  *
  584.  * Other notes:   Calls SWI 0x8 with R0 = 0x16.
  585.  */
  586.  
  587. extern os_error *xosfile_read_stamped_path_var (char const *file_name,
  588.       char const *var,
  589.       fileswitch_object_type *obj_type,
  590.       bits *load_addr,
  591.       bits *exec_addr,
  592.       int *size,
  593.       fileswitch_attr *attr,
  594.       bits *file_type);
  595. extern fileswitch_object_type osfile_read_stamped_path_var (char const *file_name,
  596.       char const *var,
  597.       bits *load_addr,
  598.       bits *exec_addr,
  599.       int *size,
  600.       fileswitch_attr *attr,
  601.       bits *file_type);
  602.  
  603. /* ------------------------------------------------------------------------
  604.  * Function:      osfile_read_stamped_no_path()
  605.  *
  606.  * Description:   Reads catalogue information and file type for an object
  607.  *
  608.  * Input:         file_name - value of R1 on entry
  609.  *
  610.  * Output:        obj_type - value of R0 on exit (X version only)
  611.  *                load_addr - value of R2 on exit
  612.  *                exec_addr - value of R3 on exit
  613.  *                size - value of R4 on exit
  614.  *                attr - value of R5 on exit
  615.  *                file_type - value of R6 on exit
  616.  *
  617.  * Returns:       R0 (non-X version only)
  618.  *
  619.  * Other notes:   Calls SWI 0x8 with R0 = 0x17.
  620.  */
  621.  
  622. extern os_error *xosfile_read_stamped_no_path (char const *file_name,
  623.       fileswitch_object_type *obj_type,
  624.       bits *load_addr,
  625.       bits *exec_addr,
  626.       int *size,
  627.       fileswitch_attr *attr,
  628.       bits *file_type);
  629. extern fileswitch_object_type osfile_read_stamped_no_path (char const *file_name,
  630.       bits *load_addr,
  631.       bits *exec_addr,
  632.       int *size,
  633.       fileswitch_attr *attr,
  634.       bits *file_type);
  635.  
  636. /* ------------------------------------------------------------------------
  637.  * Function:      osfile_read_block_size()
  638.  *
  639.  * Description:   Reads the natural block size of a file
  640.  *
  641.  * Input:         file_name - value of R1 on entry
  642.  *
  643.  * Output:        block_size - value of R2 on exit (X version only)
  644.  *
  645.  * Returns:       R2 (non-X version only)
  646.  *
  647.  * Other notes:   Calls SWI 0x8 with R0 = 0x18.
  648.  */
  649.  
  650. extern os_error *xosfile_read_block_size (char const *file_name,
  651.       int *block_size);
  652. extern int osfile_read_block_size (char const *file_name);
  653.  
  654. /* ------------------------------------------------------------------------
  655.  * Function:      osfile_save()
  656.  *
  657.  * Description:   Saves a block of memory as an untyped file - prefer
  658.  *                OSFile_SaveStamped
  659.  *
  660.  * Input:         file_name - value of R1 on entry
  661.  *                load_addr - value of R2 on entry
  662.  *                exec_addr - value of R3 on entry
  663.  *                data - value of R4 on entry
  664.  *                end - value of R5 on entry
  665.  *
  666.  * Other notes:   Calls SWI 0x8 with R0 = 0x0.
  667.  */
  668.  
  669. extern os_error *xosfile_save (char const *file_name,
  670.       bits load_addr,
  671.       bits exec_addr,
  672.       byte const *data,
  673.       byte const *end);
  674. extern void osfile_save (char const *file_name,
  675.       bits load_addr,
  676.       bits exec_addr,
  677.       byte const *data,
  678.       byte const *end);
  679.  
  680. /* ------------------------------------------------------------------------
  681.  * Function:      osfile_read()
  682.  *
  683.  * Description:   Reads catalogue information for an object using the
  684.  *                directory list in File$Path - prefer OSFile_ReadStamped
  685.  *
  686.  * Input:         file_name - value of R1 on entry
  687.  *
  688.  * Output:        obj_type - value of R0 on exit (X version only)
  689.  *                load_addr - value of R2 on exit
  690.  *                exec_addr - value of R3 on exit
  691.  *                size - value of R4 on exit
  692.  *                attr - value of R5 on exit
  693.  *
  694.  * Returns:       R0 (non-X version only)
  695.  *
  696.  * Other notes:   Calls SWI 0x8 with R0 = 0x5.
  697.  */
  698.  
  699. extern os_error *xosfile_read (char const *file_name,
  700.       fileswitch_object_type *obj_type,
  701.       bits *load_addr,
  702.       bits *exec_addr,
  703.       int *size,
  704.       fileswitch_attr *attr);
  705. extern fileswitch_object_type osfile_read (char const *file_name,
  706.       bits *load_addr,
  707.       bits *exec_addr,
  708.       int *size,
  709.       fileswitch_attr *attr);
  710.  
  711. /* ------------------------------------------------------------------------
  712.  * Function:      osfile_read_path()
  713.  *
  714.  * Description:   Reads catalogue information for an object using a
  715.  *                specified directory list - prefer OSFile_ReadStampedPath
  716.  *
  717.  * Input:         file_name - value of R1 on entry
  718.  *                path - value of R4 on entry
  719.  *
  720.  * Output:        obj_type - value of R0 on exit (X version only)
  721.  *                load_addr - value of R2 on exit
  722.  *                exec_addr - value of R3 on exit
  723.  *                size - value of R4 on exit
  724.  *                attr - value of R5 on exit
  725.  *
  726.  * Returns:       R0 (non-X version only)
  727.  *
  728.  * Other notes:   Calls SWI 0x8 with R0 = 0xD.
  729.  */
  730.  
  731. extern os_error *xosfile_read_path (char const *file_name,
  732.       char const *path,
  733.       fileswitch_object_type *obj_type,
  734.       bits *load_addr,
  735.       bits *exec_addr,
  736.       int *size,
  737.       fileswitch_attr *attr);
  738. extern fileswitch_object_type osfile_read_path (char const *file_name,
  739.       char const *path,
  740.       bits *load_addr,
  741.       bits *exec_addr,
  742.       int *size,
  743.       fileswitch_attr *attr);
  744.  
  745. /* ------------------------------------------------------------------------
  746.  * Function:      osfile_read_path_var()
  747.  *
  748.  * Description:   Reads catalogue information for an object using the
  749.  *                directory list in a specified variable - prefer
  750.  *                OSFile_ReadStampedPathVar
  751.  *
  752.  * Input:         file_name - value of R1 on entry
  753.  *                var - value of R4 on entry
  754.  *
  755.  * Output:        obj_type - value of R0 on exit (X version only)
  756.  *                load_addr - value of R2 on exit
  757.  *                exec_addr - value of R3 on exit
  758.  *                size - value of R4 on exit
  759.  *                attr - value of R5 on exit
  760.  *
  761.  * Returns:       R0 (non-X version only)
  762.  *
  763.  * Other notes:   Calls SWI 0x8 with R0 = 0xF.
  764.  */
  765.  
  766. extern os_error *xosfile_read_path_var (char const *file_name,
  767.       char const *var,
  768.       fileswitch_object_type *obj_type,
  769.       bits *load_addr,
  770.       bits *exec_addr,
  771.       int *size,
  772.       fileswitch_attr *attr);
  773. extern fileswitch_object_type osfile_read_path_var (char const *file_name,
  774.       char const *var,
  775.       bits *load_addr,
  776.       bits *exec_addr,
  777.       int *size,
  778.       fileswitch_attr *attr);
  779.  
  780. /* ------------------------------------------------------------------------
  781.  * Function:      osfile_read_no_path()
  782.  *
  783.  * Description:   Reads catalogue information for an object - prefer
  784.  *                OSFile_ReadStampedNoPath
  785.  *
  786.  * Input:         file_name - value of R1 on entry
  787.  *
  788.  * Output:        obj_type - value of R0 on exit (X version only)
  789.  *                load_addr - value of R2 on exit
  790.  *                exec_addr - value of R3 on exit
  791.  *                size - value of R4 on exit
  792.  *                attr - value of R5 on exit
  793.  *
  794.  * Returns:       R0 (non-X version only)
  795.  *
  796.  * Other notes:   Calls SWI 0x8 with R0 = 0x11.
  797.  */
  798.  
  799. extern os_error *xosfile_read_no_path (char const *file_name,
  800.       fileswitch_object_type *obj_type,
  801.       bits *load_addr,
  802.       bits *exec_addr,
  803.       int *size,
  804.       fileswitch_attr *attr);
  805. extern fileswitch_object_type osfile_read_no_path (char const *file_name,
  806.       bits *load_addr,
  807.       bits *exec_addr,
  808.       int *size,
  809.       fileswitch_attr *attr);
  810.  
  811. /* ------------------------------------------------------------------------
  812.  * Function:      osfile_create()
  813.  *
  814.  * Description:   Creates an empty untyped file - prefer
  815.  *                OSFile_CreateStamped
  816.  *
  817.  * Input:         file_name - value of R1 on entry
  818.  *                load_addr - value of R2 on entry
  819.  *                exec_addr - value of R3 on entry
  820.  *                size - value of R5 on entry
  821.  *
  822.  * Other notes:   Calls SWI 0x8 with R0 = 0x7, R4 = 0x0.
  823.  */
  824.  
  825. extern os_error *xosfile_create (char const *file_name,
  826.       bits load_addr,
  827.       bits exec_addr,
  828.       int size);
  829. extern void osfile_create (char const *file_name,
  830.       bits load_addr,
  831.       bits exec_addr,
  832.       int size);
  833.  
  834. /* ------------------------------------------------------------------------
  835.  * Function:      osfile_load()
  836.  *
  837.  * Description:   Loads an untyped file using the directory list in
  838.  *                File$Path - prefer OSFile_LoadStamped
  839.  *
  840.  * Input:         file_name - value of R1 on entry
  841.  *
  842.  * Output:        obj_type - value of R0 on exit (X version only)
  843.  *                load_addr - value of R2 on exit
  844.  *                exec_addr - value of R3 on exit
  845.  *                size - value of R4 on exit
  846.  *                attr - value of R5 on exit
  847.  *
  848.  * Returns:       R0 (non-X version only)
  849.  *
  850.  * Other notes:   Calls SWI 0x8 with R0 = 0xFF, R3 = 0x1.
  851.  */
  852.  
  853. extern os_error *xosfile_load (char const *file_name,
  854.       fileswitch_object_type *obj_type,
  855.       bits *load_addr,
  856.       bits *exec_addr,
  857.       int *size,
  858.       fileswitch_attr *attr);
  859. extern fileswitch_object_type osfile_load (char const *file_name,
  860.       bits *load_addr,
  861.       bits *exec_addr,
  862.       int *size,
  863.       fileswitch_attr *attr);
  864.  
  865. /* ------------------------------------------------------------------------
  866.  * Function:      osfile_load_path()
  867.  *
  868.  * Description:   Loads an untyped file using a specified directory list -
  869.  *                prefer OSFile_LoadStampedPath
  870.  *
  871.  * Input:         file_name - value of R1 on entry
  872.  *                path - value of R4 on entry
  873.  *
  874.  * Output:        obj_type - value of R0 on exit (X version only)
  875.  *                load_addr - value of R2 on exit
  876.  *                exec_addr - value of R3 on exit
  877.  *                size - value of R4 on exit
  878.  *                attr - value of R5 on exit
  879.  *
  880.  * Returns:       R0 (non-X version only)
  881.  *
  882.  * Other notes:   Calls SWI 0x8 with R0 = 0xC, R3 = 0x1.
  883.  */
  884.  
  885. extern os_error *xosfile_load_path (char const *file_name,
  886.       char const *path,
  887.       fileswitch_object_type *obj_type,
  888.       bits *load_addr,
  889.       bits *exec_addr,
  890.       int *size,
  891.       fileswitch_attr *attr);
  892. extern fileswitch_object_type osfile_load_path (char const *file_name,
  893.       char const *path,
  894.       bits *load_addr,
  895.       bits *exec_addr,
  896.       int *size,
  897.       fileswitch_attr *attr);
  898.  
  899. /* ------------------------------------------------------------------------
  900.  * Function:      osfile_load_path_var()
  901.  *
  902.  * Description:   Loads an untyped file using the directory list in a
  903.  *                specified variable - prefer OSFile_LoadStampedPathVar
  904.  *
  905.  * Input:         file_name - value of R1 on entry
  906.  *                var - value of R4 on entry
  907.  *
  908.  * Output:        obj_type - value of R0 on exit (X version only)
  909.  *                load_addr - value of R2 on exit
  910.  *                exec_addr - value of R3 on exit
  911.  *                size - value of R4 on exit
  912.  *                attr - value of R5 on exit
  913.  *
  914.  * Returns:       R0 (non-X version only)
  915.  *
  916.  * Other notes:   Calls SWI 0x8 with R0 = 0xE, R3 = 0x1.
  917.  */
  918.  
  919. extern os_error *xosfile_load_path_var (char const *file_name,
  920.       char const *var,
  921.       fileswitch_object_type *obj_type,
  922.       bits *load_addr,
  923.       bits *exec_addr,
  924.       int *size,
  925.       fileswitch_attr *attr);
  926. extern fileswitch_object_type osfile_load_path_var (char const *file_name,
  927.       char const *var,
  928.       bits *load_addr,
  929.       bits *exec_addr,
  930.       int *size,
  931.       fileswitch_attr *attr);
  932.  
  933. /* ------------------------------------------------------------------------
  934.  * Function:      osfile_load_no_path()
  935.  *
  936.  * Description:   Loads an untyped file - prefer OSFile_LoadStampedNoPath
  937.  *
  938.  * Input:         file_name - value of R1 on entry
  939.  *
  940.  * Output:        obj_type - value of R0 on exit (X version only)
  941.  *                load_addr - value of R2 on exit
  942.  *                exec_addr - value of R3 on exit
  943.  *                size - value of R4 on exit
  944.  *                attr - value of R5 on exit
  945.  *
  946.  * Returns:       R0 (non-X version only)
  947.  *
  948.  * Other notes:   Calls SWI 0x8 with R0 = 0x10, R3 = 0x1.
  949.  */
  950.  
  951. extern os_error *xosfile_load_no_path (char const *file_name,
  952.       fileswitch_object_type *obj_type,
  953.       bits *load_addr,
  954.       bits *exec_addr,
  955.       int *size,
  956.       fileswitch_attr *attr);
  957. extern fileswitch_object_type osfile_load_no_path (char const *file_name,
  958.       bits *load_addr,
  959.       bits *exec_addr,
  960.       int *size,
  961.       fileswitch_attr *attr);
  962.  
  963. /* ------------------------------------------------------------------------
  964.  * Function:      upcallfile_save()
  965.  *
  966.  * Description:   Warns your program that a file is being saved
  967.  *
  968.  * Input:         file_name - value of R1 on entry
  969.  *                load_addr - value of R2 on entry
  970.  *                exec_addr - value of R3 on entry
  971.  *                data - value of R4 on entry
  972.  *                end - value of R5 on entry
  973.  *                special - value of R6 on entry
  974.  *                fs_info - value of R8 on entry
  975.  *
  976.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x0.
  977.  */
  978.  
  979. extern os_error *xupcallfile_save (char const *file_name,
  980.       bits load_addr,
  981.       bits exec_addr,
  982.       byte const *data,
  983.       byte const *end,
  984.       char const *special,
  985.       fileswitch_fs_info fs_info);
  986. extern void upcallfile_save (char const *file_name,
  987.       bits load_addr,
  988.       bits exec_addr,
  989.       byte const *data,
  990.       byte const *end,
  991.       char const *special,
  992.       fileswitch_fs_info fs_info);
  993.  
  994. /* ------------------------------------------------------------------------
  995.  * Function:      upcallfile_set_args()
  996.  *
  997.  * Description:   Warns your program that a file's catalogue information is
  998.  *                being written
  999.  *
  1000.  * Input:         file_name - value of R1 on entry
  1001.  *                load_addr - value of R2 on entry
  1002.  *                exec_addr - value of R3 on entry
  1003.  *                attr - value of R5 on entry
  1004.  *                special - value of R6 on entry
  1005.  *                fs_info - value of R8 on entry
  1006.  *
  1007.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x1.
  1008.  */
  1009.  
  1010. extern os_error *xupcallfile_set_args (char const *file_name,
  1011.       bits load_addr,
  1012.       bits exec_addr,
  1013.       fileswitch_attr attr,
  1014.       char const *special,
  1015.       fileswitch_fs_info fs_info);
  1016. extern void upcallfile_set_args (char const *file_name,
  1017.       bits load_addr,
  1018.       bits exec_addr,
  1019.       fileswitch_attr attr,
  1020.       char const *special,
  1021.       fileswitch_fs_info fs_info);
  1022.  
  1023. /* ------------------------------------------------------------------------
  1024.  * Function:      upcallfile_set_load_addr()
  1025.  *
  1026.  * Description:   Warns your program that a file's load address is being
  1027.  *                written
  1028.  *
  1029.  * Input:         file_name - value of R1 on entry
  1030.  *                load_addr - value of R2 on entry
  1031.  *                special - value of R6 on entry
  1032.  *                fs_info - value of R8 on entry
  1033.  *
  1034.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x2.
  1035.  */
  1036.  
  1037. extern os_error *xupcallfile_set_load_addr (char const *file_name,
  1038.       bits load_addr,
  1039.       char const *special,
  1040.       fileswitch_fs_info fs_info);
  1041. extern void upcallfile_set_load_addr (char const *file_name,
  1042.       bits load_addr,
  1043.       char const *special,
  1044.       fileswitch_fs_info fs_info);
  1045.  
  1046. /* ------------------------------------------------------------------------
  1047.  * Function:      upcallfile_set_exec_addr()
  1048.  *
  1049.  * Description:   Warns your program that a file's execution address is
  1050.  *                being written
  1051.  *
  1052.  * Input:         file_name - value of R1 on entry
  1053.  *                exec_addr - value of R3 on entry
  1054.  *                special - value of R6 on entry
  1055.  *                fs_info - value of R8 on entry
  1056.  *
  1057.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x3.
  1058.  */
  1059.  
  1060. extern os_error *xupcallfile_set_exec_addr (char const *file_name,
  1061.       bits exec_addr,
  1062.       char const *special,
  1063.       fileswitch_fs_info fs_info);
  1064. extern void upcallfile_set_exec_addr (char const *file_name,
  1065.       bits exec_addr,
  1066.       char const *special,
  1067.       fileswitch_fs_info fs_info);
  1068.  
  1069. /* ------------------------------------------------------------------------
  1070.  * Function:      upcallfile_set_attr()
  1071.  *
  1072.  * Description:   Warns your program that a file's attributes are being
  1073.  *                written
  1074.  *
  1075.  * Input:         file_name - value of R1 on entry
  1076.  *                attr - value of R5 on entry
  1077.  *                special - value of R6 on entry
  1078.  *                fs_info - value of R8 on entry
  1079.  *
  1080.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x4.
  1081.  */
  1082.  
  1083. extern os_error *xupcallfile_set_attr (char const *file_name,
  1084.       fileswitch_attr attr,
  1085.       char const *special,
  1086.       fileswitch_fs_info fs_info);
  1087. extern void upcallfile_set_attr (char const *file_name,
  1088.       fileswitch_attr attr,
  1089.       char const *special,
  1090.       fileswitch_fs_info fs_info);
  1091.  
  1092. /* ------------------------------------------------------------------------
  1093.  * Function:      upcallfile_delete()
  1094.  *
  1095.  * Description:   Warns your program that a file is being deleted
  1096.  *
  1097.  * Input:         file_name - value of R1 on entry
  1098.  *                special - value of R6 on entry
  1099.  *                fs_info - value of R8 on entry
  1100.  *
  1101.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x6.
  1102.  */
  1103.  
  1104. extern os_error *xupcallfile_delete (char const *file_name,
  1105.       char const *special,
  1106.       fileswitch_fs_info fs_info);
  1107. extern void upcallfile_delete (char const *file_name,
  1108.       char const *special,
  1109.       fileswitch_fs_info fs_info);
  1110.  
  1111. /* ------------------------------------------------------------------------
  1112.  * Function:      upcallfile_create()
  1113.  *
  1114.  * Description:   Warns your program that a file is being created
  1115.  *
  1116.  * Input:         file_name - value of R1 on entry
  1117.  *                load_addr - value of R2 on entry
  1118.  *                exec_addr - value of R3 on entry
  1119.  *                data - value of R4 on entry
  1120.  *                end - value of R5 on entry
  1121.  *                special - value of R6 on entry
  1122.  *                fs_info - value of R8 on entry
  1123.  *
  1124.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x7.
  1125.  */
  1126.  
  1127. extern os_error *xupcallfile_create (char const *file_name,
  1128.       bits load_addr,
  1129.       bits exec_addr,
  1130.       byte const *data,
  1131.       byte const *end,
  1132.       char const *special,
  1133.       fileswitch_fs_info fs_info);
  1134. extern void upcallfile_create (char const *file_name,
  1135.       bits load_addr,
  1136.       bits exec_addr,
  1137.       byte const *data,
  1138.       byte const *end,
  1139.       char const *special,
  1140.       fileswitch_fs_info fs_info);
  1141.  
  1142. /* ------------------------------------------------------------------------
  1143.  * Function:      upcallfile_create_dir()
  1144.  *
  1145.  * Description:   Warns your program that a directory is being created
  1146.  *
  1147.  * Input:         file_name - value of R1 on entry
  1148.  *                load_addr - value of R2 on entry
  1149.  *                exec_addr - value of R3 on entry
  1150.  *                entry_count - value of R4 on entry
  1151.  *                special - value of R6 on entry
  1152.  *                fs_info - value of R8 on entry
  1153.  *
  1154.  * Other notes:   Calls SWI 0x33 with R0 = 0x3, R9 = 0x8.
  1155.  */
  1156.  
  1157. extern os_error *xupcallfile_create_dir (char const *file_name,
  1158.       bits load_addr,
  1159.       bits exec_addr,
  1160.       int entry_count,
  1161.       char const *special,
  1162.       fileswitch_fs_info fs_info);
  1163. extern void upcallfile_create_dir (char const *file_name,
  1164.       bits load_addr,
  1165.       bits exec_addr,
  1166.       int entry_count,
  1167.       char const *special,
  1168.       fileswitch_fs_info fs_info);
  1169.  
  1170. #ifdef __cplusplus
  1171.    }
  1172. #endif
  1173.  
  1174. #endif
  1175.