Since switching to PB two years ago, we've put a lot of effort into planning ahead. As a result, we've put together about 100 macros that allow us to hide all the messy stuff that might cause problems in our code. Such as remembering when to use special characters like @ ? and *.
We've also set up all our modules and programs as classes, using a psuedo-OOP structure. The macros allow us to create code that is self documenting and that hides the details of procedure and variable names. This results in code that is not cluttered with "housekeeping" information.
Each class consists of two Include files - one for the interface and one for the methods. We need two separate files because PB is a single pass compiler. All the interfaces need to be defined before any of the class methods.
Later this year we hope to have all this documented on our web site.
Code: Select all
;===============================================
;
; File181 Class Interface : Package Menu Items
;
;===============================================
;
; strRecord181
;
Structure strRecord181
Field(nPackageKey, typDword) ; 14453 : package number (key)
Field(nPackageMenuKey, typDword) ; 14457 : package menu number (key)
Field(nMenuItemKey, typDword) ; 14458 : package menu item (key)
Field(cMenuItemType, typChar) ; 11689 : P=program S=separator X=exit
Field(nProgramNumber, typDword) ; 11690 : program number: 2000 - 2999
Field(sMenuItemText, typString) ; 11691 : menu item text
Field(cHotkeyChar, typChar) ; 11683 : hot key character: alphanumeric
Field(nHotkeyPosition, typDword) ; 11677 : hot key position in text
Field(cStateStartFlag, typChar) ; 12307 : menu state during sign-on
Field(cStateNormalFlag, typChar) ; 12308 : menu state during normal ops
Field(cStateCrashFlag, typChar) ; 12309 : menu state during crash recovery
Field(cStateInstallFlag, typChar) ; 14343 : menu state during install
Field(sNotUsed062, typString) ; 10024 :
EndStructure
;
;===============================================
;
; Interface
;
DeclareExternalFunction(File181, Create, typObject) ()
;
Interface objFile181
Func(Destroy, typObject) ()
Func(Clone, typObject) ()
Subr(Open) (ByRef(bruHcb, udtIsamHcb), ByVal(bvsPackageCode, typString), ByVal(bvdDateToday, typDate), ByVal(bvnBatch, typDword))
Subr(Close) (ByRef(bruHcb, udtIsamHcb))
Subr(EqualHigh) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(LowEqual) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Read) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32))
Subr(Next) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Previous) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Add) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
Subr(Update) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
Subr(Delete) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
Subr(First) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Last) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Empty) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
Subr(Find) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
Subr(Write) (ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
EndInterface
;
;===============================================
; end of : File181 Class Interface
;===============================================
Code: Select all
;===============================================
;
; File181 Class Methods Package Menu Items
;
;===============================================
;
; Properties
;
Structure strFile181
FieldPointer(prpVirtualTable) ; 16393 : pointer to the class virtual table
Field(priReferenceCount, typInt32) ; 16394 : class reference count
Field(proDvsam, objDvsam) ; 16395 : instance of the Dvsam class
EndStructure
;
;===============================================
;
; Declares
;
DeclarePrivateSubroutine(File181, GetRecord) (ByVal(Me, strFile181), ByRef(brrRecord, strRecord181))
DeclarePrivateSubroutine(File181, PutRecord) (ByVal(Me, strFile181), ByRef(brrRecord, strRecord181))
;
;===============================================
;
ExternalFunction(File181, Create, typObject) ()
;
; Create create a class instance
;
Local(Me, strFile181)
Me = AllocateMemory(SizeOf(strFile181))
If IsObject(Me)
InitializeStructure(Me, strFile181)
Me\prpVirtualTable = LabelPtr(File181, VirtualTable)
Me\priReferenceCount = 1
Me\proDvsam = CreateObject(Dvsam)
EndIf
ProcedureReturn Me
EndFunction
;
;===============================================
;
ExternalFunction(File181, Destroy, typObject) (ByVal(Me, strFile181))
;
; Destroy destroy a class instance
;
If IsObject(Me)
If Me\priReferenceCount > 1
Me\priReferenceCount = Me\priReferenceCount - 1
Else
Me\proDvsam = ReturnObject(Me\proDvsam, Destroy) ()
ClearStructure(Me, strFile181)
FreeMemory(Me)
EndIf
EndIf
ProcedureReturn 0
EndFunction
;
;===============================================
;
ExternalFunction(File181, Clone, typObject) (ByVal(Me, strFile181))
;
; Clone clone a class instance
;
If IsObject(Me)
Me\priReferenceCount = Me\priReferenceCount + 1
EndIf
ProcedureReturn Me
EndFunction
;
;===============================================
;
ExternalSubroutine(File181, Open) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByVal(bvsPackageCode, typString), ByVal(bvdDateToday, typDate), ByVal(bvnBatch, typDword))
;
; Open start file operations
;
; bruHcb 14869 : isam file handle control block
; bvsPackageCode 10001 : package code
; bvdDateToday 12312 : effective sign-on date
; bvnBatch 10305 : file batch number
;
;--} local data
Local(sPackageCode, typString) ; 10001 : package code
Local(sUniqueName, typString) ; 11236 : unique part of dos file name
Local(sFileExtension, typString) ; 14843 : dos file extension
Local(sStringValue, typString) ; 14890 : generic string value
Local(sDosFileName, typString) ; 14704 : dos file name: xxaaaaaa.nnn
Local(sFilePath, typString) ; 15040 : generic file path
;--} local code
sPackageCode = "DD"
sUniqueName = "MENITM"
sFileExtension = "181"
sDosFileName = sPackageCode + sUniqueName + #cCHAR_PERIOD + sFileExtension ; create file name
sFilePath = ReturnObject(Me\proDvsam, GetPath) (sDosFileName) ; create file path
CallObject(Me\proDvsam, DefineFile) (Ref(bruHcb), 181, "Package Menu Items", sFilePath, 120, 13, 1)
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 1, #vFIELD_DWORD, 0, 6) ; 14453 : package number (key)
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 2, #vFIELD_DWORD, 6, 3) ; 14457 : package menu number (key)
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 3, #vFIELD_DWORD, 9, 3) ; 14458 : package menu item (key)
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 4, #vFIELD_CHAR, 12, 1) ; 11689 : P=program S=separator X=exit
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 5, #vFIELD_DWORD, 13, 6) ; 11690 : program number: 2000 - 2999
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 6, #vFIELD_STRING, 19, 32) ; 11691 : menu item text
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 7, #vFIELD_CHAR, 51, 1) ; 11683 : hot key character: alphanumeric
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 8, #vFIELD_DWORD, 52, 2) ; 11677 : hot key position in text
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 9, #vFIELD_CHAR, 54, 1) ; 12307 : menu state during sign-on
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 10, #vFIELD_CHAR, 55, 1) ; 12308 : menu state during normal ops
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 11, #vFIELD_CHAR, 56, 1) ; 12309 : menu state during crash recovery
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 12, #vFIELD_CHAR, 57, 1) ; 14343 : menu state during install
CallObject(Me\proDvsam, DefineField) (Ref(bruHcb), 13, #vFIELD_STRING, 58, 62) ; 10024 :
CallObject(Me\proDvsam, DefineIndex) (Ref(bruHcb), 1, 1, 2, 3, 0, 0, 0, 0, 0)
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 1, "N") ; 11242 : Y = file is a report file
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 2, "N") ; 11243 : Y = generate a conversion pgm
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 3, "N") ; 11244 : Y = use date in file name
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 4, "N") ; 11245 : N=normal, S=station, B=batch
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 5, "E") ; 11246 : entity status: E=enter, C=code, T=test, D=doc, R=release, X=obs
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 6, "C") ; 11247 : C=cobol, B=basic, P=pascal
CallObject(Me\proDvsam, DefineUserFlag) (Ref(bruHcb), 7, "N") ; 11248 : Y = allow pkg code override
CallObject(Me\proDvsam, OpenFile) (Ref(bruHcb)) ; open file: 181 - Package Menu Items
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Close) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb))
;
; Close stop file operations
;
; bruHcb 14869 : isam file handle control block
;
CallObject(Me\proDvsam, CloseFile) (Ref(bruHcb)) ; close file
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, EqualHigh) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; EqualHigh read equal or high (next) record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, EqualHighRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, LowEqual) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; LowEqual read low (previous) or equal record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, LowEqualRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Read) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32))
;
; Read read a specific record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, ReadRecord) (Ref(bruHcb), bviIndex) ; retrieve record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Next) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; Next read the next record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, NextRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve next record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Previous) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; Previous read the previous record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, PreviousRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve previous record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Add) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
;
; Add add a new record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, AddRecord) (Ref(bruHcb)) ; add record
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Update) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
;
; Update update an existing record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, UpdateRecord) (Ref(bruHcb)) ; update record
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Delete) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
;
; Delete delete a record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, DeleteRecord) (Ref(bruHcb)) ; delete record
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, First) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; First read the first record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, FirstRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve first record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Last) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; Last read the last record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, LastRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; retrieve last record
If Ref(bruHcb)\iReturn = #iRETURN_OK
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Empty) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
;
; Empty build an empty record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
;
CallObject(Me\proDvsam, EmptyRecord) (Ref(bruHcb)) ; retrieve empty record
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Find) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181), ByVal(bviIndex, typInt32), ByVal(bviPartKeyParm, typInt32))
;
; Find find an equal or greater record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
; bviIndex 12061 : generic index number
; bviPartKeyParm 14906 : partial key: from parm
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, FindRecord) (Ref(bruHcb), bviIndex, bviPartKeyParm) ; find record
If Ref(bruHcb)\iReturn <> #iRETURN_KEY_NOT_FOUND
CallClass(File181, GetRecord) (Me, Ref(brrRecord)) ; move i/o buffer to record
EndIf
EndSubroutine
;
;===============================================
;
ExternalSubroutine(File181, Write) (ByVal(Me, strFile181), ByRef(bruHcb, udtIsamHcb), ByRef(brrRecord, strRecord181))
;
; Write write (add or update) a record
;
; bruHcb 14869 : isam file handle control block
; brrRecord 14708 : user data record
;
CallClass(File181, PutRecord) (Me, Ref(brrRecord)) ; put record in i/o buffer
CallObject(Me\proDvsam, WriteRecord) (Ref(bruHcb)) ; update or add a record
EndSubroutine
;
;===============================================
;
PrivateSubroutine(File181, GetRecord) (ByVal(Me, strFile181), ByRef(brrRecord, strRecord181))
;
; GetRecord get the record data
;
; brrRecord 14708 : user data record
;
Ref(brrRecord)\nPackageKey = ReturnObject(Me\proDvsam, GetDword) (1, 6)
Ref(brrRecord)\nPackageMenuKey = ReturnObject(Me\proDvsam, GetDword) (7, 3)
Ref(brrRecord)\nMenuItemKey = ReturnObject(Me\proDvsam, GetDword) (10, 3)
Ref(brrRecord)\cMenuItemType = ReturnObject(Me\proDvsam, GetChar) (13)
Ref(brrRecord)\nProgramNumber = ReturnObject(Me\proDvsam, GetDword) (14, 6)
Ref(brrRecord)\sMenuItemText = ReturnObject(Me\proDvsam, GetString) (20, 32)
Ref(brrRecord)\cHotkeyChar = ReturnObject(Me\proDvsam, GetChar) (52)
Ref(brrRecord)\nHotkeyPosition = ReturnObject(Me\proDvsam, GetDword) (53, 2)
Ref(brrRecord)\cStateStartFlag = ReturnObject(Me\proDvsam, GetChar) (55)
Ref(brrRecord)\cStateNormalFlag = ReturnObject(Me\proDvsam, GetChar) (56)
Ref(brrRecord)\cStateCrashFlag = ReturnObject(Me\proDvsam, GetChar) (57)
Ref(brrRecord)\cStateInstallFlag = ReturnObject(Me\proDvsam, GetChar) (58)
Ref(brrRecord)\sNotUsed062 = ReturnObject(Me\proDvsam, GetString) (59, 62)
EndSubroutine
;
;===============================================
;
PrivateSubroutine(File181, PutRecord) (ByVal(Me, strFile181), ByRef(brrRecord, strRecord181))
;
; PutRecord put the record data
;
; brrRecord 14708 : user data record
;
CallObject(Me\proDvsam, PutDword) (Ref(brrRecord)\nPackageKey, 1, 6)
CallObject(Me\proDvsam, PutDword) (Ref(brrRecord)\nPackageMenuKey, 7, 3)
CallObject(Me\proDvsam, PutDword) (Ref(brrRecord)\nMenuItemKey, 10, 3)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cMenuItemType, 13)
CallObject(Me\proDvsam, PutDword) (Ref(brrRecord)\nProgramNumber, 14, 6)
CallObject(Me\proDvsam, PutString) (Ref(brrRecord)\sMenuItemText, 20, 32)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cHotkeyChar, 52)
CallObject(Me\proDvsam, PutDword) (Ref(brrRecord)\nHotkeyPosition, 53, 2)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cStateStartFlag, 55)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cStateNormalFlag, 56)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cStateCrashFlag, 57)
CallObject(Me\proDvsam, PutChar) (Ref(brrRecord)\cStateInstallFlag, 58)
CallObject(Me\proDvsam, PutString) (Ref(brrRecord)\sNotUsed062, 59, 62)
EndSubroutine
;
;===============================================
;
; Virtual Table
;
DataSection
Label(File181, VirtualTable)
InterfaceFunction (File181, Destroy)
InterfaceFunction (File181, Clone)
InterfaceSubroutine (File181, Open)
InterfaceSubroutine (File181, Close)
InterfaceSubroutine (File181, EqualHigh)
InterfaceSubroutine (File181, LowEqual)
InterfaceSubroutine (File181, Read)
InterfaceSubroutine (File181, Next)
InterfaceSubroutine (File181, Previous)
InterfaceSubroutine (File181, Add)
InterfaceSubroutine (File181, Update)
InterfaceSubroutine (File181, Delete)
InterfaceSubroutine (File181, First)
InterfaceSubroutine (File181, Last)
InterfaceSubroutine (File181, Empty)
InterfaceSubroutine (File181, Find)
InterfaceSubroutine (File181, Write)
EndDataSection
;
;===============================================
; end of : File181 Class Methods
;===============================================