⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rexxapi.c

📁 压缩解压,是unzip540的升级,这个外国网站摘来的源码,是evb编写.
💻 C
📖 第 1 页 / 共 3 页
字号:
  retstr->strlength = strlen(retstr->strptr);  return VALID_ROUTINE;}/************************************************************************** Function:  UZUnZip                                                     **                                                                        ** Syntax:    call UZUnZip                                                **                                                                        ** Return:    Unzip return code                                           **************************************************************************/ULONG UZUnZip(CHAR *name, ULONG numargs, RXSTRING args[],                        CHAR *queuename, RXSTRING *retstr){  char *argv[30];  char *scan;  int argc=0;  int idx;  CONSTRUCTGLOBALS();  if (numargs < 1 || numargs > 2 ||      args[0].strlength > 255) {    DESTROYGLOBALS();    return INVALID_ROUTINE;            /* Invalid call to routine    */  }                                       /* initialize data area       */  if (numargs == 2)    SetOutputVarStem(__G__ args[1].strptr);  scan = args[0].strptr;  argv[argc++] = "";         /* D:\\SOURCECODE\\UNZIP51S\\UNZIP.COM"; */  while (*scan == ' ')    scan++;  argv[argc++] = scan;  while ( (scan = strchr(scan,' ')) != NULL) {    *scan++ = 0;    while (*scan == ' ')      scan++;    argv[argc++] = scan;  }  if (*argv[argc-1] == 0)    argc--;  argv[argc] = 0;         /* GRR:  should resetMainFlags() be called in here somewhere? */  sprintf(retstr->strptr, "%d", unzip(__G__ argc, argv));   /* a.k.a. MAIN() */  if (numargs == 2)    SetOutputVarLength(__G);  retstr->strlength = strlen(retstr->strptr);  return RexxReturn(__G__ 1,retstr);}int varmessage(__GPRO__ ZCONST uch *buf, ulg size){  if (size > 0)    memcpy(G.os2.buffer+G.os2.putchar_idx,buf,size);    G.os2.putchar_idx = TextSetNext(__G__ G.os2.buffer, size+G.os2.putchar_idx,0);  return 0;}int varputchar(__GPRO__ int c){  G.os2.buffer[G.os2.putchar_idx++] = c;  if (c == '\n') {    G.os2.buffer[G.os2.putchar_idx] = 0;    if (G.os2.output_var[0])      G.os2.putchar_idx = TextSetNext(__G__ G.os2.buffer, G.os2.putchar_idx,0);    else {      G.os2.buffer[--G.os2.putchar_idx] = 0;      puts(G.os2.buffer);      G.os2.putchar_idx = 0;    }  }  return 1;}int SetOutputVarStem(__GPRO__ const char *name){  int len=strlen(name);  G.redirect_text=1;  G.os2.output_idx = 0;  strcpy(G.os2.output_var, name);  if (len) {    strupr(G.os2.output_var);                 /* uppercase the name         */    if (*(G.os2.output_var+len-1) != '.') {      *(G.os2.output_var+len) = '.';      len++;      *(G.os2.output_var+len) = 0;    }    WriteToVariable(__G__ G.os2.output_var,"",0);  }  G.os2.stem_len = len;  return G.os2.stem_len;}int SetOutputVar(__GPRO__ const char *name){  int len=strlen(name);  G.redirect_text=1;  G.os2.output_idx = 0;  strcpy(G.os2.output_var, name);  strupr(G.os2.output_var);                 /* uppercase the name         */  if (*(name+len-1) == '.')    G.os2.stem_len = len;  else    G.os2.stem_len = 0;  return G.os2.stem_len;}int SetOutputVarLength(__GPRO){  if (G.os2.stem_len > 0) {    if (G.os2.putchar_idx)      TextSetNext(__G__ G.os2.buffer,G.os2.putchar_idx,1);    return PrintToSubVariable(__G__ 0,"%d",G.os2.output_idx);  }  return 0;}int PrintToVariable(__GPRO__ const char *name, const char *format,...){  va_list arg_ptr;  int ret;  va_start(arg_ptr, format);  ret = _PrintToVariable(__G__ name, format, arg_ptr);  va_end(arg_ptr);  return ret;}int WriteToVariable(__GPRO__ const char *name, char *buffer, int len){  G.os2.request.shvnext = NULL;  EZRXSTRING(G.os2.request.shvname, name);  G.os2.request.shvnamelen = G.os2.request.shvname.strlength;  G.os2.request.shvvalue.strptr = buffer;  G.os2.request.shvvalue.strlength = len;  G.os2.request.shvvaluelen = len;  G.os2.request.shvcode = RXSHV_SET;  G.os2.request.shvret = 0;  switch (RexxVariablePool(&G.os2.request)) {  case RXSHV_BADN:    G.os2.rexx_error = INVALID_ROUTINE;    break;  case RXSHV_MEMFL:    G.os2.rexx_mes = ERROR_NOMEM;    break;  case RXSHV_OK:    return 0;  }  return INVALID_ROUTINE;      /* error on non-zero          */}int _PrintToVariable(__GPRO__ const char *name, const char *format, va_list arg_ptr){  int ret = vsprintf(G.os2.buffer, format, arg_ptr);  WriteToVariable(__G__ name, G.os2.buffer, strlen(G.os2.buffer));  return ret;}int PrintToSubVariable(__GPRO__ int idx, const char *format, ...){  va_list arg_ptr;  int ret;  if (G.os2.stem_len == 0)    return INVALID_ROUTINE;      /* error on non-zero          */  sprintf(G.os2.output_var+G.os2.stem_len,"%d",idx);  va_start(arg_ptr, format);  ret = _PrintToVariable(__G__ G.os2.output_var, format, arg_ptr);  va_end(arg_ptr);  return ret;}int WriteToNextVariable(__GPRO__ char *buffer, int len){  if (G.os2.stem_len > 0) {    G.os2.output_idx++;    sprintf(G.os2.output_var+G.os2.stem_len,"%d",G.os2.output_idx);  }  return WriteToVariable(__G__ G.os2.output_var, buffer, len);}int TextSetNext(__GPRO__ char *buffer, int len, int all){  char *scan = buffer, *next, *base=buffer;  int remaining=len;  int ret;  while ((next = strchr(scan,'\n')) != NULL && remaining > 0) {    if (next > scan && *(next-1) == 0xd)      *(next-1) = 0;    else      *next = 0;    if (WriteToNextVariable(__G__ scan,strlen(scan)))      return 0;    next++;    remaining -= (next-scan);    scan = next;  }  if (remaining > 0)    if (all) {      *(scan+remaining) = 0;      WriteToNextVariable(__G__ scan,remaining);    } else {      memcpy(buffer,scan,remaining);      return remaining;    }  return 0;}int finish_REXX_redirect(__GPRO){  char *scan, *ptr;  int idx=0, first=1, offset;  if (!G.redirect_size)    return 0;  switch(G.redirect_data) {  case 1:    break;  case 2:    TextSetNext(__G__ G.redirect_buffer, G.redirect_size, 1);    SetOutputVarLength(__G);    DosFreeMem(G.redirect_buffer);    G.redirect_buffer = NULL;    G.redirect_size = 0;    break;  case 3:    WriteToNextVariable(__G__ G.filename, strlen(G.filename));    strcpy(G.os2.output_var+G.os2.stem_len, G.filename);    WriteToVariable(__G__ G.os2.output_var, G.redirect_buffer, G.redirect_size);    DosFreeMem(G.redirect_buffer);    G.redirect_buffer = NULL;    G.redirect_size = 0;    break;  case 4:    if ((scan = strrchr(G.filename,'/')) != NULL) {      idx = *scan;      *scan = 0;      strupr(G.filename);      *scan = idx;    }    scan = G.os2.output_var+G.os2.stem_len;    strcpy(scan,G.filename);    while ((scan = strchr(scan,'/')) != NULL)      *scan = '.';    WriteToVariable(__G__ G.os2.output_var, G.redirect_buffer, G.redirect_size);    DosFreeMem(G.redirect_buffer);    G.redirect_buffer = NULL;    G.redirect_size = 0;    strcpy(G.os2.getvar_buf, G.os2.output_var);    do {      if ((scan = strrchr(G.filename,'/')) == NULL)        offset = 0;      else        offset = scan-G.filename+1;      if (first || !GetVariable(__G__ G.os2.output_var)) {        ptr = G.os2.getvar_buf+offset+G.os2.stem_len;        *ptr = '0';        *(ptr+1) = 0;        if (!GetVariable(__G__ G.os2.getvar_buf))          idx = 1;        else          idx = atoi(G.os2.buffer)+1;        PrintToVariable(__G__ G.os2.getvar_buf,"%d",idx);        sprintf(ptr,"%d",idx);        if (!first) {          PrintToVariable(__G__ G.os2.output_var,"%d",idx);          idx = strlen(G.filename);          *(G.filename+idx)   = '/';          *(G.filename+idx+1) = 0;        }        WriteToVariable(__G__ G.os2.getvar_buf,G.filename+offset,strlen(G.filename+offset));        first=0;      }      if (offset) {        *(G.os2.output_var+G.os2.stem_len+offset-1)   = 0;        *scan = 0;      }    } while (offset);    break;  }  return 0;}#endif /* OS2DLL */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -