Annotation of ntddk/src/video/inc/stdcall.inc, revision 1.1

1.1     ! root        1: ;****************************Public Macro************************************
        !             2: ;
        !             3: ;   ComposeInst Inst,p1,p2,p3,p4,p5,p6,p7,p8,p9
        !             4: ;
        !             5: ;       This macro simply concatenates all arguments into one string.
        !             6: ;
        !             7: ;   History:
        !             8: ;       Thu 15-Aug-1991 16:21:14    -by-    Viroon Touranachun [viroont]
        !             9: ;           Created
        !            10: ;
        !            11: ;****************************************************************************
        !            12: 
        !            13: ComposeInst macro   Inst,p1,p2,p3,p4,p5,p6,p7,p8,p9
        !            14:         &Inst   &p1&p2&p3&p4&p5&p6&p7&p8&p9
        !            15: endm
        !            16: 
        !            17: ;****************************Public Macro************************************
        !            18: ;
        !            19: ;   CountArg    cCount,ArgList
        !            20: ;
        !            21: ;       This macro count the number of arguments in the ArgList and returns
        !            22: ;       the value in cCount.
        !            23: ;
        !            24: ;   History:
        !            25: ;       Thu 15-Aug-1991 16:21:14    -by-    Viroon Touranachun [viroont]
        !            26: ;           Created
        !            27: ;
        !            28: ;****************************************************************************
        !            29: 
        !            30: CountArg    macro   cCount,ArgList
        !            31: 
        !            32:         cCount = 0
        !            33: 
        !            34:         irp arg,<ArgList>
        !            35:             cCount = cCount+1
        !            36:         endm
        !            37: endm
        !            38: 
        !            39: ;****************************Public Macro************************************
        !            40: ;
        !            41: ;   RevPush     ArgList,cCount
        !            42: ;
        !            43: ;       This macro pushes the arguments in ArgList in the reverse order
        !            44: ;       and returns the number of arguments in cCount.
        !            45: ;
        !            46: ;   History:
        !            47: ;       Thu 15-Aug-1991 16:21:14    -by-    Viroon Touranachun [viroont]
        !            48: ;           Created
        !            49: ;
        !            50: ;****************************************************************************
        !            51: 
        !            52: RevPush macro   ArgList,cCount
        !            53:         Local   index,x
        !            54: 
        !            55:         CountArg cCount,<ArgList>
        !            56: 
        !            57:         index  = cCount
        !            58:         rept    cCount
        !            59:             x = 0
        !            60:             irp arg,<ArgList>
        !            61:                 x = x+1
        !            62:                 ife index-x
        !            63:                     push    arg
        !            64:                     exitm
        !            65:                 endif
        !            66:             endm
        !            67:             index = index-1
        !            68:         endm
        !            69: endm
        !            70: 
        !            71: ;****************************Public Macro************************************
        !            72: ;
        !            73: ;   The following sections contain calling-convention related macros for:
        !            74: ;
        !            75: ;   PUBLICP     Func,N
        !            76: ;       to define a public label
        !            77: ;
        !            78: ;   EXTRNP      Func,N
        !            79: ;       to define a external near label
        !            80: ;
        !            81: ;   LABELP      Func,N
        !            82: ;       to label an address as a routine entry point
        !            83: ;
        !            84: ;   cProc       Func,N,ArgList
        !            85: ;       to declare a routine header
        !            86: ;
        !            87: ;   ProcName    Name,Func,N
        !            88: ;       to rename a function Func to Name. Using it in conjunction with
        !            89: ;       normal function declaration (with the new name) will solve an error
        !            90: ;       caused by a long parameter list routine that exhausts page width.
        !            91: ;
        !            92: ;   cRet        Func
        !            93: ;       to return from Func routines (declared with cProc or ProcName.)
        !            94: ;
        !            95: ;   endProc     Func
        !            96: ;       to declare the end of routine (declared with cProc or ProcName.)
        !            97: ;
        !            98: ;   endMod      Func
        !            99: ;       to declare the end of module with an entry point at Func (declared
        !           100: ;       with cProc or ProcName.)
        !           101: ;
        !           102: ;   cCall       Func,ArgList
        !           103: ;       to call to a routine--Func--with the arguments pushed on the stack
        !           104: ;
        !           105: ;   ptrCall     Func,ArgList
        !           106: ;       to call through a pointer with the arguments pushed on the stack
        !           107: ;
        !           108: ;   MovAddr     dest,Func,n
        !           109: ;       to move the address of the routine--Func--into dest.
        !           110: ;
        !           111: ;   Note that for the standard calling convention all the function names,
        !           112: ;   Func, are automatically converted to Func@N where N is the number of
        !           113: ;   bytes in the argument list.
        !           114: ;
        !           115: ;   History:
        !           116: ;       Thu 15-Aug-1991 16:21:14    -by-    Viroon Touranachun [viroont]
        !           117: ;           Created
        !           118: ;
        !           119: ;****************************************************************************
        !           120: 
        !           121: IFNDEF  DOS_PLATFORM
        !           122: IFNDEF  STD_CALL
        !           123: 
        !           124: ;****************************************************************************
        !           125: ;
        !           126: ;   This section is used exclusively for C calling convention.
        !           127: ;
        !           128: ;****************************************************************************
        !           129: 
        !           130: PUBLICP macro   Func,N
        !           131: 
        !           132:         public      &Func
        !           133: endm
        !           134: 
        !           135: EXTRNP  macro   Func,N
        !           136: 
        !           137:         extrn       &Func:NEAR
        !           138: endm
        !           139: 
        !           140: LABELP  macro   Func,N
        !           141: 
        !           142:         &Func       LABEL   NEAR
        !           143: endm
        !           144: 
        !           145: ProcName macro  Name,Func,N
        !           146: 
        !           147:         &Name        EQU     <&Func>
        !           148: endm
        !           149: 
        !           150: cProc   macro   Func,N,ArgList
        !           151: 
        !           152:         ProcName xxx&Func,Func,N
        !           153: 
        !           154:         xxx&Func proc &ArgList
        !           155: endm
        !           156: 
        !           157: cRet    macro   Func
        !           158: 
        !           159:         ret
        !           160: endm
        !           161: 
        !           162: endProc macro   Func
        !           163: 
        !           164:         xxx&Func   endp
        !           165: endm
        !           166: 
        !           167: endMod  macro   Func
        !           168: 
        !           169: end     xxx&Func
        !           170: 
        !           171: endm
        !           172: 
        !           173: ptrCall macro   Func,ArgList
        !           174:         Local   Bytes
        !           175: 
        !           176:         RevPush <ArgList>,Bytes
        !           177:         Bytes = Bytes*4
        !           178: 
        !           179:         call    &Func
        !           180: 
        !           181:         if      Bytes GT 0
        !           182:             add     esp,Bytes
        !           183:         endif
        !           184: endm
        !           185: 
        !           186: cCall   macro   Func,ArgList
        !           187:         Local   Bytes
        !           188: 
        !           189:         RevPush <ArgList>,Bytes
        !           190:         Bytes = Bytes*4
        !           191: 
        !           192:         call    &Func
        !           193: 
        !           194:         if      Bytes GT 0
        !           195:             add     esp,Bytes
        !           196:         endif
        !           197: 
        !           198: endm
        !           199: 
        !           200: MovAddr macro   dest,addr,n
        !           201: 
        !           202:         mov     dest,offset FLAT:&addr
        !           203: endm
        !           204: 
        !           205: ENDIF   ; STD_CALL
        !           206: 
        !           207: ELSE
        !           208: 
        !           209: IFNDEF  STD_CALL
        !           210: 
        !           211: ;****************************************************************************
        !           212: ;
        !           213: ;   This section is used exclusively for Pascal calling convention.
        !           214: ;
        !           215: ;****************************************************************************
        !           216: 
        !           217: PUBLICP macro   Func,N
        !           218: 
        !           219:         public      &Func
        !           220: endm
        !           221: 
        !           222: EXTRNP  macro   Func,N
        !           223: 
        !           224:         extrn       &Func:NEAR
        !           225: endm
        !           226: 
        !           227: LABELP  macro   Func,N
        !           228: 
        !           229:         &Func       LABEL   NEAR
        !           230: endm
        !           231: 
        !           232: ProcName macro  Name,Func,N
        !           233: 
        !           234:         &Name        EQU     <&Func>
        !           235: endm
        !           236: 
        !           237: cProc   macro   Func,N,ArgList
        !           238: 
        !           239:         ProcName xxx&Func,Func,N
        !           240: 
        !           241:         xxx&Func proc &ArgList
        !           242: endm
        !           243: 
        !           244: cRet    macro   Func
        !           245: 
        !           246:         ret
        !           247: endm
        !           248: 
        !           249: endProc macro   Func
        !           250: 
        !           251:         xxx&Func   endp
        !           252: endm
        !           253: 
        !           254: endMod  macro   Func
        !           255: 
        !           256: end     xxx&Func
        !           257: 
        !           258: endm
        !           259: 
        !           260: cCall   macro   Func,ArgList
        !           261:         irp arg,<ArgList>
        !           262:             push    arg
        !           263:         endm
        !           264: 
        !           265:         call    &Func
        !           266: endm
        !           267: 
        !           268: MovAddr macro   dest,addr,n
        !           269: 
        !           270:         mov     dest,offset FLAT:&addr
        !           271: endm
        !           272: 
        !           273: ENDIF   : ~STD_CALL
        !           274: ENDIF   ; DOS_PLATFORM
        !           275: 
        !           276: IFDEF STD_CALL
        !           277: ;****************************************************************************
        !           278: ;
        !           279: ;   This section is used exclusively for the standard calling convention.
        !           280: ;
        !           281: ;****************************************************************************
        !           282: 
        !           283: PUBLICP macro   Func,N
        !           284: 
        !           285:         ifb    <N>
        !           286:             public      &Func&@0
        !           287:         else
        !           288:             public      &Func&@&N
        !           289:         endif
        !           290: endm
        !           291: 
        !           292: EXTRNP  macro   Func,N
        !           293: 
        !           294:         ifb    <N>
        !           295:             extrn       &Func&@0:NEAR
        !           296:         else
        !           297:             extrn       &Func&@&N:NEAR
        !           298:         endif
        !           299: endm
        !           300: 
        !           301: LABELP  macro   Func,N
        !           302: 
        !           303:         ifb    <N>
        !           304:             &Func&@0    LABEL   NEAR
        !           305:         else
        !           306:             &Func&@&N   LABEL   NEAR
        !           307:         endif
        !           308: endm
        !           309: 
        !           310: ProcName macro  Name,Func,N
        !           311: 
        !           312:         ifb <N>
        !           313:             cByte&Func   EQU     0
        !           314:             &Name        EQU     <&Func&@0>
        !           315:         else
        !           316:             cByte&Func   EQU     N
        !           317:             &Name        EQU     <&Func&@&N>
        !           318:         endif
        !           319: endm
        !           320: 
        !           321: cProc   macro   Func,N,ArgList
        !           322: 
        !           323:         ProcName xxx&Func,Func,N
        !           324: 
        !           325:         xxx&Func proc &ArgList
        !           326: endm
        !           327: 
        !           328: cRet    macro   Func
        !           329: 
        !           330:         ret     cByte&Func
        !           331: 
        !           332: endm
        !           333: 
        !           334: 
        !           335: endProc macro   Func
        !           336: 
        !           337:         xxx&Func   endp
        !           338: 
        !           339: endm
        !           340: 
        !           341: endMod  macro   Func
        !           342: 
        !           343: end     xxx&Func
        !           344: 
        !           345: endm
        !           346: 
        !           347: ptrCall macro   Func,ArgList
        !           348:         Local   Bytes
        !           349: 
        !           350:         RevPush <ArgList>,Bytes
        !           351:         call    &Func
        !           352: endm
        !           353: 
        !           354: cCall   macro   Func,ArgList
        !           355:         Local   Bytes
        !           356: 
        !           357:         RevPush <ArgList>,Bytes
        !           358:         Bytes = Bytes*4
        !           359: 
        !           360:         ComposeInst <call>,&Func,<@>,%(Bytes)
        !           361: endm
        !           362: 
        !           363: MovAddr macro   dest,addr,n
        !           364: 
        !           365:         ComposeInst <mov >,dest,<,offset FLAT:>,addr,<@>,n
        !           366: endm
        !           367: 
        !           368: ENDIF   ;STD_CALL

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.