home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / CGRAPH.ZIP / FORTRAN.DOC < prev    next >
Text File  |  1998-07-30  |  3KB  |  129 lines

  1. The following code may be substituted or added to the source code for
  2. PLOT.MAC to provide linkage capability to MicroSoft's FORTRAN-80 compiler.
  3. This version is untested, if any correction are found necessary please 
  4. inform me so that I may update the source for other PLOT users.
  5.  
  6. Thank you.
  7.  
  8.  
  9.     IF    FORTRAN
  10. ;******************************************************************************
  11. ;
  12. ;    PARAMETER LINKAGE ROUTINE FOR FORTRAN-80
  13. ;
  14. ;    All calls to plot functions must be via this parameter linkage
  15. ;    routine.  FORTRAN-80 expects each external subroutine call to comply
  16. ;    with a fixed field of parameters.
  17. ;
  18. ;    The method of passing parameters depends upon the number of parameters
  19. ;    to pass:
  20. ;
  21. ;        1. if less than or equal to 3, they are passed in the
  22. ;        registers.  Parameter 1 in HL, 2 in DE (if present),
  23. ;        and 3 in BC (if present).
  24. ;
  25. ;        2. if the number of parameters is greater than 3, they
  26. ;        are passed as follows:
  27. ;            a. parameter 1 in HL,
  28. ;            b. parameter 2 in DE,
  29. ;            c. parameters 3 through N in a contiguous data
  30. ;               block.  BC will point to the low byte of this
  31. ;               data block. (ie., to the low byte of parameter 3).
  32. ;
  33. ;    All parameters are actually pointers to the actual values.
  34. ;
  35. ;    The calling convention from FORTRAN-80 is as follows:
  36. ;
  37. ;        EXTERNAL FPLOT
  38. ;
  39. ;        CALL FPLOT('-',p1,p2,p3,p4,p5,p6,p7)
  40. ;
  41. ;    where '-' is replaced by 'T', 'C', 'P', etc.
  42. ;
  43. ;    FORTRAN-80 will pass the Hollirith value in an INTEGER storage
  44. ;    location pair.
  45. ;
  46. ;    p7 - should be declared as an INTEGER and not LOGICAL.
  47. ;
  48. FPLOT:
  49.     PUSH    HL        ; save pointer #0 - to Hollirith value
  50.     LD    (P1),DE        ; save pointer #2
  51.     LD    D,6        ; five pointers left
  52.     LD    H,B
  53.     LD    L,C        ; use HL reg for access
  54.     LD    BC,P3        ; point to next local storage
  55. FPLOT1:
  56.     LD    A,(HL)        ; get low value
  57.     LD    (BC),A        ; save it
  58.     INC    HL        ; next byte
  59.     INC    BC
  60.     LD    A,(HL)
  61.     LD    (BC),A        ; save it    
  62.     INC    HL
  63.     INC    BC
  64.     DEC    D
  65.     JR    NZ,FPLOT1    ; do all the parameters
  66. ;
  67.     LD    C,7        ; now get actuals into p1-p7
  68.     LD    HL,P1        ; start with p1
  69. FPLOT2:
  70.     CALL    HLTOHL
  71.     DEC    C
  72.     JR    NZ,FPLOT2    ; do all paramters
  73. ;
  74.     POP    HL        ; HL points to parameter #0
  75.     LD    A,(HL)        ; get Hollirith value for branch
  76. ;
  77.     CP    'A'
  78.     JP    Z,AXIS
  79.     CP    'a'
  80.     JP    Z,AXIS        ; vector AXIS procedure
  81.     CP    'L'
  82.     JP    Z,LINE
  83.     CP    'l'
  84.     JP    Z,LINE        ; vector LINE procedure
  85.     CP    'P'
  86.     JP    Z,PLOT
  87.     CP    'p'
  88.     JP    Z,PLOT        ; vector PLOT procedure
  89.     CP    'D'
  90.     JP    Z,POINT
  91.     CP    'd'
  92.     JP    Z,POINT        ; vector POINT procedure
  93.     CP    'I'
  94.     JP    Z,INIT
  95.     CP    'i'
  96.     JP    Z,INIT        ; vector INIT procedure
  97.     CP    'C'
  98.     JP    Z,CIRCLE
  99.     CP    'c'
  100.     JP    Z,CIRCLE    ; vector CIRCLE procedure
  101.     CP    'T'
  102.     JP    Z,XFRPLT
  103.     CP    't'
  104.     JP    Z,XFRPLT    ; vector XFRPLT procedure
  105. FERR:
  106.     JP    STERR + 1    ; bad procedure call
  107. ;                  print error message & return
  108. ;
  109. ;    Transfer actual parameter to location pointed to indirectly by
  110. ;    the HL register pair
  111. ;
  112. HLTOHL:
  113.     LD    E,(HL)
  114.     INC    HL
  115.     LD    D,(HL)        ; DE = address of parameter
  116.     DEC    HL
  117.     EX    DE,HL        ; HL = address of FORTRAN parameter
  118.     LD    A,(HL)        ; get low byte
  119.     LD    (DE),A        ; store it
  120.     INC    HL
  121.     INC    DE
  122.     LD    A,(HL)        ; get high byte
  123.     LD    (DE),A
  124.     EX    DE,HL        ; HL = address of p(i)
  125.     INC    HL        ; point to next p(i)
  126.     RET
  127. ;
  128.     ENDIF
  129.