home *** CD-ROM | disk | FTP | other *** search
- {=============================================================================}
-
- { Get DOS Version Number - 30H
-
- Entry Register Contents
- ----- -----------------
- AH 30H
-
- Return Register Contents
- ------ -----------------
- AL Major DOS version no.
- AH Minor DOS version no.
- Remarks: If AL returns a zero,
- the version of DOS is
- pre-DOS 2.0.
- {----------------------------------------------------------------------------}
-
- program get_dos_version;
- type
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- var
- register: regpack;
- major, minor: integer;
-
- begin
- register.Ax := $3000; {AH=30, AL=00}
- msdos(register); {perform standard interrupt 21 request}
- major := register.AX and $00FF; {mask of high byte}
- minor := register.AX shr 8; {shift right 8 bits}
- if major = 0 then writeln('DOS Version ',major,'.',minor)
- else writeln ('DOS Version ',major,'.',minor);
-
- end.
-
- {=============================================================================}
-
- { Get System Time - 21cH
-
- Entry Register Contents
- ----- -----------------
- AH 2CH
-
- Return Register Contents
- ------ -----------------
- CH hour (0-23)
- CL minutes (0-59)
- DH seconds (0-59)
- DL hundreds (0-99)
-
- Remarks: none}
- {----------------------------------------------------------------------------}
-
- program get_system_time;
- type
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- var
- register: regpack;
- hour,min,sec,hun:integer;
-
- begin
- register.AX := $2c00;
- msdos (register);
- with register do
- begin
- hour := CX shr 8;
- min := CX and $00ff;
- sec := DX shr 8;
- hun := DX and $00ff;
- end;
-
- writeln ('The system time is currently ', hour,':',min,':',sec,'.',hun);
- end.
-
- {============================================================================}
-
- { Get System Date - 2AH
-
- Entry Register Contents
- ----- -----------------
- AH 2AH
-
- Return Register Contents
- ------ -----------------
- AL day of the week (0-6)
- DH month
- CX year
-
- remarks: none}
- {----------------------------------------------------------------------------}
-
- program get_system_date;
-
- type
- str9 = string[9];
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- const;
- daystr:array [1..7] of str9 = ('Sunday','Monday','Tuesday','Wednesday',
- 'Thursday','Friday','Saturday');
-
- var
- register:regpack;
- daynum,month,day,year:integer;
- mstr,dstr,ystr:string[2];
-
- begin
- register.AX := $2a00;
- msdos (register);
- daynum := (register.AX and $00ff) +1;
- month := register.DX shr 8;
- day := register.DX and $00ff;
- year := register.CX - $76c; {subtract 1900 so we get a 2 digit year}
-
- writeln ('Today is ',daystr[daynum],',',month,'/',day,'/',year,'.');
- end.
-
- {============================================================================}
-
- { Get Default Disk Drive - 19H
-
- Entry Register Contents
- ----- -----------------
- AH 19H
-
- Return Register Contents
- ------ -----------------
- AL Current default drive (a=0,b=1,etc)
-
- remarks: none}
- {----------------------------------------------------------------------------}
-
- program get_default_drive;
- type
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- var
- register: regpack;
- drive:char;
-
- begin
- register.AX := $1900;
- msdos (register);
- drive := chr(65) + (register.AX and $00ff));
- writeln ('Default Disk Drive is ', drive,':');
-
- end.
- {============================================================================}
-
- { Select Default Disk Drive - 0EH
-
- Entry Register Contents
- ----- -----------------
- AH OEH
- DL drive number (a=0,b=1,etc)
-
- Return Register Contents
- ------ -----------------
- AL total number of drives
-
- remarks: this routine enables your program to change the default disk drive}
- {----------------------------------------------------------------------------}
-
- program select_default_drive;
- type
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- var
- drive: char;
- register: regpack;
-
- begin
- drive := `B'; {we'll set the default to drive 'B'}
- register.AX := $0E00;
- register.DX := ord(drive) - 65;
- msdos(register);
- end.
-
- {============================================================================}
-
- { Get Current Directory - 47H
-
- Entry Register Contents
- ----- -----------------
- AH 47H
- DS Segment pointer for 64 byte character array
- SI Offset pointerfor 64 byte character array
- DL Drive number (0=default, 1=A, 2=B, etc)
-
- Return Register Contents
- ------ -----------------
- AX error code if carry set
- DS segment of character array
- SI offset of character array]
-
- Remarks: The default pathstring does not include the drive letter or the
- backlash. After the function call is made, check cary flag for error cond-
- ition, if set the error code is returned in AX. If carry flag is not set,
- ignore condition in AX.}
- {----------------------------------------------------------------------------}
-
- program get_current_directory;
- type
- infotext = string[255];
- regpack = record
- AX,BX,CX,DX,BP,SI,DI,DS,ES,flags:integer;
- end;
- var
- register: regpack;
- current_directory: array[1..64] of char;
-
- {----------------------------------------------------------------------------}
- function errcode(rgstr,flg:integer): integer;
- begin
- if (flg and $0001) = $0001 then errcode := rgstr else errcode := 0;
- end;
- {----------------------------------------------------------------------------}
- function ASCZ_TO_ASC(datstr: infotext): infotext;
- var
- inc: integer;
- str: infotext;
-
- begin
- str := '';
- inc := 0;
- repeat
- inc := inc +1;
- if datastr[inc] <> chr(0) then str := str + datastr[inc];
- until ((datastr[inc] = chr(0) or (inc = length (datastr)));
- ASCZ_TO_ASC := str;
- end;
- {----------------------------------------------------------------------------}
- begin
- register.AX := $4700;
- register.DS := seg(current_directory);
- register.SI := ofs(current_directory);
- register.DX := 0; {we'll use the default disk drive in our example}
- msdos(register);
- if errcode(register.AX,register.flags) = 0
- then write('Current Directory on default drive is ' ,ASCZ_TO_ASC
- (current_directory));
- end.
-
- {============================================================================}