; General macros
;
; (C)1988 By Ami Bar-Yadin.
;       AMUS ID: AMI/AM
;
; All commercial rights reserved, etc.
;
; If you want to include STAMP with a commercial package,
; go right ahead so long as you include the UNCHANGED source (.m68) with it.
;
; No warranties and/or guarranties of any kind, etc.
;
; Not responsible for damages resulting from the use of this program, etc.
;
; My employer (United Fashions) has nothing to do with this program and
; should not be blamed for it.
;
; I can be reached at:
;               United Fashions of Texas, Inc.
;               200 Ash Ave.
;               McAllen, TX  78501
;               (512) 631-2277/2276
;               8am-6pm
;
       UNIVERSAL
       COPY    ASCII.TBL

;-------
; misc simple macros
;
DEFINE OUTCHR  CHR
       IF NB,CHR,      MOVB    CHR,D1
       TTY
ENDM

DEFINE DIAG    CODE
       MOVB    CODE,^H0FFFE00
ENDM

;-------
; TCRT calls
                               ; function (general)
DEFINE XTABF   X
       IF      DF,SAVD1,       PUSH    D1
       MOVW    #<-1_8>+X,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM
                               ; short (decimal)
DEFINE XTAB    Y,X
       IF      DF,SAVD1,       PUSH    D1
       MOVW    #<Y'._8>+X'.,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM
                               ; medium (decimal)
DEFINE XTABL   Y,X
       IF      DF,SAVD1,       PUSH    D1
       MOV     #<<<Y'.>&255.>_8.>+X'.,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM

DEFINE XTABLF  Y,X
       IF      DF,SAVD1,       PUSH    D1
       MOV     #<Y'._8.>+X'.,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM
                               ; rotate (decimal)
DEFINE XTABR   Y,X
       IF      DF,SAVD1,       PUSH    D1
       MOVW    #Y'.,D1
       ROLW    D1,#8
       MOVB    #X'.,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM
                               ; rotate (general)
DEFINE XTABG   Y,X
       IF      DF,SAVD1,       PUSH    D1
       MOVW    Y,D1
       ROLW    D1,#8
       MOVB    X,D1
       TCRT
       IF      DF,SAVD1,       POP     D1
ENDM

;-------
; Impure definition
                               ; init impure
DEFINE IMPINI  START
       DSECT
       IF B,START,     .=0
       IF NB,START,    .=START
ENDM
                               ; define label
DEFINE IMPDEF  LBL,SIZE
       IF NB,SIZE
LBL:    BLKB    SIZE
       IFF
LBL:    BLKB    0
       ENDC
ENDM
                               ; define size label
DEFINE IMPSIZ  LBL
       IF NB,LBL
LBL:
       ENDC
       PSECT
ENDM


DEFINE  IMPGET  SIZE,IDX,NOMEM,MODNM1,MODNM2,MODEXT
       PUSH    SIZE            ;(MAC:SYS.M68:  PUSH #SIZE)
       PUSH
       GETMEM  @SP
       IF      B,NOMEM
       BEQ     10$$
       EXIT
   10$$:
       IFF
       JNE     NOMEM
       ENDC
       POP     IDX
       POP
       IF      NB,MODNM1,      MOVW    #[MODNM1],M.NAM-ZID(IDX)
       IF      NB,MODNM2,      MOVW    #[MODNM2],M.NAM+2-ZID(IDX)
       IF      NB,MODEXT,      MOVW    #[MODEXT],M.EXT-ZID(IDX)
       ENDM
                               ; allocate memory

;-------
; Record definition
                               ; init impure
DEFINE RECINI  START
       ASECT
       IF NB,START,    .=START
ENDM
                               ; define label
DEFINE RECDEF  LBL,SIZE
       IF NB,SIZE
LBL:    BLKB    SIZE
       IFF
LBL:    BLKB    0
       ENDC
ENDM
                               ; define size label
DEFINE RECSIZ  LBL
       IF NB,LBL
LBL:
       ENDC
       PSECT
ENDM

;-------
; Table offset definition
;                               ; init table
DEFINE TBLINI  START
START:
$$TBL=START
ENDM
                               ; define table offset
DEFINE TBLOFF  TARGET
       WORD    TARGET-$$TBL
ENDM

;-------
; memory module symbols
;
       RECINI
       RECDEF  M.SIZ,4
       RECDEF  M.FLG,2
       RECDEF  M.NAM,4
       RECDEF  M.EXT,2
       RECSIZ

;-------
; sign on
; display module name, version and free memory size in bytes
DEFINE SGNON   ADR
       SAVE    A1,A2,D1,D2
       LEA     A1,ADR
       LEA     A1,M.NAM-ZID(A1)
       LEA     A2,-10(SP)
       UNPACK
       UNPACK
       LEA     A2,-10(SP)
       MOV     #5,D2
1$$:    OUTCHR  (A2)+
       DBF     D2,1$$
       TYPE    < v>
       LEA     A2,ADR
       ADD     #2,A2
       VCVT    @A2,OT$TRM
       TAB
       USRFRE  D0
       USREND  D1
       SUB     D0,D1
       DCVT    0,OT$TRM+OT$TSP
       TYPECR  <bytes free>
       REST    A1,A2,D1,D2
ENDM

;
;
       END