;/* OPTIMOPT.A86 3/20/85 - 06/10/85 Lee Jay Lorenzen */ ; ; ; ; Copyright 1999, Caldera Thin Clients, Inc. ; This software is licenced under the GNU Public License. ; Please see LICENSE.TXT for further information. ; ; Historical Copyright ;/* ;* ------------------------------------------------------------- ;* GEM Application Environment Services Version 2.3 ;* Serial No. XXXX-0000-654321 All Rights Reserved ;* Copyright (C) 1986 Digital Research Inc. ;* ------------------------------------------------------------- ;*/ ; cseg ; ; PUBLIC r_get PUBLIC r_set PUBLIC rc_equal PUBLIC rc_copy PUBLIC inside PUBLIC min PUBLIC max PUBLIC toupper PUBLIC scasb PUBLIC movs PUBLIC bfill PUBLIC strlen PUBLIC strcmp PUBLIC strchk PUBLIC strcpy ; ; VOID ;r_get(pxywh, px, py, pw, ph) ; WORD *pxywh; ; WORD *px, *py, *pw, *ph; r_get: push bp mov bp,sp push es mov dx,ds mov es,dx mov si,4[bp] lodsw mov di,6[bp] stosw lodsw mov di,8[bp] stosw lodsw mov di,10[bp] stosw lodsw mov di,12[bp] stosw pop es pop bp ret ; ; ; VOID ;r_set(pxywh, x, y, w, h) ; WORD *pxywh; ; WORD x, y, w, h; ; r_set: push bp mov bp,sp push es mov dx,ds mov es,dx mov di,4[bp] mov ax,6[bp] stosw mov ax,8[bp] stosw mov ax,10[bp] stosw mov ax,12[bp] stosw pop es pop bp ret ; ; WORD ;rc_equal(p1, p2) ; WORD *p1, *p2; ; rc_equal: push bp mov bp,sp push es cld mov cx,4 ; count mov si,4[bp] ; src off mov di,6[bp] ; dest off mov dx,ds mov es,dx rcloop: lodsw scasw jne rcfalse loop rcloop mov ax,1 pop es pop bp ret rcfalse: mov ax,0 pop es pop bp ret ; ; ; VOID ;rc_copy(psxywh, pdxywh) ; WORD *psxywh; ; WORD *pdxywh; ; rc_copy: push bp mov bp,sp push es cld mov cx,4 ; count mov si,4[bp] ; src off mov di,6[bp] ; dest off mov dx,ds ; src mov es,dx ; dest rep movsw pop es pop bp ret ; ; ; ; UWORD ;inside(x, y, pt) ; WORD x, y; ; GRECT *pt; ; inside: push bp mov bp,sp mov ax,4[bp] ; ax = x mov cx,6[bp] ; cx = y mov si,8[bp] ; si = *pt cmp ax,[si] jl infalse cmp cx,2[si] jl infalse mov dx,4[si] add dx,[si] ; dx = x + w cmp ax,dx jge infalse mov dx,6[si] add dx,2[si] ; dx = y + h cmp cx,dx jge infalse mov ax,1 pop bp ret infalse: mov ax,0 pop bp ret ; ; ; WORD ;min(a, b) ; WORD a, b; ; min: push bp mov bp,sp mov ax,4[bp] mov bx,6[bp] cmp ax,bx jle minret mov ax,bx minret: pop bp ret ; ; ; WORD ;max(a, b) ; WORD a, b; ; max: push bp mov bp,sp mov ax,4[bp] mov bx,6[bp] cmp ax,bx jge maxret mov ax,bx maxret: pop bp ret ; ; ; BYTE ;toupper(ch) ; BYTE ch; ; toupper: push bp mov bp,sp mov ax,4[bp] and ax,00ffh cmp al,'a' jl toupret cmp al,'z' jg toupret sub ax,32 toupret: pop bp ret ; ; ; BYTE ;*scasb(p, b) ; BYTE *p; ; BYTE b; ; scasb: push bp mov bp,sp cld mov si,4[bp] mov bx,6[bp] and bx,00ffh lpscas: lodsb cmp al,bh jz scasret cmp al,bl jnz lpscas scasret: mov ax,si dec ax pop bp ret ; ; ; VOID ;movs(num, ps, pd) ; WORD num; ; BYTE *ps, *pd; ; movs: push bp mov bp,sp push es cld mov cx,4[bp] mov si,6[bp] ; src off mov di,8[bp] ; dest off mov dx,ds ; src mov es,dx ; dest rep movsb pop es pop bp ret ; ; ; VOID ;bfill(num, bval, addr) ; REG WORD num; ; BYTE bval; ; REG BYTE *addr; ; bfill: push bp mov bp,sp push es cld mov cx,4[bp] ; count mov ax,6[bp] ; byte value mov di,8[bp] ; dest off mov dx,ds mov es,dx ; dest rep stosb pop es pop bp ret ; ; ; WORD ;strlen(p1) ; BYTE *p1; ; strlen: push bp mov bp,sp push es cld mov bx,4[bp] ; remember start of string mov di,bx ; destination string offset mov ax,ds mov es,ax ; destination string segment xor ax,ax ; look for a null mov cx,7fffh repnz scasb mov ax,di sub ax,bx dec ax pop es pop bp ret ; ; ; WORD ;strcmp(p1, p2) ; BYTE *p1, *p2; ; strcmp: push bp mov bp,sp push es cld mov si,4[bp] mov di,6[bp] mov dx,ds mov es,dx xor ax,ax ; clear ah,al lpsc: lodsb ; pick up source scasb ; compare with destination jne scfalse ; if not same then false cmp al,ah ; if no more string jnz lpsc ; then exit true sctrue: mov ax,1 pop es pop bp ret scfalse: mov ax,0 pop es pop bp ret ; ; ;/* ;* Return <0 if s0 if s>t ;*/ ; ; WORD ;strchk(s, t) ; BYTE s[], t[]; ; strchk: push bp mov bp,sp push es cld mov si,4[bp] mov di,6[bp] mov dx,ds mov es,dx xor ax,ax ; clear ah,al lpschk: lodsb ; pick up source scasb ; compare with destination jne scplmn ; if not same then false cmp al,ah ; if no more string jnz lpschk ; then exit true scplmn: mov bl,-1[di] mov bh,0 sub ax,bx pop es pop bp ret ; ; ; BYTE ;*strcpy(ps, pd) ; BYTE *ps, *pd; ; strcpy: push bp mov bp,sp push es cld mov si,4[bp] mov di,6[bp] mov dx,ds mov es,dx xor ax,ax ; clear ah,al lpcpy: lodsb ; pick up source stosb ; put in destination cmp al,ah ; if no more string jnz lpcpy ; then copy done cpydne: mov ax,di pop es pop bp ret