424 lines
6.9 KiB
Plaintext
424 lines
6.9 KiB
Plaintext
|
makefile
|
|||
|
# Copyright (C) Manx Software Systems, Inc. 1987. All rights reserved.
|
|||
|
|
|||
|
# Note: the object files below are in the correct order for linking,
|
|||
|
# thus the OBJ macro should be changed with caution. If you are in doubt,
|
|||
|
# use the ORD utility to build a correctly ordered list.
|
|||
|
|
|||
|
OBJ=cio.o scr_cdel.o scr_cins.o scr_clea.o scr_echo.o scr_eol.o\
|
|||
|
scr_eos.o scr_getc.o scr_home.o scr_inve.o scr_ldel.o scr_lins.o\
|
|||
|
scr_curs.o scr_loc.o scr_putc.o scr_call.o
|
|||
|
|
|||
|
CC=cc
|
|||
|
AS=as
|
|||
|
MODEL=
|
|||
|
AMODEL=0
|
|||
|
|
|||
|
.c.o:
|
|||
|
$(CC) +$(MODEL) -n $*.c -o $@
|
|||
|
sqz $@
|
|||
|
|
|||
|
.asm.o:
|
|||
|
$(AS) -dMODEL=$(AMODEL) $*.asm -o $@
|
|||
|
sqz $@
|
|||
|
|
|||
|
$(DIR)s$(MODEL).lib: $(OBJ)
|
|||
|
del $(DIR)s$(MODEL).lib
|
|||
|
lb $(DIR)s$(MODEL).lib $(OBJ)
|
|||
|
@echo screen done
|
|||
|
cio.c
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
static cputc(chr)
|
|||
|
register int chr;
|
|||
|
{
|
|||
|
scr_putc(chr);
|
|||
|
|
|||
|
if (chr == '\n')
|
|||
|
scr_putc('\r');
|
|||
|
}
|
|||
|
|
|||
|
scr_puts(str)
|
|||
|
register char *str;
|
|||
|
{
|
|||
|
while(*str)
|
|||
|
cputc(*str++);
|
|||
|
|
|||
|
cputc('\n');
|
|||
|
}
|
|||
|
|
|||
|
scr_printf(fmt,args)
|
|||
|
register char *fmt;
|
|||
|
unsigned args;
|
|||
|
{
|
|||
|
format(cputc,fmt,&args);
|
|||
|
}
|
|||
|
|
|||
|
scr_setatr(back,frg,intens,blink)
|
|||
|
register int back, frg;
|
|||
|
register int intens, blink;
|
|||
|
{
|
|||
|
register char tmp;
|
|||
|
|
|||
|
tmp = _attrib;
|
|||
|
_attrib = (back << 4) | frg;
|
|||
|
|
|||
|
if (blink)
|
|||
|
_attrib |= 128;
|
|||
|
else
|
|||
|
_attrib &= 127;
|
|||
|
|
|||
|
if (intens)
|
|||
|
_attrib |= 8;
|
|||
|
else
|
|||
|
_attrib &= 247;
|
|||
|
|
|||
|
_attrib &= 255;
|
|||
|
return(tmp);
|
|||
|
}
|
|||
|
|
|||
|
scr_getatr()
|
|||
|
{
|
|||
|
return(_attrib);
|
|||
|
}
|
|||
|
|
|||
|
scr_resatr(atr)
|
|||
|
register int atr;
|
|||
|
{
|
|||
|
register char tmp;
|
|||
|
|
|||
|
tmp = _attrib;
|
|||
|
_attrib = atr;
|
|||
|
return(tmp);
|
|||
|
}
|
|||
|
scr_call.asm
|
|||
|
; Copyright (C) 1984 by Manx Software Systems
|
|||
|
; :ts=8
|
|||
|
include lmacros.h
|
|||
|
;
|
|||
|
; scr_call(ax,bx,cx,dx) - issue int 10 with ax,... set to args
|
|||
|
;
|
|||
|
;
|
|||
|
procdef scr_call,<<aax,word>,<bbx,word>,<ccx,word>,<ddx,word>>
|
|||
|
push si
|
|||
|
push di
|
|||
|
mov ax,aax
|
|||
|
mov bx,bbx
|
|||
|
mov cx,ccx
|
|||
|
mov dx,ddx
|
|||
|
int 10h
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pret
|
|||
|
pend scr_call
|
|||
|
finish
|
|||
|
end
|
|||
|
scr_cdel.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* delete the char. at the cursor and put blank at end of line
|
|||
|
*/
|
|||
|
|
|||
|
#define max_width 80
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_cdelete()
|
|||
|
{
|
|||
|
register unsigned ch, x;
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
for (x = col ; x < max_width-1 ; ++x) {
|
|||
|
scr_curs(lin, x+1);
|
|||
|
ch = scr_call(0x0800,0,0,0); /* read out current char */
|
|||
|
scr_curs(lin, x);
|
|||
|
scr_call(0x0900 | (ch&255), ch>>8, 1, 0); /* and shift over */
|
|||
|
}
|
|||
|
scr_curs(lin, max_width-1);
|
|||
|
scr_call(0x920, _attrib, 1, 0); /* put a blank at end of line */
|
|||
|
scr_curs(lin, col);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_cins.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* insert a space at the cursor and delete the char. at end of line
|
|||
|
*/
|
|||
|
|
|||
|
#define max_width 80
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_cinsert()
|
|||
|
{
|
|||
|
register unsigned ch, z;
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
for (z = max_width - 1 ; z > col ; --z) {
|
|||
|
scr_curs(lin, z-1);
|
|||
|
ch = scr_call(0x0800,0,0,0); /* read out current char */
|
|||
|
scr_curs(lin, z);
|
|||
|
scr_call(0x0900 | (ch&255), ch>>8, 1, 0); /* and move it right */
|
|||
|
}
|
|||
|
scr_curs(lin, col);
|
|||
|
scr_call(0x920,_attrib,1,0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_clea.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Clears the screen and homes the cursor
|
|||
|
*/
|
|||
|
|
|||
|
#define max_width 80
|
|||
|
#define max_y 25
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_clear()
|
|||
|
{
|
|||
|
scr_home();
|
|||
|
scr_call(0x920,_attrib,(max_width * max_y),0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_curs.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Moves cursor to line lin, position pos
|
|||
|
*/
|
|||
|
|
|||
|
#define max_width 80
|
|||
|
|
|||
|
scr_curs(lin, col)
|
|||
|
register int lin, col;
|
|||
|
{
|
|||
|
if (col >= max_width)
|
|||
|
col = max_width - 1;
|
|||
|
if (lin >= 25)
|
|||
|
lin = 24;
|
|||
|
scr_call(0x200, 0, 0, (lin << 8) | col);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_echo.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* if flg is zero disable echoing of characters
|
|||
|
*/
|
|||
|
|
|||
|
extern int _echo;
|
|||
|
|
|||
|
scr_echo(flg)
|
|||
|
int flg;
|
|||
|
{
|
|||
|
_echo = flg;
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_eol.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Clear to the end of line
|
|||
|
*/
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_eol()
|
|||
|
{
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
scr_call(0x920, _attrib, 80-col, 0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_eos.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* clear to end of screen
|
|||
|
*/
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_eos()
|
|||
|
{
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
scr_call(0x920, _attrib, (80-col)+((24-lin)*80), 0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_getc.asm
|
|||
|
; Copyright (C) 1985 by Manx Software Systems
|
|||
|
; :ts=8
|
|||
|
include lmacros.h
|
|||
|
dataseg segment word public 'data'
|
|||
|
public _echo_
|
|||
|
_echo_ db 0,0
|
|||
|
dataseg ends
|
|||
|
assume ds:dataseg
|
|||
|
ifdef FARPROC
|
|||
|
extrn scr_putc_:far
|
|||
|
else
|
|||
|
extrn scr_putc_:near
|
|||
|
endif
|
|||
|
;
|
|||
|
; scr_getc() - issue int 16 to get keyboard value
|
|||
|
; returns normal ASCII chars as their value (0-127)
|
|||
|
; special chars are in the range 128 - 255
|
|||
|
; cntl-break is returned as -2
|
|||
|
;
|
|||
|
procdef scr_getc
|
|||
|
mov ah,0
|
|||
|
int 16h
|
|||
|
call mapchar
|
|||
|
cmp _echo_,0
|
|||
|
jz no_echo
|
|||
|
cmp ax,128
|
|||
|
jae no_echo
|
|||
|
push ax
|
|||
|
call scr_putc_
|
|||
|
pop ax
|
|||
|
no_echo:
|
|||
|
pret
|
|||
|
pend scr_getc
|
|||
|
;
|
|||
|
; scr_poll() - polls keyboard for a character
|
|||
|
; returns -1 for no character
|
|||
|
; otherwise returns the character as above
|
|||
|
; Note: this doesn't remove the char from the buffer
|
|||
|
;
|
|||
|
procdef scr_poll
|
|||
|
mov ah,1
|
|||
|
int 16h
|
|||
|
jnz mapit
|
|||
|
mov ax,-1
|
|||
|
pret
|
|||
|
mapit:
|
|||
|
call mapchar
|
|||
|
pret
|
|||
|
pend scr_poll
|
|||
|
;
|
|||
|
mapchar proc near
|
|||
|
test al,al
|
|||
|
jz special
|
|||
|
sub ah,ah
|
|||
|
ret
|
|||
|
special:
|
|||
|
xchg al,ah
|
|||
|
test al,al
|
|||
|
jz ctl_brk
|
|||
|
cmp al,3
|
|||
|
jne not_nul
|
|||
|
sub ax,ax
|
|||
|
ret
|
|||
|
not_nul:
|
|||
|
or al,80H
|
|||
|
ret
|
|||
|
ctl_brk:
|
|||
|
mov ax,-2
|
|||
|
ret
|
|||
|
mapchar endp
|
|||
|
;
|
|||
|
finish
|
|||
|
end
|
|||
|
scr_home.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Homes the cursor (0, 0)
|
|||
|
*/
|
|||
|
|
|||
|
scr_home()
|
|||
|
{
|
|||
|
scr_curs(0, 0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_inve.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* if flg is zero turn on inverse
|
|||
|
*/
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_invers(flg)
|
|||
|
int flg;
|
|||
|
{
|
|||
|
_attrib = flg ? 0x70 : 0x07;
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_ldel.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Deletes line at lin, blank lines at bottom
|
|||
|
*/
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_ldelete()
|
|||
|
{
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
scr_call(0x600 | 1, _attrib<<8, lin<<8, (24<<8) | 79);
|
|||
|
scr_curs(lin, 0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_lins.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* Inserts blank lines at lin, pushing rest down
|
|||
|
*/
|
|||
|
|
|||
|
extern int _attrib;
|
|||
|
|
|||
|
scr_linsert()
|
|||
|
{
|
|||
|
int lin, col;
|
|||
|
|
|||
|
scr_loc(&lin, &col);
|
|||
|
scr_call(0x700 | 1, _attrib<<8, lin<<8, (24<<8) | 79);
|
|||
|
scr_curs(lin, 0);
|
|||
|
return(0);
|
|||
|
}
|
|||
|
scr_loc.asm
|
|||
|
; Copyright (C) 1984 by Manx Software Systems
|
|||
|
; :ts=8
|
|||
|
;
|
|||
|
; scr_loc(lin, col) - place the location of the cursor in line and column
|
|||
|
;
|
|||
|
include lmacros.h
|
|||
|
;
|
|||
|
procdef scr_loc,<<lin,ptr>,<col,ptr>>
|
|||
|
;
|
|||
|
pushds
|
|||
|
mov ah,3
|
|||
|
mov bh,0
|
|||
|
int 10h ; find the location of cursor
|
|||
|
ldptr bx,lin,ds ; move address of line into bx
|
|||
|
mov 0[bx],dh ; move cursor location into memory
|
|||
|
mov byte ptr 1[bx],0
|
|||
|
ldptr bx,col,ds ; move addres of col. into bx
|
|||
|
mov 0[bx],dl ; move cursor location into memory
|
|||
|
mov byte ptr 1[bx],0
|
|||
|
popds
|
|||
|
pret
|
|||
|
pend scr_loc
|
|||
|
finish
|
|||
|
end
|
|||
|
scr_putc.c
|
|||
|
/* Copyright (C) 1984 by Manx Software Systems, Inc. */
|
|||
|
/*
|
|||
|
* display the character at the cursor
|
|||
|
*/
|
|||
|
|
|||
|
int _attrib = 0x07;
|
|||
|
|
|||
|
scr_putc(c)
|
|||
|
register int c;
|
|||
|
{
|
|||
|
c &= 255;
|
|||
|
if (c >= 0x20)
|
|||
|
scr_call(0x0900 | c, _attrib,1,0);
|
|||
|
scr_call(0x0e00 | c, _attrib);
|
|||
|
return c;
|
|||
|
}
|
|||
|
|