COMMENT @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

	Copyright (c) GeoWorks 1992 -- All Rights Reserved

PROJECT:	PC GEOS
MODULE:		ICLAS library
FILE:		iclas.def

AUTHOR:		David Loftesness, Jul 16, 1992

REVISION HISTORY:
	Name	Date		Description
	----	----		-----------
	DL	7/16/92		Initial revision

DESCRIPTION:
	This file defines iclas structures and routines
		
	$Id: iclas.def,v 1.1 97/04/04 14:23:08 newdeal Exp $

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@

include file.def
include system.def

SetDef	__ICLAS

StartLibrary	iclas



;-----------------------------------------------------------------------
;			General Iclas Errors
;-----------------------------------------------------------------------
IclasError	etype	word
ERROR_CLASS_DESCRIPTION_EXISTS			enum	IclasError
; The passed description cannot be used because a class by that name
; already exists
ERROR_CREATE_CLASS_FILE_ERROR			enum	IclasError
; IclasCreateClass had trouble manipulating files to create a class.
; This may be indicative of low disk space.
ERROR_INVALID_PATH				enum	IclasError
ERROR_MENU_FILE_ERROR				enum	IclasError
; Iclas had trouble updating a menu file
ERROR_USE_FILE_ERROR				enum	IclasError
; Iclas had trouble updating a use file
ERROR_CLSCLASS_ID_ERROR				enum	IclasError
; Iclas had trouble updating the CLSCLASS.IDS file
ERROR_CLASSIDS_CLS_ERROR			enum	IclasError
; Iclas had trouble updating the CLASSIDS.CLS file
ERROR_ITEM_FILE_ERROR				enum	IclasError
; Iclas had trouble updating or reading an item file
ERROR_STUDENT_ALREADY_IN_CLASS			enum	IclasError
; The student is already part of the given class' roster.
ERROR_PROGRAM_ALREADY_IN_FOLDER			enum	IclasError
; The program has already been added to this folder.
ERROR_INVALID_USER_TYPE				enum 	IclasError
; The type of user does not match the requested operation (for
; example, the caller attempted to add a teacher to a class)
ERROR_MAXIMUM_NUMBER_OF_CLASSES_REACHED		enum	IclasError
; Iclas could not create/add another class because the user already
; has the maximum number of classes
ERROR_MENU_FILE_FULL				enum	IclasError
; The menu file cannot contain any more entries.
ERROR_MENU_ALREADY_IN_USE_FILE			enum	IclasError
; The menu file being added to the .USE file alread exists
ERROR_MENU_FILE_CORRUPTED			enum	IclasError
; The menu file has been corrupted in some way.
ERROR_USE_FILE_FULL				enum	IclasError
; The .USE file has exceeded the specified limit on the number of lines (50 for
; students in a class).
ERROR_TOO_MANY_STUDENTS				enum	IclasError
; An attempt was made to add more than 50 students to a class.
ERROR_SEMAPHORE_TIMEOUT				enum	IclasError
; Couldn't grab the semaphore necessary to complete the operation

;-----------------------------------------------------------------------
;			Bookmark Errors
;-----------------------------------------------------------------------

ERROR_SHUTTING_DOWN_TO_LIST_BOOKMARKS			enum 	IclasError
ERROR_COULDNT_OPEN_CLS_FILE				enum 	IclasError
ERROR_COULDNT_CLOSE_CLS_FILE				enum 	IclasError
ERROR_COULDNT_GET_BKM_FILENAME_FOR_COURSEWARE		enum 	IclasError
ERROR_LISTING_NEW_BOOKMARKS				enum 	IclasError
; Courseware returned 0x30, 0x03 in the CLSCLASS.CLS file, meaning it
; was not able to provide a list of bookmarks.
;


;-------------------------------------------------------
; 		Types, Constants & Structures
;-------------------------------------------------------

; user item structure
USER_FULL_NAME_LENGTH 		equ 38
PROGRAM_FULL_NAME_LENGTH	equ 38
USER_ID_LENGTH 			equ 10
NETWARE_USER_ID_LENGTH		equ 47			; NW_BINDERY_OBJECT_NAME_LEN
USER_OTHER_INFO_LENGTH 		equ 3
CLASS_DESCRIPTION_LENGTH	equ 38
CLASS_DESCRIPTION_OFFSET	equ 2
		; offset to description in a .ITM file
CLASS_ID_LENGTH			equ 8
PROGRAM_ID_LENGTH		equ 8
USER_PADDED_ID_LENGTH		equ 12
USER_HOME_DIR_LENGTH		equ 12 + USER_PADDED_ID_LENGTH
				; F : \ STUDENTS \ USERID__.__ 0
MAX_ITEM_FILE_LENGTH		equ 256
ICLAS_USER_HOME_DIR_LENGTH	equ 1 + 8 + 1 + 8 + 1 + 2 + 1
				;   \ STUDENTS \ FOOBAR__ . __ 0
ICLAS_CLASS_DIR_LENGTH		equ 1 + 8 + 1 + 12 + 1 + 5 + 1 + 1
				;   \ CLASSES \ TEACHERI.D_ \ CLSNN 0
PRIMARY_MENU_CHAR		equ '#'
APP_MENU_CHAR			equ '-'
SPECIAL_UTILITY_CHAR		equ '|'

DEFAULT_LOGIN_DURATION		equ 15

DEFAULT_CLASS_TOKEN_FIRST_WORD	equ 'ba'
DEFAULT_CLASS_TOKEN_SECOND_WORD	equ '10'
DEFAULT_CLASS_TOKEN_DWORD	equ 'ba10'

DEFAULT_PROGRAM_TOKEN_FIRST_WORD	equ 'ba'
DEFAULT_PROGRAM_TOKEN_SECOND_WORD	equ '59'
DEFAULT_PROGRAM_TOKEN_DWORD		equ 'ba59'

MAX_STUDENTS_IN_CLASS		equ 50
MAX_CLASS_ID			equ 7

COURSEWARE_DESCRIPTION_LENGTH	equ 38
COURSEWARE_ID_LENGTH		equ 8
ID_FILE_NAME_LENGTH	= COURSEWARE_ID_LENGTH + 1 + 3 + 1   ; <id>.EXT,0
BKM_FILE_NAME_LENGTH	= COURSEWARE_ID_LENGTH + 1 + 3 + 1   ; <id>.BKM,0

CoursewareID	type	COURSEWARE_ID_LENGTH 	dup (char)    ; '.' padded
ClassID		type	MAX_CLASS_ID 		dup (char)    ; 'CLSnn.',0
UserPaddedID	type	USER_PADDED_ID_LENGTH 	dup (char)    ; 'T1______.__/'
UserPaddedIDZT	type	(USER_PADDED_ID_LENGTH + 1) dup (char)
BKMFileName	type	BKM_FILE_NAME_LENGTH 	dup (char)   ; <id>.BKM,0
IDFileName	type	ID_FILE_NAME_LENGTH 	dup (char)   ; <id>.EXT,0
HomeDir		type	(USER_HOME_DIR_LENGTH + 1) dup (char)
ProgramDescriptionZT	type	(PROGRAM_FULL_NAME_LENGTH + 1) dup (char)
UserIdType	type	USER_ID_LENGTH 		dup (char)

UserType	etype	byte
	UT_GENERIC	enum	UserType, 'G'
	UT_STUDENT	enum	UserType, 'S'
	UT_ADMIN	enum	UserType, 'A'	; This is sysop also
	UT_TEACHER	enum	UserType, 'T'
	UT_OFFICE	enum	UserType, 'O'
	UT_LOGIN	enum	UserType, 'L'	; not-logged in yet user

UserTypeRecord	record
	UTR_GENERIC:1
	UTR_STUDENT:1
	UTR_ADMIN:1				; This is sysop also
	UTR_TEACHER:1
	UTR_OFFICE:1
	UTR_LOGIN:1				; not-logged in yet
UserTypeRecord	end


UserOtherInfo	struct
	UOI_grade	char 2 dup (?)
	UOI_type	UserType
UserOtherInfo	ends

UserInfoStruct	struct
	UIS_namelen	byte	; length of the full name
	UIS_fullname	char USER_FULL_NAME_LENGTH 	dup (?)
	UIS_userid	UserIdType
	UIS_otherinfo	UserOtherInfo
UserInfoStruct	ends

UserPermissions record
	UP_DRIVES:1
	UP_SECURITY_LOCK:1
	UP_HOME_FOLDER:1
	UP_CREATE_FOLDER:1
	UP_DELETE_FILE:1
	UP_ASSISTED_LEVEL:1
	UP_SELF_GUIDED_LEVEL:1
	UP_MESSAGING:1
	:8
UserPermissions	end

;---------------------------------------------------------------------------
;	STANDARD STRUCTURE FOR PASSING CLASS INFORMATION
;---------------------------------------------------------------------------
IclasPathStruct		struct
	; teachId must be first
	IPS_teacherId	UserPaddedID
	IPS_classId	ClassID
IclasPathStruct		ends
	
ClassIDStruct	struct
	CIS_description	char CLASS_DESCRIPTION_LENGTH 	dup (?)
	CIS_teacherID	UserIdType
	CIS_classID	char CLASS_ID_LENGTH		dup (?)
	CIS_crlf	char C_CR, C_LF
ClassIDStruct	ends

;
; ClassMessagingState -- whether or not messaging is allowed in a
; class
;
ClassMessagingState	record
	CMS_YES:1
	CMS_NO:1
	CMS_ADMIN:1
ClassMessagingState	end

ClassMessages		etype	byte
	CM_NO		enum	ClassMessages, 0
	CM_YES		enum	ClassMessages, 1
	CM_ADMIN	enum	ClassMessages, 2


ClassInfo	struct
	CI_description	char CLASS_DESCRIPTION_LENGTH	dup (?)
	CI_class	IclasPathStruct
	CI_msgState	ClassMessagingState
ClassInfo	ends


IclasAutologLevel	etype	byte
	AUTOLOG_K2_LEVEL	enum IclasAutologLevel, 'K'
	AUTOLOG_GUIDED_LEVEL	enum IclasAutologLevel, 'G'
	AUTOLOG_UNGUIDED_LEVEL	enum IclasAutologLevel, 'U'

;
; ClasInfoCls - structure of CLASINFO.CLS files
;
ClasInfoCls	struct
	CIC_messaging		byte
	CIC_loginDuration	byte
	CIC_autologUILevel	IclasAutologLevel
ClasInfoCls	ends


; common item header structure for user, courseware, special utiltiy and office
;   utility
ItemInfoHeader	struct
	IIH_offsetToName	word
	IIH_nameLength		word
	IIH_offsetBase		label	byte	; IIH_offsetToName is relative
						; to this label
ItemInfoHeader	ends


; TYPE:		BookmarkType
;
; NOTES:	often passed around in two registers (like a dword)
;
; EXAMPLE:	cxdx 	= BookmarkType
;		ch	= BT_disk
;		cl	= BT_unit
;		dh	= BT_lesson
;		dl	= BT_activity
;
BookmarkType	struct
	BT_disk		byte
	BT_unit		byte
	BT_lesson	byte
	BT_activity	byte
BookmarkType	ends

BookmarkInfoStruct	struct
	BIS_listInfo	ItemInfoHeader
	BIS_bookmark	BookmarkType
	BIS_desc	label	char
BookmarkInfoStruct	ends

BookmarkListFlags	record
	BLF_LIST_MADE:1			; is list on disk already?
BookmarkListFlags	end

IclasCoursewareType	etype	byte
	NOT_BOOKMARKABLE	enum IclasCoursewareType, 0
	OLD_BOOKMARK		enum IclasCoursewareType, 'O'
	MID1_BOOKMARK		enum IclasCoursewareType, '1'
	MID2_BOOKMARK		enum IclasCoursewareType, '2'
	NEW_BOOKMARK		enum IclasCoursewareType, 'N'
	GEOS_BOOKMARK		enum IclasCoursewareType, 'G'

;
; LoggingState -- whether or not logging is enabled for this courseware
;
LoggingState	etype	byte
	LS_OFF			enum	LoggingState
	LS_ON			enum	LoggingState

;
; ProgramLinkName -- geos file name for a link to a courseware or special
; utility's item file.
;
PROGRAM_SHORT_DESC_LEN		equ	23

ProgramLinkName			struct
	PLN_shortDesc		char	PROGRAM_SHORT_DESC_LEN dup (?)
	PLN_type		char		; either 'C' for courseware and
						; office apps or 'S' for spec. utils
	PLN_progID		char	PROGRAM_ID_LENGTH dup (?)
ProgramLinkName		ends

;
; ProgramExtraData -- data stored with each courseware or special utility link
;
ProgramExtraData	struct
	PED_type	IclasCoursewareType
	PED_logging	LoggingState
	PED_description	ProgramDescriptionZT
ProgramExtraData	ends

;
; ClassLinkName -- geos file name for a link to a class.
;
CLASS_SHORT_DESC_LEN	equ	20

ClassLinkName			struct
	CLN_shortDesc		char CLASS_SHORT_DESC_LEN dup (?)
	CLN_classID		char 2 dup (?)		; 2-digit class id
	CLN_teacherID		char USER_ID_LENGTH dup (?)
ClassLinkName			ends

;
; ClassExtraData -- extra data stored in every class link
;
ClassExtraData			struct
	CED_description		char CLASS_DESCRIPTION_LENGTH
ClassExtraData			ends

;
; enum for IclasChangeDir
; NOTE: if you change the order of this enum, the order of the table
; in dirVariable.def must be changed
;
IclasDirType	etype	byte
	IDT_ROOT	enum	IclasDirType, 0
	IDT_STUDENTS	enum	IclasDirType, 1
	IDT_TEACHERS	enum	IclasDirType, 2
	IDT_OFFICE	enum	IclasDirType, 3
	IDT_LOGS	enum	IclasDirType, 4
	IDT_COURSES	enum	IclasDirType, 5
	IDT_ADMIN	enum	IclasDirType, 6
	IDT_CLASSES	enum	IclasDirType, 7
	IDT_TMENUS	enum	IclasDirType, 8
	IDT_SMENUS	enum	IclasDirType, 9
	IDT_OMENUS	enum	IclasDirType, 10
	IDT_SPECUTIL	enum	IclasDirType, 11
	IDT_OFFICEAPP	enum	IclasDirType, 12
	IDT_PUBLIC	enum	IclasDirType, 13
	IDT_GENERICS	enum	IclasDirType, 14
	IDT_OFFCLASS	enum	IclasDirType, 15
	IDT_LOGIN	enum	IclasDirType, 16

BAListListType	etype	byte
	BLT_NULL		enum	BAListListType	; for subclasses of
							;   BAListClass
	BLT_COURSEWARE		enum	BAListListType
	BLT_SPECIAL_UTIL	enum	BAListListType
	BLT_OFFICE_APP		enum	BAListListType
	BLT_PEOPLE		enum	BAListListType

;---------------------------------------------------------------------------
;	STANDARD STRUCTURE FOR PASSING LAUNCHING
;---------------------------------------------------------------------------
IclasSpawnLaunchInfoStruct	struct
	ISLIS_myHandle	hptr
	;
	; Should be name of courseware being run without links being evaluated.
	; eg. "\TEACHERS\RABT____.__\DESKTOP\Classes\My class 1\Algebra 1"
	; ISLIS_linkDiskHandle should be used to specify disk (home volume)
	ISLIS_fullSymbolicName	char	\
			 (FILE_LONGNAME_BUFFER_SIZE + PATH_LENGTH) dup (?)
	;
	; Should be DOS name of folder that holds courseware
	; eg. "\CLASSES\RONT____.__\CLS1"
	ISLIS_actualContainingFolder char	\
			 (FILE_LONGNAME_BUFFER_SIZE + PATH_LENGTH) dup (?)
	;
	; Should be complete DOS path to .itm file
	; eg. "\COURSES\A1P1\A1P1_.ITM"
	; ISLIS_targetDiskHandle should be used to specify drive
	ISLIS_coursewareTarget	char			\
			 (FILE_LONGNAME_BUFFER_SIZE + PATH_LENGTH) dup (?)
	ISLIS_targetDiskHandle	word
	ISLIS_linkDiskHandle word
IclasSpawnLaunchInfoStruct	ends

;---------------------------------------------------------------------------
;	STANDARD STRUCTURE FOR PASSING COURSEWARE INFORMATION
;---------------------------------------------------------------------------
CoursewareInfoStruct	struct
	CIS_type	IclasCoursewareType		; only needed for
							; bookmarks
	CIS_logging	LoggingState			; only needed for
							; running courseware
	CIS_path	IclasPathStruct
	CIS_filename	BKMFileName			; " "
	CIS_appId	IDFileName
	CIS_fullName	FileLongName			; " "
CoursewareInfoStruct	ends

;---------------------------------------------------------------------------
;	STANDARD STRUCTURE FOR PASSING INFORMATION TO APPLICATIONS
;---------------------------------------------------------------------------
IclasArgumentBlock	struct
;	appInfo MUST BE first item struct
	IAB_appInfo		CoursewareInfoStruct
	IAB_FQTBlock		hptr
	IAB_extraData		label	byte
IclasArgumentBlock	ends



IclasGeodeAppType	etype	word, 0, 2
	IGAT_COURSEWARE		enum	IclasGeodeAppType
	IGAT_REPORTS		enum 	IclasGeodeAppType
	IGAT_BOOKMARKS		enum	IclasGeodeAppType
	IGAT_AUTOLOGIN		enum	IclasGeodeAppType
	IGAT_REMOVE_OLD_FILES	enum	IclasGeodeAppType
	IGAT_LISTS		enum	IclasGeodeAppType
	IGAT_DISTRIBUTE_FILES	enum	IclasGeodeAppType


IclasIStartupRoom	etype	word
	IIR_LOGIN_ROOM		enum	IclasIStartupRoom
	IIR_K2_ROOM		enum	IclasIStartupRoom
	IIR_GUIDED_ROOM		enum	IclasIStartupRoom
	IIR_UNGUIDED_ROOM	enum	IclasIStartupRoom
	

;
; .USE file structure is fixed.  Note the shortened space for a full
; name.  If the name cannot fit within the 25 letters, it is truncated
; so that the last three characters are an ellipsis "...".
; Also note that not all directories are off of SYS:\STUDENTS\MENUS.
; Generic users must come off of SYS:\GENERICS\MENUS.  The extra space
; in this field comes from the IBM source--I don't know why it is
; there.
;
; IBM source reference: class_student_list_record in clssplst.h
;
USEFILE_FULLNAME_LENGTH	equ 25
USEFILE_FILE_SPEC_LENGTH equ 64
USEFILE_WORKSTATION_LENGTH equ 3

ClassUsefileLine	struct
	CUL_fullname	char USEFILE_FULLNAME_LENGTH dup (C_SPACE)
	CUL_open	char C_LEFT_PAREN
	CUL_userid	UserIdType
	CUL_close	char C_RIGHT_PAREN
	CUL_file_spec	char USEFILE_FILE_SPEC_LENGTH dup (C_SPACE)
	CUL_workstation char USEFILE_WORKSTATION_LENGTH dup (C_SPACE)
	CUL_cr		char C_CR
	CUL_lf		char C_LF
ClassUsefileLine	ends

ClassUsefileLineNull	struct
	CULN_common	ClassUsefileLine
	CULN_null	byte
ClassUsefileLineNull	ends

;
; How student's names appear in Roster folders
;

STUDENT_FULLNAME_LENGTH equ 20

StudentName		struct
	SN_fullname	char STUDENT_FULLNAME_LENGTH dup (C_SPACE)
	SN_open		char C_LEFT_PAREN
	SN_userid	UserIdType
	SN_close	char C_RIGHT_PAREN
StudentName		ends

StudentNameZero		struct
	SNZ_main	StudentName
	SNZ_null	char C_NULL
StudentNameZero		ends

StudentUsefileUnion	union
	SNZ		StudentNameZero
	CULN		ClassUsefileLineNull
StudentUsefileUnion	end


;
; For calling IclasDosExec
;

IclasMemStruct	struct
	IMS_useGTS	BooleanByte
	IMS_memReq	DosExecArgAndMemReqsStruct
IclasMemStruct	ends

;---------------------------------------------------------------------------
;		Constants used with BAListClass
;---------------------------------------------------------------------------
NUM_CARRAYS		equ	40	; max. # of carrays in one list obj
BALIST_MAX_SELECTIONS	equ	50	; max. # of selections a list returns

BAListChunkArrayTable	type	NUM_CARRAYS	dup (optr)

;---------------------------------------------------------------------------
;		Errors returned by BAListClass messages
;---------------------------------------------------------------------------
ListsErrorType	etype	word
LET_FILE_OPEN		enum	ListsErrorType
LET_FILE_TOO_BIG	enum	ListsErrorType
LET_FILE_READ		enum	ListsErrorType
LET_FILE_CLOSE		enum	ListsErrorType	; redundant! Can do nothing.
LET_OUT_OF_MEM		enum	ListsErrorType
LET_TOO_MANY_SELECTIONS	enum	ListsErrorType


;-------------------------------------------------------
;		ICLAS Class definitions
;-------------------------------------------------------
BAListClass	class	GenDynamicListClass


;------------------------------------------------------------------------------
;	Methods
;------------------------------------------------------------------------------

MSG_BALIST_GET_LIST	message
; Tells a BAListClass object to prepare chunk arrays of list items.  Default
; handler sends itself a MSG_BALIST_BUILD_???_LIST (depending on BLI_listType)
; to actually build the chunk arrays.
;
; Objects that already has chunk arrays stored will ignore this message.
;
; Context:	Can be called any time
; Source:	Anyone
; Destination:  Any BAListClass Object
; Interception: Generally not intercepted.  SubClasses should intercept MSG_
;		BALIST_BUILD_LIST instead
;
; Pass:		nothing
; Return:	CF clear if no error
;		ax	= total # of items, including those filtered out
;		CF set on error
;		ax	= ListsErrorType
; Destroyed:	cx, dx, bp


MSG_BALIST_BUILD_LIST				message
MSG_BALIST_BUILD_PEOPLE_LIST			message
MSG_BALIST_BUILD_COURSEWARE_LIST		message
MSG_BALIST_BUILD_SPECIAL_UTILITIES_LIST		message
MSG_BALIST_BUILD_OFFICE_APPLICATIONS_LIST	message
; The above MSG_BALIST_BUILD_???_LIST methods all share the following
; common API:
;
; Context:	BAListClass list building mechanism
; Source:	MSG_BALIST_GET_LIST method handler of object itself
; Destination:	Any BAListClass object
; Interception:	MSG_BALIST_BUILD_LIST can be intercepted by subclass
;		of BAListClass to provide custom build list function.
;		The others are unlike to be intercepted
; Pass:		nothing
; Returns:	ax	= ListErrorType
;		cx	= total # of elements
;		dx	= segment of carray list
;		bp	= hptr of locked carray list
;		CF	= set on error


MSG_BALIST_PURGE_LIST	message
; Free chunk arrays stored in BAListClass object.  Also clears screen display.
;
; Context:	Can be called anytime.
; Source:	Anyone
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_BALIST_FILTER_LIST	message
; Performs a "search" function over the list items.  Keeps only items matching
; search criteria on screen.  Search criteria are obtained from
; BLI_searchText, and (for BLT_PEOPLE) BLI_userTypeItemGroup and
; BLI_gradeValue.  All previously selected items are kept on screen, regardless
; of matching result.
;
; Context:	Can be called anytime.
; Source:	Anyone
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_BALIST_GET_SELECTED_ITEMS	message
; Returns a chunk array containing selected items.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination	BAListClass object
; Interception:	Generally not intercepted
;
; Pass:		nothing
; Return:	CF clear if no error
;		ax	= # of selected items
;		*cx:dx	= chunk array of selected item structures
;			  (locked).
;		CF set if error
;		ax	= ListErrorType
; Destroyed:	none (cx, dx destroyed in case nothing is selected)


MSG_BALIST_GET_SELECTED_ITEMS_FQT	message
; Returns a FileQuickTransfer block and (optionally) a chunk array of
; selected items.  Block returned in bp begins with FileQuickTransferHeader
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination	BAListClass object
; Interception:	Generally not intercepted
; Pass:		bp	= zero if only FQT block is returned, non-zero
;			  if both FQT and Chunk array are returned.
; Return:	CF clear if no error
;		ax	= # of selections
;		bp	= hptr of FQT block (no FQT block returned if no
;			  selection (i.e. ax returned 0)
;		^lcx:dx	= chunk array (if bp passed non-zero)
;		CF set on error
;		ax	= ListErrorType
; Destroyed:	cx, dx, bp


MSG_BALIST_GET_ITEMS_MATCHING_IDS	message
; Returns a chunk array of items matching the given ID's.  The returned chunk
; array is created in the same block that contains the passed ID chunk array.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination	BAListClass object
; Interception:	Generally not intercepted
;
; Pass: 	*cx:dx	= chunk array (variable-sized) of ID's to be
;			  matched
;			  For BLT_PEOPLE, ID's should be space-padded.
;			  For other list types, ID's should be
;			  CR-terminated.
; Return:	*cx:dx	= chunk array of items in the same block
;			  as passed in cx (block possibly moved)
;			  (no array returned if no seln)
;		ax	= # of matching items
;		CF set if error
;		ax	= ListErrorType
; Destroyed:	On return, passed chunk array will contain only ID's that
;		cannot be matchined with any items.


MSG_BALIST_GET_ITEMS_FQT_MATCHING_IDS	message
; Returns a FileQuickTransfer block of selected items.  Optionally a chunk
; array of selected items can also be returned.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination	BAListClass object
; Interception:	Generally not intercepted
;
; Pass: 	*cx:dx	= chunk array (variable-sized) of ID's to be
;			  matched
;			  For BLT_PEOPLE, ID's should be space-padded.
;			  For other list types, ID's should be
;			  CR-terminated.
;		bp	= zero if only FQT block is returned, non-zero
;			  if both FQT and chink array are returned.
; Return:	CF clear if no error
;		ax	= # of selections
;		bp	= hptr of FQT block (no FQT block returned if no seln)
;		^lcx:dx	= chunk array (if bp passed non-zero and there is seln)
;		CF set on error
;		ax	= ListErrorType
; Destroyed:	cx, dx, bp


MSG_BALIST_START_COPY_ITEM	message
; Start move/copy (dragging by mouse) mechanism, but only copy is supported.
; Object will register QuickTransfer block with system clipboard.
;
; Context:	UI mouse dragging mechanism
; Source:	MSG_META_START_MOVE_COPY handler of BAListItemClass objects.
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx, dx


MSG_BALIST_RUN_SELECTED_ITEM	message
; Runs the selected program in the courseware / special utilities list.
; Eventually calls IclasExecItemLine to do the actual execution.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx ,dx, bp


MSG_BALIST_SET_ALL_SELECTED	message
; Automatically selects all the items on screen.  Items that were filtered out
; during the last search (hence are no longer on screen) remains un-selected.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx ,dx, bp


MSG_BALIST_GET_QUICK_TRANSFER_RESTRICTION	message
; Returns whether quick transfer is allowed on this object
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  BAListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	CF set if quick transfer is allowed
;		CF clear if quick transfer is NOT allowed
; Destroyed:	nothing


MSG_BALIST_UPDATE_STATUS	message
; Usually sent by the BAList to itself via the GenItemGroup's
; status message mechanism.  Used by the BAList to update the
; add and run trigger (if present) depending on whether there
; are selections present or not.
; Usually specified with ATTR_GEN_ITEM_GROUP_STATUS_MSG of the BAListClass obj.
;
; Context:	UI item group update mechanism
; Source:	UI
; Destination:	BAListClass object
; Interception: Generally not intercepted.
;
; Pass:		cx	= current selection, or first selection in item group,
;			  if more than one selection, or GIGS_NONE if no
;			  selection
;		dl	= GenItemGroupStateFlags
;		bp	= number of selections
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_BALIST_SHOW_ALL_ITEMS	message
; Tells the BAList to clear it's search criteria stored in objects and
; re-filter the list, effectively reverting to the original
; items in the list.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:	BAListClass object
; Interception:	Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_BALIST_SET_SELECTIONS_AFTER_FILTER		message
; Sets the selections after a search.  This is done in a separate message
; rather than within the MSG_BALIST_FILTER_LIST handle in order to avoid
; nested Vis update problem.
; MSG_GEN_ITEM_GROUP_SET_MULTIPLE_SELECTION can be used for general purpose.
;
; Context:	*** INTERNAL USE ONLY!!! ***
; Source:	Sent by MSG_BALIST_FILTER_LIST handler ONLY
; Destination:	Same object as source
; Interception:	DO NOT INTERCEPT!
;
; Pass:		cx:dx	= selection buffer
;		bp	= # of selections
; Return:	nothing
; Destroy:	ax, cx, dx, bp


MSG_BALIST_NO_MATCH_AFTER_FILTER	message
; Context:	*** INTERNAL USE ONLY!!! ***
; Source:	UI (MSG_GEN_APPLICATION_DO_STANDARD_DIALOG handler)
; Destination:	BAListClass object
; Interception:	Genrally not intercepted
;
; Pass:		cx	= InteractionCommand of response trigger in standard
;			  dialog
; Return:	nothing
; Destroy:	ax, cx, dx, bp


;------------------------------------------------------------------------------
;			Instance data
;------------------------------------------------------------------------------

	BLI_cArrayList		optr    NUM_CARRAYS     dup (null)
	noreloc	BLI_cArrayList
	; array of chunk array optr's storing elts

	BLI_arrayNumElts	word	0
	; total # of elts in all chunk arrays

	BLI_indexTableHandle	hptr.word	null
	noreloc BLI_indexTableHandle
	; index table containing elt numbers of only those elts that match
	; the current search criteria.

	BLI_searchText		optr	null
	; BAListType object that contains text for filtering

	BLI_listType		BAListListType	BLT_NULL
	; list type (should be BLT_NULL for objects of any subclass)

	BLI_addTrigger		optr	null
	; Trigger used to begin an Add From List operation.

	BLI_runTrigger		optr	null
	; Trigger used to send a MSG_BALIST_RUN_SELECTED_ITEM to the
	; BAListClass object

	BLI_showAllTrigger	optr	null
	; Trigger used to cancel a search and show all the items

	BLI_allowQuickTransfer	byte	FALSE
	; non-zero if quick transfer is allowed

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	; The following are only used for BLT_PEOPLE ;
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BLI_userTypeItemGroup	optr	null
	; GenItemGroup containing user types

	BLI_gradeItemGroup	optr	null
	; GenItemGroup containing grade buttons

	BLI_gradeValue		optr	null
	; GenValue containing grade level

	BLI_searchTextBoolGroup	optr	null
	; GenBooleanGroup containing only the "by name" button

BAListClass	endc


;;---------------------------------------------------------------------
;;
;; BAInClassList -- Use to show a list of items in a class.
;;
;;	types:	BLT_NULL	- displays students in a class
;;		BLT_COURSEWARE	- displays courseware in a class
;;
;;---------------------------------------------------------------------
BAInClassListClass	class	BAListClass
	MSG_IN_CLASS_LIST_SET_CLASS	message
	;
	; Sets the class for which to list items.
	;
	;	PASS:		cx:dx	= IclasPathStruct
	;	RETURN:		nothing
	;	DESTROYED:	nothing

	BICLI_path	IclasPathStruct
	BICLI_exclGeneric	byte	FALSE	; non-zero if exclude generics
BAInClassListClass	endc

;;---------------------------------------------------------------------
;;
;; BAInClassList -- Use to show a list of activities for a piece of
;; 		    courseware.
;;
;;	types:	BLT_NULL	- displays bookmarks for courseware
;;
;;---------------------------------------------------------------------
BABookmarkListClass	class	BAListClass
	MSG_BOOKMARK_LIST_SET_COURSEWARE	message
	; Sets the courseware for which to list activities.
	;
	; PASS:		cx:dx	= CoursewareInfoStruct
	; RETURN:		nothing
	; DESTROYED:	nothing

	MSG_BOOKMARK_LIST_SELECT_ITEMS_MATCHING_BOOKMARK	message
	; Selects the item in the list that matches the bookmark {unit,
	; lesson, activity}
	;
	; PASS:		cx:dx	= BookmarkType
	;		ch	= BT_disk
	;		cl	= BT_unit
	;		dh	= BT_lesson
	;		dl	= BT_activity
	; RETURN:	CF clear if found, set if not found
	; DESTROYED:	nothing

	MSG_BA_BOOKMARK_LIST_ATTACH	message
	; pass the MSG_META_ATTACH message onto the superclass
	; This is used instead of calling ObjCallSuperNoLock
	; directly so that this message can be delayed before
	; passed onto the superclass
	;
	; PASS:		cx, dx	= as wanted by MSG_META_ATTACH
	; RETURN:	nothing
	; DESTROYED:	ax, cx, dx, bp

	BBLI_courseware		CoursewareInfoStruct
	BBLI_flags		BookmarkListFlags
BABookmarkListClass	endc



BAListGradeValueClass	class	GenValueClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_BALIST_GRADE_VALUE_CHANGE_STATE	message
; Change the enable/disable state.
; This routine assumes this BAListGradeValue object is the only object
; in the parent GenBooleanGroup, or that it is in a
; GenItemGroup, the enabling button with identifier 1 and the
; disabling button with identifier 0.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  BAListGradeValueClass object
; Interception: Generally not intercepted
; Pass:		cx	= Booleans currently selected, or "True"
;			  (GIGI_selectedBooleans)
;		dx	= Booleans whose state is indeterminate
;			  (GIGI_indeterminateBooleans)
;		bp	= Booleans whose state have been modified
;			  (GIGI_modifiedBooleans)
; Return:	nothing
; Destroyed:	ax, cx, dx, bp

BAListGradeValueClass	endc


; max len of search text that user can type, used by BAListTextClass
MAX_FILTER_TEXT_LENGTH	equ	20


BAListTextClass	class	GenTextClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_BALIST_TEXT_CHANGE_STATE	message
; Change the enable/disable state.
; This routine assumes this BAListText object is the only object
; in the parent GenBooleanGroup.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  BAListGradeValueClass object
; Interception: Generally not intercepted
; Pass:		cx	= Booleans currently selected, or "True"
;			  (GIGI_selectedBooleans)
;		dx	= Booleans whose state is indeterminate
;			  (GIGI_indeterminateBooleans)
;		bp	= Booleans whose state have been modified
;			  (GIGI_modifiedBooleans)
; Return:	nothing
; Destroyed:	ax, cx, dx, bp

BAListTextClass	endc


IclasProgListClass	class	GenDynamicListClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_ICLAS_PROG_LIST_GET_NUMB_ITEMS	message
; Get the number of items in the program list
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		nothing
; Return:	cx	= number of items
; Destroyed:	none


MSG_ICLAS_PROG_LIST_INIT	message
; See if the program list was already created.  If not, create it.
; Chunk array is created in same object block.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		nothing
; Return:	cx	= number of items in prog list
; Destroyed:	none


MSG_ICLAS_PROG_LIST_PURGE_LIST	message
; Free program list from memory.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax


MSG_ICLAS_PROG_LIST_MONIKER_QUERY	message
; Message to start updating item moniker
;
; Context:	Can be called anytime
; Source:	Anyone (usually object itself)
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		^lcx:dx	= GenDynamicList (usually object itself)
;		bp	= entry # of requested moniker
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_ICLAS_PROG_LIST_GET_ID	message
; Get a specific program ID.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		cx:dx	= buffer for ID
;		bp	= ID number
; Return:	ax	= size
; Destroyed:	none


MSG_ICLAS_PROG_LIST_GET_DESCRIPTION	message
; Get a specific program description.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		cx:dx	= buffer for description
;		bp	= program numger
; Return:	cx	= length (not including null)
; Destroyed:	nothing


MSG_ICLAS_PROG_LIST_FILTER	message
; Filters out lines that start with a '|'.  Filters both description and ID.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		nothing
; Return:	cx	= new number of items
; Destroyed:	nothing


MSG_ICLAS_PROG_LIST_SET_CLASS	message
; Sets the class for which the class list will list its various items
; (students, courseware, etc.)  A MSG_ICLAS_PROG_LIST_INIT should follow
; to change the list content to reflect the new class
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		cx:dx	= IclasPathStruct of new class
; Return:	nothing
; Destroyed:	nothing


MSG_ICLAS_PROG_LIST_ID_TO_ENTRY	message
; Find entry number of given ID
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		cx:dx	= fptr to ID
;		bp	= 1 if want to add ID, 0 if don't want to add
; Return:	cx	= entry number of ID
;		dx	= 0 if entry existed
;			= 1 if entry did not exist
;			= 2 if entry existed but no real description
; Destroyed:	nothing


MSG_ICLAS_PROG_LIST_ADD_SUM_FILES	message
; Searches current dir and adds programs with .sum files to the program list
; if it's not already there.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasProgListClass object
; Interception: Unlikely
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	nothing


;------------------------------------------------------------------------------
;		Instance data
;------------------------------------------------------------------------------
	; the chunk arrays will be created in the same block 
	; as the Prog List.
	
	IPLCI_idHandle		lptr
	IPLCI_descHandle	lptr
	IPLCI_filter		byte
IclasProgListClass	endc	


IclasClassesListClass	class	GenDynamicListClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_ICLAS_CLASSES_LIST_GET_LIST	message
; Build a list of classes that the current user teaches and store it.
; The current user must be a teacher.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasClassesListClasss object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	cx	= # of classes of this teacher
; Destroyed:	ax


MSG_ICLAS_CLASSES_LIST_PURGE_LIST	message
; Free array of classes stored in object from memory
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasClassesListClass object
; Interception: Generally not intercepted
;
; Pass:		nothing
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_ICLAS_CLASSES_LIST_GET_SELECTED_CLASS	message
; Returns the ClassIDStruct of the selected class
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasClassesListClas object
; Interception: Generally not intercepted
;
; Pass:		cx:dx	= ClassIDStruct buffer to fill in
; Return:	CF set if no class selected
; Destroyed:	ax


;------------------------------------------------------------------------------
;		Instance data
;------------------------------------------------------------------------------

	ICLI_classArray	optr	null

IclasClassesListClass	endc


ModalInteractionClass	class	GenInteractionClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_MODAL_INTERACTION_SWITCH_TO	message
; Switchs from one modal interaction to another.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:	ModalInteractionClass object
; Interception:	Unlikely
;
; Pass:		^ldx:cx	= ModalInteractionClass object to switch to
; Return:	nothing
; Destroyed:	ax, cx, dx, bp


MSG_MODAL_INTERACTION_RELOC_AND_SWITCH_TO	message
; Relocates the given optr if necessary, and switches to
; that object.  Assumes that the destination object is
; in the same resource as the object that handles this
; message. 
;
; Can be used to simply switch from one modal interaction to another.
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:	ModalInteractionClass object to switch from
; Interception:	Unlikely
;
; Pass:		^ldx:cx	= object to switch to
; Return:	nothing
; Destroyed:	ax, cx, dx, bp

ModalInteractionClass	endc



IclasHelpDialogClass	class	MetaClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_HELP_DIALOG_DISPLAY_MESSAGE	message
; Displays a help text message
;
; Context:	Can be called anytime
; Source:	Anyone
; Destination:  IclasHelpDialogClass object
; Interception: Unlikely
;
; Pass:		^ldx:cx	= optr of text to display
; Return:	nothing
; Destroyed:	ax, cx, dx, bp

IclasHelpDialogClass	endc



IclasFileSelectorClass	class	GenFileSelectorClass
IclasFileSelectorClass	endc


AutoTriggerClass	class	GenTriggerClass

;------------------------------------------------------------------------------
;		Methods
;------------------------------------------------------------------------------

MSG_AUTO_TRIGGER_SET_STATUS	message
;
; Sets the current enabled state of the trigger depending on
; the argument passed.  This is commonly specified as the
; ATTR_GEN_ITEM_GROUP_STATUS_MSG for an item group.
;
; Context:	Can be called anytime
; Source:	Anyone (usually a GenItemGroupClass object)
; Destination:	AutoTriggerClass object
; Interception:	Unlikely
;
; Pass:		bp	= 0 to disable
;			  nonzero to enable
; Return:	nothing
; Destroyed:	ax

AutoTriggerClass	endc


;-------------------------------------------------------
;		ICLAS Routines
;-------------------------------------------------------

;-------------------------------------------------------
;	Global Routines from the Iclas Module
;-------------------------------------------------------
global	IclasLibraryEntry:far
global	IclasRemapDOSDrive:far
global	IclasSetSearchDriveCount:far
global	IclasSetIStartupRoomToEnter:far
global	IclasGetIStartupRoomToEnter:far

;-------------------------------------------------------
;	Global Routines from the Init Module
;-------------------------------------------------------
global	IclasInitOtherVariables:far
global	IclasInitUserVariables:far
global	IclasLoginUser:far
global	IclasSetupUserHome:far
global	IclasEnterUserHome:far
global	IclasLeaveUserHome:far
global	IclasInitUser:far
global	IclasInitUserOptr:far
global	IclasGrabDesktop:far
global	IclasReleaseDesktop:far
global	IclasGrabVerifySem:far
global	IclasReleaseVerifySem:far
global	IclasRecursiveDelete:far

;-------------------------------------------------------
;	Global Routines for Standard Dialogs
;-------------------------------------------------------
global	IclasErrorBox:far
global	IclasHelpBox:far
global	IclasWarningBox:far
global	IclasConfirmationBox:far
global	IclasReportError:far
global	IclasReportFileError:far
global	IclasQueryForLogout:far

;-------------------------------------------------------
;	Global Routines from the Dir Module
;-------------------------------------------------------
global	IclasChangeDir:far
global	IclasChangeDirWithDiskHandle:far
global	IclasReturnDefaultServerHandle:far
global	IclasSetClassDir:far
global	IclasSetLogsDir:far
global	IclasSetHomeDir:far
global	IclasGetPath:far

;-------------------------------------------------------
;	Global Routines from the Bookmarks Module
;-------------------------------------------------------
global	IclasSetBookmark:far
global	IclasGetBookmark:far
global	IclasListBookmarks:far

;-------------------------------------------------------
;	Global Routines from the Spawn Module
;-------------------------------------------------------
global	IclasSpawnCourseware:far
global	IclasExecItemLine:far
global	IclasExecString:far
global	IclasDosExec:far

global	IclasGetArguments:far
global	IclasDerefArguments:far
global	IclasBuildArguments:far
global	IclasSpawnAnyCourseware:far
global	IclasSetExtraData:far
global	IclasGetGeodeNameFromItmLine:far
global	IclasSetCoursewareLinkExtraData:far
global	IclasAddMapCommandsToBatchFile:far
global	IclasFindMissingCourseware:far
;-------------------------------------------------------
;	Global Routines from the HugeFile Module
;-------------------------------------------------------
global	HugeFileOpen:far
global	HugeFileReadLine:far
global	HugeFileClose:far
global	HugeFileLock:far
global	HugeFileUnlock:far


;-------------------------------------------------------
;	Global Routines from the Util Module
;-------------------------------------------------------
global	IclasGetUserPermissions:far
global	IclasGetObjectTypeFromPathname:far	;This should be removed
global	IclasGetCurrentUserType:far
global	IclasGetUserDir:far
global	IclasFileNameToID:far
global	IclasIDToFileName:far
global	IclasCheckSysFile:far
global	IclasIDToFileName:far
global	IclasExtractDescription:far
global	IclasExtractProgramID:far
global	IclasExtractHomeDir:far
global	IclasGetUserHomeServer:far
global	IclasGetUserPermissions:far
global	IclasGetAutologClass:far
global	IclasPathStructToClassDescription:far
global	IclasPathStructToGeosClassName:far
global	IclasGetUserFullName:far
global	IclasGetAutologInfo:far

;-------------------------------------------------------
;	Global Routines from the Links Module
;-------------------------------------------------------
global	IclasCreateSpecialLink:far
global	IclasEnumClasses:far
global	IclasEnumCourseware:far
global	IclasEnumSpecialUtilities:far

;-------------------------------------------------------
;	Global Routines from the Strings Module
;-------------------------------------------------------
global	IclasFilterLongname:far
global	IclasFilterCoursewareName:far

;-------------------------------------------------------
;	Where do we go???
;-------------------------------------------------------
global	IclasInsertInMenu:far
global	IclasItmCopyConvertBuffer:far
global  IclasFileOpenAndRead:far
global	IclasFileRead:far
global	IclasMnuRemoveItem:far
global	IclasFormatStudentName:far
global	IclasListStudentsInClass:far
global	IclasBuildClassStudentList:far
global	IclasAddStudentToClass:far
global	IclasBuildClassUsefileName:far
global	IclasRemoveStudentFromClass:far
global	IclasGetUserType:far
global	IclasNetGetUserType:far
global	IclasGetTypeFromPathname:far
global	IclasSearchChunkArrayForId:far
global	IclasGetAllProgIdsInMenu:far

global	IclasRemoveStudentFromClass:far
global	IclasCreateClass:far
global	IclasRemoveClass:far
global	IclasAddProgramToClass:far
global	IclasResolveProgramDir:far
global	IclasAddProgramToHome:far
global	IclasRemoveProgram:far
global	IclasGetUserHomeDirectory:far
global	IclasGetClassArray:far
global	IclasCreateLinkToProgram:far
global	IclasCreateLinkToClass:far

; Move this later
global	IclasDriveGetStatus:far
global  IclasFileOpenAndReadCorrectServer:far
global	IclasFileOpenAndReadReadOnlyCorrectServer:far
global	IclasWriteFromChunkArray:far
global	SubSearchString:far
global	IclasSetMessagingState:far
global	IclasGetMessagingState:far
global	IclasModifyClass:far
global	IclasGetEscapeSequence:far
global	IclasGetSecurityLockStatus:far
global	IclasCreateSpawnBlock:far
global	IclasChangePrimaryHints:far
global	IclasCheckGeosItem:far
global	IclasGetUserHomeVolumeName:far
global	IclasGetDiskHandleFromId:far
global	IclasRunSpecialBatchFileIfNeeded:far
global	IclasDeleteSpecialBatchFile:far
global	IclasBuildUsefileLineFromUserInfo:far
global	SeekLastBackslash:far
global	IclasGotoIclasTmpDir:far

; semaphore operations
global 	IclasGrabSem:far
global 	IclasReleaseSem:far

; security log operations
global 	IclasSecurityCheckAndLog:far

global	IclasUserLicV:far
global	IclasUserLicP:far

; C Stubs
global	ICLASLOGINUSER:far
global	ICLASINITOTHERVARIABLES:far
global	ICLASINITUSERVARIABLES:far
global	ICLASSETUPUSERHOME:far
global 	ICLASENTERUSERHOME:far
global	ICLASLEAVEUSERHOME:far
global	ICLASGETUSERVOLUMENAME:far
global	ICLASREMAPDOSDRIVE:far
global	ICLASSETSEARCHDRIVECOUNT:far
global	ICLASRECURSIVEDELETE:far

;
; Abort routines -- used by verification thread
;
global	IclasCheckAbort:far
global	IclasSetAbort:far
global	IclasClearAbort:far

EndLibrary	iclas


;-------------------------------------------------------
;			MACROS
;-------------------------------------------------------


COMMENT @-------------------------------------------------------------------
		movbkm
----------------------------------------------------------------------------

SYNOPSIS:	move a BookmarkType

PASS:		dest	- BookmarkType
		source	- BookmarkType

PSEUDO CODE/STRATEGY:
KNOWN BUGS/SIDE EFFECTS/IDEAS:

REVISION HISTORY:
	Name	Date		Description
	----	----		-----------
	martin	8/19/92		Initial version

----------------------------------------------------------------------------@
movbkm	macro	dest, source, trashreg
	movdw	dest, source, trashreg
		endm



COMMENT @-------------------------------------------------------------------
		tstListTransfer
----------------------------------------------------------------------------

SYNOPSIS:	check the private uifa flags for a list operation

PASS:		source  - register pointing to transfer block

PSEUDO CODE/STRATEGY:
KNOWN BUGS/SIDE EFFECTS/IDEAS:

REVISION HISTORY:
	Name	Date		Description
	----	----		-----------
	dloft	10/13/92	Initial version

----------------------------------------------------------------------------@

tstListTransfer	macro	dest
	test	dest:[FQTH_UIFA].low, mask BATT_LIST_OPERATION
endm
