home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 135_01 / vli.csm < prev    next >
Text File  |  1985-03-10  |  13KB  |  718 lines

  1. ;
  2. ; VLI.CSM---VERY LONG INTEGER MATH ROUTINES FOR BDSc.
  3. ;
  4. ; BY HUGH S. MYERS
  5. ; 11/3/83
  6. ; 3/21/84
  7. ;
  8.  
  9.     INCLUDE    <BDS.LIB>
  10.  
  11. ;
  12. ;    FUNCTIONS WRITTEN:
  13. ;
  14. ;        s    string
  15. ;        n    integer
  16. ;        s1,s2    string
  17. ;
  18. ;    incrl(s)    increment a string by one.
  19. ;    decrl(s)    decrement a string by one.
  20. ;    saddl(s,n)    short add, add an integer to a string.
  21. ;    ssubl(s,n)    short subtract, subtract an integer from a string.
  22. ;    addl(s1,s2)    add string one to string two.
  23. ;    subl(s1,s2)    subtract string two from string one.
  24. ;    smull(s,n)    short multiply, multiply a string by an integer.
  25. ;    sdivl(s,n)    short divide, divide a string by an integer.
  26. ;    sdivlr(s,n)    short divide rounded, as above with rounded result.
  27. ;    smodl(s,n)    short modulus, return remainder of a string divided by
  28. ;            an integer.
  29. ;    mull(s1,s2)    multiply string one by string two.
  30. ;    divl(s1,s2)    divide string one by string two.
  31. ;    divrl(s1,s2)    divide string one by string two with rounded result.
  32. ;    modl(s1,s2)    return remainder of string one divided by string two.
  33. ;    sqrtl(s)    square root of a string.
  34. ;    sqrtlr(s)    square root of a string rounded.
  35. ;    facl(s)        string factorial.
  36. ;    spowl(s,n)    return string to the power of an integer.
  37. ;    powl(s1,s2)    return string one to the power of string two.
  38. ;    gcdl(s1,s2)    greatest common divisor of string one and string two.
  39. ;    sgcd(s,n)    greatest common divisor of a string and an integer.
  40. ;    lcm(s1,s2)    least common multiple of string one and string two.
  41. ;    slcm(s,n)    least common multiple of a string and an integer.
  42. ;    randl(n)    random number generator.  if n == 0 return r(memory)
  43. ;            else return r(1).
  44. ;    minl(s1,s2)    floor function, return smaller of s1 and s2.
  45. ;    maxl(s1,s2)    ceiling function, return larger of s1 and s2.
  46. ;    absl(s)        return the absolute value of a string.
  47. ;
  48. ;    iszero(s)    boolean truth function, test s == 0?
  49. ;    isneg(s)    boolean truth function, test s < 0?
  50. ;    ispos(s)    boolean truth function, test s >= 0?
  51. ;    iseven(s)    boolean    truth function, test least significat bit = 0?
  52. ;    isequal(s1,s2)    boolean truth function, test s1 == s2?
  53. ;    sisequal(s,n)    boolean truth function, test s == n?
  54. ;    isltl(s1,s2)    boolean truth function, test s1 < s2?
  55. ;    sisltl(s,n)    boolean truth function, test s < n?
  56. ;    isgtl(s1,s2)    boolean truth function, test s1 > s2?
  57. ;    sisgtl(s,n)    boolean truth function, test s > n?
  58. ;
  59.  
  60. ;
  61. ; INCRL---INCREMENT A STRING BY ONE.
  62. ;
  63.     FUNCTION    INCRL
  64.     EXTERNAL    GETS1,INCR,RETHL
  65.  
  66.     CALL    GETS1    ;DE-> S1 OR S
  67.     XCHG        ;HL=DE.  NORMALLY S1 IS NEEDED IN DE
  68.             ;BUT NOT FOR INCR
  69.     PUSH    B    ;SAVE FOR BDSc.
  70.     CALL    INCR
  71.     JMP    RETHL    ;HL-> RESULT
  72.  
  73.     ENDFUNC
  74. ;
  75. ; DECRL---DECREMENT A STRING BY ONE.
  76. ;
  77.     FUNCTION    DECRL
  78.     EXTERNAL    GETS1,DECR,RETHL
  79.  
  80.     CALL    GETS1    ;DE-> S1 OR S
  81.     XCHG        ;HL=DE. NORMALLY S1 IS NEEDED IN DE
  82.             ;BUT NOT FOR DECR.
  83.     PUSH    B    ;SAVE FOR BDSc.
  84.     CALL    DECR
  85.     JMP    RETHL    ;HL-> RESULT
  86.  
  87.     ENDFUNC
  88. ;
  89. ; SADDL---SHORT ADD.  ADD AN INTEGER TO A STRING
  90. ; RETURN RESULT.
  91. ;
  92.     FUNCTION    SADDL
  93.     EXTERNAL    GETS1,GETN,RETDE,AD1
  94.  
  95.     CALL    GETS1    ;DE-> S1 OR S
  96.     CALL    GETN    ;HL-> N
  97.     PUSH    B    ;SAVE FOR BDSc.
  98.     CALL    AD1
  99.     JMP    RETDE    ;HL->DE-> RESULT
  100.  
  101.     ENDFUNC
  102. ;
  103. ; SSUBL---SHORT SUBTRACT.  SUBTRACT AN INTEGER FROM A STRING
  104. ; AND RETURN RESULT.
  105. ;
  106.     FUNCTION    SSUBL
  107.     EXTERNAL    GETS1,GETN,RETDE,SB1
  108.  
  109.     CALL    GETS1    ;DE-> S1 OR S
  110.     CALL    GETN    ;HL-> N
  111.     PUSH    B    ;SAVE FOR BDSc.
  112.     CALL    SB1
  113.     JMP    RETDE    ;HL->DE-> RESULT
  114.  
  115.     ENDFUNC
  116. ;
  117. ; ADDL---ADD STRING ONE TO STRING TWO AND RETURN RESULT
  118. ; STRING ADDRESS IN HL TO C.
  119. ;
  120.     FUNCTION    ADDL
  121.     EXTERNAL    GETS1,GETS2,RETDE,AD1
  122.  
  123.     CALL    GETS1    ;DE-> S1 OR S
  124.     CALL    GETS2    ;HL-> S2
  125.     PUSH    B    ;SAVE FOR BDSc.
  126.     CALL    AD1
  127.     JMP    RETDE    ;HL->DE-> RESULT
  128.  
  129.     ENDFUNC
  130. ;
  131. ; SUBL---SUBTRACT STRING TWO FROM STRING ONE RETURNING RESULT
  132. ; STRING ADDRESS IN HL TO C.
  133. ;
  134.     FUNCTION    SUBL
  135.     EXTERNAL    GETS1,GETS2,RETDE,SB1
  136.  
  137.     CALL    GETS1    ;DE-> S1 OR S
  138.     CALL    GETS2    ;HL-> S2
  139.     PUSH    B    ;SAVE FOR BDSc.
  140.     CALL    SB1
  141.     JMP    RETDE    ;HL->DE-> RESULT
  142.  
  143.     ENDFUNC
  144. ;
  145. ; SMULL---SHORT MULTIPLY.  MULITPLY A STRING BY AN INTEGER 
  146. ; AND RETURN THE RESULT AS STRING.
  147. ;
  148.     FUNCTION    SMULL
  149.     EXTERNAL    GETS1,GETN,MULT,RETDE
  150.  
  151.     CALL    GETS1    ;DE-> S1 OR S
  152.     CALL    GETN    ;HL-> N
  153.     PUSH    B    ;SAVE FOR BDSc.
  154.     CALL    MULT
  155.     JMP    RETDE    ;HL->DE-> RESULT
  156.  
  157.     ENDFUNC
  158. ;
  159. ; SDIVL---SHORT DIVIDE.  DIVIDE A STRING BY AN INTEGER
  160. ; AND RETURN THE RESULT AS STRING.
  161. ;
  162.     FUNCTION    SDIVL
  163.     EXTERNAL    GETS1,GETN,DIV,RETDE
  164.  
  165.     CALL    GETS1    ;DE-> S1 OR S
  166.     CALL    GETN    ;HL-> N
  167.     PUSH    B    ;SAVE FOR BDSc.
  168.     CALL    DIV
  169.     JMP    RETDE    ;HL->DE-> RESULT
  170.  
  171.     ENDFUNC
  172. ;
  173. ; SDIVRL---SHORT DIVIDE. DIVIDE A STRING BY AN INTEGER
  174. ; AND RETURN THE RESULT, ROUNDED, AS A STRING.
  175. ;
  176.     FUNCTION    SDIVRL
  177.     EXTERNAL    GETS1,GETN,DIVR,RETDE
  178.  
  179.     CALL    GETS1    ;DE-> S1 OR S
  180.     CALL    GETN    ;HL-> N
  181.     PUSH    B    ;SAVE FOR BDSc
  182.     CALL    DIVR
  183.     JMP    RETDE    ;HL->DE-> RESULT
  184.  
  185.     ENDFUNC
  186. ;
  187. ; SMODL---SHORT MODULUS.  DIVIDE A STRING BY AN INTEGER
  188. ; AND RETURN THE MODULUS (REMAINDER) AS A STRING.
  189. ;
  190.     FUNCTION    SMODL
  191.     EXTERNAL    GETS1,GETN,MODULUS,RETDE
  192.  
  193.     CALL    GETS1    ;DE-> S1 OR S
  194.     CALL    GETN    ;HL-> N
  195.     PUSH    B    ;SAVE FOR BDSc
  196.     CALL    MODULUS
  197.     JMP    RETDE    ;HL->DE-> RESULT
  198.  
  199.     ENDFUNC
  200. ;
  201. ; MULL---MULTIPLY.  MULTIPLY STRING ONE BY STRING TWO.  RETURN THE RESULT
  202. ; AS A STRING.
  203. ;
  204.     FUNCTION    MULL
  205.     EXTERNAL    GETS1,GETS2,MULT,RETDE
  206.  
  207.     CALL    GETS1    ;DE-> S1 OR S
  208.     CALL    GETS2    ;HL-> S2
  209.     PUSH    B    ;SAVE FOR BDSc
  210.     CALL    MULT
  211.     JMP    RETDE    ;HL->DE-> RESULT
  212.  
  213.     ENDFUNC
  214. ;
  215. ; DIVL---DIVIDE.  DIVIDE STRING ONE BY STRING TWO.  RETURN THE RESULT
  216. ; AS A STRING.
  217. ;
  218.     FUNCTION    DIVL
  219.     EXTERNAL    GETS1,GETS2,DIV,RETDE
  220.  
  221.     CALL    GETS1    ;DE-> S1 OR S
  222.     CALL    GETS2    ;HL-> S2
  223.     PUSH    B    ;SAVE FOR BDSc
  224.     CALL    DIV
  225.     JMP    RETDE    ;HL->DE-> RESULT
  226.  
  227.     ENDFUNC
  228. ;
  229. ; DIVRL---DIVIDE AND ROUND.  DIVIDE STRING ONE BY STRING TWO.  RETURN
  230. ; THE RESULT, ROUNDED, AS A STRING.
  231. ;
  232.     FUNCTION    DIVRL
  233.     EXTERNAL    GETS1,GETS2,DIVR,RETDE
  234.  
  235.     CALL    GETS1    ;DE-> S1 OR S
  236.     CALL    GETS2    ;HL-> S2
  237.     PUSH    B    ;SAVE FOR BDSc
  238.     CALL    DIVR
  239.     JMP    RETDE    ;HL->DE-> RESULT
  240.  
  241.     ENDFUNC
  242. ;
  243. ; MODL---MODULUS.  DIVIDE STRING ONE BY STRING TWO.  RETURN THE
  244. ; MODULUS (REMAINDER) AS A STRING.
  245. ;
  246.     FUNCTION    MODL
  247.     EXTERNAL    GETS1,GETS2,MODULUS,RETDE
  248.  
  249.     CALL    GETS1    ;DE-> S1 OR S
  250.     CALL    GETS2    ;HL-> S2
  251.     PUSH    B    ;SAVE FOR BDSc
  252.     CALL    MODULUS
  253.     JMP    RETDE    ;HL->DE-> RESULT
  254.  
  255.     ENDFUNC
  256. ;
  257. ; SQRTL---SQUARE ROOT.  RETURN THE SQUARE ROOT OF A STRING.
  258. ;
  259.     FUNCTION    SQRTL
  260.     EXTERNAL    GETS1,SQRT,RETDE
  261.  
  262.     CALL    GETS1    ;DE-> S1 OR S
  263.     PUSH    B    ;SAVE FOR BDSc
  264.     CALL    SQRT
  265.     JMP    RETDE    ;HL->DE-> RESULT
  266.  
  267.     ENDFUNC
  268. ;
  269. ; SQRTRL---SQUARE ROOT ROUNDED.  RETURN THE ROUNDED SQUARE ROOT OF A STRING.
  270. ;
  271.     FUNCTION    SQRTRL
  272.     EXTERNAL    GETS1,SQRTR,RETDE
  273.  
  274.     CALL    GETS1    ;DE-> S1 OR S
  275.     PUSH    B    ;SAVE FOR BDSc
  276.     CALL    SQRTR
  277.     JMP    RETDE    ;HL->DE-> RESULT
  278.  
  279.     ENDFUNC
  280. ;
  281. ; FACL---FACTORIAL.  RETURN A STRING FACTORIAL.
  282. ;
  283.     FUNCTION    FACL
  284.     EXTERNAL    GETS1,FACT,RETHL
  285.  
  286.     CALL    GETS1    ;DE-> S1 OR S
  287.     XCHG        ;HL=DE.  NORMALLY S1 IS NEEDED IN DE
  288.             ;BUT NOT FOR FACL.
  289.     PUSH    B    ;SAVE FOR BDSc
  290.     CALL    FACT
  291.     JMP    RETHL    ;HL-> RESULT
  292.  
  293.     ENDFUNC
  294. ;
  295. ; SPOWL---SHORT POWER.  RETURN A STRING TO THE POWER OF AN INTEGER.
  296. ;
  297.     FUNCTION    SPOWL
  298.     EXTERNAL    GETS1,GETN,POW,RETDE
  299.  
  300.     CALL    GETS1    ;DE-> S1 OR S
  301.     CALL    GETN    ;HL-> N
  302.     XCHG        ;HL=DE, DE=HL. POW IS A LITTLE SCREWED UP.
  303.     PUSH    B    ;SAVE FOR BDSc
  304.     CALL    POW
  305.     JMP    RETDE    ;HL->DE-> RESULT
  306.  
  307.     ENDFUNC
  308. ;
  309. ; POWL---POWER.  RETURN STRING ONE TO THE POWER OF STRING TWO.
  310. ;
  311.     FUNCTION    POWL
  312.     EXTERNAL    GETS1,GETS2,POW,RETDE
  313.  
  314.     CALL    GETS1    ;DE-> S1 OR S
  315.     CALL    GETS2    ;HL-> S2
  316.     XCHG        ;HL=DE, DE=HL.  POW IS A LITTLE SCREWED UP.
  317.     PUSH    B    ;SAVE FOR BDSc
  318.     CALL    POW
  319.     JMP    RETDE    ;HL->DE-> RESULT
  320.  
  321.     ENDFUNC
  322. ;
  323. ; GCDL---GREATEST COMMON DIVISOR OF STRING ONE AND STRING TWO.
  324. ;
  325.     FUNCTION    GCDL
  326.     EXTERNAL     GETS1,GETS2,GCD,RETDE
  327.  
  328.     CALL    GETS1    ;DE-> S1 OR S
  329.     CALL    GETS2    ;HL-> S2
  330.     PUSH    B    ;SAVE FOR BDSc
  331.     CALL    GCD
  332.     JMP    RETDE    ;HL->DE-> RESULT
  333.  
  334.     ENDFUNC
  335. ;
  336. ; SGCDL---GREATEST COMMON DIVISOR OF A STRING AND AN INTEGER.
  337. ;
  338.     FUNCTION    SGCDL
  339.     EXTERNAL    GETS1,GETN,GCD,RETDE
  340.  
  341.     CALL    GETS1    ;DE-> S1 OR S
  342.     CALL    GETN    ;HL-> N
  343.     PUSH    B    ;SAVE FOR BDSc
  344.     CALL    GCD
  345.     JMP    RETDE    ;HL->DE-> RESULT
  346.  
  347.     ENDFUNC
  348. ;
  349. ; LCML---LEAST COMMON MULTIPLE OF STRING ONE AND STRING TWO.
  350. ;
  351.     FUNCTION    LCML
  352.     EXTERNAL    GETS1,GETS2,LCM,RETDE
  353.  
  354.     CALL    GETS1    ;DE-> S1 OR S
  355.     CALL    GETS2    ;HL-> S2
  356.     PUSH    B    ;SAVE FOR BDSc
  357.     CALL    LCM
  358.     JMP    RETDE    ;HL->DE-> RESULT
  359.  
  360.     ENDFUNC
  361. ;
  362. ; SLCML---LEAST COMMON MULTIPLE OF A STRING AND AN INTEGER.
  363. ;
  364.     FUNCTION    SLCML
  365.     EXTERNAL    GETS1,GETN,LCM,RETDE
  366.  
  367.     CALL    GETS1    ;DE-> S1 OR S
  368.     CALL    GETN    ;HL-> N
  369.     PUSH    B    ;SAVE FOR BDSc
  370.     CALL    LCM
  371.     JMP    RETDE    ;HL->DE-> RESULT
  372.  
  373.     ENDFUNC
  374. ;
  375. ; RANDL---RANDOM NUMBER GENERATOR.  RETURN R(MEMORY) IF N=0 ELSE
  376. ;         RETURN R(1).
  377. ;
  378.     FUNCTION    RANDL
  379.     EXTERNAL    RAND,RETDE
  380.  
  381.     CALL    MA1TOH
  382.     LXI    D,VAR
  383.     PUSH    B    ;SAVE FOR BDSc
  384.     CALL    RAND
  385.     JMP    RETDE    ;HL->DE-> RESULT
  386.  
  387. VAR:        DS    256
  388.  
  389.     ENDFUNC
  390. ;
  391. ; MINL---FLOOR FUNCTION, RETURN SMALLER OF S1 AND S2.
  392. ;
  393.     FUNCTION    MINL
  394.     EXTERNAL    GETS1,GETS2,PARE,RETHL,RETDE
  395.  
  396.     CALL    GETS1    ;DE-> S1 OR S
  397.     CALL    GETS2    ;HL-> S2
  398.     PUSH    B    ;SAVE FOR BDSc
  399.     CALL    PARE
  400.     JNC    RETHL
  401.     JMP    RETDE
  402.  
  403.     ENDFUNC
  404. ;
  405. ; MAXL---CEILING FUNCTION, RETURN LARGER OF S1 AND S2.
  406. ;
  407.     FUNCTION    MAXL
  408.     EXTERNAL    GETS1,GETS2,PARE,RETHL,RETDE
  409.  
  410.     CALL    GETS1    ;DE-> S1 OR S
  411.     CALL    GETS2    ;HL-> S2
  412.     PUSH    B    ;SAVE FOR BDSc
  413.     CALL    PARE
  414.     JC    RETHL
  415.     JMP    RETDE
  416.  
  417.     ENDFUNC
  418. ;
  419. ; ABSL---RETURN THE ABSOLUTE VALUE OF A STRING.
  420. ;
  421.     FUNCTION    ABSL
  422.     EXTERNAL    GETS1,RETDE
  423.  
  424.     CALL    GETS1    ;DE-> S1 OR S
  425.     PUSH    B    ;SAVE FOR BDSc
  426.     LDAX    D    ;GET SIGN&LENGTH BYTE
  427.     ANI    7FH    ;STRIP SIGN BIT
  428.     STAX    D    ;RESTORE SIGN&LENGTH BYTE
  429.     JMP    RETDE
  430.  
  431.     ENDFUNCTION
  432.     END
  433. ;
  434. ; ISZERO---BOOLEAN TRUTH FUNCTION, TEST STRING == 0?
  435. ;
  436.     FUNCTION    ISZERO
  437.     EXTERNAL    GETS1
  438.  
  439.     CALL    GETS1    ;DE-> S1 OR S
  440.     LDAX    D
  441.     ORA    A
  442.     JZ    TRUE
  443.     LXI    H,0
  444.     RET
  445. TRUE:
  446.     LXI    H,1
  447.     RET
  448.  
  449.     ENDFUNC
  450. ;
  451. ; ISNEG---BOOLEAN TRUTH FUNCTION, TEST STRING < 0?
  452. ;
  453.     FUNCTION    ISNEG
  454.     EXTERNAL    GETS1
  455.  
  456.     CALL    GETS1    ;DE-> S1 OR S
  457.     LDAX    D
  458.     ORA    A
  459.     JZ    NOTNEG
  460.     ANI    80H
  461.     ORA    A
  462.     JZ    NOTNEG
  463.     LXI    H,1
  464.     RET
  465. NOTNEG:
  466.     LXI    H,0
  467.     RET
  468.  
  469.     ENDFUNC
  470. ;
  471. ; ISPOS---BOOLEAN TRUTH FUNCTION, TEST STRING >= 0?
  472. ;
  473.     FUNCTION    ISPOS
  474.     EXTERNAL    GETS1
  475.  
  476.     CALL    GETS1    ;DE-> S1 OR S
  477.     LDAX    D
  478.     ORA    A
  479.     JZ    POS
  480.     ANI    80H
  481.     ORA    A
  482.     JNZ    NEG
  483. POS:
  484.     LXI    H,1
  485.     RET
  486. NEG:
  487.     LXI    H,0
  488.     RET
  489.  
  490.     ENDFUNC
  491. ;
  492. ; ISEVEN---BOOLEAN TRUTH FUNCTION, TEST IF MOD(STRING,2) == 0?
  493. ;
  494.     FUNCTION    ISEVEN
  495.     EXTERNAL    GETS1
  496.  
  497.     CALL    GETS1    ;DE-> S1 OR S
  498.     INX    D
  499.     LDAX    D
  500.     ANI    1
  501.     ORA    A
  502.     JZ    EVEN
  503.     LXI    H,0
  504.     RET
  505. EVEN:
  506.     LXI    H,1
  507.     RET
  508.  
  509.     ENDFUNC
  510. ;
  511. ; ISEQUAL---BOOLEAN TRUTH FUNCTION, TEST S1 == S2?
  512. ;
  513.     FUNCTION    ISEQUAL
  514.     EXTERNAL    GETS1,GETS2,PARE
  515.  
  516.     CALL    GETS1    ;DE-> S1 OR S
  517.     CALL    GETS2    ;HL-> S2
  518.     PUSH    B    ;SAVE FOR BDSc
  519.     CALL    PARE
  520.     POP    B
  521.     LXI    H,0
  522.     RNZ        ;PARE RETURNS Z FLAG SET IF S1 == S2
  523.     INX    H
  524.     RET
  525.  
  526.     ENDFUNC
  527. ;
  528. ; SISEQUAL---BOOLEAN TRUTH FUNCTION, TEST S == N?
  529. ;
  530.     FUNCTION    SISEQUAL
  531.     EXTERNAL    GETS1,GETN,PARE
  532.  
  533.     CALL    GETS1    ;DE-> S1 OR S
  534.     CALL    GETN    ;HL-> N
  535.     PUSH    B    ;SAVE FOR BDSc
  536.     CALL    PARE
  537.     POP    B
  538.     LXI    H,0
  539.     RNZ        ;PARE RETURNS Z FLAG SET IF S == N
  540.     INX    H
  541.     RET
  542.  
  543.     ENDFUNC
  544. ;
  545. ; ISLTL---BOOLEAN TRUTH FUNCTION, TEST S1 < S2?
  546. ;
  547.     FUNCTION    ISLTL
  548.     EXTERNAL    GETS1,GETS2,PARE
  549.  
  550.     CALL    GETS1    ;DE-> S1 OR S
  551.     CALL    GETS2    ;HL-> S2
  552.     PUSH    B    ;SAVE FOR BDSc
  553.     CALL    PARE
  554.     POP    B
  555.     LXI    H,0
  556.     RZ
  557.     RNC
  558.     INX    H
  559.     RET
  560.  
  561.     ENDFUNC
  562. ;
  563. ; SISLTL---BOOLEAN TRUTH FUNCTION, TEST S < N?
  564. ;
  565.     FUNCTION    SISLTL
  566.     EXTERNAL    GETS1,GETN,PARE
  567.  
  568.     CALL    GETS1    ;DE-> S1 OR S
  569.     CALL    GETN    ;HL-> N
  570.     PUSH    B    ;SAVE FOR BDSc
  571.     CALL    PARE
  572.     POP    B
  573.     LXI    H,0
  574.     RZ
  575.     RNC
  576.     INX    H
  577.     RET
  578.  
  579.     ENDFUNC
  580. ;
  581. ; ISGTL---BOOLEAN TRUTH FUNCTION, TEST S1 > S2?
  582. ;
  583.     FUNCTION    ISGTL
  584.     EXTERNAL    GETS1,GETS2,PARE
  585.  
  586.     CALL    GETS1    ;DE-> S1 OR S
  587.     CALL    GETS2    ;HL-> S2
  588.     PUSH    B    ;SAVE FOR BDSc
  589.     CALL    PARE
  590.     POP    B
  591.     LXI    H,0
  592.     RZ
  593.     RC
  594.     INX    H
  595.     RET
  596.  
  597.     ENDFUNC
  598. ;
  599. ; SISGTL---BOOLEAN TRUTH FUNCTION, TEST S > N?
  600. ;
  601.     FUNCTION    SISGTL
  602.     EXTERNAL    GETS1,GETN,PARE
  603.  
  604.     CALL    GETS1    ;DE-> S1 OR S
  605.     CALL    GETN    ;HL-> N
  606.     PUSH    B    ;SAVE FOR BDSc
  607.     CALL    PARE
  608.     POP    B
  609.     LXI    H,0
  610.     RZ
  611.     RC
  612.     INX    H
  613.     RET
  614.  
  615.     ENDFUNC
  616. ;
  617. ; -----------------------
  618. ; C INTERFACE SUBROUTINES.
  619. ; ------------------------
  620. ;
  621. ; GETS1---CONVERT S1 TO VLI INTERNAL FORMAT AND RETURN
  622. ; THE ADDRESS IN DE.
  623. ;
  624.     FUNCTION    GETS1
  625.     EXTERNAL    DECTOHEX
  626.  
  627.     CALL    MA2TOH
  628.     LXI    D,VAR
  629.     PUSH    D
  630.     PUSH    B    ;SAVE FOR BDSc
  631.     CALL    DECTOHEX
  632.     POP    B
  633.     POP    D
  634.     RET
  635.  
  636. VAR:    DS    256
  637.  
  638.     ENDFUNC
  639. ;
  640. ; GETS2---CONVERT S2 TO VLI INTERNAL FORMAT AND RETURN
  641. ; THE ADDRESS IN HL.
  642. ;
  643.     FUNCTION    GETS2
  644.     EXTERNAL    DECTOHEX
  645.  
  646.     CALL    MA3TOH
  647.     PUSH    D
  648.     PUSH    B    ;SAVE FOR BDSc
  649.     LXI    D,VAR
  650.     CALL    DECTOHEX
  651.     POP    B
  652.     POP    D
  653.     LXI    H,VAR
  654.     RET
  655.  
  656. VAR:    DS    256
  657.  
  658.     ENDFUNC
  659. ;
  660. ; GETN---CONVERT N TO VLI INTERNAL FORMAT. RETURN ADDRESS
  661. ; IN HL.
  662. ;
  663.     FUNCTION    GETN
  664.  
  665.     CALL    MA3TOH    ;GET S2 OFFSET BY 1.
  666.     MOV    A,H
  667.     ORA    A
  668.     JZ    L1
  669.     CPI    80H
  670.     JC    L2
  671.     CALL    CMH+1    ;COMPLIMENT HL.
  672.     MOV    A,H
  673.     ORA    A
  674.     MVI    A,81H
  675.     JZ    L3
  676.     INR    A
  677. L3:
  678.     STA    VAR
  679.     SHLD    VAR+1
  680.     LXI    H,VAR
  681.     RET
  682. L1:
  683.     MVI    A,1
  684.     JMP    L3
  685. L2:
  686.     MVI    A,2
  687.     JMP    L3
  688.  
  689. VAR:    DB    0,0,0
  690.  
  691.     ENDFUNC
  692. ;
  693. ; RETDE---CONVERT (DE) TO STRING AND RETURN WITH
  694. ; THAT ADDRESS IN HL TO C.
  695. ;
  696.     FUNCTION    RETDE
  697.     EXTERNAL    HEXTODEC
  698.  
  699.     CALL    HEXTODEC    ;CONVERT (DE) TO $ AND
  700.                 ;RETURN $ADDR IN HL.
  701.     POP    B
  702.     RET
  703.  
  704.     ENDFUNC
  705. ;
  706. ; RETHL---CONVERT (HL) TO STRING AND RETURN WITH
  707. ; THAT ADDRESS IN HL TO C.
  708. ;
  709.     FUNCTION    RETHL
  710.     EXTERNAL    HEXTODEC,RETDE
  711.  
  712.     XCHG        ;DE=HL
  713.     JMP    RETDE    ;HL->DE-> RESULT
  714.  
  715.     ENDFUNC
  716.  
  717.     END
  718.