home *** CD-ROM | disk | FTP | other *** search
- Program ArgusDem;
- { -------- mit Turbo-Pascal 6.0 oder höher übersetzen -------- }
- { ---------- compile with Turbo-Pascal 6.0 or above ---------- }
-
- {$M 4096,0,4096} { Speicher begrenzen ! }
- {$X+,R-,V-,I-,A+,G+,S-,D-,L-}
- Uses Dos,Crt,EMS;
-
- var F1,F2 : Text;
- S : String;
- V : Word;
- Handle1,Handle2,Handle3,
- Size,Free,io : Integer;
- deutsch : Boolean;
- ch,Drive : Char;
-
- Const Name1 : String = 'argus.aaa';
- Name2 : String = 'argus.bbb';
- Name3 : String = 'argus.ccc';
-
-
- Function HexStr(w : Word):String;
- const HexTab : Array[0..15] of Char = '0123456789ABCDEF';
- begin
- HexStr := HexTab[w shr 12] + HexTab[(w shr 8) and $F] +
- HexTab[(w shr 4) and $F] + HexTab[w and $F] + 'h';
- end;
-
- Procedure SetHandles(Count: Integer); assembler;
- { Anzahl der Handles festlegen }
- asm
- mov bx,Count
- mov ah,067h
- int 21h
- end;
-
- Procedure SetDrive(drive: Char); assembler;
- { Laufwerk wählen }
- asm
- mov ah,00Eh
- mov dl,drive
- sub dl,'A'
- int 21h
- end;
-
- Function CurrentDrive: Char; assembler;
- { Laufwerk wählen }
- asm
- mov ah,019h
- int 21h
- add al,'A'
- end;
-
- Procedure Wait; assembler; { Warte ca. 0.7 Sekunden }
- asm
- mov cx,0050 { 50 Video-Bilder abwarten }
- mov dx,$03DA
- @VSy0: in al,dx { Warte auf Ende Bildrücklauf }
- test al,8
- jnz @VSy0
- @VSy1: in al,dx { Warte auf Anfang Bildrücklauf }
- test al,8
- jz @VSy1
- loop @VSy0
- end;
-
- begin
- Name1[Length(Name1)+1] := #0; { DOS-Strings }
- Name2[Length(Name2)+1] := #0; { DOS-Strings }
- Name3[Length(Name3)+1] := #0; { DOS-Strings }
-
- { Hilfe anzeigen }
- write('Do you want German messages ? (y/n) : n'^H);
- ch := UpCase(ReadKey);
- Deutsch := (ch = 'Y') or (ch = 'J') or (ch = ' ');
- Writeln(ch);
- Writeln;
- if Deutsch then
- Writeln('Vor dem Start dieses Programmes ARGUS.COM wie folgt aufrufen :')
- else
- Writeln('Bevor running this program call ARGUS.COM as follows:');
- Writeln;
- Writeln(' ARGUS /a/c');
- Writeln;
- Wait; Wait;
-
- Drive := CurrentDrive;
- if Deutsch then begin
- Writeln('Aktuelles Laufwerk : ',Drive,':');
- Writeln('Wechsel auf A:');
- end
- else begin
- Writeln('current drive : ',Drive,':');
- Writeln('change to A:');
- end;
- SetDrive('A');
- if Deutsch then
- Writeln('auf A: sind ',DiskFree(0),' Bytes frei')
- else
- Writeln('on A: are ',DiskFree(0),' Bytes free');
- if Deutsch then
- Writeln('Wechsel auf ',Drive)
- else begin
- Writeln('change to ',Drive);
- end;
- SetDrive(Drive);
- if Deutsch then
- Writeln('auf ',Drive,': sind ',DiskFree(0),' Bytes frei')
- else
- Writeln('on ',Drive,': are ',DiskFree(0),' Bytes free');
- writeln;
- Wait;
-
- SetHandles(30); { max. 30 Dateien }
-
- MkDir('argus.dem');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis erstellen : ARGUS.DEM , Result = ',io) { ok }
- else
- Writeln('create directory : ARGUS.DEM , Result = ',io); { ok }
- wait;
-
- ChDir('argus.dem');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis wechseln : ARGUS.DEM , Result = ',io) { ok }
- else
- Writeln('change directory : ARGUS.DEM , Result = ',io); { ok }
- wait;
-
- GetDir(0,S); { aktuelles Laufwerk }
- if Deutsch then
- Writeln('Aktuelles Verzeichnis : ',S)
- else
- Writeln('current directory : ',S);
- wait; { ok }
-
- RmDir(S);
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis löschen : ',S,' , Result = ',io) { fail }
- else
- Writeln('delete directory : ',S,' , Result = ',io); { fail }
- wait;
-
- Assign(f1,Name1);
- ReWrite(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei anlegen : ',Name1,' , Result = ',io) { ok }
- else
- Writeln('create file : ',Name1,' , Result = ',io); { ok }
- wait;
- Writeln(f1,Name1,' -------------------- ',Name1);
- Writeln(f1,Name1,' -------------------- ',Name1);
-
- Assign(f2,Name2);
- ReWrite(f2);
- io := IOResult;
- if Deutsch then
- Writeln('Datei anlegen : ',Name2,' , Result = ',io) { ok }
- else
- Writeln('create file : ',Name2,' , Result = ',io); { ok }
- wait;
- Writeln(f2,Name2);
-
- Flush(f2); { TP-Flush ! }
- io := IOResult;
- if Deutsch then
- Writeln('Datei sichern : ',Name2,' , Result = ',io) { ok }
- else
- Writeln('flush file : ',Name2,' , Result = ',io); { ok }
- wait;
-
- Close(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei schließen : ',Name1,' , Result = ',io) { ok }
- else
- Writeln('close file : ',Name1,' , Result = ',io); { ok }
- wait;
-
- Close(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei schließen : ',Name1,' , Result = ',io) { fail }
- else
- Writeln('close file : ',Name1,' , Result = ',io); { fail }
- wait;
-
- ChDir('..');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis wechseln : .. , Result = ',io) { ok }
- else
- Writeln('change directory : .. , Result = ',io); { ok }
- wait;
-
- GetDir(0,S);
- if Deutsch then
- Writeln('Aktuelles Verzeichnis : ',S)
- else
- Writeln('current directory : ',S);
- wait; { ok }
-
- RmDir('argus.dem');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis löschen : .. , Result = ',io) { fail }
- else
- Writeln('remake directory : .. , Result = ',io); { fail }
- wait;
-
- ChDir('argus.dem');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis wechseln : ARGUS.DEM , Result = ',io) { ok }
- else
- Writeln('change directory : ARGUS.DEM , Result = ',io); { ok }
- wait;
-
- Assign(f1,Name3);
- Reset(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei öffnen : ',Name3,' , Result = ',io) { fail }
- else
- Writeln('open file : ',Name3,' , Result = ',io); { fail }
- wait;
-
- Assign(f1,Name1);
- Reset(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei öffnen : ',Name1,' , Result = ',io) { ok }
- else
- Writeln('open file : ',Name1,' , Result = ',io); { ok }
- wait;
-
- Close(f2);
- io := IOResult;
- if Deutsch then
- Writeln('Datei schließen : ',Name2,' , Result = ',io) { ok }
- else
- Writeln('close file : ',Name2,' , Result = ',io); { ok }
- wait;
-
- Erase(f2);
- io := IOResult;
- if Deutsch then
- Writeln('Datei löschen : ',Name2,' , Result = ',io) { ok }
- else
- Writeln('erase file : ',Name2,' , Result = ',io); { ok }
- wait;
-
- Close(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei schließen : ',Name1,' , Result = ',io) { ok }
- else
- Writeln('close file : ',Name1,' , Result = ',io); { ok }
- wait;
-
- asm
- lea si,[Name1+1] { File1 über erweiterte Open-Funktion ansprechen }
- mov bx,0001 { WO }
- xor cx,cx
- mov dx,0010h { Datei erzeugen, nicht überschreiben }
- mov ax,6C00h { erweitertes Open }
- int 21h { sollte Fehler geben }
- mov bx,0001 { WO }
- xor cx,cx
- mov dx,0012h { Datei erzeugen, überschreiben }
- mov ax,6C00h { erweitertes Open }
- int 21h { das sollte funktionieren ! }
- jc @Err
- mov bx,ax
- mov cx,12345
- mov ah,040h
- int 21h
- mov ah,03Eh
- int 21h { Datei schließen }
- @Err:
- end;
-
- Erase(f1);
- io := IOResult;
- if Deutsch then
- Writeln('Datei löschen : ',Name1,' , Result = ',io) { ok }
- else
- Writeln('erase file : ',Name1,' , Result = ',io); { ok }
- wait;
-
-
- asm
- lea si,[Name1+1] { File1 über erweiterte Open-Funktion ansprechen }
- mov bx,0001 { WO }
- xor cx,cx
- mov dx,0001h { Datei öffnen, Fehler bei nicht ex. }
- mov ax,6C00h { erweitertes Open }
- int 21h { sollte Fehler geben }
- mov bx,0001 { WO }
- xor cx,cx
- mov dx,0010h { Datei erzeugen, nicht überschreiben }
- mov ax,6C00h { erweitertes Open }
- int 21h { das sollte funktionieren ! }
- jc @Err
- mov bx,ax
- mov ah,03Eh
- int 21h { Datei schließen }
- lea dx,[Name1+1]
- mov ah,41h { Datei löschen }
- int 21h
- @Err:
- end;
-
- ChDir('..');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis wechseln : .. , Result = ',io) { ok }
- else
- Writeln('change directory : .. , Result = ',io); { ok }
- wait;
-
- RmDir('argus.dem');
- io := IOResult;
- if Deutsch then
- Writeln('Verzeichnis löschen : ARGUS.DEM , Result = ',io) { ok }
- else
- Writeln('remake directory : ARGUS.DEM , Result = ',io); { ok }
- wait;
-
- GetDir(0,S);
- if Deutsch then
- Writeln('Aktuelles Verzeichnis : ',S) { ok }
- else
- Writeln('current directory : ',S); { ok }
- wait;
-
- S := S+'\'#0; { aktuelles Verzeichnis ! }
- asm
- mov ah,05Ah { temporäre Datei erstellen }
- xor cx,cx { Attribute }
- mov dx,offset S
- inc dx
- int 21h
- mov bx,ax
- mov Handle1,bx
- mov di,offset S
- mov si,di
- inc di
- mov cx,ds
- mov es,cx
- mov cx,$0100
- xor al,al
- REPNE scasb { suche 0 (Abschluß des Namens) }
- neg cx
- add cx,$0FF
- mov [si],cl { Stringlänge ok }
-
- mov ah,040h
- mov dx,0
- mov cx,50000 { schreibe 50000 Bytes }
- int 21h
-
- mov ah,068h { flush file }
- int 21h
-
- mov ah,040h { weitere 50000 Bytes }
- int 21h
-
- mov ah,03Eh { wieder schließen }
- int 21h
- mov dx,si
- inc dx
- mov ah,041h { wieder löschen }
- int 21h
- end;
- if Deutsch then
- Writeln('temporäre Datei ',S,' Handle = ',Handle1) { ok }
- else
- Writeln('temporary file ',S,' Handle = ',Handle1); { ok }
-
- if EMS_avail then begin
- Writeln;
- V := GetEMSVersion;
- if Deutsch then
- Writeln('EMS Version ',Hi(V),'.',Lo(V),' vorhanden -> EMS-Test')
- else
- Writeln('EMS Version ',Hi(V),'.',Lo(V),' available -> EMS test');
- wait;
- Writeln;
- if Deutsch then
- Writeln('EMS Seitenrahmen auf ',HexStr(EMSPageFrame))
- else
- Writeln('EMS page frame on ',HexStr(EMSPageFrame));
-
- GetEMSSize(Size, Free);
- if Deutsch then
- Writeln('von ',Size,' Seiten sind noch ',Free,' frei.')
- else
- Writeln('from ',Size,' pages are still ',Free,' free.');
- wait;
-
- if Deutsch then
- Writeln('Es sind im Moment ',GetEMSHandles,' EMS-Handles vergeben.')
- else
- Writeln('At current time are ',GetEMSHandles,' EMS handles requested.');
- wait;
-
- if GetEMSMem(Free shr 1 , Handle1) then begin
- if Deutsch then
- Writeln(Free shr 1,' Seiten auf EMS-Handle ',Handle1,' angefordert.')
- else
- Writeln(Free shr 1,' pages to EMS handle ',Handle1,' requested.');
- end;
- wait;
-
- if Deutsch then
- Writeln('EMS-Handle ',Handle1,' benutzt ',GetEMSPages(Handle1),' Seiten.')
- else
- Writeln('EMS handle ',Handle1,' uses ',GetEMSPages(Handle1),' pages.');
- wait;
-
- if SetEMSMapping(Handle1, 2, 1) then begin
- if Deutsch then
- Writeln('EMS-Handle ',Handle1,' Seite 1 auf Seitenrahmen 2 geladen.')
- else
- Writeln('EMS handle ',Handle1,' page 1 into page frame 2 loaded.');
- end;
- wait;
-
- if SetEMSMapping(Handle1, 0, Free shr 1) then begin
- if Deutsch then
- Writeln('EMS-Handle ',Handle1,' Seite ',Free shr 1,' auf Seitenrahmen 0 geladen.')
- else
- Writeln('EMS handle ',Handle1,' page ',Free shr 1,' into page frame 0 loaded.');
- end
- else begin
- if Deutsch then
- Writeln('falsche logische Seite') { dieser Fehler muß kommen }
- else
- Writeln('invalid logical page'); { this error has to come }
- end;
- wait;
-
- if GetEMSMem(Free shr 1 , Handle2) then begin
- if Deutsch then
- Writeln(Free shr 1,' Seiten auf EMS-Handle ',Handle2,' angefordert.')
- else
- Writeln(Free shr 1,' pages to EMS handle ',Handle2,' requested.');
- end;
- wait;
-
- if Deutsch then
- Writeln('EMS-Handle ',Handle2,' benutzt ',GetEMSPages(Handle2),' Seiten.')
- else
- Writeln('EMS handle ',Handle2,' uses ',GetEMSPages(Handle2),' pages.');
- wait;
-
- if Deutsch then
- Writeln('EMS-Handle 83 benutzt ',GetEMSPages(83),' Seiten.')
- else
- Writeln('EMS handle 83 uses ',GetEMSPages(83),' pages.');
- wait;
-
- if GetEMSMem(Free shr 1 , Handle3) then begin
- if Deutsch then
- Writeln(Free shr 1,' Seiten auf EMS-Handle ',Handle3,' angefordert.')
- else
- Writeln(Free shr 1,' pages to EMS handle ',Handle3,' requested.');
- end
- else begin
- if Deutsch then
- Writeln('kein freier Speicher mehr') { dieser Fehler muß kommen }
- else
- Writeln('no free memory left'); { this error has to come }
- end;
- wait;
-
- if GetEMSMem(0 , Handle3) then begin
- if Deutsch then
- Writeln('0 Seiten auf EMS-Handle ',Handle3,' angefordert.')
- else
- Writeln('0 pages to EMS handle ',Handle3,' requested.');
- end
- else begin
- if Deutsch then
- Writeln('0 Seiten angefordert') { dieser Fehler muß kommen }
- else
- Writeln('0 pages requested'); { this error has to come }
- end;
- wait;
-
- asm mov ah,$048; mov dx,Handle1; int $67; end;
- if Deutsch then
- writeln('Mapping Handle ',Handle1,' rücksetzen.') { fail }
- else
- writeln('reset mapping handle ',Handle1); { fail }
-
- asm mov ah,$047; mov dx,Handle1; int $67; end;
- if Deutsch then
- writeln('Mapping Handle ',Handle1,' gesichert.') { ok }
- else
- writeln('save mapping handle ',Handle1); { ok }
-
- asm mov ah,$047; mov dx,Handle1; int $67; end;
- if Deutsch then
- writeln('Mapping Handle ',Handle1,' gesichert.') { fail }
- else
- writeln('save mapping handle ',Handle1); { fail }
-
- asm mov ah,$048; mov dx,Handle1; int $67; end;
- if Deutsch then
- writeln('Mapping Handle ',Handle1,' rücksetzen.') { ok }
- else
- writeln('reset mapping handle ',Handle1); { ok }
-
- if FreeEMSMem(Handle1) then begin
- if Deutsch then
- Writeln('Speicher des Handle ',Handle1,' freigegeben.')
- else
- Writeln('memory of handle ',Handle1,' released.');
- end;
- wait;
-
- if FreeEMSMem(Handle2) then begin
- if Deutsch then
- Writeln('Speicher des Handle ',Handle2,' freigegeben.')
- else
- Writeln('memory of handle ',Handle2,' released.');
- end;
- wait;
-
- if FreeEMSMem(Handle2) then begin
- if Deutsch then
- Writeln('Speicher des Handle ',Handle2,' freigegeben.') { fail }
- else
- Writeln('memory of handle ',Handle2,' released.');
- end;
- wait;
- end; { if EMS_avail then .. }
-
- Writeln;
- if Deutsch then
- Writeln('Programm-Ende : Code = 123')
- else
- Writeln('exit program : Code = 123');
- Halt(123);
- end.
-