home *** CD-ROM | disk | FTP | other *** search
- (*****************************************************************************)
- (* *)
- (* F U L L S C R E E N E D I T O R *)
- (* *)
- (* By Martine Wedlake *)
- (* *)
- (* This programme may be copied, or modified in any way for non- *)
- (* commercial uses. If you would like to use this programme in a business *)
- (* environment please write me for licencing, and so I can keep track of *)
- (* its success. If you like this programme a donation would be awfully *)
- (* nice of you. Thanks! *)
- (* Martine Wedlake *)
- (* 4551 N.E. Simpson St. *)
- (* Portland Or *)
- (* 97218 *)
- (* *)
- (*****************************************************************************)
-
- program screen_batch;
- const
- base_screen=$b800;
- type
- str12=string[12];
- str30=string[30];
- str64=string[64];
- var
- screen_mem:array[0..2000] of integer;
- clear_screen,
- restore_screen:boolean;
- value:integer;
-
- PROCEDURE cursor(on:BOOLEAN);{---------------This sets the cursor on/off}
-
- {procedure cursor will set the cursor on or off depending if the argument sent
- is true or false. If the argument is false the cursor will be turned off,
- if the argument is true the cursor is the cursor is turned on.}
-
- CONST
- video_io=$10; {this is the interrupt number}
- VAR
- regs:RECORD CASE INTEGER OF {this sets up the registers}
- 1: (AX,BX,CX,DX,BP,DI,SI,DS,ES,Flags: INTEGER);
- 2: (AL,AH,BL,BH,CL,CH,DL,DH: Byte);
- END;
- BEGIN
- IF on THEN {if the user wants a cursor then}
- BEGIN
- regs.ch:=$06; {set the registers up for display}
- regs.cl:=$07; {ch = start line, cl = end line}
- END
- ELSE {else, the cursor is not displayed}
- BEGIN
- regs.ch:=$20; {set the register up for non-}
- regs.cl:=$00; {display, ch=$20 doesn't display}
- END;
- regs.ah:=$01;
- regs.al:=$00;
- Intr(video_io,regs);
- END;
-
- function get_filename:str64;
- begin
- get_filename:=paramstr(1);
- end;
-
- function get_options:str64;
- begin
- get_options:=paramstr(2);
- end;
-
- procedure replace_screen;
- begin
- move(screen_mem,mem[base_screen:0],4000);
- end;
-
- procedure load_screen;
- var
- screen:array[0..4000] of byte;
- f_screen:file;
- filename:str64;
- begin
- move(mem[base_screen:0],screen_mem,4000);
- filename:=get_filename;
- if pos('.',filename)=0 then filename:=filename+'.scr';
- assign(f_screen,filename);
- {$i-}
- reset(f_screen);
- blockread(f_screen,screen,30);
- close(f_screen);
- {$i+}
- if ioresult<>0 then
- begin
- replace_screen;
- writeln('Error - Screen filename not found.');
- halt;
- end;
- move(screen,mem[base_screen:0],3840);
- end;
-
- procedure pause;
- var
- key:char;
- begin
- cursor(false);
- repeat until keypressed;
- read(kbd,key);
- if keypressed then read(kbd,key);
- cursor(true);
- end;
-
- procedure Yes_no; {Note: 1 is yes, 0 is no}
- var
- key:char;
- begin
- cursor(false);
- repeat
- read(kbd,key);
- key:=upcase(key);
- until key in ['Y','N'];
- if clear_screen then clrscr;
- if restore_screen then replace_screen;
- if key='Y' then value:=1 else value:=0;
- cursor(true);
- end;
-
- procedure time_delay(parameter:str64);
- var
- time,
- code:integer;
- begin
- val(copy(parameter,2,length(parameter)-1),time,code);
- if code=0 then
- begin
- cursor(false);
- delay(time*1000);
- cursor(true);
- end
- else
- begin
- write('Error - in Parameter for delay');
- replace_screen;
- halt;
- end;
- end;
-
- procedure alphabet;
- var
- key:char;
- begin
- cursor(false);
- repeat
- read(kbd,key);
- key:=upcase(key);
- if keypressed then
- begin
- read(kbd,key);
- key:=#0;
- end;
- until key in['A'..'Z'];
- value:=ord(key)-64;
- cursor(true);
- end;
-
- procedure number;
- var
- key:char;
- begin
- cursor(false);
- repeat
- read(kbd,key);
- if keypressed then
- begin
- read(kbd,key);
- key:=#0;
- end;
- until key in['0'..'9'];
- value:=ord(key)-48;
- cursor(true);
- end;
-
- procedure do_options;
- var
- x:integer;
- begin
- for x:=2 to paramcount do
- begin
- case copy(paramstr(x),1,1) of
- 'p','P':pause;
- 'y','Y':Yes_no;
- 'd','D':time_delay(paramstr(x));
- 'r','R':Restore_Screen:=true;
- 'c','C':clear_screen:=true;
- 'a','A':alphabet;
- 'n','N':number;
- else begin
- if restore_screen then replace_screen;
- write('Error - Command option "',copy(paramstr(x),1,length(paramstr(x))),'" not valid.');
- halt;
- end;
- end;
- end;
- end;
-
- begin
- textcolor(lightgray);
- textbackground(black);
- value:=0;
- restore_screen:=false;
- clear_screen:=false;
- if paramcount>0 then
- begin
- load_screen;
- do_options;
- end
- else
- begin
- writeln(^J,'The correct form is: SCRNBAT filename[.ext] [opt1] [opt2] ...');
- writeln('The options are as follows:');
- writeln(' Y = Returns an ErrorLevel of 1 if Y hit, 0 if N hit');
- writeln(' A = Returns position in Alphabet');
- writeln(' N = Returns number in range of 0-9');
- writeln(' P = Pause. Waits for keypress');
- Writeln(' R = Restore screen after run');
- writeln(' C = Clears screen at end of run');
- writeln(' Dxxxx = delays for xxxx seconds');
- end;
- if clear_screen then clrscr;
- if restore_screen then replace_screen;
- if value<>0 then halt(value);
- end.