char *ListPrint(List *in, char *out, int size) { ListIterator *iter; int pos,first; iter = ListIterateInit(in); pos=0; first=1; strcpy(out+pos, "["); pos += strlen(out+pos); while (iter != NULL) { if (pos > (size-30)) { strcpy(out+pos, ", ... ]"); return out; }// Truncate string as we're getting close to the end of the buffer if (first!=1) strcpy(out+(pos++), ","); if (iter->DataType == DATATYPE_VOID ) { strcpy (out+pos, "void" ); } else if (iter->DataType == DATATYPE_INT ) { sprintf(out+pos, "%d" , *((int *)iter->data)); } else if (iter->DataType == DATATYPE_FLOAT ) { sprintf(out+pos, "%e" , *((double *)iter->data)); } else if (iter->DataType == DATATYPE_VALUE ) { sprintf(out+pos, "%e+%ei <unit>", ((value *)iter->data)->real, ((value *)iter->data)->imag); } else if (iter->DataType == DATATYPE_STRING) { sprintf(out+pos, "'%s'", ((char *)iter->data)); } else if (iter->DataType == DATATYPE_LIST ) { ListPrint( ((List *)iter->data), out+pos, size-pos); } else if (iter->DataType == DATATYPE_DICT ) { DictPrint( ((Dict *)iter->data), out+pos, size-pos); } pos += strlen(out+pos); first=0; iter = ListIterate(iter, NULL); } strcpy(out+pos, "]"); pos += strlen(out+pos); return out; }
int main() { int n,m,i,e; LinkList L = NULL, p = NULL; L = InitList(L); L = CreateList_L(L,3); printf("...\n"); L = ListPrint(L); return 0; }
void SymTabPrint(void) { if (SymTabFpOut == NULL) SymTabErr(7); fprintf(SymTabFpOut, "**SymTabPrint\n"); ListPrint(ST.L); fprintf(SymTabFpOut, "**end of SymTabPrint\n"); }
int main() { List *l = ListCreate(); int code; int index; double item; instructions(); while ((code = getchar()) != EOF) { switch (code) { case 'p': ListPrint(l); break; case 'a': //printf("add: "); if (scanf("%d %lf", &index, &item) == 2) { ListInsert(l, index, item); } else { printf("Input error\n"); } break; case 'd': if (scanf("%lf", &item) == 1) { Node *item_ptr = ListFind(l, item); if (item_ptr) { ListDeleteNode(l, item_ptr); } else { printf("Incorrect index\n"); } } else { printf("Input error\n"); } break; case 'q': ListDestroy(&l); return 0; case 'e': ListExchange(l); break; } } ListDestroy(&l); return 0; }
int main(int argc, char** argv) { BinaryStr val; int i=0; ListNode* node,*end; if (argc <2) { printf("Usage : %s <existing list filename or new filename to store disk list> \n",argv[0]); return -1; } DiskList* dList = ListInit(argv[1]); printf("DiskList %p\n",dList); assert(dList); //Adding to the end while(1){ int opt; printf("<list: choose operation [1-4] 4 for help~>"); scanf("%d",&opt); if (opt > 7) { printf("Invalid option.\n"); opt = 4; } if (opt == 4) { printf("1 --> to add an element.\n"); printf("2 --> to remove an element.\n"); printf("3 --> to print list\n"); printf("4 --> to print this help message\n"); printf("5 --> Start transaction .\n"); printf("6 --> Commit transaction.\n"); printf("7 --> Abort transaction.\n"); continue; } if (opt == 1) { int fVal,val; BinaryStr s; BlockMgrDiskPtr ptr; printf("Enter element to add after, enter non-existing element to add to end of the list.\n"); printf(":~"); scanf("%d",&fVal); printf("Enter value to add.\n"); printf(":~"); scanf("%d",&val); s.data = (char*)&fVal; s.len = sizeof(fVal); if (ListFind(dList,s,&ptr)) { ptr = GetLast(dList); } assert((node = ListLoadNode(dList,ptr))); s.data = (char*) &val; s.len = sizeof(val); ListAddAfter(dList,node,s); } if (opt ==3) { ListPrint(dList); printf("\n"); } if (opt == 2) { int fVal,val; BinaryStr s; BlockMgrDiskPtr ptr; printf("Enter value to remove.\n"); printf(":~"); scanf("%d",&val); s.data = (char*)&val; s.len = sizeof(val); if (ListFind(dList,s,&ptr)) { printf("Value %d does not exists in the list.\n",val); continue; } assert((node = ListLoadNode(dList,ptr))); s.data =(char*) &val; s.len = sizeof(val); ListRemove(dList,node); } if (opt == 5) { printf("Starting transaction.\n"); BlockMgrTransactStart(dList->handle); } if (opt == 6) { printf("Committing transaction.\n"); BlockMgrTransactCommit(dList->handle); BlockMgrTransactReplay(dList->handle); } if (opt == 7) { printf("Aborting transaction.\n"); BlockMgrTransactAbort(dList->handle); } } return 0; }