-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMemFile.bas
116 lines (102 loc) · 4.19 KB
/
MemFile.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
'-----------------------------------------------------------------------------------------------------------------------
' File I/O like routines for memory loaded files
' Copyright (c) 2024 Samuel Gomes
'-----------------------------------------------------------------------------------------------------------------------
$INCLUDEONCE
'$INCLUDE:'MemFile.bi'
'-----------------------------------------------------------------------------------------------------------------------
' TEST CODE
'-----------------------------------------------------------------------------------------------------------------------
'$DEBUG
'$CONSOLE:ONLY
'DIM sf AS _UNSIGNED _OFFSET: sf = MemFile_CreateFromString("This_is_a_test_buffer.")
'PRINT 1, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'PRINT 2, MemFile_ReadString(sf, 22)
'PRINT 3, MemFile_GetPosition(sf)
'PRINT 4, MemFile_IsEOF(sf)
'PRINT 5, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, MemFile_GetPosition(sf) - 1
'MemFile_WriteString sf, "! Now adding some more text."
'PRINT 6, MemFile_GetPosition(sf)
'PRINT 7, MemFile_IsEOF(sf)
'PRINT 8, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'PRINT 9, MemFile_GetPosition(sf)
'PRINT 10, MemFile_IsEOF(sf)
'PRINT 11, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'PRINT 12, MemFile_ReadString(sf, 49)
'PRINT 13, MemFile_GetPosition(sf)
'PRINT 14, MemFile_IsEOF(sf)
'PRINT 15, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'PRINT 16, CHR$(MemFile_ReadByte(sf))
'PRINT 17, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_WriteString sf, "XX"
'PRINT 18, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'PRINT 19, CHR$(MemFile_ReadByte(sf))
'MemFile_Seek sf, 0
'PRINT 20, MemFile_ReadString(sf, 49)
'PRINT 21, MemFile_GetPosition(sf)
'PRINT 22, MemFile_IsEOF(sf)
'PRINT 23, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteInteger sf, 420
'MemFile_Seek sf, 0
'PRINT 24, MemFile_ReadInteger(sf)
'PRINT 25, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteByte sf, 255
'MemFile_Seek sf, 0
'PRINT 26, MemFile_ReadByte(sf)
'PRINT 27, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteLong sf, 192000
'MemFile_Seek sf, 0
'PRINT 28, MemFile_ReadLong(sf)
'PRINT 29, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteSingle sf, 752.334
'MemFile_Seek sf, 0
'PRINT 30, MemFile_ReadSingle(sf)
'PRINT 31, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteDouble sf, 23232323.242423424#
'MemFile_Seek sf, 0
'PRINT 32, MemFile_ReadDouble(sf)
'PRINT 33, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Seek sf, 0
'MemFile_WriteInteger64 sf, 9999999999999999&&
'MemFile_Seek sf, 0
'PRINT 34, MemFile_ReadInteger64(sf)
'PRINT 35, MemFile_GetSize(sf), MemFile_GetPosition(sf)
'MemFile_Destroy sf
'END
'-----------------------------------------------------------------------------------------------------------------------
' Creates a MemFile from a string buffer
FUNCTION MemFile_CreateFromString~%& (src AS STRING)
MemFile_CreateFromString = MemFile_Create(_OFFSET(src), LEN(src))
END FUNCTION
' Reads and returns a string of length size
FUNCTION MemFile_ReadString$ (memFile AS _UNSIGNED _OFFSET, size AS _UNSIGNED LONG)
DIM dst AS STRING: dst = SPACE$(size)
MemFile_ReadString = LEFT$(dst, MemFile_Read(memFile, _OFFSET(dst), LEN(dst))) ' we'll allow partial string reads
END FUNCTION
' Writes a string
SUB MemFile_WriteString (memFile AS _UNSIGNED _OFFSET, src AS STRING)
DIM size AS _UNSIGNED LONG: size = LEN(src)
IF MemFile_Write(memFile, _OFFSET(src), size) <> size THEN
ERROR _ERR_ILLEGAL_FUNCTION_CALL
END IF
END SUB
' Reads a TYPE / ARRAY
SUB MemFile_ReadType (memFile AS _UNSIGNED _OFFSET, typeOffset AS _UNSIGNED _OFFSET, typeSize AS _UNSIGNED _OFFSET)
IF MemFile_Read(memFile, typeOffset, typeSize) <> typeSize THEN
ERROR _ERR_ILLEGAL_FUNCTION_CALL
END IF
END SUB
' Writes a TYPE / ARRAY
SUB MemFile_WriteType (memFile AS _UNSIGNED _OFFSET, typeOffset AS _UNSIGNED _OFFSET, typeSize AS _UNSIGNED _OFFSET)
IF MemFile_Write(memFile, typeOffset, typeSize) <> typeSize THEN
ERROR _ERR_ILLEGAL_FUNCTION_CALL
END IF
END SUB