123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604 |
- Program Test;
- {$Description Test for FreePascal Netware-RTL}
- {$Version 1.1.0}
- {$I-}
- {$Mode Delphi}
- USES Strings, Dos, SysUtils, CRT, Video, Keyboard;
- TYPE Str255 = STRING [255];
- PROCEDURE ErrorCheck (Action,FN : STRING);
- VAR Err : INTEGER;
- BEGIN
- Err := IOResult;
- IF Err = 0 THEN
- BEGIN
- WriteLn (' OK');
- EXIT;
- END;
- WriteLn (' ! Error (',Action,' in ',FN,'), IOResult: ',Err);
- HALT;
- END;
- PROCEDURE FileTest;
- CONST TestFN = 'SYS:TEST/TEST.DAT';
- NumBlocks = 100;
- BlockSize = 1024;
- VAR F : FILE;
- Err : LONGINT;
- Buffer : ARRAY [0..BlockSize-1] OF BYTE;
- Written: LONGINT;
- I : BYTE;
- J : LONGINT;
- BEGIN
- Write ('Creating ',TestFN);
- Assign (F,TestFN);
- ReWrite (F,1);
- ErrorCheck ('Create',TestFN);
- FOR I := 1 TO NumBlocks DO
- BEGIN
- FillChar (Buffer, SIZEOF (Buffer), CHAR(I));
- Write ('BlockWrite');
- BlockWrite (F,Buffer,SIZEOF(Buffer));
- ErrorCheck ('BlockWrite',TestFN);
- END;
- Write ('Seek');
- Seek (F,0);
- ErrorCheck ('Seek',TestFN);
- FOR I := 1 TO NumBlocks DO
- BEGIN
- Write ('BlockRead');
- BlockRead (F,Buffer,SIZEOF(Buffer));
- ErrorCheck ('BlockRead',TestFN);
- FOR J := LOW (Buffer) TO HIGH (Buffer) DO
- IF Buffer[J] <> I THEN
- BEGIN
- WriteLn ('Verify-Error');
- HALT;
- END;
- END;
- Write ('Close');
- Close (F);
- ErrorCheck ('Close',TestFN);
- Write ('Erase');
- Erase (F);
- ErrorCheck ('Erase',TestFN);
- END;
- PROCEDURE TextFileTest;
- CONST NumLines = 100;
- FN = 'SYS:TEST/TEST.TXT';
- VAR I : LONGINT;
- S,S1 : STRING;
- T : TEXT;
- BEGIN
- Assign (T,FN);
- ReWrite (T);
- ErrorCheck ('ReWrite',FN);
- FOR I := 1 TO NumLines DO
- BEGIN
- Str (I, S);
- Write ('WriteLn');
- WriteLn (T, S);
- ErrorCheck ('WriteLn',FN);
- END;
- Write ('Close'); Close (T); ErrorCheck ('Close',FN);
- Assign (T,FN);
- Reset (T);
- ErrorCheck ('Reset',FN);
- FOR I := 1 TO NumLines DO
- BEGIN
- Str (I, S1);
- Write ('ReadLn');
- ReadLn (T, S);
- ErrorCheck ('ReadLn',FN);
- IF (S <> S1) THEN
- BEGIN
- WriteLn ('Verify-Error "',S,'" <> "',S1,'"');
- HALT;
- END;
- END;
- Write ('Close'); Close (T); ErrorCheck ('Close',FN);
- Write ('Erase'); Erase (T); ErrorCheck ('Erase',FN);
- END;
- PROCEDURE MemTest;
- CONST NumBlocks = 1000;
- BlockSize = 1024;
- VAR I : LONGINT;
- P : ARRAY [0..NumBlocks-1] OF POINTER;
- BEGIN
- Write ('GetMem/FreeMem Test');
- FillChar (P, SIZEOF(P), 0);
- FOR I := 0 TO NumBlocks-1 DO
- BEGIN
- Write ('g');
- GetMem (P[I],BlockSize);
- FillChar (P[I]^,BlockSize,$FF);
- END;
- FOR I := 0 TO NumBlocks-1 DO
- BEGIN
- Write ('f');
- FreeMem (P[I],BlockSize);
- END;
- WriteLn (' Ok');
- END;
- PROCEDURE DosTest;
- VAR Year, Month, Day, DayVal, hour, Minute, Second, Sec100 : WORD;
- BEGIN
- GetDate (Year,Month, Day, DayVal);
- WriteLn ('GetDate: ',Year,'/',Month,'/',Day);
- GetTime (hour, Minute, Second, Sec100);
- WriteLn ('GetTime: ',Hour,':',Minute,':',Second,':',Sec100);
- END;
- PROCEDURE ExceptTest;
- BEGIN
- TRY
- WriteLn ('Raising Exception');
- Raise (Exception.Create (''));
- EXCEPT
- WriteLn ('Fine, Except-Handler called');
- END;
- END;
- {PROCEDURE ReadDirTest;
- VAR EntryH, DirH : PNWDirEnt;
- T : DateTime;
- BEGIN
- DirH := _opendir ('SYS:TEST/*.*');
- IF DirH <> NIL THEN
- BEGIN
- EntryH := _readdir (DirH);
- WHILE (EntryH <> NIL) DO
- BEGIN
- unpacktime (EntryH^.d_time + (LONGINT (EntryH^.d_date) SHL 16),T);
- WriteLn ('Name: "', EntryH^.d_nameDOS,'" size:',EntryH^.d_size,' namespace-name: "',EntryH^.d_name,'" ',T.Day,'.',T.Month,'.',T.Year,' ',T.Hour,':',T.Min,':',T.Sec);
- EntryH := _readdir (DirH);
- END;
- _closedir (DirH);
- END ELSE
- WriteLn ('opendir failed');
- END;}
- PROCEDURE FindTest;
- VAR f : Dos.SearchRec;
- t : Dos.DateTime;
- s : string [5];
- fh: FILE;
- time: LONGINT;
- attr: word;
- BEGIN
- Dos.FindFirst ('SYS:TEST\*.*',anyfile,f);
- WHILE Dos.DosError = 0 DO
- BEGIN
- unpacktime (f.time,t);
- IF f.attr AND directory <> 0 THEN
- S := '<DIR>'
- ELSE
- S := '';
- WriteLn (f.Name:15,f.attr:6,S:6,f.size:6,' ',t.Month:2,'/',t.day:2,'/',t.year,' ',t.hour:2,':',t.min:2,':',t.sec:2);
- Dos.FindNext (f);
- END;
- Dos.FindClose (f);
- {WriteLn ('Directories:');
- Dos.FindFirst ('SYS:SYSTEM\*.*',directory,f);
- WHILE Dos.DosError = 0 DO
- BEGIN
- WriteLn (f.Name:15);
- Dos.FindNext (f);
- END;
- Dos.FindClose (f);}
- WriteLn;
- Assign (FH,ParamStr(0));
- Reset (FH,1);
- ErrorCheck ('Reset',ParamStr(0));
- Getftime (FH, time);
- Getfattr (FH, attr);
- Close (FH);
- unpacktime (time,t);
- WriteLn (ParamStr(0),attr:6,' ',t.Month:2,'/',t.day:2,'/',t.year,' ',t.hour:2,':',t.min:2,':',t.sec:2);
- WriteLn ('GetEnv (XX): "',GetEnv ('XX'),'"');
- END;
- {PROCEDURE VolInfo;
- VAR I : LONGINT;
- Buf: ARRAY [0..255] OF CHAR;
- TotalBlocks : WORD;
- SectorsPerBlock : WORD;
- availableBlocks : WORD;
- totalDirectorySlots : WORD;
- availableDirSlots : WORD;
- volumeisRemovable : WORD;
- Err : LONGINT;
- BEGIN
- WriteLn ('Number of Volumes: ',_GetNumberOfVolumes);
- FOR I := 0 TO _GetNumberOfVolumes-1 DO
- BEGIN
- _GetVolumeName (I,@Buf);
- WriteLn (I,': "',Buf,'"');
- Err := _GetVolumeInfoWithNumber (I,@Buf,
- TotalBlocks,
- SectorsPerBlock,
- availableBlocks,
- totalDirectorySlots,
- availableDirSlots,
- volumeisRemovable);
- IF Err = 0 THEN
- BEGIN
- WriteLn ('TotalBlocks: ',TotalBlocks,' Sectors/Block: ',SectorsPerBlock,' avail: ',availableBlocks);
- END ELSE
- WriteLn ('Err: ',Err);
- END;
- FOR I := 0 TO 5 DO
- BEGIN
- WriteLn ('DiskFree(',I,'): ',Dos.DiskFree(I));
- WriteLn ('DiskSize(',I,'): ',Dos.DiskSize(I));
- END;
- END;}
- PROCEDURE CrtTest;
- VAR C : CHAR;
- I : INTEGER;
- PROCEDURE KeyTest;
- VAR C : CHAR;
- BEGIN
- WriteLn ('Key-Test, CR will be converted to ausgegeben, End with ESC');
- Repeat
- C := ReadKey;
- CASE C OF
- #0 : Write ('#0');
- #13: Write (#13#10)
- ELSE Write (C);
- END;
- Until C = #27;
- END;
- PROCEDURE FillScreen;
- VAR I : INTEGER;
- BEGIN
- ClrScr;
- TextColor (Green);
- FOR I := 1 TO 24 DO
- Write ('12345678901234567890123456789012345678901234567890123456789012345678901234567890');
- TextColor (Yellow);
- FOR I := 1 TO 25 DO
- BEGIN
- GotoXY (76,I); Write (' ',I,' ');
- END;
- TextColor (LightGray);
- END;
- BEGIN
- {GotoXY (1,1); writeln ('Text @ 1,1');
- GotoXY (2,2); writeln ('Text @ 2,2');
- GotoXY (3,3); writeln ('Text @ 3,3');
- GotoXY (4,4); writeln ('Text @ 4,4, Delay 5 Secs');
- GotoXY (1,1);
- IF WhereX <> 1 THEN
- BEGIN
- GotoXY (1,10); Write ('WhereX - ERROR');
- END;
- GotoXY (1,1);
- IF WhereY <> 1 THEN
- BEGIN
- GotoXY (1,11); Write ('WhereY - ERROR');
- END;
- Delay (1000);
- }
- ClrScr;
- WriteLn ('Empty Screen ');
- Delay (1000);
- WriteLn ('Cursoroff '); CursorOff;
- Delay (1000);
- WriteLn ('Cursorbig '); CursorBig;
- Delay (1000);
- WriteLn ('Cursoron '); CursorOn;
- LowVideo; Write ('Low '); HighVideo; Write ('High '); LowVideo; Write ('Low ');
- Delay (1000);
- KeyTest;
- FillScreen;
- Window (10,10,40,15);
- ClrScr; Write ('Window 10,10,20,15');
- KeyTest;
- Window (1,1,80,25);
- FillScreen;
- GotoXY (10,10); ClrEol;
- GotoXY (1,21); Write (' ClrEol @ 10,10 ');
- ReadKey;
- FillScreen;
- GotoXY (10,10); InsLine;
- GotoXY (1,21); Write (' Insline @ 10,10 ');
- ReadKey;
- Write ('Waiting for keypress: ');
- WHILE NOT Keypressed DO
- BEGIN
- Delay (500);
- END;
- Write ('OK'); ReadKey;
- FOR I := 1 TO 5 DO
- BEGIN
- Write (^G); Delay (200);
- END;
- Delay (1000);
- GotoXY (1,25); ClrEol;
- END;
- {
- Function FileSetDate (Handle,Age : Longint) : Longint;
- Function FileSetAttr (Const Filename : String; Attr: longint) : Longint;
- }
- PROCEDURE SysUtilsTest;
- VAR H,I,Attr : LONGINT;
- X : ARRAY [0..255] OF CHAR;
- TD: TDateTime;
- SR: TSearchRec;
- ST1,ST2: STRING;
- BEGIN
- WriteLn ('FileExists SYS:SYSTEM/CLIB.NLM: ',FileExists ('SYS:SYSTEM/CLIB.NLM'));
- WriteLn ('FileExists SYS:SYSTEM\CLIB.NLM: ',FileExists ('SYS:SYSTEM\CLIB.NLM'));
- WriteLn ('FileExists SYS:SYSTEM/CLIB.N: ',FileExists ('SYS:SYSTEM/CLIB.N'));
- WriteLn ('FileExists SYS:SYSTEM\CLIB.N: ',FileExists ('SYS:SYSTEM\CLIB.N'));
- WriteLn ('FileExists SYS:SYSTEM: ',FileExists ('SYS:SYSTEM\CLIB.N'));
- H := FileOpen ('SYS:TEST/Autoexec.ncf',0);
- IF H >= 0 THEN
- BEGIN
- I := FileRead (H, X, 20); X[20] := #0;
- WriteLn ('FileRead returned ',I,' Buffer: "',X,'"');
- END ELSE
- WriteLn ('FileOpen failed');
- FileClose (H);
- H := FileAge ('SYS:SYSTEM/CLIB.NLM');
- TD := FileDateToDateTime (H);
- WriteLn ('CLIBs file date: ',DateTimeToStr (TD));
- H := FileAge ('SYS:SYSTEM/DSREPAIR.LOG');
- TD := FileDateToDateTime (H);
- WriteLn ('DSREPAIR.LOGs file date: ',DateTimeToStr (TD));
- H := SysUtils.FindFirst ('SYS:SYSTEM/CLIB.nlm',faAnyFile,SR);
- IF H = 0 THEN
- BEGIN
- WriteLn (SR.Name:20,SR.Size:6,' ',DateTimeToStr (FileDateToDateTime (SR.time)):20,' ',hexstr (SR.attr,8));
- END ELSE WriteLn ('FindFirst failed');
- FindClose (SR);
- H := SysUtils.FindFirst ('SYS:SYSTEM/CLIB.N',faAnyFile,SR);
- IF H = 0 THEN
- WriteLn ('FindFirst on non existing file returned 0 !');
- FindClose (SR);
- H := SysUtils.FindFirst ('SYS:SYSTEM/DSREPAIR.LOG',faAnyFile,SR);
- IF H = 0 THEN
- BEGIN
- WriteLn (SR.Name:20,SR.Size:6,' ',DateTimeToStr (FileDateToDateTime (SR.time)):20,' ',hexstr (SR.attr,8));
- END ELSE WriteLn ('FindFirst failed');
- FindClose (SR);
- H := FileOpen ('SYS:SYSTEM/DSRepair.log',0);
- IF H >= 0 THEN
- BEGIN
- I := FileGetDate (H);
- FileClose (H);
- TD := FileDateToDateTime (I);
- WriteLn ('DSREPAIR.LOGs file date via FileGetDate: ',DateTimeToStr (TD));
- END ELSE WriteLn ('FileOpen failed');
- Attr := FileGetAttr ('SYS:SYSTEM/CLIB.NLM');
- WriteLn ('Attr of clib: ',hexstr (Attr,8));
- chdir ('sys:test');
- H := FileCreate ('TEST12.DAT');
- IF H >= 0 THEN
- BEGIN
- IF NOT FileExists ('SYS:TEST/TEST12.DAT') THEN
- WriteLn ('FileCreate returned ok but FileExists returned false !');
- FillChar (X,SIZEOF(X),BYTE('X'));
- I := FileWrite (H,X,SIZEOF(X));
- WriteLn ('FileWrite returned ',I);
- IF I = SIZEOF (X) THEN
- BEGIN
- IF NOT FileTruncate (H,SIZEOF(X) DIV 2) THEN
- WriteLn ('FileTruncate failed');
- END;
- FileClose (H);
- I := SysUtils.FindFirst ('TEST12.DAT',faAnyFile,SR);
- IF I <> 0 THEN
- WriteLn ('FindFirst failed')
- ELSE
- IF SR.Size <> (SIZEOF (X) DIV 2) THEN
- WriteLn ('FileTruncate: wrong FileSize after truncate (',SR.Size,')');
- FindClose (SR);
- IF NOT RenameFile ('TEST12.DAT','TEST12.BAK') THEN
- WriteLn ('RenameFile failed')
- ELSE
- BEGIN
- IF NOT FileExists ('SYS:TEST/TEST12.BAK') THEN
- WriteLn ('FileRename returned ok but FileExists returned false');
- IF NOT DeleteFile ('TEST12.BAK') THEN
- WriteLn ('DeleteFile failed')
- ELSE
- IF FileExists ('SYS:TEST/TEST12.BAK') THEN
- WriteLn ('DeleteFile returned ok but FileExists returned true');
- END;
- END ELSE WriteLn ('FileCreate failed');
- H := FileCreate ('TEST12.DAT');
- IF H >= 0 THEN
- BEGIN
- FillChar (X,SIZEOF(X),BYTE('X'));
- FileWrite (H,X,SIZEOF(X));
- I := FileSeek (H,10,fsFromBeginning);
- X[0] := '0';
- FileWrite (H,X,1);
- IF I <> 10 THEN WriteLn ('FileSeek returned wrong result at 10 (',I,')');
- I := FileSeek (H,10,fsFromCurrent);
- X[0] := '1';
- FileWrite (H,X,1);
- IF I <> 21 THEN WriteLn ('FileSeek returned wrong result at 21 (',I,')');
- I := FileSeek (H,-10,fsFromEnd);
- X[0] := '2';
- FileWrite (H,X,1);
- IF I <> SIZEOF(X)-10 THEN WriteLn ('FileSeek returned wrong result at End-10 (',I,')');
- FileClose (H);
- END ELSE WriteLn ('FileCreate failed');
- ST1 := 'SYS:ETC;SYS:TEST;SYS:SYSTEM/;SYS:PUBLIC';
- ST2 := FileSearch ('clib.nlm',ST1);
- WriteLn ('FileSearch (clib.nlm,',ST1,') returned "',ST2,'"');
- WriteLn ('FExpand (TEST12.DAT): "',FExpand ('TEST12.DAT'));
- WriteLn ('FExpand (.\TEST12.DAT): "',FExpand ('.\TEST12.DAT'));
- WriteLn ('FExpand (..\SYSTEM\CLIB.NLM): "',FExpand ('..\SYSTEM\CLIB.NLM'));
- END;
- PROCEDURE VideoTest;
- PROCEDURE WriteString (S : STRING; X,Y : WORD; Fore,Back: BYTE);
- VAR I : INTEGER;
- W : WORD;
- P : POINTER;
- Textattr : WORD;
- BEGIN
- W := X + (Y * Video.ScreenWidth);
- P := Pointer (@VideoBuf^[W]);
- TextAttr := (Fore and $f) or (Back shl 4);
- FOR I := 1 TO Length (S) DO
- BEGIN
- W := (TextAttr SHL 8) or byte (S[I]);
- PWord(P)^ := w;
- INC (PChar(P),2);
- END;
- END;
- BEGIN
- InitVideo;
- Video.ClearScreen;
- WriteString ('Test @ 0,0, LightGray on Black',0,0,LightGray,Black);
- UpdateScreen (false);
- WriteString ('Test @ 10,1, Yellow on Blue',1,1,Yellow,Blue);
- UpdateScreen (false);
- ReadKey;
- Video.ClearScreen;
- WriteString ('Cursor crHidden',0,0,Yellow,Blue);
- SetCursorPos (0,0);
- SetCursorType (crHidden);
- UpdateScreen (false);
- ReadKey;
- Video.ClearScreen;
- WriteString ('Cursor crUnderLine',0,0,Yellow,Blue);
- SetCursorPos (0,0);
- SetCursorType (crUnderLine);
- UpdateScreen (false);
- ReadKey;
- Video.ClearScreen;
- WriteString ('Cursor crBlock',0,0,Yellow,Blue);
- SetCursorPos (0,0);
- SetCursorType (crBlock);
- UpdateScreen (false);
- ReadKey;
- Video.ClearScreen;
- WriteString ('Cursor crHalfBlock',0,0,Yellow,Blue);
- SetCursorPos (0,0);
- SetCursorType (crHalfBlock);
- UpdateScreen (false);
- ReadKey;
- CRT.ClrScr;
- SetCursorType (crUnderLine);
- END;
- PROCEDURE KeyboardTest;
- VAR T : TKeyEvent;
- BEGIN
- InitKeyboard;
- WriteLn ('Keyboard-Test, ESC Ends');
- REPEAT
- T := GetKeyEvent;
- WriteLn (' Event: ',HexStr (T,8),' EventChar: "',GetKeyEventChar(T),'" KeyEventCode: ',HexStr (GetKeyEventCode(T),8));
- T := TranslateKeyEvent (T);
- WriteLn ('Translated Event: ',HexStr (T,8),' EventChar: "',GetKeyEventChar(T),'" KeyEventCode: ',HexStr (GetKeyEventCode(T),8));
- WriteLn;
- UNTIL GetKeyEventChar (T) = #27;
- END;
- VAR I : LONGINT;
- S : STRING [255];
- C : CHAR;
- P : ^Str255;
- BEGIN
- New (P);
- Dispose (P);
- // WriteLn ('Test');
- //__ConsolePrintf ('Ok, this is PASCALMAIN'#13#10,0);
- WriteLn ('Test via WriteLn');
- WriteLn ('No of params: ', ParamCount);
- //__EnterDebugger;
- WriteLn ('ParamStr(0): "', ParamStr(0),'"');
- IF ParamCount > 0 THEN
- FOR I := 1 TO ParamCount DO
- WriteLn (I:6,': "',ParamStr(I),'"');
- GetDir (0, S);
- WriteLn ('Current Directory: "',S,'"');
- // ChDir ('TEST');
- // GetDir (0, S);
- // WriteLn ('Current Directory: "',S,'"');
- // MkDir ('SYS:TEST');
- // IF IOResult <> 0 THEN WriteLn ('MkDir SYS:TEST failed (Ok)');
- // Write ('MkDir'); MkDir ('SYS:TEST/TESTDIR');
- // ErrorCheck ('MkDir','SYS:TEST/TESTDIR');
- // Write ('RmDir'); RmDir ('SYS:TEST/TESTDIR');
- // ErrorCheck ('RmDir','SYS:TEST/TESTDIR');
- REPEAT
- WriteLn;
- WriteLn ('1 : File-Test');
- WriteLn ('2 : Textfile-Test');
- WriteLn ('3 : GetMem/FreeMem Test');
- WriteLn ('4 : DosTest');
- WriteLn ('5 : ExceptTest');
- WriteLn ('6 : Video-Test');
- WriteLn ('7 : Find-Test');
- WriteLn ('8 : SysUtils-Test');
- WriteLn ('9 : CrtTest');
- WriteLn ('K : Keyboard-Test');
- WriteLn ('E : Ende');
- WriteLn;
- Write ('?: ');
- C := Crt.ReadKey;
- WriteLn (C);
- CASE upcase(C) OF
- '1' : FileTest;
- '2' : TextfileTest;
- '3' : MemTest;
- '4' : DosTest;
- '5' : ExceptTest;
- '6' : VideoTest;
- '7' : FindTest;
- '8' : SysUtilsTest;
- '9' : CrtTest;
- 'K' : KeyboardTest;
- END;
- UNTIL UpCase (C) = 'E';
- (*$IFDEF Netware*)
- PressAnyKeyToContinue;
- (*$ENDIF*)
- END.
|