home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mustang 4
/
Mustang_No4_Sharewares.iso
/
support
/
progs
/
iconman.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-11-30
|
4KB
|
140 lines
UNIT ICONMAN;
INTERFACE
USES DOS,Graph;
VAR
FLoadResult : INTEGER;
ICreateResult : INTEGER;
PROCEDURE OpenIconSystem;
PROCEDURE CloseIconSystem;
PROCEDURE LoadIconFile(Filename : STRING);
PROCEDURE SaveIconFile(Filename : STRING);
PROCEDURE DisplayIcon(Ino : INTEGER; Ix,Iy : INTEGER);
PROCEDURE GetNumberOfIcons(VAR NoIco : INTEGER);
PROCEDURE CreateIcon(Ino : INTEGER; Ix,Iy : INTEGER);
PROCEDURE ReplaceIcon(Ino : INTEGER; Ix,Iy : INTEGER);
PROCEDURE SetIconCount(MaxIco : INTEGER);
IMPLEMENTATION
CONST
Icon_Size : WORD = 518; { Number of bytes per 32x32 bit icon. }
Max_Icons : INTEGER = 32; { Maximum number of icons per file. }
TYPE
Icon_Record = RECORD { Makes up Icon_Stack array. }
Icon_Pointer : POINTER;
END;
VAR
Loop : INTEGER;
Number_Icons : BYTE; { Number of icons in current file. }
F1 : FILE;
Current_File : STRING; { Name of current file. }
result : WORD;
HeapTop : ^WORD; { Marks bottom of reserved }
{ space for Icon_Stack. }
Icon_Stack : ARRAY[1..32] OF Icon_Record; { Holds 32 icons }
PROCEDURE OpenIconSystem;
BEGIN
FOR loop:=1 TO Max_Icons DO
GetMem(Icon_Stack[Loop].Icon_Pointer, Icon_Size); { Reserve memory for }
{ all 32 icons }
END;
PROCEDURE CloseIconSystem;
BEGIN
FOR loop:=1 TO Max_Icons DO
BEGIN
FreeMem(Icon_Stack[Loop].Icon_Pointer,Icon_Size); { Restore memory taken }
END; { by all 32 icons }
END;
PROCEDURE LoadIconFile(FileName : STRING);
BEGIN
Assign(f1,FileName);
FileMode:=0;
{$I-}
Reset(f1,1); { Reposition file pointer & record len = 1 }
FloadResult:=IOResult;
IF FLoadResult=0 THEN
BEGIN
Current_File:=FileName;
BlockRead(f1,Number_Icons,1,result); { Read number of icons in file }
FOR Loop:=1 TO Max_Icons DO
BEGIN
BlockRead(f1,Icon_Stack[Loop].Icon_Pointer^,Icon_Size,result); { Read Icon }
END;
Close(f1);
END
ELSE
Number_Icons:=0;
END;
PROCEDURE SaveIconFile(FileName : STRING);
BEGIN
Assign(f1,FileName);
Rewrite(f1,1); { Clear file & set record size to 1 }
BlockWrite(f1,Number_Icons,1,result); { Write Icon number }
FOR loop:=1 TO Max_Icons Do
BEGIN
BlockWrite(f1,Icon_Stack[Loop].Icon_Pointer^,Icon_Size,result); { Save Icon }
END;
Close(f1);
END;
PROCEDURE DisplayIcon(Ino : INTEGER; Ix,Iy : INTEGER);
BEGIN
IF (Ino<=Number_Icons) AND (Ino>=1) THEN
PutImage(Ix,Iy,Icon_Stack[Ino].Icon_Pointer^, CopyPut);
END;
PROCEDURE GetNumberOfIcons(VAR NoIco : INTEGER);
BEGIN
NoIco:=Number_Icons;
END;
PROCEDURE CreateIcon(Ino : INTEGER; Ix,Iy : INTEGER);
BEGIN
ICreateResult:=0; { Ok }
IF (Ino<=(Number_Icons+1)) AND (Ino<=Max_Icons) AND (Ix+31<=639)
AND (Iy+31<=479) THEN
BEGIN
Getimage(Ix,Iy,Ix+31,Iy+31,Icon_Stack[Ino].Icon_Pointer^);
IF (Number_Icons<Max_Icons) THEN INC(Number_Icons);
END
ELSE
BEGIN
IF (Ino>=(Number_Icons+1)) OR (Ino>Max_Icons) THEN ICreateResult:=1; { Invalid Icon }
IF (Ix+31>639) OR (Iy+31>479) THEN ICreateResult:=2; { Part of the icon would be }
END; { grabbed from off screen }
END;
PROCEDURE ReplaceIcon(Ino : INTEGER; Ix,Iy : INTEGER);
BEGIN
IF (Ino<=(Number_Icons)) AND (Ix+31<=639)
AND (Iy+31<=479) THEN
BEGIN
Getimage(Ix,Iy,Ix+31,Iy+31,Icon_Stack[Ino].Icon_Pointer^);
END
END;
PROCEDURE SetIconCount(MaxIco : INTEGER);
BEGIN
IF (MaxIco>=0) AND (MaxIco<=32) THEN
BEGIN
Number_Icons:=MaxIco;
END;
END;
BEGIN
END.