DECLARE LONG CreateDC IN gdi32.DLL ; STRING @cDriver, STRING @cDevice, STRING cOutput, ; STRING cInitData DECLARE LONG DeleteDC IN gdi32.DLL ; LONG nDC DECLARE INTEGER TextOut IN gdi32.DLL INTEGER hDC, INTEGER xStart, INTEGER yStart, ; STRING @PrintString, INTEGER cbString DECLARE INTEGER StartDoc IN gdi32.DLL INTEGER hDC, STRING @DocInfo DECLARE INTEGER StartPage IN gdi32.DLL INTEGER hDC DECLARE INTEGER EndPage IN gdi32.DLL INTEGER hDC DECLARE INTEGER EndDoc IN gdi32.DLL INTEGER hDC DECLARE INTEGER GetLastError IN kernel32.DLL lcBuffer = SPACE(255) IF "5.0"$OS() *!* If the OS is 5.0, the driver is either DISPLAY or WINSPOOL lcDriver="WINSPOOL" ELSE lcDriver=NULL ENDIF lcPrinter=GETPRINTER() hDC = CreateDC(lcDriver, lcPrinter, NULL, NULL) IF hDC = 0 MESSAGEBOX("Unable to create device context" + CHR(13) + ; "Error Code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF lcDocInfo = Long2Str(20) + REPLICATE(CHR(0), 16) retCode = StartDoc(hDC, @lcDocInfo) IF retCode <= 0 MESSAGEBOX("Error calling StartDoc" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF retCode = StartPage(hDC) IF retCode <= 0 MESSAGEBOX("Error calling StartPage" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF myString = "Using API functions for printing" myLength = LEN(myString) retCode = TextOut(hDC, 10, 10, @myString, myLength) IF retCode <= 0 MESSAGEBOX("Error calling TextOut" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF retCode = EndPage(hDC) IF retCode <= 0 MESSAGEBOX("Error calling EndPage" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF retCode = EndDoc(hDC) IF retCode <= 0 MESSAGEBOX("Error calling EndDoc" + CHR(13) + ; " Error code : " + ALLTRIM(STR(GetLastError())),48) RETURN ENDIF CLEAR DLLS FUNCTION Long2Str PARAMETERS m.longval PRIVATE i, m.retstr m.retstr = "" FOR i = 24 TO 0 STEP -8 m.retstr = CHR(INT(m.longval/(2^i))) + m.retstr m.longval = MOD(m.longval, (2^i)) NEXT RETURN m.retstr * End of Code