; TEST3.ASM by Warren A. Ring ; ; This program shows how the warlib disk I/O routines work. You can open, ; create, rename, and delete files. Once open, you can close the file, or ; read, write, or seek in it. You can also display or modify records. ; In this example, we can create files with 16-byte fixed record lengths. ; Each record contains a phrase padded with spaces to make it 16 characters ; long. After exiting this program, you can see the exact hex bytes by ; entering "1>type opt h", where is the name of the ; file you created. section code include "macros.asm" Start ;Perform starting housekeeping X1 Display <'O)pen, C)reate, R)ename, D)elete, E)xit: '> ReadCon #Selection ;Get a selection from the console StrCmp #Selection,#O ;If the selection is not "O", BNE X2 ; then jump to X2 Display <'Which file? '> ReadCon #Filename1 ;Get a file name from the console Open #Filename1,File1;Try to open the file BEQ X1A ;If the file did not open, then jump to X1A Display <'The file is open',LF> BRA X10 ;Jump to X10 X1A Display <'There is no such file',LF> BRA X1 ;Jump to X1 X2 StrCmp #Selection,#C ;If the selection is not "C", BNE X3 ; then jump to X3 Display <'Which file? '> ReadCon #Filename1 ;Get a file name from the console Create #Filename1,File1;Try to create the file BEQ X2A ;If the file was not created, then jump to X2A Display <'The file is open',LF> BRA X10 ;Jump to X10 X2A Display <'I cannot create it',LF> BRA X1 ;Jump to X1 X3 StrCmp #Selection,#R ;If the selection is not "R", BNE X4 ; then jump to X4 Display <'Which file? '> ReadCon #Filename1 ;Get the old file name from the console Display <'New filename? '> ReadCon #Filename2 ;Get the new file name Rename #Filename1,#Filename2;Try to rename the file BEQ X3A ;If the file was not renamed, then jump to X3A Display <'The file is renamed',LF> BRA X1 ;Jump to X1 X3A Display <'I cannot rename it',LF> BRA X1 ;Jump to X1 X4 StrCmp #Selection,#D ;If the selection was not "D", BNE X5 ; then jump to X5 Display <'Which file? '> ReadCon #Filename1 ;Get a file name from the console Delete #Filename1 ;Try to delete the file BEQ X4A ;If the file was not deleted, then jump to X4A Display <'The file is deleted',LF> BRA X1 ;Jump to X1 X4A Display <'I cannot delete it',LF> BRA X1 ;Jump to X1 X5 StrCmp #Selection,#E ;If the selection was not "E", BNE X6 ; then jump to X6 Display <'Exiting...',10> BRA X99 ;Jump to X99 X6 BRA X1 ;Jump to X1 X10 Display <'C)lose, R)ead, W)rite, D)isplayRec, M)odifyRec, S)eek: '> ReadCon #Selection ;Get a selection from the console StrCmp #Selection,#C ;If the selection was not "C", BNE X11 ; then jump to X11 Close File1 ;Try to close the file (ignore any errors) BRA X1 ;Jump to X1 X11 StrCmp #Selection,#R ;If the selection was not "R", BNE X12 ; then jump to X12 Read File1,#Record1 ;Read a record from the file ADDQ.L #1,RecNum1 ;Increment the record number StrLen #Record1 ;If there were some bytes read, BNE X10 ; then jump to X10 Display <'Unwritten record',LF> BRA X10 ;Jump to X10 X12 StrCmp #Selection,#W ;If the selection was not "W", BNE X13 ; then jump to X13 ADDQ.L #1,RecNum1 ;Increment the record number Write File1,#Record1 ;Write a record to the file BGT X10 ;If any bytes were written, then jump to X10 Display <'Error',LF> BRA X10 ;Jump to X10 X13 StrCmp #Selection,#D ;If the selection was not "D", BNE X14 ; then jump to X14 Display <'Record '> ItoA RecNum1,#Selection;Convert the record number to ASCII WritCon #Selection ;Display the record number Display <', the word is "'> WritCon #Record1 ;Display the record Display <'"',LF> BRA X10 ;Jump to X10 X14 StrCmp #Selection,#M ;If the selection was not "W", BNE X15 ; then jump to X15 Display <'Enter a new word: '> ReadCon #Word ;Get a line from the console StrCpy #Spaces,#Record1;Pad the line with spaces to make it StrCpy #Word,#Record1 ; 16 chars long MOVE.L #16,D0 ;Assign the line length to 16 bytes MOVE.L D0,Record1+4 BRA X10 ;Jump to X10 X15 StrCmp #Selection,#S ;If the selection was not "S", BNE X16 ; then jump to X16 Display <'Enter the record number: '> ReadCon #Selection ;Get a record number from the console AtoI #Selection,RecNum1;Convert the record number from ASCII to binary MOVE.L RecNum1,D0 ;Convert the record number to a file offset LSL.L #4,D0 ; (by multiplying the record number by 16) MOVE.L D0,File1Offset Seek File1,File1Offset;Seek to the file offset BRA X10 ;Jump to X10 X16 BRA X10 ;Jump to X10 X99 Exit ;Perform ending housekeeping, and exit include "warlib.asm" section data String C,'C' String D,'D' String E,'E' String M,'M' String O,'O' String R,'R' String S,'S' String W,'W' String Spaces,<' '> StrBuf Filename1,16 StrBuf Filename2,16 StrBuf Word,16 StrBuf Record1,16 StrBuf Selection,16 File1 DC.L 0 RecNum1 DC.L 0 File1Offset DC.L 0 end