home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol043 / macros.pgn < prev    next >
Text File  |  1984-04-29  |  7KB  |  431 lines

  1. U:;$^    
  2. :TOP;
  3.     @    EXTRN@    ?MSG;
  4.     @    EXTRN@    ?BOOT,?INIT,?ENDING;
  5.     @    COMMON@    /IOCTRL/;
  6.     .ER@:@    DB@    0;
  7.     .AC@:@    DB@    0;
  8.     .IAV@:@    DW@    0,0,0,0,0,0;
  9.     @    COMMON@    /      / ;
  10. :BEGINMAIN(AC,IAV);
  11.     @    DSEG;
  12.     .ERASER.@: DB@    0;
  13.     @    CSEG;
  14. ?SETAC@:@    MVI@    A,1;
  15.     @    RM;
  16.     @    RZ;
  17.     @    XRA@    A;
  18.     @    RET;
  19. ?INTCK@:@    MVI@    B,1;
  20.     @    LDAX@    D;
  21.     @    CMP@    M;
  22.     @    JNZ@    @$+8;
  23.     @    INX@    H;
  24.     @    INX@    D;
  25.     @    LDAX@    D;
  26.     @    XRA@    M;
  27.     @    RZ;
  28.     @    MOV@    A,B;
  29.     @    RET;
  30.  
  31. ?START@:@    LXI@    SP,?STACK;
  32. @    CALL@    ?INIT;
  33. :PARAMETER K$$=$$$;
  34. .K^P1C^P2C@    EQU@    ^V3S^V4*^V5*^!0N;
  35. :MS '$$$$$$$$$';
  36. @    CALL@    ?MSG;
  37. @    DB@    '^P1C^P2C^P3C^P4C^P5C^P6C^P7C^P8C^P9C';
  38. :GOSUB $$;
  39.     @    CALL@    ..^P1C^P2C;
  40. :GOTO $$;
  41.     @    JMP@    ?LL0^P1C^P2C;
  42. :$$=+000;
  43.     @    XRA@    A;
  44.     @    STA@    .^P1C^P2C;
  45. :I$$=+00000;
  46.     @    LXI@    H,0;
  47.     @    SHLD@    .I^P1C^P2C;
  48. :I$$=+K$$;
  49.     @    LXI@    H,.K^P3C^P4C;
  50.     @    SHLD@    .I^P1C^P2C;
  51. :PACK(I$$,$$,$$);
  52.     @    LDA@    .^P5C^P6C;
  53.     @    MOV@    L,A;
  54.     @    LDA@    .^P3C^P4C;
  55.     @    MOV@    H,A;
  56.     @    SHLD@    .I^P1C^P2C;
  57. :UNPACK(I$$,$$,$$);
  58.     @    LHLD@    .I^P1C^P2C;
  59.     @    MOV@    A,L;
  60.     @    STA@    .^P3C^P4C;
  61.     @    MOV@    A,H;
  62.     @    STA@    .^P5C^P6C;
  63. :CALL I$$;
  64.     @    LXI@    H,@$+8;
  65.     @    PUSH@    H;
  66.     @    LHLD@    .I^P1C^P2C;
  67.     @    PCHL;
  68. :$$=+K$$;
  69.     @    MVI@    A,.K^P3C^P4C;
  70.     @    STA@    .^P1C^P2C;
  71. :$$='$';
  72.     @    MVI@    A,'^P3C';
  73.     @    STA@    .^P1C^P2C;
  74. :$$=+$$$;
  75.     @    MVI@    A,^V3S^V4*^V5*^!0N;
  76.     @    STA@    .^P1C^P2C;
  77. :I$$=+$$$$$;
  78.     @    LXI@    H,^V3S^V4*^V5*^V6*^V7*^!0N;
  79.     @    SHLD@    .I^P1C^P2C;
  80. :$$=$$;
  81.     @    LDA@    .^P3C^P4C;
  82.     @    STA@    .^P1C^P2C;
  83. :$$++;
  84.     @    LXI@    H,.^P1C^P2C;
  85.     @    INR@    M;
  86. :$$--;
  87.     @    LXI@    H,.^P1C^P2C;
  88.     @    DCR@    M;
  89. :I$$=$$;
  90.     @    LHLD@    .^P3C^P4C;
  91.     @    MVI@    H,0;
  92.     @    SHLD@    .I^P1C^P2C;
  93. :$$=I$$;
  94.     @    LDA@    .I^P3C^P4C;
  95.     @    STA@    .^P1C^P2C;
  96. :I$$=I$$;
  97.     @    LHLD@    .I^P3C^P4C;
  98.     @    SHLD@    .I^P1C^P2C;
  99. :$$=$$($$);
  100.     @    LHLD@    .^P5C^P6C;
  101.     @    MVI@    H,0;
  102.     @    LXI@    D,.^P3C^P4C;
  103.     @    DAD@    D;
  104.     @    MOV@    A,M;
  105.     @    STA@    .^P1C^P2C;
  106. :I$$=I$$($$);
  107.     @    LHLD@    .^P5C^P6C;
  108.     @    MVI@    H,0;
  109.     @    LXI@    D,.I^P3C^P4C;
  110.     @    DAD@    H;
  111.     @    DAD@    D;
  112.     @    LXI@    D,.I^P1C^P2C;
  113.     @    MOV@    A,M;
  114.     @    STAX@    D;
  115.     @    INX@    D;
  116.     @    INX@    H;
  117.     @    MOV@    A,M;
  118.     @    STAX@    D;
  119. :$$=$$(I$$);
  120.     @    LHLD@    .I^P5C^P6C;
  121.     @    LXI@    D,.^P3C^P4C;
  122.     @    DAD@    D;
  123.     @    MOV@    A,M;
  124.     @    STA@    .^P1C^P2C;
  125. :I$$=I$$(I$$);
  126.     @    LHLD@    .I^P5C^P6C;
  127.     @    LXI@    D,.I^P3C^P4C;
  128.     @    DAD@    H;
  129.     @    DAD@    D;
  130.     @    MOV@    E,M;
  131.     @    INX@    H;
  132.     @    MOV@    D,M;
  133.     @    XCHG;
  134.     @    SHLD@    .I^P1C^P2C;
  135. :$$($$)=$$;
  136.     @    LHLD@    .^P3C^P4C;
  137.     @    MVI@    H,0;
  138.     @    LXI@    D,.^P1C^P2C;
  139.     @    DAD@    D;
  140.     @    LDA@    .^P5C^P6C;
  141.     @    MOV@    M,A;
  142. :I$$($$)=I$$;
  143.     @    LHLD@    .^P3C^P4C;
  144.     @    MVI@    H,0;
  145.     @    DAD@    H;
  146.     @    LXI@    D,.I^P1C^P2C;
  147.     @    DAD@    D;
  148.     @    LXI@    D,.I^P5C^P6C;
  149.     @    LDAX@    D;
  150.     @    MOV@    M,A;
  151.     @    INX@    D;
  152.     @    INX@    H;
  153.     @    LDAX@    D;
  154.     @    MOV@    M,A;
  155. :$$(I$$)=$$;
  156.     @    LHLD@    .I^P3C^P4C;
  157.     @    LXI@    D,.^P1C^P2C;
  158.     @    DAD@    D;
  159.     @    LDA@    .^P5C^P6C;
  160.     @    MOV@    M,A;
  161. :I$$(I$$)=I$$;
  162.     @    LHLD@    .I^P3C^P4C;
  163.     @    LXI@    D,.I^P1C^P2C;
  164.     @    DAD@    H;
  165.     @    DAD@    D;
  166.     @    XCHG;
  167.     @    LHLD@    .I^P5C^P6C;
  168.     @    MOV@    A,L;
  169.     @    STAX@    D;
  170.     @    INX@    D;
  171.     @    MOV@    A,H;
  172.     @    STAX@    D;
  173. :$$=$$+$$;
  174.     @    LXI@    H,.^P5C^P6C;
  175.     @    LDA@    .^P3C^P4C;
  176.     @    ADD@    M;
  177.     @    STA@    .^P1C^P2C;
  178. :$$=$$-$$;
  179.     @    LXI@    H,.^P5C^P6C;
  180.     @    LDA@    .^P3C^P4C;
  181.     @    SUB@    M;
  182.     @    STA@    .^P1C^P2C;
  183. :$$=$$&$$;
  184.     @    LXI@    H,.^P5C^P6C;
  185.     @    LDA@    .^P3C^P4C;
  186.     @    ANA@    M;
  187.     @    STA@    .^P1C^P2C;
  188. :$$=$$?$$;
  189.     @    LXI@    H,.^P5C^P6C;
  190.     @    LDA@    .^P3C^P4C;
  191.     @    ORA@    M;
  192.     @    STA@    .^P1C^P2C;
  193. :I$$++;
  194.     @    LHLD@    .I^P1C^P2C;
  195.     @    INX@    H;
  196.     @    SHLD@    .I^P1C^P2C;
  197. :I$$--;
  198.     @    LHLD@    .I^P1C^P2C;
  199.     @    DCX@    H;
  200.     @    SHLD@    .I^P1C^P2C;
  201. :I$$=-I$$;
  202.     @    LHLD@    .I^P3C^P4C;
  203.     @    CALL@    ?ICOMP;
  204.     @    EXTRN@    ?ICOMP;
  205.     @    SHLD@    .I^P1C^P2C;
  206. :I$$=I$$+I$$;
  207.     @    LHLD@    .I^P5C^P6C;
  208.     @    XCHG;
  209.     @    LHLD@    .I^P3C^P4C;
  210.     @    DAD@    D;
  211.     @    SHLD@    .I^P1C^P2C;
  212. :I$$=I$$-I$$;
  213.     @    LHLD@    .I^P5C^P6C;
  214.     @    XCHG;
  215.     @    LHLD@    .I^P3C^P4C;
  216.     @    CALL@    ?ISUB;
  217.     @    EXTRN@    ?ISUB;
  218.     @    SHLD@    .I^P1C^P2C;
  219. :I$$=I$$*I$$;
  220.     @    LHLD@    .I^P5C^P6C;
  221.     @    XCHG;
  222.     @    LHLD@    .I^P3C^P4C;
  223.     @    CALL@    ?IMUL;
  224.     @    EXTRN@    ?IMUL;
  225.     @    SHLD@    .I^P1C^P2C;
  226. :I$$=I$$/I$$;
  227.     @    LHLD@    .I^P5C^P6C;
  228.     @    XCHG;
  229.     @    LHLD@    .I^P3C^P4C;
  230.     @    CALL@    ?IDIV;
  231.     @    EXTRN@    ?IDIV;
  232.     @    SHLD@    .I^P1C^P2C;
  233. :$$=$$==$$;
  234.     @    LXI@    H,.^P3C^P4C;
  235.     @    LDA@    .^P5C^P6C;
  236.     @    CMP@    M;
  237.     @    JZ@    @$+5;
  238.     @    XRA@    A;
  239.     @    LXI@    B,013EH;
  240.     @    STA@    .^P1C^P2C;
  241. :$$=$$!=$$;
  242.     @    LXI@    H,.^P5C^P6C;
  243.     @    LDA@    .^P3C^P4C;
  244.     @    CMP@    M;
  245.     @    JNZ@    @$+5;
  246.     @    XRA@    A;
  247.     @    LXI@    B,013EH;
  248.     @    STA@    .^P1C^P2C;
  249. :$$=$$<=$$;
  250.     @    LXI@    H,.^P5C^P6C;
  251.     @    LDA@    .^P3C^P4C;
  252.     @    CMP@    M;
  253.     @    CALL@    ?SETAC;
  254.     @    STA@    .^P1C^P2C;
  255. :$$=$$<!$$;
  256.     @    LDA@    .^P3C^P4C;
  257.     @    LXI@    H,.^P5C^P6C;
  258.     @    CMP@    M;
  259.     @    RAL;
  260.     @    ANI@    1;
  261.     @    STA@    .^P1C^P2C;
  262. :$$=!$$;
  263.     @    LDA@    .P3C^P4C;
  264.     @    CMA;
  265.     @    ANI@    1;
  266.     @    STA@    .^P1C^P2C;
  267. :$$=I$$==I$$;
  268.     @    LXI@    D,.I^P5C^P6C;
  269.     @    LHLD@    .I^P3C^P4C;
  270.     @    LDAX@    D;
  271.     @    XRA@    L;
  272.     @    JNZ@    @$+12;
  273.     @    INX@    D;
  274.     @    LDAX@    D;
  275.     @    XRA@    H;
  276.     @    JNZ@    @$+6;
  277.     @    MVI@    A,1;
  278.     @    LXI@    B,003EH;
  279.     @    STA@    .^P1C^P2C;
  280. :$$=I$$!=I$$;
  281.     @    LXI@    D,.I^P5C^P6C;
  282.     @    LXI@    H,.I^P3C^P4C;
  283.     @    CALL@    ?INTCK;
  284.     @    STA@    .^P1C^P2C;
  285. :$$=I$$<=I$$;
  286.     @    LHLD@    .I^P5C^P6C;
  287.     @    XCHG;
  288.     @    LHLD@    .I^P3C^P4C;
  289.     @    CALL@    ?CDEHL;
  290.     @    EXTRN@    ?CDEHL;
  291.     @    CALL@    ?SETAC;
  292.     @    STA@    .^P1C^P2C;
  293. :$$=I$$<!I$$;
  294.     @    LHLD@    .I^P5C^P6C;
  295.     @    XCHG;
  296.     @    LHLD@    .I^P3C^P4C;
  297.     @    CALL@    ?CDEHL;
  298.     @    EXTRN@    ?CDEHL;
  299.     @    RAL;
  300.     @    ANI@    1;
  301.     @    STA@    .^P1C^P2C;
  302. :CASE $$;
  303.     ^!0P^!9P^!8P
  304.     @    JMP@    .XC^P0N;
  305.     @    ORG@    @$-^P9N;
  306.     .UP^P8N@:@    LXI@    H,.ERASER.;
  307.     @    LDA@    .^P1C^P2C;
  308.     @    CMP@    M;
  309.     @    JNZ@    .UP^U1S^S8N^N0S^P0S;
  310. :ASSOCIATE FCB $ WITH I$$;
  311.     @    LXI@    D,?IFCB+((^P1C-1)*36);
  312.     @    LXI@    H,.I^P2C^P3C;
  313.     @    CALL@    ?ATACH;
  314.     @    EXTRN@    ?ATACH,?IFCB;
  315. :WRITE $$;
  316.     @    LDA@    .^P1C^P2C;
  317.     @    CALL@    ?WRNXT;
  318.     @    EXTRN@    ?WRNXT;
  319. :CLOSE $$;
  320.     @    LXI@    H,.^P1C^P2C;
  321.     @    CALL@    ?BCLOF;
  322.     @    EXTRN@    ?BCLOF;
  323. :STOP $;
  324.     @    MVI@    A,^P1C;
  325.     @    CALL@    ?ISTOP;
  326.     @    EXTRN@    ?ISTOP;
  327. :OPEN $$ FOR $$ AT I$$;
  328.     @    LXI@    D,.^P1C^P2C;
  329.     @    LDA@    .^P3C^P4C;
  330.     @    LHLD@    .I^P5C^P6C;
  331.     @    CALL@    ?IOPEN;
  332.     @    EXTRN@    ?IOPEN;
  333. :ENDSUB;
  334.     @    RET;
  335. :RETURN;
  336.     @    RET;
  337. :EXTERNAL PROCEDURE $$;
  338.     @    CALL@    ..$$;
  339.     @    EXTRN@    ..$$;
  340. :READ $$ FROM $$;
  341.     @    LXI@    H,.^P1C^P2C;
  342.     @    LXI@    D,.^P3C^P4C;
  343.     @    CALL@    ?BREAD;
  344.     @    EXTRN@    ?BREAD;
  345. :WRITE $$ INTO $$;
  346.     @    LDA@    .^P1C^P2C;
  347.     @    LXI@    D,.^P3C^P4C;
  348.     @    CALL@    ?BWRIT;
  349.     @    EXTRN@    ?BWRIT;
  350. :ENDMAIN;
  351.     @    CALL@    ?ENDING;
  352.     @    JMP@    ?BOOT;
  353. :LOC $$;
  354.     ?LL0^P1C^P2C@:;
  355. :CHOOSE ON $$;
  356.     @    LDA@    .^P1C^P2C;
  357.     @    STA@    .ERASER.;
  358.     ^U0S; GENERATE LABEL FOR ENDCHOOSE OR DEFAULT
  359.     ^N3S; PUT A 3 ON THE STACK TO KILL JUMP WITH AN ORG
  360.     ^U1S; PUT .UP LABEL ON THE STACK
  361. :DEFAULT;
  362.     ^!0P^!9P^!8P
  363.     @    JMP@    .XC^P0N;
  364.     @    ORG@    $-^P9N;
  365.     .UP^P8N@:;
  366.     ^P0S
  367. :ENDCHOOSE;
  368.     .XC^!0N@:;
  369. :WHILE;
  370.     ^U0S.X^S0N@:;
  371. :ON $$;
  372.     @    LDA@    .^P1C^P2C;
  373.     @    ORA@    A;
  374.     @    JZ@    .W^S0N;
  375. :ENDWHILE;
  376.     @    JMP@    .X^S0N;
  377.     .W^!0N@:;
  378. :SUB $$;
  379.     ..^P1C^P2C@:;
  380. :IF $$;
  381.     @    LDA@    .^P1C^P2C;
  382.     @    ORA@    A;
  383.  
  384.     @    JZ@    .F^U0S^S0N;
  385. :ELSE;
  386.     @    JMP@    .F^U0P^P0N^!9P;
  387.     .F^P9N@:;
  388.     ^P0S
  389. :ENDIF;
  390.     .F^!0N@:;
  391. :BYTE $$;
  392.     .^P1C^P2C@:@    DS@    1;
  393. :INT I$$;
  394.     .I^P1C^P2C@:@    DS@    2;
  395. :BYTE $$($$$$$);
  396.     .^P1C^P2C@:@    DS@    ^V3S^V4*^V5*^V6*^V7*^!0N;
  397. :BYTE $$($$$);
  398.     .^P1C^P2C@:@    DS@    ^V3S^V4*^V5*^!0N;
  399. :INT I$$($$$$$);
  400.     .I^P1C^P2C@:@    DS@    2*^V3S^V4*^V5*^V6*^V7*^!0N;
  401. :INT I$$($$$);
  402.     .I^P1C^P2C@:@    DS@    2*^V3S^V4*^V5*^!0N;
  403. :BOTTOM;
  404.     @    DSEG;
  405.     @    DS@    60;
  406.     ?STACK@:@    DW@    0;
  407.     @    END@    ?START;
  408. :READBUF $$;
  409.     @    LXI@    D,.^P1C^P2C;
  410.     @    CALL@    ?RDBUF;
  411.     @    EXTRN@    ?RDBUF;
  412. :WRITEBUF $$;
  413.     @    LXI@    D,.^P1C^P2C;
  414.     @    CALL@    ?WRBUF;
  415.     @    EXTRN@    ?WRBUF;
  416. :READ $$;
  417.     @    CALL@    ?RNX;
  418.     @    EXTRN@    ?RNX;
  419.     @    STA@    .^P1C^P2C;
  420. :LOCAL VARIABLES;
  421.     @    DSEG;
  422. :ENDLOCAL;
  423.     @    CSEG;
  424. :EXTERNAL PROCEDURE NAME $$;
  425.     @    PUBLIC@    ..^P1C^P2C;
  426.     @    CSEG;
  427.     ..^P1C^P2C@:;
  428. :PROCEDURE END;
  429.     @    RET;
  430.     @    END;
  431.