Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== FS_LOAD/IOF_LOAD ====== This trap loads a file into memory. ^Call Parameters^^Return Parameters^^ |D0.B|$48|D0.L|Error code.| |D1.L| |D1.L|Corrupted.| |D2.L|Length of file. |D2.L|Preserved.| |D3.W|Timeout.|D3.L|Preserved.| |A0.L|Channel ID. |A0.L|Preserved.| |A1.L|Address for load.|A1.L|1 past the location of the last byte.| ===== Errors ===== |ERR_NO|Channel not open.| ===== Notes ===== * All registers not shown above are not used on entry and are preserved on exit. * The space to which the file is loaded would normally have been allocated by Trap #1 MT_ALCHP/SMS_ACHP. * D3.W should always be set to -1 for a successful load. * The loading is done by "random access" not serially as with IO_FSTRG/IOB_FMUL. Perhaps for this reason it appears that if D2.L is set to a number not equal to the file length the whole file is nevertheless loaded. ===== Example ===== The example shows how to load a file called WIN1_FILE. There are two error exits, error and error1. The first does not have to tidy the stack; the second does. <code> fl dc.w fl_e-2 ; Length of filename dc.b "win1_file" ; Name fl_e ds.b 0 ; Label at end of name ds.w 0 ; Set to even byte load_f moveq #0,d3 ; OPEN lea fl,a0 ; Filename to A0 moveq #-1,d1 ; This job moveq #IO_OPEN,d0 trap #2 ; Open the file tst.l d0 ; OK? . . bne error ----> ; . . no! movea.l a0,a5 ; Keep the ID in A5 ; A0 now has the file ID. ; We now look at the header to get the length of the file. lea -64(a7),a7 ; Space for the header. moveq #64,d2 ; Length of space for header. movea.l a7,a1 ; Address for header. moveq #-1,d3 ; Timeout. moveq #FS_HEADR,d0 trap #3 ; Read the header. tst.l d0 ; OK? . . bne error1 ----> ; . . no! ; The header is now on the stack. move.l (a7),d1 ; File's length. moveq #-1,d2 ; This job moveq #MT_ALCHP,d0 trap #1 ; Get the space. tst.l d0 ; OK? . . bne error1 ----> ; . . no! ; Now A0 points to the allocated space and A5 to the file's ID ; We will now load the file. move.l (a7),d2 ; File's length lea 64(a7),a7 ; Tidy the stack moveq #-1,d3 ; Timeout. movea.l a0,a1 ; Address for loading. movea.l a5,a0 ; Replace the ID moveq #FS_LOAD,d0 trap #3 ; Load the file. tst.l d0 ; OK? . . bne error ----> ; . . no! moveq #IO_CLOSE,d0 tst.l d0 ; OK? . . bne error ----> ; . . no! ; There should be no error here, but it it JUST possible that ; someone else has closed the file before our attempt to do so! ; The file is now loaded. </code> qdosmsq/traps/trap_3/load.txt Last modified: 2009/02/21 17:38by george.gwilt