aboutsummaryrefslogtreecommitdiffstats
path: root/bpemu.c
diff options
context:
space:
mode:
Diffstat (limited to 'bpemu.c')
-rw-r--r--bpemu.c239
1 files changed, 239 insertions, 0 deletions
diff --git a/bpemu.c b/bpemu.c
new file mode 100644
index 0000000..3f35493
--- /dev/null
+++ b/bpemu.c
@@ -0,0 +1,239 @@
+
+/*****************************************************************************/
+/* AS-Portierung */
+/* */
+/* Emulation einiger Borland-Pascal-Funktionen */
+/* */
+/* Historie: 20. 5.1996 Grundsteinlegung */
+/* */
+/*****************************************************************************/
+
+#include "stdinc.h"
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <ctype.h>
+
+#include "strutil.h"
+#include "bpemu.h"
+
+#ifdef __MSDOS__
+#include <dos.h>
+#include <dir.h>
+#endif
+
+#if defined( __EMX__ ) || defined( __IBMC__ )
+#include <os2.h>
+#endif
+
+ char *FExpand(char *Src)
+BEGIN
+ static String CurrentDir;
+ String Copy;
+#ifdef DRSEP
+ String DrvPart;
+#if defined( __EMX__ ) || defined( __IBMC__ )
+ ULONG DrvNum,Dummy;
+#else
+ int DrvNum;
+#endif
+#endif
+ char *p,*p2;
+
+ strmaxcpy(Copy,Src,255);
+
+#ifdef DRSEP
+ p=strchr(Copy,DRSEP);
+ if (p!=Nil)
+ BEGIN
+ memcpy(DrvPart,Copy,p-Copy); DrvPart[p-Copy]='\0'; strcpy(Copy,p+1);
+ END
+ else *DrvPart='\0';
+#endif
+
+#ifdef __MSDOS__
+ if (*DrvPart=='\0')
+ BEGIN
+ DrvNum=getdisk(); *DrvPart=DrvNum+'A'; DrvPart[1]='\0'; DrvNum++;
+ END
+ else DrvNum=toupper(*DrvPart)-'@';
+ getcurdir(DrvNum,CurrentDir);
+#else
+#if defined( __EMX__ ) || defined( __IBMC__ )
+ if (*DrvPart=='\0')
+ BEGIN
+ DosQueryCurrentDisk(&DrvNum,&Dummy);
+ *DrvPart=DrvNum+'@'; DrvPart[1]='\0';
+ END
+ else DrvNum=toupper(*DrvPart)-'@';
+ Dummy=255; DosQueryCurrentDir(DrvNum,(PBYTE) CurrentDir,&Dummy);
+#else
+#ifdef _WIN32
+ getcwd(CurrentDir,255);
+ for (p=CurrentDir; *p!='\0'; p++)
+ if (*p=='/') *p='\\';
+#else
+ getcwd(CurrentDir,255);
+#endif
+#endif
+#endif
+
+ if (CurrentDir[strlen(CurrentDir)-1]!=PATHSEP) strmaxcat(CurrentDir,SPATHSEP,255);
+ if (*CurrentDir!=PATHSEP) strmaxprep(CurrentDir,SPATHSEP,255);
+
+ if (*Copy==PATHSEP)
+ BEGIN
+ strmaxcpy(CurrentDir,SPATHSEP,255); strcpy(Copy,Copy+1);
+ END
+
+#ifdef DRSEP
+ strmaxprep(CurrentDir,SDRSEP,255);
+ strmaxprep(CurrentDir,DrvPart,255);
+#endif
+
+ while((p=strchr(Copy,PATHSEP))!=Nil)
+ BEGIN
+ *p='\0';
+ if (strcmp(Copy,".")==0);
+ else if ((strcmp(Copy,"..")==0) AND (strlen(CurrentDir)>1))
+ BEGIN
+ CurrentDir[strlen(CurrentDir)-1]='\0';
+ p2=strrchr(CurrentDir,PATHSEP); p2[1]='\0';
+ END
+ else
+ BEGIN
+ strmaxcat(CurrentDir,Copy,255); strmaxcat(CurrentDir,SPATHSEP,255);
+ END
+ strcpy(Copy,p+1);
+ END
+
+ strmaxcat(CurrentDir,Copy,255);
+
+ return CurrentDir;
+END
+
+ char *FSearch(char *File, char *Path)
+BEGIN
+ static String Component;
+ char *p,*start,Save='\0';
+ FILE *Dummy;
+ Boolean OK;
+
+ Dummy=fopen(File,"r"); OK=(Dummy!=Nil);
+ if (OK)
+ BEGIN
+ fclose(Dummy);
+ strmaxcpy(Component,File,255); return Component;
+ END
+
+ start=Path;
+ do
+ BEGIN
+ if (*start=='\0') break;
+ p=strchr(start,DIRSEP);
+ if (p!=Nil)
+ BEGIN
+ Save=(*p); *p='\0';
+ END
+ strmaxcpy(Component,start,255);
+ strmaxcat(Component,SPATHSEP,255);
+ strmaxcat(Component,File,255);
+ if (p!=Nil) *p=Save;
+ Dummy=fopen(Component,"r"); OK=(Dummy!=Nil);
+ if (OK)
+ BEGIN
+ fclose(Dummy);
+ return Component;
+ END
+ start=p+1;
+ END
+ while (p!=Nil);
+
+ *Component='\0'; return Component;
+END
+
+ long FileSize(FILE *file)
+BEGIN
+ long Save=ftell(file),Size;
+
+ fseek(file,0,SEEK_END);
+ Size=ftell(file);
+ fseek(file,Save,SEEK_SET);
+ return Size;
+END
+
+ Byte Lo(Word inp)
+BEGIN
+ return (inp&0xff);
+END
+
+ Byte Hi(Word inp)
+BEGIN
+ return ((inp>>8)&0xff);
+END
+
+ Boolean Odd(int inp)
+BEGIN
+ return ((inp&1)==1);
+END
+
+ Boolean DirScan(char *Mask, charcallback callback)
+BEGIN
+ char Name[1024];
+
+#ifdef __MSDOS__
+ struct ffblk blk;
+ int res;
+ char *pos;
+
+ res=findfirst(Mask,&blk,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_LABEL|FA_DIREC|FA_ARCH);
+ if (res<0) return False;
+ pos=strrchr(Mask,PATHSEP); if (pos==Nil) pos=strrchr(Mask,DRSEP);
+ if (pos==Nil) pos=Mask; else pos++;
+ memcpy(Name,Mask,pos-Mask);
+ while (res==0)
+ BEGIN
+ if ((blk.ff_attrib&(FA_LABEL|FA_DIREC))==0)
+ BEGIN
+ strcpy(Name+(pos-Mask),blk.ff_name);
+ callback(Name);
+ END
+ res=findnext(&blk);
+ END
+ return True;
+#else
+#if defined ( __EMX__ ) || defined ( __IBMC__ )
+ HDIR hdir=1;
+ FILEFINDBUF3 buf;
+ ULONG rescnt;
+ USHORT res;
+ char *pos;
+
+ rescnt=1; res=DosFindFirst(Mask,&hdir,0x16,&buf,sizeof(buf),&rescnt,1);
+ if (res!=0) return False;
+ pos=strrchr(Mask,PATHSEP); if (pos==Nil) pos=strrchr(Mask,DRSEP);
+ if (pos==Nil) pos=Mask; else pos++;
+ memcpy(Name,Mask,pos-Mask);
+ while (res==0)
+ BEGIN
+ strcpy(Name+(pos-Mask),buf.achName); callback(Name);
+ res=DosFindNext(hdir,&buf,sizeof(buf),&rescnt);
+ END
+ return True;
+#else
+ strmaxcpy(Name,Mask,255); callback(Name); return True;
+#endif
+#endif
+END
+
+ LongInt GetFileTime(char *Name)
+BEGIN
+ struct stat st;
+
+ if (stat(Name,&st)==-1) return 0;
+ else return st.st_mtime;
+END
+
+ void bpemu_init(void)
+BEGIN
+END