home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG023.ARK / FILES.DOC < prev    next >
Text File  |  1984-04-29  |  9KB  |  272 lines

  1.  
  2.  
  3.  
  4.  
  5. ***************************************************************************
  6. ** COPYRIGHT (C) MASSACHUSETTS INSTITUTE OF TECHNOLOGY AND HARVARD       **
  7. ** UNIVERSITY, BIOMEDICAL ENGINEERING CENTER 1977.  ALL RIGHTS RESERVED. **
  8. ***************************************************************************
  9.  
  10. STOIC FILE SYSTEM
  11. J. SACHS 2/9/77
  12.  
  13.     THE STOIC FILE SYSTEM SUPPORTS CONTIGUOUS FILES WHICH
  14. ARE REFERENCED BY SIX-LETTER NAMES.  THESE NAMES AND THE LOCATIONS
  15. OF THE FILES ON THE STORAGE MEDIUM ARE STORED IN A DIRECTORY
  16. WHICH OCCUPIES BLOCK ZERO.  NEW FILES ARE ALWAYS ADDED AT THE
  17. END OF THE MEDIUM.  THE BLOCKS TAKEN UP BY A FILE WHICH HAS BEEN
  18. DELETED ARE NOT AVAILABLE UNTIL THE WORD "SQUASH" HAS BEEN EXECUTED.
  19. "SQUASH" SLIDES ALL THE FILES DOWN AND RESTRUCTURES THE DIRECTORY
  20. TO ELIMINATE ALL GAPS.  THE FOLLOWING WORDS CONTROL DIRECTORY
  21. MAINTENANCE AND FILE ACCESS:
  22.  
  23. ZERO-DIRECTORY    INITIALIZES THE DIRECTORY.  THE PREVIOUS CONTENTS
  24.         OF THE DIRECTORY ARE LOST.
  25.  
  26. LIST-DIRECTORY    TYPES A DIRECTORY LISTING IN TWO COLUMNS.
  27.  
  28. LEFT        RETURNS ON THE STACK THE NUMBER OF UNUSED BLOCKS
  29.         ON THE STORAGE MEDIUM.
  30.  
  31. CCONT        CREATES A CONTIGUOUS FILE WHOSE LENGTH (IN BLOCKS)
  32.         IS AT THE TOP OF THE STACK, THE NAME IS AT TOP - 1.
  33.  
  34. DELETE        DELETES THE FILE WHOSE NAME IS AT TOP OF STACK.
  35.  
  36. RENAME        RENAMES FILE WHOSE NAME IS AT TOP - 1 TO NAME AT TOP.
  37.  
  38. FILE        CREATES A 3-WORD FILE CONTROL TABLE WHOSE NAME IS AT
  39.         TOP.  WHEN REFERENCED, THE ADDRESS OF THE FILE CONTROL
  40.         TABLE IS STORED IN THE VARIABLE "FCT".  THIS CAUSES
  41.         THE FILE CONTROL TABLE TO BECOME THE CURRENT FILE
  42.         CONTROL TABLE.
  43.  
  44. IFILE        A 3-WORD FCT AVAILABLE TO THE USER (NORMALLY USED FOR
  45.         INPUT FILE)
  46.  
  47. OFILE        A 3-WORD FCT AVAILABLE TO THE USER (NORMALLY USED FOR
  48.         OUTPUT FILE)
  49.  
  50. OPEN        OPENS THE FILE WHOSE NAME IS AT TOP USING THE CURRENT
  51.         FILE CONTROL TABLE.  THE NUMBER OF THE FIRST BLOCK OF
  52.         THE FILE IS STORED IN THE FIRST WORD OF THE FILE CONTROL
  53.         TABLE AND THE OTHER TWO WORDS ARE ZEROED.
  54.  
  55. WOPEN        OPENS A FILE FOR WRITING; FILE NAME AT TOP OF STACK.
  56.         ANY PREVIOUS VERSION OF THE FILE IS DELETED, A NEW
  57.         VERSION IS CREATED WHOSE LENGTH IS EQUAL TO THE ENTIRE
  58.         REMAINING FREE SPACE, AND THE FILE IS OPENED USING
  59.         THE CURRENT FILE CONTROL TABLE.  IF MORE THAN ONE
  60.         OUTPUT FILE IS ACTIVE AT A TIME, ALL BUT ONE OF THEM
  61.         MUST BE CREATED WITH "CCONT" AND OPENED WITH "OPEN",
  62.         GIVING THE FILE LENGTH IN ADVANCE.  THE LAST ONE MAY
  63.         BE VARIABLE LENGTH AND OPENED WITH "WOPEN".
  64.  
  65. SHRINK        USING THE CURRENT FILE CONTROL TABLE, THE END OF
  66.         THE DIRECTORY IS MOVED DOWN TO THE FIRST FREE BLOCK
  67.         FOLLOWING THE CURRENT FILE.  THIS WORD IS USED ONLY
  68.         WITH FILES WHICH HAVE BEEN OPENED USING "WOPEN" TO
  69.         RELEASE WHATEVER STORAGE IS NOT USED BY THE OUTPUT
  70.         FILE.
  71.  
  72. CLOSE        ZEROES THE FIRST WORD OF THE CURRENT FILE CONTROL
  73.         TABLE, SIGNALLING IT AS INACTIVE.
  74.  
  75. GETBYTE        USING THE CURRENT FILE CONTROL TABLE,
  76.         RETURNS THE NEXT BYTE FROM THE FILE.
  77.  
  78. GETBYTES    USING THE CURRENT FILE CONTROL TABLE, AND TAKING
  79.         A BYTE COUNT AT TOP AND A BUFFER ADDRESS AT TOP - 1,
  80.         THE SPECIFIED NUMBER OF BYTES ARE READ FROM THE FILE
  81.         INTO THE BUFFER.
  82.  
  83. PUTBYTE        USING THE CURRENT FILE CONTROL TABLE,
  84.         STORES BYTE AT TOP IN NEXT BYTE OF FILE.
  85.  
  86. PUTBYTES    USING THE CURRENT FILE CONTROL TABLE, AND TAKING
  87.         A BYTE COUNT AT TOP AND A BUFFER ADDRESS AT TOP - 1,
  88.         THE SPECIFIED NUMBER OF BYTES ARE WRITTEN INTO THE FILE
  89.         FROM THE BUFFER.
  90.  
  91. GPOS        USING THE CURRENT FILE CONTROL TABLE,
  92.         RETURNS A DOUBLE PRECISION INTEGER FILE POSITION
  93.         AT TOP AND TOP - 1.  (MOST SIGNIFICANT WORD AT TOP).
  94.  
  95. SPOS        USING THE CURRENT FILE CONTROL TABLE
  96.         SETS THE FILE POSITION TO THE DOUBLE PRECISION
  97.         INTEGER VALUE AND TOP AND TOP - 1.
  98.  
  99. EXIST        SEARCHES THE DIRECTORY FOR THE NAME AT TOP.  IF
  100.         FOUND, THE ADDRESS OF THE DIRECTORY ENTRY IS LEFT AT
  101.         TOP.  IF NOT FOUND, THE ERROR "FILE DOES NOT EXIST"
  102.         IS GIVEN.
  103.  
  104. NOT-EXIST    SEARCHES THE DIRECTORY FOR THE NAME AT TOP.  IF
  105.         FOUND, THE ERROR "FILE ALREADY EXISTS" IS GIVEN.
  106.  
  107. OPEN?        GIVES THE MESSAGE "FILE NOT OPEN" IF THE
  108.         CURRENT FILE CONTROL TABLE IS NOT OPEN.
  109.  
  110. FSQUASH        REMOVES DELETED ENTRIES FROM THE END OF THE
  111.         DIRECTORY.  DELETED ENTRIES BEFORE THE LAST
  112.         ACTIVE FILE ARE NOT AFFECTED.  FSQUASH IS
  113.         CALLED AUTOMATICALLY AFTER A "DELETE".
  114.  
  115. MVBLOCKS    TAKES A SOURCE BLOCK NUMBER AT TOP-2, A DESTINATION
  116.         BLOCK NUMBER AT TOP-1, AND A BLOCK COUNT AT TOP.
  117.         A SEQUENTIAL SET OF BLOCKS ARE COPIED FROM THE SOURCE
  118.         BLOCK TO THE DESTINATION BLOCK.
  119.  
  120. SQUASH        REMOVES ALL DELETED ENTRIES FROM THE DIRECTORY.
  121.         THE REMAINING FILES ARE MOVED DOWN TO FILL UP
  122.         THE EMPTY SPACE.
  123.  
  124. SEARCH        SEARCHES THE DIRECTORY FOR THE NAME AT TOP.  IF
  125.         FOUND, A -1 IS RETURNED AT TOP AND A POINTER TO
  126.         THE DIRECTORY ENTRY AT TOP - 1.  IF NOT FOUND,
  127.         A ZERO IS LEFT AT TOP.
  128.  
  129. DIRECTORY    RETURNS ON THE TOP OF THE STACK THE ADDRESS OF
  130.         THE FIRST BYTE OF A BUFFER CONTAINING THE
  131.         DIRECTORY.
  132.  
  133. SLOT        RETURNS THE ADDRESS OF THE END-OF DIRECTORY ENTRY
  134.         IN THE DIRECTORY BUFFER.
  135.  
  136. SBLK        GIVEN THE ADDRESS OF A DIRECTORY ENTRY AT TOP, RETURNS
  137.         THE STARTING BLOCK NUMBER FOR THE FILE.
  138.  
  139. PRINT        TYPES OUT ON THE SYSTEM CONSOLE THE CONTENTS OF THE
  140.         FILE WHOSE NAME IS AT TOP.
  141.  
  142. XFER        COPIES THE FILE WHOSE NAME IS AT TOP - 1 TO A FILE
  143.         WHOSE NAME IS AT TOP.  THE DESTINATION FILE IS CREATED
  144.         AT THE END OF THE DIRECTORY; ANY PREVIOUS VERSION IS
  145.         DELETED.
  146.  
  147.  
  148. EXAMPLES:
  149.  
  150. 'PRINT : IFILE OPEN BEGIN GETBYTE DUP EOF NE IF TYO REPEAT
  151.   DROP CLOSE ;
  152.  
  153. THIS EXAMPLE GIVES THE DEFINITIONS OF THE WORD "PRINT" DESCRIBED
  154. ABOVE.  IT IS CALLED WITH THE ADDRESS OF A STRING ON THE STACK
  155. WHICH SUPPLIES AN ARGUMENT TO THE WORD "OPEN".  "IFILE" MAKES
  156. THE FILE CONTROL TABLE "IFILE" THE CURRENT FILE CONTROL TABLE.
  157. A LOOP IS THEN ENTERED WHICH GETS THE NEXT BYTE FROM THE FILE
  158. ("GETBYTE") AND TYPES IT ("TYO") UNTIL AN EOF IS ENCOUNTERED.
  159. AT THIS POINT, THE FILE IS CLOSED.
  160.  
  161.  
  162.  
  163. DIRECTORY ENTRY FORMAT:
  164.  
  165. WORD    CONTENTS
  166.  
  167. 0    1ST WORD OF NAME
  168.      (= -1 IF DELETED)
  169.      (=  0 IF END OF DIRECTORY)
  170.  
  171. 1    2ND WORD OF NAME
  172.  
  173. 2    3RD WORD OF NAME
  174.  
  175. 3    NUMBER OF FIRST BLOCK OF FILE (IN LEAST SIGNIFICANT 9 BITS)
  176.      (NUMBER OF FIRST FREE BLOCK IF 1ST WORD = 0)
  177.  
  178.     THE MOST SIGNIFICANT 7 BITS OF THIS WORD
  179.     ARE RESERVED FOR FUTURE USE AS ATTRIBUTE
  180.     BITS.
  181.  
  182.  
  183. FILE CONTROL TABLE FORMAT:
  184.  
  185. WORD    CONTENTS
  186.  
  187. 0    NUMBER OF FIRST BLOCK OF FILE
  188.     (= 0 IF NOT OPEN)
  189.  
  190. 1    CURRENT RELATIVE BLOCK NUMBER
  191.  
  192. 2    CURRENT RELATIVE BYTE NUMBER WITHIN CURRENT BLOCK
  193.  
  194.  
  195.  
  196. SAVING AND RESTORING CORE IMAGES
  197.  
  198.     TWO WORDS ARE PROVIDED WITHIN THE KERNEL WHICH
  199. ENABLE THE USER TO SAVE A "SNAPSHOT" OF THE DICTIONARY AND
  200. ALL STOIC VARIABLES IN A FILE AND, AT A LATER TIME, TO
  201. RESTORE THE SAVED STATE OF THE MACHINE AND RESUME EXECUTION.
  202. THEIR USE IS OUTLINED BELOW:
  203.  
  204.     'FILE WRCI    WRITE A CORE IMAGE INTO THE NAMED FILE
  205.  
  206.     'FILE RDCI    READ A CORE IMAGE FROM THE NAMED FILE
  207.  
  208.     THE CONTENTS OF THE I/O BUFFERS ARE NOT SAVED AS PART
  209. OF THE CORE IMAGE FILE, BUT ALL OTHER VARIABLES USED BY THE KERNEL,
  210. THE CONTENTS OF ALL STACKS, THE INTERRUPT DISPATCH TABLE, AND ALL
  211. USER DEFINITIONS ARE TRANSFERRED.
  212.  
  213.     CORE IMAGE FILES MUST BE REGENERATED WHENEVER A NEW VERSION
  214. OF THE KERNEL IS USED SINCE THE NEW USER DEFINITIONS REFERENCE
  215. ABSOLUTE LOCATIONS WITHIN THE KERNEL.
  216.  
  217.     "RDCI" SIZES MEMORY AFTER READING IN ITS CORE IMAGE AND THEN
  218. RESETS THE WORD "MEMORY" TO THE TOP OF MEMORY.  THIS PERMITS CORE
  219. IMAGES WRITTEN ON ONE MACHINE TO BE USED ON A MACHINE WITH A DIFFERENT
  220. AMOUNT OF MEMORY.
  221.  
  222.     CORE IMAGE FILES SAVE THE STATE OF THE COMPILE BUFFER AND
  223. PSEUDO-INSTRUCTION POINTER.  THUS, ANY CODE WHICH FOLLOWS THE CALL TO
  224. "WRCI" WILL BE EXECUTED UPON LOADING THE CORE IMAGE BY "RDCI".  FOR
  225. EXAMPLE:
  226.  
  227.     'INITIAL WRCI LIST-DIRECTORY
  228.  
  229. THIS COMMAND LINE WILL WRITE OUT A CORE IMAGE WITH THE NAME "INITIAL",
  230. AND THEN TYPE OUT A DIRECTORY LISTING.  WHEN THE CORE IMAGE IS READ IN:
  231.  
  232.     'INITIAL RDCI
  233.  
  234. THE STATE OF MEMORY WILL BE RESTORED TO THAT AT THE TIME OF THE "WRCI"
  235. AND EXECUTION WILL RESUME AT THE WORD FOLLOWING "WRCI", CAUSING A DIRECTORY
  236. LISTING TO BE GENERATED.
  237.  
  238.     TO GENERATE A BOOTSTRAPPABLE FILE CONTAINING THE STOIC KERNEL
  239. PLUS ALL CURRENT USER DEFINITIONS, THE FOLLOWING COMMAND IS USED:
  240.  
  241.     'FILE WRITE-BOOT    WRITES A BOOTSTRAP FILE.
  242.  
  243. THE BOOTSTRAP FILE CAN THEN BE LOADED DIRECTLY BY THE BOOTSTRAP BY
  244. RESPONDING WITH THE FILENAME TO THE INITIAL PROMPT.  "WRITE-BOOT", LIKE
  245. "WRCI" SAVES THE COMPILE BUFFER AND THUS CODE ENTERED FOLLOWING
  246. "WRITE-BOOT" WILL BE EXECUTED BY THE PROGRAM UPON BEING RELOADED.
  247. THUS, TO SET UP A PROGRAM TO EXECUTE IMMEDIATELY UPON BEING LOADED:
  248.  
  249.     'PROG WRITE-BOOT GO
  250.  
  251. THIS GENERATES A BOOTSTRAP FILE "PROG" WHICH, WHEN LOADED, WILL
  252. EXECUTE THDFILE, "GET" MUST RETURN AN EOF (^D).
  253.  
  254. 'NAME LOAD-FILE<CR>
  255.  
  256. WILL THEN COPY FROM THE INPUT DEVICE TO THE NAMED DISK FILE.
  257.  
  258. 8) LOAD THE EDITOR AND ANY OTHER PROGRAMS YOU NEED ONTO THE DISK.
  259.  
  260. 9) THE BASIC DEFINITIONS AND FILE SYSTEM PROGRAMS NEED NOT BE SAVED
  261.    ON THE DISK.
  262.  
  263.  
  264. THE LINE DRAWER AND INTERRUPT HANDLER ARE HIGHLY SYSTEM DEPENDENT
  265. AND ARE INCLUDED MAINLY AS GUIDELINES FOR WRITING YOUR OWN ROUTINES.
  266.  
  267.  
  268.  
  269.  
  270.  
  271. ***EOF***
  272.