home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol043
/
pidgin.s2m
< prev
next >
Wrap
Text File
|
1984-04-29
|
10KB
|
656 lines
;$%@0 (+-*/)
$;
.TRIM @10%
^IND@76 ^TRIM@86%
.STM @81%
%
$;
@10%
% ------ CHANGE SPACE TO TAB
$;
@10%
%
$;
@10%
%
$;
@10%
%
.STM BYTE $;
.@10: DS 1@F1%
%
.STM BYTE $($);
.@10: DS @24@F1%
%
.STM INT I$;
.I@10: DW 0@F1%
%
.STM INT I$($);
.I@10: DS @24*2@F1%
%
.STM GOSUB $;
CALL ..@10@F1%
%
.STM I$=I$;
LHLD .I@20@F1%
SHLD .I@10@F1%
%
.STM $=+000;
XRA A@F1%
STA .@10@F1%
%
.STM I$=+K$;
LXI H,.K@20@F1%
SHLD .I@10@F1%
%
.STM $=+K$;
MVI A,.K@20@F1%
STA .@10@F1%
%
.STM I$=+$;
LXI H,@24@F13%
SHLD .I@10@F13%
%
.STM I$=I$(I$);
LXI D,.I@20@F1%
LHLD .I@30@F1%
DAD H@F1%
DAD D@F1%
XCHG@F1%
LXI H,.I@10@F1%
LDAX D@F1%
MOV M,A@F1%
INX D@F1%
INX H@F1%
LDAX D@F1%
MOV M,A@F1%
%
.STM I$=I$($);
LXI D,.I@20@F1%
LDA .@30@F1%
ADD A@F1%
MOV L,A@F1%
MVI H,0@F1%
DAD D@F1%
XCHG@F1%
LDAX D@F1%
MOV L,A@F1%
INX D@F1%
LDAX D@F1%
MOV H,A@F1%
SHLD .I@10@F1%
%
.STM I$($)=I$;
LXI D,.I@10@F1%
LDA .@20@F1%
ADD A@F1%
MOV L,A@F1%
MVI H,0@F1%
DAD D@F1%
XCHG@F1%
LHLD .I@30@F1%
MOV A,L@F1%
STAX D@F1%
INX D@F1%
MOV A,H@F1%
STAX D@F1%
%
.STM $(I$)=$;
LHLD .I@20@F1%
LXI D,.@10@F1%
DAD D@F1%
LDA .@30@F1%
MOV M,A@F1%
%
.STM $=$(I$);
LHLD .I@30@F1%
LXI D,.@20@F1%
DAD D@F1%
MOV A,M@F1%
STA .@10@F1%
%
.STM $=$($);
LHLD .@30@F1%
MVI H,0@F1%
LXI D,.@20@F1%
DAD D@F1%
MOV A,M@F1%
STA .@10@F1%
%
.STM $=I$;
LDA .I@20@F1%
STA .@10@F1%
%
.STM I$=$;
LHLD .@20@F1%
MVI H,0@F1%
SHLD .I@10@F1%
%
.STM $=$;
LDA .@20@F1%
STA .@10@F1%
%
.STM MS '$';
CALL ?MSG@F13%
DB '@10'@F1%
EXTRN ?MSG@F13%
%
.STM I$=I$+I$;
LHLD .I@30@F1%
XCHG@F1%
LHLD .I@20@F1%
DAD D@F1%
SHLD .I@10@F1%
%
.STM I$=I$*I$;
LHLD .I@20@F1%
XCHG@F1%
LHLD .I@30@F1%
CALL ?IMUL@F13%
EXTRN ?IMUL@F13%
SHLD .I@10@F1%
%
.STM I$=I$/I$;
LHLD .I@30@F1%
XCHG@F1%
LHLD .I@20@F1%
CALL ?IDIV@F13%
EXTRN ?IDIV@F13%
SHLD .I@10@F1%
%
.STM I$=-I$;
LHLD .I@20@F13%
CALL ?ICOMP@F13%
EXTRN ?ICOMP@F13%
SHLD .I@10@F13%
%
.STM I$=I$-I$;
LHLD .I@30@F1%
XCHG@F1%
LHLD .I@20@F1%
CALL ?ISUB@F13%
EXTRN ?ISUB@F13%
SHLD .I@10@F13%
%
.STM $=I$<=I$;
LHLD .I@30@F13%
XCHG@F13%
LHLD .I@20@F13%
CALL ?CDEHL@F13%
EXTRN ?CDEHL@F13%
CALL ?SETAC@F13%
STA .@10@F13%
%
.STM $=I$<!I$;
LHLD .I@30@F13%
XCHG@F13%
LHLD .I@20@F13%
CALL ?CDEHL@F13%
EXTRN ?CDEHL@F13%
RAL@F13%
ANI 1@F13%
STA .@10@F13%
%
.STM $=$<=$;
LXI H,.@30@F1%
LDA .@20@F1%
CMP M@F1%
CALL ?SETAC@F1%
STA .@10@F1%
%
.STM $=$<!$;
LDA .@20@F1%
LXI H,.@30@F1%
CMP M@F1%
RAL@F13%
ANI 1@F13%
STA .@10@F1%
%
.STM $=!$;
LDA .@20@F13%
CMA@F13%
ANI 1@F13%
STA .@10@F13%
%
.STM ENDMAIN$;
CALL ?ENDING@F1%
JMP ?BOOT@F13%
%
.STM ON $;
LDA .@10@F13%
ORA A@F13%
.POP%
^CSI@96 JZ ?BL0@91@F13%
.PUSH @91%
%
.STM I$--;
LHLD .I@10@F13%
DCX H@F13%
SHLD .I@10@F13%
%
.STM I$(I$)=I$;
LXI D,.I@10@F13%
LHLD .I@20@F13%
DAD H@F1%
DAD D@F13%
XCHG@F13%
LHLD .I@30@F13%
MOV A,L@F13%
STAX D@F13
INX D@F13%
MOV A,H@F13%
STAX D@F13%
%
.STM $--;
LXI H,.@10@F13%
DCR M@F13%
%
.STM $($)=$;
LDA .@20@F13%
MVI H,0@F13%
LXI D,.@10@F13%
MOV L,A@F13%
DAD D@F13%
LDA .@30@F13%
MOV M,A@F13%
%
.STM $=$==$;
LXI H,.@20@F13%
LDA .@30@F13%
CMP M@F13%
JZ $+5@F1%
XRA A@F13%
LXI B,013EH@F1%
STA .@10@F13% ; SAVE RESULTANT
%
.STM $=I$!=I$;
LXI D,.I@30@F1%
LXI H,.I@20@F1%
MVI B,1@F1%
LDAX D@F1%
XRA M@F1%
JNZ $+10@F1%
INX H@F1%
INX D@F1%
LDAX D@F1%
XRA M@F1%
JZ $+4@F1%
MOV A,B@F1%
STA .@10@F1%
%
.STM $=$!=$;
LXI H,.@30@F13%
LDA .@20@F13%
XRA M@F13%
JNZ $+5@F1%
XRA A@F13%
LXI B,013EH@F1%
STA .@10@F13%
%
.STM $=I$==I$;
LXI B,.I@30@F13%
LHLD .I@20@F13%
LDAX B@F13%
XRA L@F13%
JNZ $+12@F1%
INX B@F13%
LDAX B@F13%
XRA H@F13%
JNZ $+6@F1%
MVI A,1@F13%
LXI B,003EH@F1%
STA .@10@F13%
%
.STM $='$';
MVI A,'@20'@F13%
STA .@10@F13%
%
.STM $=$+$;
LXI H,.@20@F1%
LDA .@30@F1%
ADD M@F1%
STA .@10@F1%
%
.STM $=$-$;
LXI H,.@30@F1%
LDA .@20@F1%
SUB M@F1%
STA .@10@F1%
%
.STM $=$&$;
LXI H,.@30@F1%
LDA .@20@F1%
ANA M@F1%
STA .@10@F1%
%
.STM $=$?$;
LXI H,.@30@F1%
LDA .@20@F1%
ORA M@F1%
STA .@10@F1%
%
.STM LOC $;
?LL0@10:%@F13%
%
.STM GOTO $;
JMP ?LL0@10@F13%
%
.STM SUB $;
..@10:@F1%
%
.STM I$++;
LHLD .I@10@F1%
INX H@F1%
SHLD .I@10@F1%
%
.STM IF $; IF STATEMENT
LDA .@10@F13% ; GENERATE LDA X
ORA A@F13% ; GENERATE SET FLAGS
.PUSH @01%
JZ ?FI0@01@F13% ; GENERATE JZ ?FI0XX
% ----- END OF IF STATEMENT
.STM ELSE$;
.POP%
^CSI@96 .ELSE @91%
%
.ELSE$;
JMP ?FI0@01@F13%
^CSI@96 ?FI0@91:@F13%
.PUSH @01%
%
.STM ENDIF$;
.POP%
^CSI@96 ?FI0@91:@F13%
%
.STM CHOOSE ON $;
LDA .@10@F13%
STA .ERASER.@F1%
.PUSH @01% ; ENDCHOOSE LABEL
.PUSH C%
% ------ END OF CHOOSE ON
.STM CASE $; ; CASE STATEMENT (UGH@)
.POP% ; POP INDICATOR OF PREVIOUS STATEMENT OFF STACK
^CSI@96 .IF @91=C SKIP 6% ; IF FIRST TIME THRU CASE
.POP% ; GET ENDCHOOSE OR DEFAULT LABEL
^CSI@96 JMP ?XC0@91@F13% ; GENERATE JMP
.LET ^ELB=@91% ; SAVE LABEL FOR LATER
.POP% ; GET ADDRESS OF JUMP TO NEXT CASE OR DEFAULT
^CSI@96 ?CA0@91: LDA .@10@F13% ; GENERATE LD
.SKIP 3% ; JUMP ACROSS FIRST TIME CODE
LDA .@10@F13% ; GET PARAMETER OF CASE
.POP% ; GET LABEL OF ENDCHOOSE
^CSI@96 .LET ^ELB=@91% ; SAVE LABEL
.PUSH @02% ; SET UP LABEL FOR JNZ CASE N+1 OR DEFAULT
LXI H,.ERASER.@F1%
CMP M@F13% ; OUTPUT COMPARE
JNZ ?CA0@02@F13% ; OUTPUT JUMP CASE N+1 OR DEFAULT
^ELB@96 .PUSH @91% ; PUT END LABEL BACK ON STACK
.PUSH S% ; SAY NOT FIRST TIME THRU
%
.STM DEFAULT$; ; DEFAULT STATEMENT
.POP% ; POP INDICATOR OFF STACK (YOU WONT NEED IT NOW)
.POP% ; GET ENDCHOOSE LABEL FROM STACK
^CSI@96 .LET ^ELB=@91% ; SAVE ENDLABEL
JMP ?XC0@91@F13%
.POP% ; GET THIS LABEL
^CSI@96 ?CA0@91: ; DEFAULT CLAUSE@F13%
^ELB@96 .PUSH @91% ; PUT ENDCHOOSE LABEL ON STACK
.PUSH D%
%
.STM ENDCHOOSE$; ; END OF MULTIPATH BRANCH
.POP%
^CSI@96 .LET ^ELB=@91% ; TYPE OF ENDING (D OR S)
.POP%
^CSI@96 ?XC0@91:@F13% ; OUTPUT ENDING OF CHOOSE ON
.IF ^ELB==D SKIP 3% ; SKIP OVER ENDING FOR NON-DEFAULT CASE
.POP%
^CSI@96 ?CA0@91:@F1%
; DEFAULT END@F1%
%
.STM $++;
LXI H,.@10@F1%
INR M@F1%
%
.STM ENDSUB$;
RET@F1%
%
.STM PARAMETER K$=$;
.K@10 EQU @24@F1%
%
.STM STOP $;
MVI A,@10@F13%
CALL ?ISTOP@F1%
EXTRN ?ISTOP@F1%
%
.STM RETURN;
RET @F13%
%
.STM OPEN $ FOR $ AT $;
LXI D,.@10@F13%
LDA .@20@F13%
LHLD .@30@F13%
CALL ?IOPEN@F13%
EXTRN ?IOPEN@F13%
%
.STM CLOSE $;
LXI H,.@10@F13%
CALL ?BCLOF@F13%
EXTRN ?BCLOF@F13%
%
.STM READ $ FROM $
LXI D,.@20@F13%
LXI H,.@10@F13%
CALL ?BREAD@F13%
EXTRN ?BREAD@F13%
%
.STM WRITE $ INTO $
LXI D,.@20@F13%
LDA .@10@F13%
CALL ?BWRIT@F13%
EXTRN ?BWRIT@F13%
%
.STM PACK (I$,$,$);
LDA .@30@F13%
MOV L,A@F13%
LDA .@20@F13%
MOV H,A@F13%
SHLD .I@10@F13%
%
.STM $=+$;
MVI A,@24@F1%
STA .@10@F1%
%
.STM BOTTOM;
COMMON /IOCTRL/@F13%
.ER: DB 0@F13%
.AC: DB 0@F1%
.IAV: DS 12@F1%
DSEG@F13%
DS 40@F13%
?STACK: DS 2@F13%
END START@F13%
%
.STM BEGINMAIN ($,$);
.ERASER.: DB 0
CSEG@F13%
?SETAC: MVI A,1@F1%
RM ; RETURN ON MINUS@F1%
RZ ; RETURN ON ZERO (AC=1)@F1%
XRA A ; NON-ZERO NON-CARRY@F1%
RET@F1%
START: LXI SP,?STACK@F13%
CALL ?INIT@F1%
LXI B,.@10@F1%
LXI D,.@20@F1%
%
.STM FINIS$;
.. END OF PIDGIN COMPILATION@F15%
@F0%
%
.STM TOP$;
..PIDGIN FOR THE 8080 COPYRIGHT (C) A. L. BENDER, M. D.@F15%
EXTRN ?INIT,?ENDING,?BOOT@F1%
DB 'COPYRIGHT (C) 1981 A. L. BENDER, M. D.'@F1%
DSEG@F13%
%
.STM UNPACK (I$,$,$);
LHLD .I@10@F13%
MOV A,L@F13%
STA .@30@F13%
MOV A,H@F13%
STA .@20@F13%
%
.STM CALL I$;
LXI H,$+8@F1%
PUSH H@F1%
LHLD .I@10@F1%
PCHL@F1%
%
.STM ASSOCIATE FCB $ WITH $;
LXI D,?IFCB+((@10-1)*36)@F1%
LXI H,.@20@F1%
CALL ?ATACH@F1%
EXTRN ?ATACH,?IFCB@F1%
%
.STM READBUF $;
LXI D,.@10@F13%
CALL ?RDBUF@F13%
EXTRN ?RDBUF@F13%
%
.STM WRITEBUF $;
LXI D,.@10@F13%
CALL ?WRBUF@F13%
EXTRN ?WRBUF@F13%
%
.STM READ $;
CALL ?RNX@F1%
EXTRN ?RNX@F1%
STA .@10@F1%
%
.STM WRITE $;
LDA .@10@F1%
CALL ?WRNXT@F1%
EXTRN ?WRNXT@F1%
%
.STM WHILE$;
.PUSH @01%
?TL0@01:%@F13%
%
.STM ENDWHILE$;
.POP%
^CSI@96 @91@96%
^CSI@96 JMP ?TL0@91@F13%
?BL0@91:@F13%
%
.PUSH $;
.LET ^CSP=^CSP+1%
^CSP@96 .STO ^CS@91=@10%
% - END OF PUSH
.POP;
^CSP@96 .IF @91<1 SKIP 3%
^CS@91@86 .STO ^CSI=@81%
.LET ^CSP=^CSP-1%
@F9%
.STO ^CSI=*%
@FE%
% - END OF POP
.STO $=$;
@F3%
% -END OF STORE
.LET $=$;
@24@26 @F3%
% -END OF LET
.SKIP $;
@F4%
% - END OF SKIP
.IF $=$ SKIP $;
@F50%
%
.IF $-=$ SKIP $;
@F51%
%
.IF $<$ SKIP $;
@F6-%
%
.IF $==$ SKIP $;
@F60%
%
.IF $<>$ SKIP $;
@F61%
%
.DUMP STACK;
^DBG@56 .IF @51=T SKIP 1%
@F9%
.LET ^CNT=^CSP%
^CSP@16 @11@F7%
^CNT@26 ^CS@21@36%
^CS@21 "@31"@F14%
.LET ^CNT=^CNT-1%
@F8%
^LEV@46%
^LEV =@41@F14%
%
.DEBUG;
.STO ^DBG=T%
%
.UNBUG;
.STO ^DBG=F%
%
.IF $>$ SKIP $;
@F6+%
%
.CAT $,$;
@11@20@26 @F3%
% - END CONCATENATION
.TRIM $;
.TRIM @10%
%
.TRIM $;
.TRIM @10%
%
.TRIM $;
.STO ^TRIM=@10%
%
.XSTM $;
.INCLEV%
.TRIM @10%
^TRIM@26 .YSTM @21%
%
.YSTM %
%
.YSTM ;@%
%
.INCLEV;
.LET ^LEV=^LEV+1%
.CAT ^IND, | %
%
.DECLEV;
^LEV@16 .IF @11<1 SKIP 2%
.LET ^LEV=^LEV-1%
^IND@26 .UND @21%
% --------
.UND $ | ;
.STO ^IND=@10%
% --------
.TOS;
^CSP@96 .IF @91<1 SKIP 2%
^CS@91@86 .STO ^CSI=@81%
@F9%
.STO ^CSI=*%
%
.CONSOLE;
5@F2%
%%
.LET ^ERR=0;
.LET ^IOS=0;
.LET ^LEV=0;
.STO ^IND=;
.LET ^CSP=0;
.STO ^DBG=F
.STO ^ELB=;
.LET ^WPL=0;
.STO ^CS0=*;
.STO ^SOP=;
.STO ^DOP=;