( CrNewEqn)
( 11th July 2015)

CR ." CrNewEqun: "

( To create new file 'File<nn>' to hold matrix for simultaneous equations)
( - finds first available space and creates file name
  - then keyboard entry of matrix elemennts and storage as floating point numbers
  - enter matrix values first, check and then store)

( path$ points to "NGIO.Matrices" directory
  - then filenames eg "file05" for 5th matrix example)

: matrix_values  ( ...)  ( keyboard entry of matrix size and values)
  BEGIN
   CR ." Number of simultaneous equations (2 to 6): "
   QUERY INTERPRET
   DUP 1 6 twixt
  UNTIL           ( n...)   ( #rows )
  DUP #rows !  1+ #columns !
  BEGIN  zero_matrix
   #rows @ 0 DO
     #columns @ 0 DO  CR ." a(" J . ." ," I . ." ): "
                      QUERY INTERPRET FLOAT  
                      J  I  matrix !
                  LOOP
             LOOP                       
             CR ." Complete Matrix is: " CR dsp_matrix
    ?OK  ( ?Esc OR)
  UNTIL ;

: read_matrix  ( addr...)   ( file selected - file name at addr)
   OPENIN      ( h...)      ( file handle)
   read_word   ( h...h,n)   #rows !   ( h...h)
   read_word #columns !
   #rows @ 0 DO
       #columns @ 0 DO read_word  J I matrix !  LOOP
             LOOP
    CLOSE# ;

: store_matrix  ( addr...)         ( address of filename string)
    OPENOUT                        ( h...)  ( file handle)
    DUP #rows    @ store_word
    DUP #columns @ store_word
    #rows @ 0 DO
       #columns @ 0 DO   DUP J I matrix @ store_word   LOOP
              LOOP
    CLOSE# ;  
                         
( path$ preloaded)
: cr_newfile         ( ...)        ( for 'file<nn>' filename...)
  100 1 DO
   filename prefile$  STRCPY        ( 'file' in filename)
   I DUP  10 < IF filename zero$ STRCAT ENDIF
   obj$ STR$ DROP                   ( numeric string suffix - nos 01 to max)
   filename obj$ STRCAT
    CR  filename .STR KEY DROP             ( ...)
   filename DUP OPENIN                       ( addr,addr...addr,h)
   DUP 0= 0= IF CLOSE# DROP                  ( ...)
             ELSE DROP                       ( addr...)
              DUP CR ." matrix stored in data file: " .STR
              store_matrix LEAVE             ( ...)   
             ENDIF
   LOOP ;
  

: NewEqn  matrix_values ?store IF cr_newfile ENDIF ;




