home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol043 / pidgin.s2m < prev    next >
Text File  |  1984-04-29  |  10KB  |  656 lines

  1. ;$%@0 (+-*/)
  2.     $;
  3. .TRIM @10%
  4. ^IND@76 ^TRIM@86%
  5. .STM @81%
  6. %
  7.  $;
  8.     @10%
  9. % ------ CHANGE SPACE TO TAB
  10.     $;
  11.  @10%
  12. %
  13.         $;
  14.  @10%
  15. %
  16.             $;
  17.  @10%
  18. %
  19. .STM BYTE $;
  20. .@10:    DS    1@F1%
  21. %
  22. .STM BYTE $($);
  23. .@10:    DS    @24@F1%
  24. %
  25. .STM INT I$;
  26. .I@10:    DW    0@F1%
  27. %
  28. .STM INT I$($);
  29. .I@10:    DS    @24*2@F1%
  30. %
  31. .STM GOSUB $;
  32.     CALL    ..@10@F1%
  33. %
  34. .STM I$=I$;
  35.     LHLD    .I@20@F1%
  36.     SHLD    .I@10@F1%
  37. %
  38. .STM $=+000;
  39.     XRA    A@F1%
  40.     STA    .@10@F1%
  41. %
  42. .STM I$=+K$;
  43.     LXI    H,.K@20@F1%
  44.     SHLD    .I@10@F1%
  45. %
  46. .STM $=+K$;
  47.  
  48.     MVI    A,.K@20@F1%
  49.     STA    .@10@F1%
  50. %
  51. .STM I$=+$;
  52.     LXI    H,@24@F13%
  53.     SHLD    .I@10@F13%
  54. %
  55. .STM I$=I$(I$);
  56.     LXI    D,.I@20@F1%
  57.     LHLD    .I@30@F1%
  58.     DAD    H@F1%
  59.     DAD    D@F1%
  60.     XCHG@F1%
  61.     LXI    H,.I@10@F1%
  62.     LDAX    D@F1%
  63.     MOV    M,A@F1%
  64.     INX    D@F1%
  65.     INX    H@F1%
  66.     LDAX    D@F1%
  67.     MOV    M,A@F1%
  68. %
  69. .STM I$=I$($);
  70.     LXI    D,.I@20@F1%
  71.     LDA    .@30@F1%
  72.     ADD    A@F1%
  73.     MOV    L,A@F1%
  74.     MVI    H,0@F1%
  75.     DAD    D@F1%
  76.     XCHG@F1%
  77.     LDAX    D@F1%
  78.     MOV    L,A@F1%
  79.     INX    D@F1%
  80.     LDAX    D@F1%
  81.     MOV    H,A@F1%
  82.     SHLD    .I@10@F1%
  83. %
  84. .STM I$($)=I$;
  85.     LXI    D,.I@10@F1%
  86.     LDA    .@20@F1%
  87.     ADD    A@F1%
  88.     MOV    L,A@F1%
  89.     MVI    H,0@F1%
  90.     DAD    D@F1%
  91.     XCHG@F1%
  92.     LHLD    .I@30@F1%
  93.     MOV    A,L@F1%
  94.     STAX    D@F1%
  95.     INX    D@F1%
  96.     MOV    A,H@F1%
  97.     STAX    D@F1%
  98. %
  99. .STM $(I$)=$;
  100.     LHLD    .I@20@F1%
  101.     LXI    D,.@10@F1%
  102.     DAD    D@F1%
  103.     LDA    .@30@F1%
  104.     MOV    M,A@F1%
  105. %
  106. .STM $=$(I$);
  107.     LHLD    .I@30@F1%
  108.     LXI    D,.@20@F1%
  109.     DAD    D@F1%
  110.     MOV    A,M@F1%
  111.     STA    .@10@F1%
  112. %
  113. .STM $=$($);
  114.     LHLD    .@30@F1%
  115.     MVI    H,0@F1%
  116.     LXI    D,.@20@F1%
  117.     DAD    D@F1%
  118.     MOV    A,M@F1%
  119.     STA    .@10@F1%
  120. %
  121. .STM $=I$;
  122.     LDA    .I@20@F1%
  123.     STA    .@10@F1%
  124. %
  125. .STM I$=$;
  126.     LHLD    .@20@F1%
  127.     MVI    H,0@F1%
  128.     SHLD    .I@10@F1%
  129. %
  130. .STM $=$;
  131.     LDA    .@20@F1%
  132.     STA    .@10@F1%
  133. %
  134. .STM MS '$';
  135.     CALL    ?MSG@F13%
  136.     DB    '@10'@F1%
  137.     EXTRN    ?MSG@F13%
  138. %
  139. .STM I$=I$+I$;
  140.     LHLD    .I@30@F1%
  141.     XCHG@F1%
  142.     LHLD    .I@20@F1%
  143.     DAD    D@F1%
  144.     SHLD    .I@10@F1%
  145. %
  146. .STM I$=I$*I$;
  147.     LHLD    .I@20@F1%
  148.     XCHG@F1%
  149.     LHLD    .I@30@F1%
  150.     CALL    ?IMUL@F13%
  151.     EXTRN    ?IMUL@F13%
  152.     SHLD    .I@10@F1%
  153. %
  154. .STM I$=I$/I$;
  155.     LHLD    .I@30@F1%
  156.     XCHG@F1%
  157.     LHLD    .I@20@F1%
  158.     CALL    ?IDIV@F13%
  159.     EXTRN    ?IDIV@F13%
  160.     SHLD    .I@10@F1%
  161. %
  162. .STM I$=-I$;
  163.     LHLD    .I@20@F13%
  164.     CALL    ?ICOMP@F13%
  165.     EXTRN    ?ICOMP@F13%
  166.     SHLD    .I@10@F13%
  167. %
  168. .STM I$=I$-I$;
  169.     LHLD    .I@30@F1%
  170.     XCHG@F1%
  171.     LHLD    .I@20@F1%
  172.     CALL    ?ISUB@F13%
  173.     EXTRN    ?ISUB@F13%
  174.     SHLD    .I@10@F13%
  175. %
  176. .STM $=I$<=I$;
  177.     LHLD    .I@30@F13%
  178.     XCHG@F13%
  179.     LHLD    .I@20@F13%
  180.     CALL    ?CDEHL@F13%
  181.     EXTRN    ?CDEHL@F13%
  182.     CALL    ?SETAC@F13%
  183.     STA    .@10@F13%
  184. %
  185. .STM $=I$<!I$;
  186.     LHLD    .I@30@F13%
  187.     XCHG@F13%
  188.     LHLD    .I@20@F13%
  189.     CALL    ?CDEHL@F13%
  190.     EXTRN    ?CDEHL@F13%
  191.     RAL@F13%
  192.     ANI    1@F13%
  193.     STA    .@10@F13%
  194. %
  195. .STM $=$<=$;
  196.     LXI    H,.@30@F1%
  197.     LDA    .@20@F1%
  198.     CMP    M@F1%
  199.     CALL    ?SETAC@F1%
  200.     STA    .@10@F1%
  201. %
  202. .STM $=$<!$;
  203.     LDA    .@20@F1%
  204.     LXI    H,.@30@F1%
  205.     CMP    M@F1%
  206.     RAL@F13%
  207.     ANI    1@F13%
  208.     STA    .@10@F1%
  209. %
  210. .STM $=!$;
  211.     LDA    .@20@F13%
  212.     CMA@F13%
  213.     ANI    1@F13%
  214.     STA    .@10@F13%
  215. %
  216. .STM ENDMAIN$;
  217.     CALL    ?ENDING@F1%
  218.     JMP    ?BOOT@F13%
  219. %
  220. .STM ON $;
  221.     LDA    .@10@F13%
  222.     ORA    A@F13%
  223. .POP%
  224. ^CSI@96     JZ    ?BL0@91@F13%
  225. .PUSH @91%
  226. %
  227. .STM I$--;
  228.     LHLD    .I@10@F13%
  229.     DCX    H@F13%
  230.     SHLD    .I@10@F13%
  231. %
  232. .STM I$(I$)=I$;
  233.     LXI    D,.I@10@F13%
  234.     LHLD    .I@20@F13%
  235.     DAD    H@F1%
  236.     DAD    D@F13%
  237.     XCHG@F13%
  238.     LHLD    .I@30@F13%
  239.     MOV    A,L@F13%
  240.     STAX    D@F13
  241.     INX    D@F13%
  242.     MOV    A,H@F13%
  243.     STAX    D@F13%
  244. %
  245. .STM $--;
  246.     LXI    H,.@10@F13%
  247.     DCR    M@F13%
  248. %
  249. .STM $($)=$;
  250.     LDA    .@20@F13%
  251.     MVI    H,0@F13%
  252.     LXI    D,.@10@F13%
  253.     MOV    L,A@F13%
  254.     DAD    D@F13%
  255.     LDA    .@30@F13%
  256.     MOV    M,A@F13%
  257. %
  258. .STM $=$==$;
  259.     LXI    H,.@20@F13%
  260.     LDA    .@30@F13%
  261.     CMP    M@F13%
  262.     JZ    $+5@F1%
  263.     XRA    A@F13%
  264.     LXI    B,013EH@F1%
  265.     STA    .@10@F13% ; SAVE RESULTANT
  266. %
  267. .STM $=I$!=I$;
  268.     LXI    D,.I@30@F1%
  269.     LXI    H,.I@20@F1%
  270.     MVI    B,1@F1%
  271.     LDAX    D@F1%
  272.     XRA    M@F1%
  273.     JNZ    $+10@F1%
  274.     INX    H@F1%
  275.     INX    D@F1%
  276.     LDAX    D@F1%
  277.     XRA    M@F1%
  278.     JZ    $+4@F1%
  279.     MOV    A,B@F1%
  280.     STA    .@10@F1%
  281. %
  282. .STM $=$!=$;
  283.     LXI    H,.@30@F13%
  284.     LDA    .@20@F13%
  285.     XRA    M@F13%
  286.     JNZ    $+5@F1%
  287.     XRA    A@F13%
  288.     LXI    B,013EH@F1%
  289.     STA    .@10@F13%
  290. %
  291. .STM $=I$==I$;
  292.     LXI    B,.I@30@F13%
  293.     LHLD    .I@20@F13%
  294.     LDAX    B@F13%
  295.     XRA    L@F13%
  296.     JNZ    $+12@F1%
  297.     INX    B@F13%
  298.     LDAX    B@F13%
  299.     XRA    H@F13%
  300.     JNZ    $+6@F1%
  301.     MVI    A,1@F13%
  302.     LXI    B,003EH@F1%
  303.     STA    .@10@F13%
  304. %
  305. .STM $='$';
  306.     MVI    A,'@20'@F13%
  307.     STA    .@10@F13%
  308. %
  309. .STM $=$+$;
  310.     LXI    H,.@20@F1%
  311.     LDA    .@30@F1%
  312.     ADD    M@F1%
  313.     STA    .@10@F1%
  314. %
  315. .STM $=$-$;
  316.     LXI    H,.@30@F1%
  317.     LDA    .@20@F1%
  318.     SUB    M@F1%
  319.     STA    .@10@F1%
  320. %
  321. .STM $=$&$;
  322.     LXI    H,.@30@F1%
  323.     LDA    .@20@F1%
  324.     ANA    M@F1%
  325.     STA    .@10@F1%
  326. %
  327. .STM $=$?$;
  328.     LXI    H,.@30@F1%
  329.     LDA    .@20@F1%
  330.     ORA    M@F1%
  331.     STA    .@10@F1%
  332. %
  333. .STM LOC $;
  334. ?LL0@10:%@F13%
  335. %
  336. .STM GOTO $;
  337.     JMP    ?LL0@10@F13%
  338. %
  339. .STM SUB $;
  340. ..@10:@F1%
  341. %
  342. .STM I$++;
  343.     LHLD    .I@10@F1%
  344.     INX    H@F1%
  345.     SHLD    .I@10@F1%
  346. %
  347. .STM IF $;    IF STATEMENT
  348.     LDA    .@10@F13%    ; GENERATE LDA X
  349.     ORA    A@F13%        ; GENERATE SET FLAGS
  350. .PUSH @01%
  351.     JZ    ?FI0@01@F13%    ; GENERATE JZ    ?FI0XX
  352. % ----- END OF IF STATEMENT
  353. .STM ELSE$;
  354. .POP%
  355. ^CSI@96 .ELSE @91%
  356. %
  357. .ELSE$;
  358.     JMP    ?FI0@01@F13%
  359. ^CSI@96 ?FI0@91:@F13%
  360. .PUSH @01%
  361. %
  362. .STM ENDIF$;
  363. .POP%
  364. ^CSI@96 ?FI0@91:@F13%
  365. %
  366. .STM CHOOSE ON $;
  367.     LDA    .@10@F13%
  368.     STA    .ERASER.@F1%
  369. .PUSH @01%    ; ENDCHOOSE LABEL
  370. .PUSH C%
  371. % ------ END OF CHOOSE ON
  372. .STM CASE $;    ; CASE STATEMENT (UGH@)
  373. .POP%    ; POP INDICATOR OF PREVIOUS STATEMENT OFF STACK
  374. ^CSI@96 .IF @91=C SKIP 6%    ; IF FIRST TIME THRU CASE
  375. .POP%    ; GET ENDCHOOSE OR DEFAULT LABEL
  376. ^CSI@96     JMP    ?XC0@91@F13%    ; GENERATE JMP
  377. .LET ^ELB=@91%    ; SAVE LABEL FOR LATER
  378. .POP%    ; GET ADDRESS OF JUMP TO NEXT CASE OR DEFAULT
  379. ^CSI@96 ?CA0@91:    LDA    .@10@F13% ; GENERATE LD
  380. .SKIP 3%    ; JUMP ACROSS FIRST TIME CODE
  381.     LDA    .@10@F13%    ; GET PARAMETER OF CASE
  382. .POP%    ; GET LABEL OF ENDCHOOSE
  383. ^CSI@96 .LET ^ELB=@91% ; SAVE LABEL
  384. .PUSH @02% ; SET UP LABEL FOR JNZ CASE N+1 OR DEFAULT
  385.     LXI    H,.ERASER.@F1%
  386.     CMP    M@F13%    ; OUTPUT COMPARE
  387.     JNZ    ?CA0@02@F13% ; OUTPUT JUMP CASE N+1 OR DEFAULT
  388. ^ELB@96 .PUSH @91% ; PUT END LABEL BACK ON STACK
  389. .PUSH S%     ; SAY NOT FIRST TIME THRU
  390. %
  391. .STM DEFAULT$;    ; DEFAULT STATEMENT
  392. .POP%    ; POP INDICATOR OFF STACK (YOU WONT NEED IT NOW)
  393. .POP%    ; GET ENDCHOOSE LABEL FROM STACK
  394. ^CSI@96 .LET ^ELB=@91% ; SAVE ENDLABEL
  395.     JMP    ?XC0@91@F13%
  396. .POP%    ; GET THIS LABEL
  397. ^CSI@96 ?CA0@91:    ; DEFAULT CLAUSE@F13%
  398. ^ELB@96 .PUSH @91%    ; PUT ENDCHOOSE LABEL ON STACK
  399. .PUSH D%
  400. %
  401. .STM ENDCHOOSE$; ; END OF MULTIPATH BRANCH
  402. .POP%
  403. ^CSI@96 .LET ^ELB=@91% ; TYPE OF ENDING (D OR S)
  404. .POP%
  405. ^CSI@96 ?XC0@91:@F13% ; OUTPUT ENDING OF CHOOSE ON
  406. .IF ^ELB==D SKIP 3% ; SKIP OVER ENDING FOR NON-DEFAULT CASE
  407. .POP%
  408. ^CSI@96 ?CA0@91:@F1%
  409. ; DEFAULT END@F1%
  410. %
  411. .STM $++;
  412.     LXI    H,.@10@F1%
  413.     INR    M@F1%
  414. %
  415. .STM ENDSUB$;
  416.     RET@F1%
  417. %
  418. .STM PARAMETER K$=$;
  419. .K@10    EQU    @24@F1%
  420. %
  421. .STM STOP $;
  422.     MVI    A,@10@F13%
  423.     CALL    ?ISTOP@F1%
  424.     EXTRN    ?ISTOP@F1%
  425. %
  426. .STM RETURN;
  427.     RET    @F13%
  428. %
  429. .STM OPEN $ FOR $ AT $;
  430.     LXI    D,.@10@F13%
  431.     LDA    .@20@F13%
  432.     LHLD    .@30@F13%
  433.     CALL    ?IOPEN@F13%
  434.     EXTRN    ?IOPEN@F13%
  435. %
  436. .STM CLOSE $;
  437.     LXI    H,.@10@F13%
  438.     CALL    ?BCLOF@F13%
  439.     EXTRN    ?BCLOF@F13%
  440. %
  441. .STM READ $ FROM $
  442.     LXI    D,.@20@F13%
  443.     LXI    H,.@10@F13%
  444.     CALL    ?BREAD@F13%
  445.     EXTRN    ?BREAD@F13%
  446. %
  447. .STM WRITE $ INTO $
  448.     LXI    D,.@20@F13%
  449.     LDA    .@10@F13%
  450.     CALL    ?BWRIT@F13%
  451.     EXTRN    ?BWRIT@F13%
  452. %
  453. .STM PACK (I$,$,$);
  454.     LDA    .@30@F13%
  455.     MOV    L,A@F13%
  456.     LDA    .@20@F13%
  457.     MOV    H,A@F13%
  458.     SHLD    .I@10@F13%
  459. %
  460. .STM $=+$;
  461.     MVI    A,@24@F1%
  462.     STA    .@10@F1%
  463. %
  464. .STM BOTTOM;
  465.     COMMON    /IOCTRL/@F13%
  466. .ER:    DB    0@F13%
  467. .AC:    DB    0@F1%
  468. .IAV:    DS    12@F1%
  469.     DSEG@F13%
  470.     DS    40@F13%
  471. ?STACK:    DS    2@F13%
  472.     END    START@F13%
  473. %
  474. .STM BEGINMAIN ($,$);
  475. .ERASER.: DB    0
  476.     CSEG@F13%
  477. ?SETAC:    MVI    A,1@F1%
  478.     RM        ; RETURN ON MINUS@F1%
  479.     RZ        ; RETURN ON ZERO (AC=1)@F1%
  480.     XRA    A    ; NON-ZERO NON-CARRY@F1%
  481.     RET@F1%
  482. START:    LXI    SP,?STACK@F13%
  483.     CALL    ?INIT@F1%
  484.     LXI    B,.@10@F1%
  485.     LXI    D,.@20@F1%
  486. %
  487. .STM FINIS$;
  488. .. END OF PIDGIN COMPILATION@F15%
  489. @F0%
  490. %
  491. .STM TOP$;
  492. ..PIDGIN FOR THE 8080 COPYRIGHT (C) A. L. BENDER, M. D.@F15%
  493.     EXTRN    ?INIT,?ENDING,?BOOT@F1%
  494.     DB    'COPYRIGHT (C) 1981 A. L. BENDER, M. D.'@F1%
  495.     DSEG@F13%
  496. %
  497. .STM UNPACK (I$,$,$);
  498.     LHLD    .I@10@F13%
  499.     MOV    A,L@F13%
  500.     STA    .@30@F13%
  501.     MOV    A,H@F13%
  502.     STA    .@20@F13%
  503. %
  504. .STM CALL I$;
  505.     LXI    H,$+8@F1%
  506.     PUSH    H@F1%
  507.     LHLD    .I@10@F1%
  508.     PCHL@F1%
  509. %
  510. .STM ASSOCIATE FCB $ WITH $;
  511.     LXI    D,?IFCB+((@10-1)*36)@F1%
  512.     LXI    H,.@20@F1%
  513.     CALL    ?ATACH@F1%
  514.     EXTRN    ?ATACH,?IFCB@F1%
  515. %
  516. .STM READBUF $;
  517.     LXI    D,.@10@F13%
  518.     CALL    ?RDBUF@F13%
  519.     EXTRN    ?RDBUF@F13%
  520. %
  521. .STM WRITEBUF $;
  522.     LXI    D,.@10@F13%
  523.     CALL    ?WRBUF@F13%
  524.     EXTRN    ?WRBUF@F13%
  525. %
  526. .STM READ $;
  527.     CALL    ?RNX@F1%
  528.     EXTRN    ?RNX@F1%
  529.     STA    .@10@F1%
  530. %
  531. .STM WRITE $;
  532.     LDA    .@10@F1%
  533.     CALL    ?WRNXT@F1%
  534.     EXTRN    ?WRNXT@F1%
  535. %
  536. .STM WHILE$;
  537. .PUSH @01%
  538. ?TL0@01:%@F13%
  539. %
  540. .STM ENDWHILE$;
  541. .POP%
  542. ^CSI@96 @91@96%
  543. ^CSI@96     JMP    ?TL0@91@F13%
  544. ?BL0@91:@F13%
  545. %
  546. .PUSH $;
  547. .LET ^CSP=^CSP+1%
  548. ^CSP@96 .STO ^CS@91=@10%
  549. % - END OF PUSH
  550. .POP;
  551. ^CSP@96 .IF @91<1 SKIP 3%
  552. ^CS@91@86 .STO ^CSI=@81%
  553. .LET ^CSP=^CSP-1%
  554. @F9%
  555. .STO ^CSI=*%
  556. @FE%
  557. % - END OF POP
  558. .STO $=$;
  559. @F3%
  560. % -END OF STORE
  561. .LET $=$;
  562. @24@26 @F3%
  563. % -END OF LET
  564. .SKIP $;
  565. @F4%
  566. % - END OF SKIP
  567. .IF $=$ SKIP $;
  568. @F50%
  569. %
  570. .IF $-=$ SKIP $;
  571. @F51%
  572. %
  573. .IF $<$ SKIP $;
  574. @F6-%
  575. %
  576. .IF $==$ SKIP $;
  577. @F60%
  578. %
  579. .IF $<>$ SKIP $;
  580. @F61%
  581. %
  582. .DUMP STACK;
  583. ^DBG@56 .IF @51=T SKIP 1%
  584. @F9%
  585. .LET ^CNT=^CSP%
  586. ^CSP@16 @11@F7%
  587. ^CNT@26 ^CS@21@36%
  588. ^CS@21    "@31"@F14%
  589. .LET ^CNT=^CNT-1%
  590. @F8%
  591. ^LEV@46%
  592. ^LEV    =@41@F14%
  593. %
  594. .DEBUG;
  595. .STO ^DBG=T%
  596. %
  597. .UNBUG;
  598. .STO ^DBG=F%
  599. %
  600. .IF $>$ SKIP $;
  601. @F6+%
  602. %
  603. .CAT $,$;
  604. @11@20@26  @F3%
  605. % - END CONCATENATION
  606. .TRIM  $;
  607. .TRIM @10%
  608. %
  609. .TRIM    $;
  610. .TRIM @10%
  611. %
  612. .TRIM $;
  613. .STO ^TRIM=@10%
  614. %
  615. .XSTM $;
  616. .INCLEV%
  617. .TRIM @10%
  618. ^TRIM@26 .YSTM @21%
  619. %
  620. .YSTM %
  621. %
  622. .YSTM ;@%
  623. %
  624. .INCLEV;
  625. .LET ^LEV=^LEV+1%
  626. .CAT ^IND, | %
  627. %
  628. .DECLEV;
  629. ^LEV@16 .IF @11<1 SKIP 2%
  630. .LET ^LEV=^LEV-1%
  631. ^IND@26 .UND @21%
  632. % --------
  633. .UND  $ | ;
  634. .STO ^IND=@10%
  635. % --------
  636. .TOS;
  637. ^CSP@96 .IF @91<1 SKIP 2%
  638. ^CS@91@86 .STO ^CSI=@81%
  639. @F9%
  640. .STO ^CSI=*%
  641. %
  642. .CONSOLE;
  643. 5@F2%
  644. %%
  645. .LET ^ERR=0;
  646. .LET ^IOS=0;
  647. .LET ^LEV=0;
  648. .STO ^IND=;
  649. .LET ^CSP=0;
  650. .STO ^DBG=F
  651. .STO ^ELB=;
  652. .LET ^WPL=0;
  653. .STO ^CS0=*;
  654. .STO ^SOP=;
  655. .STO ^DOP=;
  656.